aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.8')
-rw-r--r--gcc-4.8/ChangeLog22
-rw-r--r--gcc-4.8/ChangeLog.backported8
-rw-r--r--gcc-4.8/INSTALL/binaries.html4
-rw-r--r--gcc-4.8/INSTALL/build.html12
-rw-r--r--gcc-4.8/INSTALL/configure.html48
-rw-r--r--gcc-4.8/INSTALL/download.html4
-rw-r--r--gcc-4.8/INSTALL/finalinstall.html8
-rw-r--r--gcc-4.8/INSTALL/gfdl.html38
-rw-r--r--gcc-4.8/INSTALL/index.html8
-rw-r--r--gcc-4.8/INSTALL/old.html14
-rw-r--r--gcc-4.8/INSTALL/prerequisites.html6
-rw-r--r--gcc-4.8/INSTALL/specific.html84
-rw-r--r--gcc-4.8/INSTALL/test.html20
-rw-r--r--gcc-4.8/LAST_UPDATED2
-rw-r--r--gcc-4.8/MD5SUMS3437
-rw-r--r--gcc-4.8/NEWS199
-rw-r--r--gcc-4.8/boehm-gc/ChangeLog16
-rwxr-xr-xgcc-4.8/boehm-gc/configure16
-rw-r--r--gcc-4.8/boehm-gc/include/private/gcconfig.h8
-rwxr-xr-xgcc-4.8/config.guess135
-rwxr-xr-xgcc-4.8/config.sub38
-rw-r--r--gcc-4.8/config/ChangeLog4
-rw-r--r--gcc-4.8/contrib/ChangeLog8
-rwxr-xr-xgcc-4.8/contrib/gcc_update2
-rw-r--r--gcc-4.8/contrib/reghunt/ChangeLog4
-rw-r--r--gcc-4.8/contrib/regression/ChangeLog4
-rw-r--r--gcc-4.8/fixincludes/ChangeLog4
-rw-r--r--gcc-4.8/gcc/ChangeLog5480
-rw-r--r--gcc-4.8/gcc/DATESTAMP2
-rw-r--r--gcc-4.8/gcc/Makefile.in13
-rw-r--r--gcc-4.8/gcc/ada/ChangeLog61
-rw-r--r--gcc-4.8/gcc/ada/back_end.ads1
-rw-r--r--gcc-4.8/gcc/ada/cstand.adb23
-rw-r--r--gcc-4.8/gcc/ada/gcc-interface/Make-lang.in2
-rw-r--r--gcc-4.8/gcc/ada/gcc-interface/Makefile.in8
-rw-r--r--gcc-4.8/gcc/ada/gcc-interface/cuintp.c21
-rw-r--r--gcc-4.8/gcc/ada/gcc-interface/gigi.h2
-rw-r--r--gcc-4.8/gcc/ada/gcc-interface/misc.c25
-rw-r--r--gcc-4.8/gcc/ada/gcc-interface/utils.c128
-rw-r--r--gcc-4.8/gcc/ada/indepsw-darwin.adb67
-rw-r--r--gcc-4.8/gcc/ada/system-linux-alpha.ads10
-rw-r--r--gcc-4.8/gcc/ada/system-linux-mips.ads3
-rw-r--r--gcc-4.8/gcc/ada/system-linux-mips64el.ads3
-rw-r--r--gcc-4.8/gcc/ada/system-linux-mipsel.ads3
-rw-r--r--gcc-4.8/gcc/ada/system-linux-s390.ads10
-rw-r--r--gcc-4.8/gcc/ada/system-linux-s390x.ads10
-rw-r--r--gcc-4.8/gcc/ada/system-linux-sparc.ads10
-rw-r--r--gcc-4.8/gcc/ada/system-linux-sparcv9.ads10
-rw-r--r--gcc-4.8/gcc/ada/system-rtems.ads8
-rw-r--r--gcc-4.8/gcc/ada/system-vxworks-arm.ads10
-rw-r--r--gcc-4.8/gcc/alias.c71
-rw-r--r--gcc-4.8/gcc/bb-reorder.c3
-rw-r--r--gcc-4.8/gcc/builtins.c89
-rw-r--r--gcc-4.8/gcc/builtins.def3
-rw-r--r--gcc-4.8/gcc/c-family/ChangeLog79
-rw-r--r--gcc-4.8/gcc/c-family/c-common.c27
-rw-r--r--gcc-4.8/gcc/c-family/c-opts.c11
-rw-r--r--gcc-4.8/gcc/c-family/c-pragma.c11
-rw-r--r--gcc-4.8/gcc/c-family/c.opt10
-rw-r--r--gcc-4.8/gcc/c/ChangeLog50
-rw-r--r--gcc-4.8/gcc/c/c-decl.c6
-rw-r--r--gcc-4.8/gcc/c/c-parser.c2
-rw-r--r--gcc-4.8/gcc/c/c-tree.h2
-rw-r--r--gcc-4.8/gcc/c/c-typeck.c58
-rw-r--r--gcc-4.8/gcc/calls.c9
-rw-r--r--gcc-4.8/gcc/cfgcleanup.c16
-rw-r--r--gcc-4.8/gcc/cfgexpand.c16
-rw-r--r--gcc-4.8/gcc/cgraph.c43
-rw-r--r--gcc-4.8/gcc/cgraph.h1
-rw-r--r--gcc-4.8/gcc/cgraphbuild.c20
-rw-r--r--gcc-4.8/gcc/combine.c46
-rw-r--r--gcc-4.8/gcc/config.gcc79
-rw-r--r--gcc-4.8/gcc/config.in12
-rw-r--r--gcc-4.8/gcc/config/aarch64/aarch64-simd-builtins.def4
-rw-r--r--gcc-4.8/gcc/config/aarch64/aarch64-simd.md185
-rw-r--r--gcc-4.8/gcc/config/aarch64/aarch64.c9
-rw-r--r--gcc-4.8/gcc/config/aarch64/aarch64.h6
-rw-r--r--gcc-4.8/gcc/config/aarch64/aarch64.md2
-rw-r--r--gcc-4.8/gcc/config/aarch64/arm_neon.h68
-rw-r--r--gcc-4.8/gcc/config/aarch64/iterators.md61
-rw-r--r--gcc-4.8/gcc/config/aarch64/predicates.md5
-rw-r--r--gcc-4.8/gcc/config/arm/arm-ldmstm.ml7
-rw-r--r--gcc-4.8/gcc/config/arm/arm.c74
-rw-r--r--gcc-4.8/gcc/config/arm/arm.h17
-rw-r--r--gcc-4.8/gcc/config/arm/arm.md6
-rw-r--r--gcc-4.8/gcc/config/arm/iterators.md4
-rw-r--r--gcc-4.8/gcc/config/arm/ldmstm.md342
-rw-r--r--gcc-4.8/gcc/config/arm/predicates.md12
-rw-r--r--gcc-4.8/gcc/config/arm/vfp.md7
-rw-r--r--gcc-4.8/gcc/config/avr/avr.c25
-rw-r--r--gcc-4.8/gcc/config/avr/avr.md8
-rw-r--r--gcc-4.8/gcc/config/cris/cris.md27
-rw-r--r--gcc-4.8/gcc/config/cris/predicates.md4
-rw-r--r--gcc-4.8/gcc/config/darwin.c54
-rw-r--r--gcc-4.8/gcc/config/i386/driver-i386.c63
-rw-r--r--gcc-4.8/gcc/config/i386/f16cintrin.h2
-rw-r--r--gcc-4.8/gcc/config/i386/i386.c614
-rw-r--r--gcc-4.8/gcc/config/i386/i386.h60
-rw-r--r--gcc-4.8/gcc/config/i386/i386.md91
-rw-r--r--gcc-4.8/gcc/config/i386/sse.md44
-rw-r--r--gcc-4.8/gcc/config/i386/t-rtems7
-rw-r--r--gcc-4.8/gcc/config/i386/winnt.c5
-rw-r--r--gcc-4.8/gcc/config/i386/xopintrin.h8
-rw-r--r--gcc-4.8/gcc/config/m68k/m68k.c10
-rw-r--r--gcc-4.8/gcc/config/microblaze/microblaze.c146
-rw-r--r--gcc-4.8/gcc/config/microblaze/microblaze.h9
-rw-r--r--gcc-4.8/gcc/config/microblaze/microblaze.md96
-rw-r--r--gcc-4.8/gcc/config/microblaze/predicates.md8
-rw-r--r--gcc-4.8/gcc/config/mips/driver-native.c10
-rw-r--r--gcc-4.8/gcc/config/mips/mips.c22
-rw-r--r--gcc-4.8/gcc/config/mips/mips.h5
-rw-r--r--gcc-4.8/gcc/config/mips/mips.md79
-rw-r--r--gcc-4.8/gcc/config/pa/pa.c34
-rw-r--r--gcc-4.8/gcc/config/pa/pa.h9
-rw-r--r--gcc-4.8/gcc/config/rs6000/altivec.h50
-rw-r--r--gcc-4.8/gcc/config/rs6000/altivec.md1928
-rw-r--r--gcc-4.8/gcc/config/rs6000/constraints.md58
-rw-r--r--gcc-4.8/gcc/config/rs6000/crypto.md101
-rw-r--r--gcc-4.8/gcc/config/rs6000/darwin.h3
-rw-r--r--gcc-4.8/gcc/config/rs6000/dfp.md406
-rw-r--r--gcc-4.8/gcc/config/rs6000/htm.md366
-rw-r--r--gcc-4.8/gcc/config/rs6000/htmintrin.h131
-rw-r--r--gcc-4.8/gcc/config/rs6000/htmxlintrin.h213
-rw-r--r--gcc-4.8/gcc/config/rs6000/linux64.h30
-rw-r--r--gcc-4.8/gcc/config/rs6000/option-defaults.h1
-rw-r--r--gcc-4.8/gcc/config/rs6000/power8.md373
-rw-r--r--gcc-4.8/gcc/config/rs6000/ppc-asm.h25
-rw-r--r--gcc-4.8/gcc/config/rs6000/predicates.md319
-rw-r--r--gcc-4.8/gcc/config/rs6000/rs6000-builtin.def536
-rw-r--r--gcc-4.8/gcc/config/rs6000/rs6000-c.c934
-rw-r--r--gcc-4.8/gcc/config/rs6000/rs6000-cpus.def28
-rw-r--r--gcc-4.8/gcc/config/rs6000/rs6000-modes.def6
-rw-r--r--gcc-4.8/gcc/config/rs6000/rs6000-opts.h11
-rw-r--r--gcc-4.8/gcc/config/rs6000/rs6000-protos.h19
-rw-r--r--gcc-4.8/gcc/config/rs6000/rs6000.c5895
-rw-r--r--gcc-4.8/gcc/config/rs6000/rs6000.h304
-rw-r--r--gcc-4.8/gcc/config/rs6000/rs6000.md4027
-rw-r--r--gcc-4.8/gcc/config/rs6000/rs6000.opt81
-rw-r--r--gcc-4.8/gcc/config/rs6000/sync.md365
-rw-r--r--gcc-4.8/gcc/config/rs6000/sysv4.h32
-rw-r--r--gcc-4.8/gcc/config/rs6000/sysv4le.h7
-rw-r--r--gcc-4.8/gcc/config/rs6000/t-linux6410
-rw-r--r--gcc-4.8/gcc/config/rs6000/t-linux64bele7
-rw-r--r--gcc-4.8/gcc/config/rs6000/t-linux64le3
-rw-r--r--gcc-4.8/gcc/config/rs6000/t-linux64lebe7
-rw-r--r--gcc-4.8/gcc/config/rs6000/t-rs60003
-rw-r--r--gcc-4.8/gcc/config/rs6000/vector.md130
-rw-r--r--gcc-4.8/gcc/config/rs6000/vsx.md1206
-rw-r--r--gcc-4.8/gcc/config/s390/htmxlintrin.h25
-rw-r--r--gcc-4.8/gcc/config/s390/s390-protos.h1
-rw-r--r--gcc-4.8/gcc/config/s390/s390.c302
-rw-r--r--gcc-4.8/gcc/config/s390/s390.h5
-rw-r--r--gcc-4.8/gcc/config/s390/s390.md32
-rw-r--r--gcc-4.8/gcc/config/s390/s390.opt8
-rw-r--r--gcc-4.8/gcc/config/sh/constraints.md7
-rw-r--r--gcc-4.8/gcc/config/sh/predicates.md11
-rw-r--r--gcc-4.8/gcc/config/sh/sh-protos.h2
-rw-r--r--gcc-4.8/gcc/config/sh/sh.c28
-rw-r--r--gcc-4.8/gcc/config/sh/sh.md108
-rw-r--r--gcc-4.8/gcc/config/sh/sh.opt2
-rw-r--r--gcc-4.8/gcc/config/sparc/leon.md66
-rw-r--r--gcc-4.8/gcc/config/sparc/sparc-opts.h1
-rw-r--r--gcc-4.8/gcc/config/sparc/sparc-protos.h3
-rw-r--r--gcc-4.8/gcc/config/sparc/sparc.c515
-rw-r--r--gcc-4.8/gcc/config/sparc/sparc.h46
-rw-r--r--gcc-4.8/gcc/config/sparc/sparc.md427
-rw-r--r--gcc-4.8/gcc/config/sparc/sparc.opt17
-rw-r--r--gcc-4.8/gcc/config/sparc/sync.md32
-rw-r--r--gcc-4.8/gcc/config/sparc/t-rtems4
-rw-r--r--gcc-4.8/gcc/config/sparc/t-sparc2
-rw-r--r--gcc-4.8/gcc/config/tilegx/sync.md11
-rw-r--r--gcc-4.8/gcc/config/tilegx/tilegx-c.c3
-rw-r--r--gcc-4.8/gcc/config/tilegx/tilegx.c37
-rw-r--r--gcc-4.8/gcc/config/tilegx/tilegx.md6
-rw-r--r--gcc-4.8/gcc/config/tilepro/tilepro-c.c5
-rw-r--r--gcc-4.8/gcc/config/tilepro/tilepro.c6
-rw-r--r--gcc-4.8/gcc/config/tilepro/tilepro.md6
-rwxr-xr-xgcc-4.8/gcc/configure108
-rw-r--r--gcc-4.8/gcc/configure.ac44
-rw-r--r--gcc-4.8/gcc/cp/ChangeLog262
-rw-r--r--gcc-4.8/gcc/cp/call.c44
-rw-r--r--gcc-4.8/gcc/cp/cvt.c7
-rw-r--r--gcc-4.8/gcc/cp/decl.c21
-rw-r--r--gcc-4.8/gcc/cp/decl2.c32
-rw-r--r--gcc-4.8/gcc/cp/except.c3
-rw-r--r--gcc-4.8/gcc/cp/mangle.c4
-rw-r--r--gcc-4.8/gcc/cp/name-lookup.c24
-rw-r--r--gcc-4.8/gcc/cp/parser.c31
-rw-r--r--gcc-4.8/gcc/cp/pt.c88
-rw-r--r--gcc-4.8/gcc/cp/semantics.c35
-rw-r--r--gcc-4.8/gcc/cp/typeck.c21
-rw-r--r--gcc-4.8/gcc/cp/typeck2.c13
-rw-r--r--gcc-4.8/gcc/cse.c21
-rw-r--r--gcc-4.8/gcc/cselib.c9
-rw-r--r--gcc-4.8/gcc/doc/aot-compile.120
-rw-r--r--gcc-4.8/gcc/doc/cpp.120
-rw-r--r--gcc-4.8/gcc/doc/cpp.info173
-rw-r--r--gcc-4.8/gcc/doc/cppinternals.info28
-rw-r--r--gcc-4.8/gcc/doc/extend.texi684
-rw-r--r--gcc-4.8/gcc/doc/fsf-funding.722
-rw-r--r--gcc-4.8/gcc/doc/g++.1364
-rw-r--r--gcc-4.8/gcc/doc/gc-analyze.120
-rw-r--r--gcc-4.8/gcc/doc/gcc.1364
-rw-r--r--gcc-4.8/gcc/doc/gcc.info2979
-rw-r--r--gcc-4.8/gcc/doc/gccinstall.info228
-rw-r--r--gcc-4.8/gcc/doc/gccint.info1145
-rw-r--r--gcc-4.8/gcc/doc/gcj-dbtool.120
-rw-r--r--gcc-4.8/gcc/doc/gcj.134
-rw-r--r--gcc-4.8/gcc/doc/gcj.info152
-rw-r--r--gcc-4.8/gcc/doc/gcov.122
-rw-r--r--gcc-4.8/gcc/doc/gfdl.726
-rw-r--r--gcc-4.8/gcc/doc/gfortran.143
-rw-r--r--gcc-4.8/gcc/doc/gij.120
-rw-r--r--gcc-4.8/gcc/doc/gpl.732
-rw-r--r--gcc-4.8/gcc/doc/grmic.120
-rw-r--r--gcc-4.8/gcc/doc/invoke.texi286
-rw-r--r--gcc-4.8/gcc/doc/jcf-dump.120
-rw-r--r--gcc-4.8/gcc/doc/jv-convert.120
-rw-r--r--gcc-4.8/gcc/doc/md.texi52
-rw-r--r--gcc-4.8/gcc/doc/rebuild-gcj-db.120
-rw-r--r--gcc-4.8/gcc/doc/sourcebuild.texi31
-rw-r--r--gcc-4.8/gcc/dse.c3
-rw-r--r--gcc-4.8/gcc/expr.c52
-rw-r--r--gcc-4.8/gcc/expr.h4
-rw-r--r--gcc-4.8/gcc/fold-const.c28
-rw-r--r--gcc-4.8/gcc/fortran/ChangeLog260
-rw-r--r--gcc-4.8/gcc/fortran/check.c2
-rw-r--r--gcc-4.8/gcc/fortran/class.c2
-rw-r--r--gcc-4.8/gcc/fortran/cpp.c1
-rw-r--r--gcc-4.8/gcc/fortran/decl.c28
-rw-r--r--gcc-4.8/gcc/fortran/dump-parse-tree.c1
-rw-r--r--gcc-4.8/gcc/fortran/expr.c13
-rw-r--r--gcc-4.8/gcc/fortran/frontend-passes.c29
-rw-r--r--gcc-4.8/gcc/fortran/gfortran.h1
-rw-r--r--gcc-4.8/gcc/fortran/gfortran.info1841
-rw-r--r--gcc-4.8/gcc/fortran/interface.c7
-rw-r--r--gcc-4.8/gcc/fortran/intrinsic.c5
-rw-r--r--gcc-4.8/gcc/fortran/intrinsic.texi48
-rw-r--r--gcc-4.8/gcc/fortran/invoke.texi3
-rw-r--r--gcc-4.8/gcc/fortran/io.c33
-rw-r--r--gcc-4.8/gcc/fortran/match.c27
-rw-r--r--gcc-4.8/gcc/fortran/module.c129
-rw-r--r--gcc-4.8/gcc/fortran/parse.c3
-rw-r--r--gcc-4.8/gcc/fortran/primary.c3
-rw-r--r--gcc-4.8/gcc/fortran/resolve.c90
-rw-r--r--gcc-4.8/gcc/fortran/simplify.c4
-rw-r--r--gcc-4.8/gcc/fortran/symbol.c4
-rw-r--r--gcc-4.8/gcc/fortran/trans-array.c30
-rw-r--r--gcc-4.8/gcc/fortran/trans-decl.c9
-rw-r--r--gcc-4.8/gcc/fortran/trans-expr.c13
-rw-r--r--gcc-4.8/gcc/fortran/trans-intrinsic.c6
-rw-r--r--gcc-4.8/gcc/fortran/trans-io.c6
-rw-r--r--gcc-4.8/gcc/fortran/trans-stmt.c39
-rw-r--r--gcc-4.8/gcc/function.c58
-rw-r--r--gcc-4.8/gcc/gcc.c2
-rw-r--r--gcc-4.8/gcc/gengtype-lex.c120
-rw-r--r--gcc-4.8/gcc/gimple-fold.c10
-rw-r--r--gcc-4.8/gcc/gimple-low.c1
-rw-r--r--gcc-4.8/gcc/gimple-ssa-strength-reduction.c7
-rw-r--r--gcc-4.8/gcc/gimple.c97
-rw-r--r--gcc-4.8/gcc/gimple.h14
-rw-r--r--gcc-4.8/gcc/gimplify.c64
-rw-r--r--gcc-4.8/gcc/go/ChangeLog23
-rw-r--r--gcc-4.8/gcc/go/go-gcc.cc87
-rw-r--r--gcc-4.8/gcc/go/go-lang.c4
-rw-r--r--gcc-4.8/gcc/go/gofrontend/backend.h34
-rw-r--r--gcc-4.8/gcc/go/gofrontend/expressions.cc151
-rw-r--r--gcc-4.8/gcc/go/gofrontend/expressions.h4
-rw-r--r--gcc-4.8/gcc/go/gofrontend/gogo-tree.cc276
-rw-r--r--gcc-4.8/gcc/go/gofrontend/gogo.cc172
-rw-r--r--gcc-4.8/gcc/go/gofrontend/gogo.h39
-rw-r--r--gcc-4.8/gcc/go/gofrontend/import.h5
-rw-r--r--gcc-4.8/gcc/go/gofrontend/lex.cc21
-rw-r--r--gcc-4.8/gcc/go/gofrontend/parse.cc2
-rw-r--r--gcc-4.8/gcc/go/gofrontend/runtime.cc7
-rw-r--r--gcc-4.8/gcc/go/gofrontend/runtime.def6
-rw-r--r--gcc-4.8/gcc/go/gofrontend/types.cc255
-rw-r--r--gcc-4.8/gcc/go/gofrontend/types.h37
-rw-r--r--gcc-4.8/gcc/graphite-scop-detection.c21
-rw-r--r--gcc-4.8/gcc/ifcvt.c11
-rw-r--r--gcc-4.8/gcc/ipa-cp.c22
-rw-r--r--gcc-4.8/gcc/ipa-prop.c64
-rw-r--r--gcc-4.8/gcc/ipa-pure-const.c8
-rw-r--r--gcc-4.8/gcc/ipa-split.c10
-rw-r--r--gcc-4.8/gcc/ipa.c2
-rw-r--r--gcc-4.8/gcc/ira.c12
-rw-r--r--gcc-4.8/gcc/java/ChangeLog4
-rw-r--r--gcc-4.8/gcc/loop-iv.c12
-rw-r--r--gcc-4.8/gcc/loop-unswitch.c11
-rw-r--r--gcc-4.8/gcc/lra-coalesce.c31
-rw-r--r--gcc-4.8/gcc/lra-constraints.c52
-rw-r--r--gcc-4.8/gcc/lto/ChangeLog4
-rw-r--r--gcc-4.8/gcc/mode-switching.c7
-rw-r--r--gcc-4.8/gcc/objc/ChangeLog15
-rw-r--r--gcc-4.8/gcc/objc/objc-next-runtime-abi-01.c33
-rw-r--r--gcc-4.8/gcc/objc/objc-next-runtime-abi-02.c28
-rw-r--r--gcc-4.8/gcc/objcp/ChangeLog4
-rw-r--r--gcc-4.8/gcc/optabs.c34
-rw-r--r--gcc-4.8/gcc/opts.c4
-rw-r--r--gcc-4.8/gcc/params.def6
-rw-r--r--gcc-4.8/gcc/passes.c2
-rw-r--r--gcc-4.8/gcc/po/ChangeLog4
-rw-r--r--gcc-4.8/gcc/print-rtl.c2
-rw-r--r--gcc-4.8/gcc/recog.c5
-rw-r--r--gcc-4.8/gcc/regcprop.c18
-rw-r--r--gcc-4.8/gcc/reginfo.c23
-rw-r--r--gcc-4.8/gcc/reorg.c14
-rw-r--r--gcc-4.8/gcc/rtl.h4
-rw-r--r--gcc-4.8/gcc/rtlanal.c42
-rw-r--r--gcc-4.8/gcc/sdbout.c10
-rw-r--r--gcc-4.8/gcc/sel-sched.c2
-rw-r--r--gcc-4.8/gcc/simplify-rtx.c13
-rw-r--r--gcc-4.8/gcc/stmt.c15
-rw-r--r--gcc-4.8/gcc/testsuite/ChangeLog1876
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr58844-1.c8
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr58844-2.c8
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr60400-1.h3
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr60400-2.h4
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr60400.c13
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/fold-divmul-1.c11
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/gomp/pr58809.c31
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/gomp/pr59467.c68
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/pr36282-1.c12
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/pr36282-2.c10
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/pr36282-3.c13
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/pr36282-4.c13
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/pr37743.c13
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/pr59032.c30
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/pr59037.c12
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/pr59280.c4
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/pr60101.c112
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/pr60689.c10
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/torture/pr58794-1.c29
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/torture/pr58794-2.c21
-rw-r--r--gcc-4.8/gcc/testsuite/c-c++-common/torture/pr60026.c28
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/access02.C39
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C18
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/auto42.C9
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C20
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype57.C8
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/defaulted48.C17
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/deleted3.C11
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/enum_base2.C9
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist76.C5
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist78.C12
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist79.C8
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist81.C25
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist82.C20
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C7
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/noexcept22.C21
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C10
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C13
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/static_assert9.C7
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic144.C15
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic145.C13
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic147.C10
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic148.C6
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic149.C11
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic150.C9
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/diagnostic/pedantic.C11
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/diagnostic/pr58979.C4
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/diagnostic/pr59838.C4
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/eh/ppc64-sighandle-cr.C54
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/eh/uncaught1.C2
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/eh/uncaught4.C29
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/ext/attrib48.C6
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/ext/builtin-bswap1.C22
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/ext/stmtexpr15.C7
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/ext/timevar2.C14
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/ext/traits1.C4
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/ext/vector25.C6
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/ext/vector27.C7
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/gomp/for-20.C16
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/gomp/pr59297.C25
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/inherit/virtual11.C17
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60419.C80
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60640-1.C50
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60640-2.C15
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60640-3.C81
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/opt/pr58864.C21
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/opt/pr59470.C188
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/opt/pr59647.C32
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/opt/pr60849.C13
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/overload/defarg8.C22
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/pr60769.C43
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/template/partial15.C19
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/template/ref7.C16
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/template/shadow1.C4
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/template/using27.C33
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/template/using28.C17
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/template/using29.C21
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/tls/thread_local-ice2.C11
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/tls/thread_local8.C12
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/tm/noexcept-6.C23
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/tm/pr60004.C10
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/torture/pr57499.C14
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/torture/pr59163.C30
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/torture/pr60609.C252
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/torture/pr60750.C21
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/torture/pr60895.C32
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/tree-prof/pr59255.C29
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/vect/pr60729.cc10
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/vect/pr60836.cc39
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr58997.c19
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr59362.c21
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr59803.c27
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr60502.c18
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20131127-1.c34
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20140212-1.c37
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20140326-1.c10
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20140425-1.c23
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr58726.c26
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr58831.c40
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr58984.c57
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c23
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59014.c25
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59101.c15
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59358.c44
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59388.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60017.c33
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60062.c25
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60072.c16
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60454.c31
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60960.c38
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/20050922-1.c2
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/20050922-2.c3
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/atomic-store-6.c13
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/builtin-object-size-14.c28
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c7
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/gomp/pr58809.c13
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr55022.c27
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr59817-1.c16
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr59817-2.c15
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr60740.c16
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/guality/pr59776.c29
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/ipa/pr55260.c38
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/ipa/pr59610.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/pr56824.c18
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/pr58668.c25
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/pr58805.c24
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/pr59011.c22
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/pr59351.c8
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/pr59827.c15
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/pr59860.c15
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/pr60485-1.c29
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/pr60485-2.c38
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/stack-usage-1.c4
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/tls/pr58595.c28
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57425-1.c37
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57425-2.c31
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57425-3.c31
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57488.c58
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57517.c16
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57569.c37
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57864.c37
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58079.c107
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58143-1.c51
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58143-2.c34
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58143-3.c18
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58779.c12
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58830.c42
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58941.c33
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58956.c30
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59047.c39
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59139.c20
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59164.c21
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59288.c9
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59330.c17
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59715.c21
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59891.c9
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59903.c56
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60115.c14
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60183.c38
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60766.c15
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60903.c22
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60930.c22
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c14
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c18
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/unused-8b.c4
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vect/pr60276.c52
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vect/pr60382.c32
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract-be-order.c33
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract-vsx-be-order.c19
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract-vsx.c16
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract.c21
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/gcc-bug-i.c15
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert-be-order.c65
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert-vsx-be-order.c34
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert-vsx.c28
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert.c37
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld-be-order.c107
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld-vsx-be-order.c44
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld-vsx.c39
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld.c91
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/lde-be-order.c73
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/lde.c59
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl-be-order.c107
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl-vsx-be-order.c44
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl-vsx.c39
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl.c91
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge-be-order.c96
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge-vsx-be-order.c84
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge-vsx.c71
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge.c77
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/mult-even-odd-be-order.c64
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/mult-even-odd.c43
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/pack-be-order.c136
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/pack.c108
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/perm-be-order.c74
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/perm.c69
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/sn7153.c4
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat-be-order.c59
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat-vsx-be-order.c37
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat-vsx.c31
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat.c47
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/st-be-order.c83
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/st-vsx-be-order.c34
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/st-vsx.c29
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/st.c67
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/ste-be-order.c53
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/ste.c41
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl-be-order.c83
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl-vsx-be-order.c34
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl-vsx.c29
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl.c67
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/sum2s-be-order.c19
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/sum2s.c13
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/unpack-be-order.c88
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/unpack.c67
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/vec-set.c14
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/vsums-be-order.c20
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.dg/vmx/vsums.c12
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c112
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c25
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/arm/pr54300.C61
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/arm/pr57637.c206
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/arm/pr59826.c35
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c29
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/arm/vrinta-ce.c15
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/avr/pr60991.c21
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/avr/torture/pr61055.c88
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c2
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c2
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/nest-1.c14
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr30315.c44
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr39162.c9
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr43546.c12
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr54694.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr58137.c33
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr58690.c14
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59021.c23
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59034-1.c10
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59034-2.c10
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59405.c24
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59470.c17
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59625.c36
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-1.c15
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-2.c15
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-3.c15
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-4.c14
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-5.c14
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-6.c14
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-7.c13
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59839.c12
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr59929.c55
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr60516.c20
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr60693.c13
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr60700.c59
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr60909-1.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr60909-2.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/pr9771-1.c12
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c2
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c2
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/xop-frczX.c60
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c9
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c8
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c74
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-1.c10
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-2.c9
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-3.c14
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-4.c10
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-5.c20
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-6.c12
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/mips/pr59137.c34
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/altivec-perm-1.c15
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/altivec-perm-3.c23
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/atomic-p7.c207
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/atomic-p8.c237
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/atomic_load_store-p8.c22
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/bcd-1.c27
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/bcd-2.c44
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/bcd-3.c103
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool.c14
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-av.c32
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-p5.c32
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-p7.c31
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-p8.c32
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2.h29
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3-av.c37
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3-p7.c37
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3-p8.c36
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3.h186
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/crypto-builtin-1.c130
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/darwin-longlong.c4
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c88
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c88
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-dd-2.c26
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-td-2.c29
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-td-3.c29
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-double1.c16
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-double2.c15
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-float1.c18
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-float2.c15
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-long1.c16
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-long2.c15
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-vint1.c14
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-vint2.c13
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move.h188
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/extend-divide-1.c34
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/extend-divide-2.c34
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/fusion.c24
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/htm-builtin-1.c51
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/htm-xl-intrin-1.c32
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/mmfpgpr.c22
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-1.c65
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c204
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c104
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c249
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-5.c105
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-6.c10
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c32
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-fp.c139
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c85
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-int128-2.c177
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c42
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c27
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-1.c200
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-2.c30
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-3.c29
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-4.c69
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-5.c87
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/pack01.c91
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/pack02.c95
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/pack03.c88
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-1.c2
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-2.c20
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-dfp-1.c26
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57744.c39
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57949-1.c20
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57949-2.c20
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr58673-1.c78
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr58673-2.c217
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr59054.c9
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr60137.c17
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr60203.c40
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr60735.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/quad-atomic.c67
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c21
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/sd-pwr6.c19
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/sd-vsx.c20
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/ti_math1.c20
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/ti_math2.c73
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/powerpc/vsx-float0.c16
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-1.c20
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-10.c21
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-11.c20
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-12.c20
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-2.c20
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-3.c20
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-4.c26
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-5.c21
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-6.c21
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-7.c21
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-8.c28
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-9.c21
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c27
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c27
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c27
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c28
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c68
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c23
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/htm-1.c73
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-1.c1073
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-2.c682
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c164
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c12
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c (renamed from gcc-4.8/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c)0
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/htm-nofloat-1.c54
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/htm-nofloat-2.c55
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/htm-nofloat-compile-1.c12
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/s390/s390.exp13
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/allocate_class_3.f90107
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/arrayio_13.f9014
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/constructor_9.f9022
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/default_initialization_7.f9022
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/derived_external_function_1.f9027
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f9074
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f9039
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/extends_15.f9016
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/fmt_en.f90186
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/fmt_g_1.f9011
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/generic_28.f9018
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/gomp/pr59467.f9024
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/graphite/pr59817.f14
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/ichar_3.f9013
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/implicit_pure_4.f9022
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/init_flag_12.f9013
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/list_read_12.f9011
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/lto/pr60635_0.f9016
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/lto/pr60635_1.c14
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/nan_7.f901
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/null_5.f902
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/null_6.f902
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/optional_class_1.f9045
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/pr52370.f9021
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/pr59700.f9040
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_43.f9019
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_45.f9024
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_46.f9014
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f9012
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/reshape_6.f9019
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/round_3.f0825
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/shape_8.f9010
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f9022
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/typebound_generic_15.f9018
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f9017
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f9044
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f9036
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/where_4.f9018
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f9013
-rw-r--r--gcc-4.8/gcc/testsuite/gnat.dg/opt32.adb37
-rw-r--r--gcc-4.8/gcc/testsuite/go.test/go-test.exp11
-rw-r--r--gcc-4.8/gcc/testsuite/lib/target-supports.exp124
-rw-r--r--gcc-4.8/gcc/tree-cfg.c44
-rw-r--r--gcc-4.8/gcc/tree-cfgcleanup.c3
-rw-r--r--gcc-4.8/gcc/tree-dfa.c95
-rw-r--r--gcc-4.8/gcc/tree-eh.c48
-rw-r--r--gcc-4.8/gcc/tree-flow.h1
-rw-r--r--gcc-4.8/gcc/tree-inline.c3
-rw-r--r--gcc-4.8/gcc/tree-object-size.c48
-rw-r--r--gcc-4.8/gcc/tree-predcom.c124
-rw-r--r--gcc-4.8/gcc/tree-sra.c15
-rw-r--r--gcc-4.8/gcc/tree-ssa-dce.c27
-rw-r--r--gcc-4.8/gcc/tree-ssa-live.c3
-rw-r--r--gcc-4.8/gcc/tree-ssa-loop-im.c88
-rw-r--r--gcc-4.8/gcc/tree-ssa-loop-ivopts.c9
-rw-r--r--gcc-4.8/gcc/tree-ssa-loop-niter.c7
-rw-r--r--gcc-4.8/gcc/tree-ssa-math-opts.c11
-rw-r--r--gcc-4.8/gcc/tree-ssa-operands.c6
-rw-r--r--gcc-4.8/gcc/tree-ssa-phiprop.c9
-rw-r--r--gcc-4.8/gcc/tree-ssa-pre.c6
-rw-r--r--gcc-4.8/gcc/tree-ssa-propagate.c12
-rw-r--r--gcc-4.8/gcc/tree-ssa-reassoc.c10
-rw-r--r--gcc-4.8/gcc/tree-ssa-sccvn.c12
-rw-r--r--gcc-4.8/gcc/tree-ssa-sink.c2
-rw-r--r--gcc-4.8/gcc/tree-ssa-structalias.c104
-rw-r--r--gcc-4.8/gcc/tree-ssa-tail-merge.c3
-rw-r--r--gcc-4.8/gcc/tree-ssa-ter.c49
-rw-r--r--gcc-4.8/gcc/tree-ssa-uninit.c58
-rw-r--r--gcc-4.8/gcc/tree-ssanames.c2
-rw-r--r--gcc-4.8/gcc/tree-vect-data-refs.c7
-rw-r--r--gcc-4.8/gcc/tree-vect-generic.c3
-rw-r--r--gcc-4.8/gcc/tree-vect-loop.c61
-rw-r--r--gcc-4.8/gcc/tree-vect-stmts.c31
-rw-r--r--gcc-4.8/gcc/tree-vectorizer.h5
-rw-r--r--gcc-4.8/gcc/tree-vrp.c16
-rw-r--r--gcc-4.8/gcc/tree.c54
-rw-r--r--gcc-4.8/gcc/tree.h19
-rw-r--r--gcc-4.8/gcc/value-prof.c3
-rw-r--r--gcc-4.8/gnattools/ChangeLog24
-rw-r--r--gcc-4.8/gnattools/Makefile.in30
-rwxr-xr-xgcc-4.8/gnattools/configure69
-rw-r--r--gcc-4.8/gnattools/configure.ac69
-rw-r--r--gcc-4.8/include/ChangeLog4
-rw-r--r--gcc-4.8/intl/ChangeLog4
-rw-r--r--gcc-4.8/libada/ChangeLog4
-rw-r--r--gcc-4.8/libatomic/ChangeLog17
-rw-r--r--gcc-4.8/libatomic/cas_n.c21
-rwxr-xr-xgcc-4.8/libatomic/configure16
-rw-r--r--gcc-4.8/libbacktrace/ChangeLog36
-rw-r--r--gcc-4.8/libbacktrace/Makefile.in2
-rw-r--r--gcc-4.8/libbacktrace/alloc.c20
-rwxr-xr-xgcc-4.8/libbacktrace/configure21
-rw-r--r--gcc-4.8/libbacktrace/configure.ac2
-rw-r--r--gcc-4.8/libbacktrace/dwarf.c8
-rw-r--r--gcc-4.8/libbacktrace/elf.c7
-rw-r--r--gcc-4.8/libbacktrace/internal.h14
-rw-r--r--gcc-4.8/libbacktrace/mmap.c13
-rw-r--r--gcc-4.8/libcpp/ChangeLog37
-rw-r--r--gcc-4.8/libcpp/files.c26
-rw-r--r--gcc-4.8/libcpp/lex.c9
-rw-r--r--gcc-4.8/libcpp/line-map.c5
-rw-r--r--gcc-4.8/libcpp/macro.c17
-rw-r--r--gcc-4.8/libcpp/po/ChangeLog12
-rw-r--r--gcc-4.8/libcpp/po/pt_BR.gmobin0 -> 21689 bytes
-rw-r--r--gcc-4.8/libcpp/po/pt_BR.po908
-rw-r--r--gcc-4.8/libcpp/po/tr.gmobin18470 -> 21337 bytes
-rw-r--r--gcc-4.8/libcpp/po/tr.po139
-rw-r--r--gcc-4.8/libdecnumber/ChangeLog4
-rw-r--r--gcc-4.8/libffi/ChangeLog40
-rw-r--r--gcc-4.8/libffi/Makefile.am14
-rw-r--r--gcc-4.8/libffi/Makefile.in30
-rwxr-xr-xgcc-4.8/libffi/configure30
-rw-r--r--gcc-4.8/libffi/configure.ac11
-rw-r--r--gcc-4.8/libffi/doc/libffi.info68
-rw-r--r--gcc-4.8/libffi/doc/libffi.texi27
-rw-r--r--gcc-4.8/libffi/fficonfig.h.in3
-rw-r--r--gcc-4.8/libffi/include/Makefile.in1
-rw-r--r--gcc-4.8/libffi/include/ffi.h.in5
-rw-r--r--gcc-4.8/libffi/man/Makefile.in1
-rw-r--r--gcc-4.8/libffi/src/powerpc/ffi.c1480
-rw-r--r--gcc-4.8/libffi/src/powerpc/ffi_linux64.c942
-rw-r--r--gcc-4.8/libffi/src/powerpc/ffi_powerpc.h77
-rw-r--r--gcc-4.8/libffi/src/powerpc/ffi_sysv.c931
-rw-r--r--gcc-4.8/libffi/src/powerpc/ffitarget.h110
-rw-r--r--gcc-4.8/libffi/src/powerpc/linux64.S92
-rw-r--r--gcc-4.8/libffi/src/powerpc/linux64_closure.S319
-rw-r--r--gcc-4.8/libffi/src/powerpc/ppc_closure.S7
-rw-r--r--gcc-4.8/libffi/src/powerpc/sysv.S4
-rw-r--r--gcc-4.8/libffi/src/prep_cif.c4
-rw-r--r--gcc-4.8/libffi/src/types.c15
-rw-r--r--gcc-4.8/libffi/testsuite/Makefile.in1
-rw-r--r--gcc-4.8/libffi/testsuite/libffi.call/cls_double_va.c16
-rw-r--r--gcc-4.8/libffi/testsuite/libffi.call/cls_longdouble_va.c17
-rw-r--r--gcc-4.8/libgcc/ChangeLog216
-rw-r--r--gcc-4.8/libgcc/config.host10
-rw-r--r--gcc-4.8/libgcc/config/arm/sfp-machine.h10
-rw-r--r--gcc-4.8/libgcc/config/i386/cygming-crtbegin.c10
-rw-r--r--gcc-4.8/libgcc/config/i386/sfp-exceptions.c34
-rw-r--r--gcc-4.8/libgcc/config/libbid/ChangeLog4
-rw-r--r--gcc-4.8/libgcc/config/rs6000/ibm-ldouble.c11
-rw-r--r--gcc-4.8/libgcc/config/rs6000/linux-unwind.h51
-rw-r--r--gcc-4.8/libgcc/config/rs6000/tramp.S66
-rw-r--r--gcc-4.8/libgcc/config/tilepro/atomic.c254
-rw-r--r--gcc-4.8/libgcc/unwind-seh.c5
-rw-r--r--gcc-4.8/libgfortran/ChangeLog76
-rwxr-xr-xgcc-4.8/libgfortran/configure16
-rw-r--r--gcc-4.8/libgfortran/intrinsics/system_clock.c3
-rw-r--r--gcc-4.8/libgfortran/io/io.h10
-rw-r--r--gcc-4.8/libgfortran/io/list_read.c55
-rw-r--r--gcc-4.8/libgfortran/io/read.c8
-rw-r--r--gcc-4.8/libgfortran/io/unit.c68
-rw-r--r--gcc-4.8/libgfortran/io/write_float.def73
-rw-r--r--gcc-4.8/libgo/Makefile.am12
-rw-r--r--gcc-4.8/libgo/Makefile.in22
-rw-r--r--gcc-4.8/libgo/config.h.in15
-rw-r--r--gcc-4.8/libgo/config/libtool.m412
-rwxr-xr-xgcc-4.8/libgo/configure18
-rw-r--r--gcc-4.8/libgo/configure.ac2
-rw-r--r--gcc-4.8/libgo/go/go/build/build.go2
-rw-r--r--gcc-4.8/libgo/go/go/build/syslist.go8
-rw-r--r--gcc-4.8/libgo/go/net/fd_unix.go11
-rw-r--r--gcc-4.8/libgo/go/reflect/all_test.go60
-rw-r--r--gcc-4.8/libgo/go/reflect/makefunc.go90
-rw-r--r--gcc-4.8/libgo/go/reflect/makefunc_386.S36
-rw-r--r--gcc-4.8/libgo/go/reflect/makefunc_amd64.S15
-rw-r--r--gcc-4.8/libgo/go/reflect/makefuncgo_386.go24
-rw-r--r--gcc-4.8/libgo/go/reflect/makefuncgo_amd64.go2
-rw-r--r--gcc-4.8/libgo/go/reflect/type.go2
-rw-r--r--gcc-4.8/libgo/go/reflect/value.go43
-rw-r--r--gcc-4.8/libgo/go/syscall/libcall_linux.go15
-rw-r--r--gcc-4.8/libgo/go/syscall/libcall_posix.go6
-rw-r--r--gcc-4.8/libgo/go/syscall/socket.go2
-rwxr-xr-xgcc-4.8/libgo/mksysinfo.sh4
-rw-r--r--gcc-4.8/libgo/runtime/go-callers.c9
-rw-r--r--gcc-4.8/libgo/runtime/go-cdiv.c46
-rw-r--r--gcc-4.8/libgo/runtime/go-defer.c1
-rw-r--r--gcc-4.8/libgo/runtime/go-defer.h6
-rw-r--r--gcc-4.8/libgo/runtime/go-int-array-to-string.c4
-rw-r--r--gcc-4.8/libgo/runtime/go-make-slice.c5
-rw-r--r--gcc-4.8/libgo/runtime/go-nosys.c57
-rw-r--r--gcc-4.8/libgo/runtime/go-recover.c77
-rw-r--r--gcc-4.8/libgo/runtime/go-reflect-call.c5
-rw-r--r--gcc-4.8/libgo/runtime/go-signal.c9
-rw-r--r--gcc-4.8/libgo/runtime/malloc.goc1
-rw-r--r--gcc-4.8/libgo/runtime/mgc0.c6
-rw-r--r--gcc-4.8/libgo/runtime/mheap.c6
-rw-r--r--gcc-4.8/libgo/runtime/proc.c32
-rw-r--r--gcc-4.8/libgo/runtime/runtime.h3
-rwxr-xr-xgcc-4.8/libgo/testsuite/gotest2
-rw-r--r--gcc-4.8/libgomp/ChangeLog22
-rw-r--r--gcc-4.8/libgomp/config/linux/futex.h8
-rwxr-xr-xgcc-4.8/libgomp/configure16
-rw-r--r--gcc-4.8/libgomp/libgomp.info230
-rw-r--r--gcc-4.8/libgomp/testsuite/libgomp.fortran/crayptr2.f902
-rw-r--r--gcc-4.8/libiberty/ChangeLog4
-rw-r--r--gcc-4.8/libitm/ChangeLog64
-rw-r--r--gcc-4.8/libitm/acinclude.m414
-rw-r--r--gcc-4.8/libitm/beginend.cc10
-rw-r--r--gcc-4.8/libitm/config/generic/asmcfi.h4
-rw-r--r--gcc-4.8/libitm/config/linux/futex_bits.h6
-rw-r--r--gcc-4.8/libitm/config/powerpc/sjlj.S24
-rw-r--r--gcc-4.8/libitm/config/powerpc/target.h82
-rw-r--r--gcc-4.8/libitm/config/x86/target.h7
-rw-r--r--gcc-4.8/libitm/configure54
-rw-r--r--gcc-4.8/libitm/configure.tgt5
-rw-r--r--gcc-4.8/libitm/libitm.info128
-rw-r--r--gcc-4.8/libitm/query.cc14
-rw-r--r--gcc-4.8/libjava/ChangeLog24
-rw-r--r--gcc-4.8/libjava/classpath/ChangeLog11
-rw-r--r--gcc-4.8/libjava/classpath/ChangeLog.gcj6
-rwxr-xr-xgcc-4.8/libjava/classpath/configure24
-rw-r--r--gcc-4.8/libjava/classpath/doc/cp-tools.info288
-rw-r--r--gcc-4.8/libjava/classpath/doc/gappletviewer.120
-rw-r--r--gcc-4.8/libjava/classpath/doc/gjar.120
-rw-r--r--gcc-4.8/libjava/classpath/doc/gjarsigner.120
-rw-r--r--gcc-4.8/libjava/classpath/doc/gjavah.120
-rw-r--r--gcc-4.8/libjava/classpath/doc/gjdoc.142
-rw-r--r--gcc-4.8/libjava/classpath/doc/gkeytool.120
-rw-r--r--gcc-4.8/libjava/classpath/doc/gnative2ascii.120
-rw-r--r--gcc-4.8/libjava/classpath/doc/gorbd.120
-rw-r--r--gcc-4.8/libjava/classpath/doc/grmid.120
-rw-r--r--gcc-4.8/libjava/classpath/doc/grmiregistry.120
-rw-r--r--gcc-4.8/libjava/classpath/doc/gserialver.120
-rw-r--r--gcc-4.8/libjava/classpath/doc/gtnameserv.120
-rw-r--r--gcc-4.8/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c5
-rw-r--r--gcc-4.8/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c9
-rwxr-xr-xgcc-4.8/libjava/configure18
-rw-r--r--gcc-4.8/libjava/java/lang/natObject.cc4
-rw-r--r--gcc-4.8/libjava/libltdl/ChangeLog12
-rw-r--r--gcc-4.8/libjava/libltdl/acinclude.m412
-rwxr-xr-xgcc-4.8/libjava/libltdl/configure32
-rw-r--r--gcc-4.8/libjava/testsuite/libjava.lang/sourcelocation.xfail1
-rw-r--r--gcc-4.8/libmudflap/ChangeLog11
-rwxr-xr-xgcc-4.8/libmudflap/configure16
-rw-r--r--gcc-4.8/libobjc/ChangeLog11
-rwxr-xr-xgcc-4.8/libobjc/configure18
-rw-r--r--gcc-4.8/libquadmath/ChangeLog11
-rwxr-xr-xgcc-4.8/libquadmath/configure16
-rw-r--r--gcc-4.8/libquadmath/libquadmath.info36
-rw-r--r--gcc-4.8/libsanitizer/ChangeLog18
-rwxr-xr-xgcc-4.8/libsanitizer/configure16
-rw-r--r--gcc-4.8/libsanitizer/configure.tgt3
-rw-r--r--gcc-4.8/libssp/ChangeLog11
-rwxr-xr-xgcc-4.8/libssp/configure16
-rw-r--r--gcc-4.8/libstdc++-v3/ChangeLog201
-rw-r--r--gcc-4.8/libstdc++-v3/acinclude.m42
-rw-r--r--gcc-4.8/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt17
-rwxr-xr-xgcc-4.8/libstdc++-v3/configure34
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/api.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/bk02.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/bk03.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/faq.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/index.html8
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/abi.html18
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/algorithms.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/api.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/appendix.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/appendix_contributing.html8
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/appendix_free.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/appendix_gfdl.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/appendix_gpl.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/appendix_porting.html8
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/associative.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/atomics.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/backwards.html8
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/bitmap_allocator.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/bugs.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/concept_checking.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/concurrency.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/configure.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/containers.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/containers_and_c.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/debug.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_design.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_semantics.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_using.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/diagnostics.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/documentation_hacking.html15
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/dynamic_memory.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/ext_algorithms.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/ext_compile_checks.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency_use.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/ext_containers.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/ext_demangling.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/ext_io.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/ext_iterators.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/ext_numerics.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/ext_preface.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/ext_sgi.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/ext_utilities.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/extensions.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/facets.html58
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/fstreams.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/index.html24
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/internals.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/intro.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/io.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/io_and_c.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/iterators.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/license.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/localization.html20
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/make.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/memory.html46
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_design.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_impl.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/numerics.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/numerics_and_c.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/pairs.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode.html8
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_design.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_test.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_using.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures.html20
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html5
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_design.html68
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_using.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_api.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_design.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_devel.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html8
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_impl.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/setup.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/source_code_style.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/source_design_notes.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/source_organization.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/status.html14
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/std_contents.html8
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/streambufs.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/strings.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/stringstreams.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/support.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/termination.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/test.html4
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/traits.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/unordered_associative.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/using.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/using_concurrency.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/using_exceptions.html18
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/using_headers.html14
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/using_macros.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/using_namespaces.html2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/html/manual/utilities.html6
-rw-r--r--gcc-4.8/libstdc++-v3/doc/xml/faq.xml2
-rw-r--r--gcc-4.8/libstdc++-v3/doc/xml/manual/abi.xml3
-rw-r--r--gcc-4.8/libstdc++-v3/doc/xml/manual/spine.xml1
-rw-r--r--gcc-4.8/libstdc++-v3/doc/xml/manual/status_cxx2011.xml5
-rw-r--r--gcc-4.8/libstdc++-v3/include/bits/atomic_base.h4
-rw-r--r--gcc-4.8/libstdc++-v3/include/bits/shared_ptr_base.h6
-rw-r--r--gcc-4.8/libstdc++-v3/include/bits/stl_vector.h3
-rw-r--r--gcc-4.8/libstdc++-v3/include/c_global/cstdio1
-rw-r--r--gcc-4.8/libstdc++-v3/include/debug/functions.h120
-rw-r--r--gcc-4.8/libstdc++-v3/include/debug/macros.h20
-rw-r--r--gcc-4.8/libstdc++-v3/include/debug/safe_unordered_base.h12
-rw-r--r--gcc-4.8/libstdc++-v3/include/std/functional11
-rw-r--r--gcc-4.8/libstdc++-v3/include/std/future19
-rw-r--r--gcc-4.8/libstdc++-v3/include/std/iostream6
-rw-r--r--gcc-4.8/libstdc++-v3/include/std/tuple4
-rw-r--r--gcc-4.8/libstdc++-v3/libsupc++/eh_alloc.cc12
-rw-r--r--gcc-4.8/libstdc++-v3/libsupc++/eh_throw.cc3
-rwxr-xr-xgcc-4.8/libstdc++-v3/scripts/extract_symvers.in1
-rw-r--r--gcc-4.8/libstdc++-v3/src/c++11/thread.cc2
-rw-r--r--gcc-4.8/libstdc++-v3/testsuite/20_util/bind/57899.cc48
-rw-r--r--gcc-4.8/libstdc++-v3/testsuite/20_util/function/60594.cc36
-rw-r--r--gcc-4.8/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc33
-rw-r--r--gcc-4.8/libstdc++-v3/testsuite/20_util/tuple/60497.cc35
-rw-r--r--gcc-4.8/libstdc++-v3/testsuite/23_containers/unordered_map/59548.cc34
-rw-r--r--gcc-4.8/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc59
-rw-r--r--gcc-4.8/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc21
-rw-r--r--gcc-4.8/libstdc++-v3/testsuite/29_atomics/atomic/60658.cc43
-rw-r--r--gcc-4.8/libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc51
-rw-r--r--gcc-4.8/libtool.m412
-rw-r--r--gcc-4.8/lto-plugin/ChangeLog11
-rwxr-xr-xgcc-4.8/lto-plugin/configure16
-rw-r--r--gcc-4.8/maintainer-scripts/ChangeLog10
-rwxr-xr-xgcc-4.8/maintainer-scripts/gcc_release4
-rw-r--r--gcc-4.8/zlib/ChangeLog11
-rwxr-xr-xgcc-4.8/zlib/configure16
1087 files changed, 60369 insertions, 14695 deletions
diff --git a/gcc-4.8/ChangeLog b/gcc-4.8/ChangeLog
index 5358ac27f..0ed008342 100644
--- a/gcc-4.8/ChangeLog
+++ b/gcc-4.8/ChangeLog
@@ -1,3 +1,25 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * libtool.m4: Update to mainline version.
+ * configure: Regenerate.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline r203071:
+
+ 2013-10-01 Joern Rennecke <joern.rennecke@embecosm.com>
+
+ Import from savannah.gnu.org:
+ * config.guess: Update to 2013-06-10 version.
+ * config.sub: Update to 2013-10-01 version.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/ChangeLog.backported b/gcc-4.8/ChangeLog.backported
index f92f0f945..d93a35b82 100644
--- a/gcc-4.8/ChangeLog.backported
+++ b/gcc-4.8/ChangeLog.backported
@@ -19,14 +19,6 @@ libstdc++-v3/
Copy comment for this case from eh_personality.cc:__cxa_call_unexpected.
* testsuite/18_support/bad_exception/59392.cc: New file.
-http://gcc.gnu.org/viewcvs/gcc?view=revision&revision=205720
-2013-12-05 Jason Merrill <jason@redhat.com>
-
- PR c++/59044
- PR c++/59052
- * pt.c (most_specialized_class): Use the partially instantiated
- template for deduction. Drop the TMPL parameter.
-
http://gcc.gnu.org/viewcvs?rev=203874&root=gcc&view=rev
2013-10-20 Chris Jefferson <chris@bubblescope.net>
Paolo Carlini <paolo.carlini@oracle.com>
diff --git a/gcc-4.8/INSTALL/binaries.html b/gcc-4.8/INSTALL/binaries.html
index 9ffb75b38..ccd8b3d43 100644
--- a/gcc-4.8/INSTALL/binaries.html
+++ b/gcc-4.8/INSTALL/binaries.html
@@ -3,7 +3,7 @@
<title>Installing GCC: Binaries</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Installing GCC: Binaries">
-<meta name="generator" content="makeinfo 4.13">
+<meta name="generator" content="makeinfo 4.12">
<link title="Top" rel="top" href="#Top">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
@@ -100,7 +100,7 @@ Solaris/SPARC 2.5.1, 2.6, 7, 8, 9 and 10.
number of platforms.
<li>The <a href="http://gcc.gnu.org/wiki/GFortranBinaries">GFortran Wiki</a> has
-links to GNU Fortran binaries for several platforms.
+links to GNU Fortran binaries for several platforms.
</ul>
<p><hr />
diff --git a/gcc-4.8/INSTALL/build.html b/gcc-4.8/INSTALL/build.html
index aaae4c4d2..0b5eed579 100644
--- a/gcc-4.8/INSTALL/build.html
+++ b/gcc-4.8/INSTALL/build.html
@@ -3,7 +3,7 @@
<title>Installing GCC: Building</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Installing GCC: Building">
-<meta name="generator" content="makeinfo 4.13">
+<meta name="generator" content="makeinfo 4.12">
<link title="Top" rel="top" href="#Top">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
@@ -142,7 +142,7 @@ bootstrap4</span></samp>&rsquo; to increase the number of stages of bootstrap.
<p><code>BOOT_CFLAGS</code> does not apply to bootstrapped target libraries.
Since these are always compiled with the compiler currently being
bootstrapped, you can use <code>CFLAGS_FOR_TARGET</code> to modify their
-compilation flags, as for non-bootstrapped target libraries.
+compilation flags, as for non-bootstrapped target libraries.
Again, if the native compiler miscompiles the stage1 compiler, you may
need to work around this by avoiding non-working parts of the stage1
compiler. Use <code>STAGE1_TFLAGS</code> to this end.
@@ -170,7 +170,7 @@ the one you are building on: for example, you could build a
<samp><span class="option">--enable-bootstrap</span></samp> to the configure script.
<p><code>BUILD_CONFIG</code> can be used to bring in additional customization
-to the build. It can be set to a whitespace-separated list of names.
+to the build. It can be set to a whitespace-separated list of names.
For each such <code>NAME</code>, top-level <samp><span class="file">config/</span><code>NAME</code><span class="file">.mk</span></samp> will
be included by the top-level <samp><span class="file">Makefile</span></samp>, bringing in any settings
it contains. The default <code>BUILD_CONFIG</code> can be set using the
@@ -325,7 +325,7 @@ and network filesystems.
<h3 class="section"><a name="TOC3"></a>Building the Ada compiler</h3>
<p>In order to build GNAT, the Ada compiler, you need a working GNAT
-compiler (GCC version 4.0 or later).
+compiler (GCC version 4.0 or later).
This includes GNAT tools such as <samp><span class="command">gnatmake</span></samp> and
<samp><span class="command">gnatlink</span></samp>, since the Ada front end is written in Ada and
uses some GNAT-specific extensions.
@@ -355,11 +355,11 @@ bootstrap the compiler with profile feedback, use <code>make profiledbootstrap</
<p>When &lsquo;<samp><span class="samp">make profiledbootstrap</span></samp>&rsquo; is run, it will first build a <code>stage1</code>
compiler. This compiler is used to build a <code>stageprofile</code> compiler
instrumented to collect execution counts of instruction and branch
-probabilities. Then runtime libraries are compiled with profile collected.
+probabilities. Then runtime libraries are compiled with profile collected.
Finally a <code>stagefeedback</code> compiler is built using the information collected.
<p>Unlike standard bootstrap, several additional restrictions apply. The
-compiler used to build <code>stage1</code> needs to support a 64-bit integral type.
+compiler used to build <code>stage1</code> needs to support a 64-bit integral type.
It is recommended to only use GCC for this. Also parallel make is currently
not supported since collisions in profile collecting may occur.
diff --git a/gcc-4.8/INSTALL/configure.html b/gcc-4.8/INSTALL/configure.html
index 2b3a265c5..9e6e556e0 100644
--- a/gcc-4.8/INSTALL/configure.html
+++ b/gcc-4.8/INSTALL/configure.html
@@ -3,7 +3,7 @@
<title>Installing GCC: Configuration</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Installing GCC: Configuration">
-<meta name="generator" content="makeinfo 4.13">
+<meta name="generator" content="makeinfo 4.12">
<link title="Top" rel="top" href="#Top">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
@@ -121,7 +121,7 @@ when configuring a cross compiler; examples of valid targets would be
m68k-elf, sh-elf, etc.
<li>Specifying just <var>target</var> instead of <samp><span class="option">--target=</span><var>target</var></samp>
-implies that the host defaults to <var>target</var>.
+implies that the host defaults to <var>target</var>.
</ul>
<h3 class="heading"><a name="TOC2"></a>Options specification</h3>
@@ -383,7 +383,7 @@ target system triple.
<li>Check in the <samp><span class="env">PATH</span></samp> for a tool whose name is not prefixed by the
target system triple, if the host and target system triple are
the same (in other words, we use a host tool if it can be used for
-the target as well).
+the target as well).
</ul>
<p>You may want to use <samp><span class="option">--with-as</span></samp> if no assembler
@@ -471,7 +471,7 @@ these are handled by <samp><span class="option">--with-endian</span></samp>.
processors. The multilib for the secondary endian remains enabled.
<p>As a special case, if an entry in the list starts with a <code>!</code>
-(exclamation point), then it is added to the list of excluded multilibs.
+(exclamation point), then it is added to the list of excluded multilibs.
Entries of this sort should be compatible with &lsquo;<samp><span class="samp">MULTILIB_EXCLUDES</span></samp>&rsquo;
(once the leading <code>!</code> has been stripped).
@@ -495,7 +495,7 @@ respectively. If <var>list</var> is empty, then there will be no multilibs
and only the default run-time library will be enabled.
<p>If <samp><span class="option">--with-multilib-list</span></samp> is not given, then only 32-bit and
-64-bit run-time libraries will be enabled.
+64-bit run-time libraries will be enabled.
</dl>
<br><dt><code>--with-endian=</code><var>endians</var><dd>Specify what endians to use.
@@ -511,7 +511,7 @@ Currently only implemented for sh*-*-*.
<br><dt><code>--enable-threads</code><dd>Specify that the target
supports threads. This affects the Objective-C compiler and runtime
-library, and exception handling for other languages like C++ and Java.
+library, and exception handling for other languages like C++ and Java.
On some systems, this is the default.
<p>In general, the best (and, in many cases, the only known) threading
@@ -579,11 +579,11 @@ enables <samp><span class="option">-msse2</span></samp> or &lsquo;<samp><span cl
This option is only supported on i386 and x86-64 targets.
<br><dt><code>--with-divide=</code><var>type</var><dd>Specify how the compiler should generate code for checking for
-division by zero. This option is only supported on the MIPS target.
+division by zero. This option is only supported on the MIPS target.
The possibilities for <var>type</var> are:
<dl>
<dt><code>traps</code><dd>Division by zero checks use conditional traps (this is the default on
-systems that support conditional traps).
+systems that support conditional traps).
<br><dt><code>breaks</code><dd>Division by zero checks use the break instruction.
</dl>
@@ -609,7 +609,7 @@ SVR4-based MIPS ABIs and require support from GNU binutils
and the runtime C library.
<br><dt><code>--enable-__cxa_atexit</code><dd>Define if you want to use __cxa_atexit, rather than atexit, to
-register C++ destructors for local statics and global objects.
+register C++ destructors for local statics and global objects.
This is essential for fully standards-compliant handling of
destructors, but requires __cxa_atexit in libc. This option is currently
only available on systems with GNU libc. When enabled, this will cause
@@ -619,7 +619,7 @@ only available on systems with GNU libc. When enabled, this will cause
currently only available on systems with GNU libc on certain targets.
<br><dt><code>--enable-target-optspace</code><dd>Specify that target
-libraries should be optimized for code space instead of code speed.
+libraries should be optimized for code space instead of code speed.
This is the default for the m32r platform.
<br><dt><code>--with-cpp-install-dir=</code><var>dirname</var><dd>Specify that the user visible <samp><span class="command">cpp</span></samp> program should be installed
@@ -649,9 +649,9 @@ testing that GCC can compile itself correctly. If you want to disable
this process, you can configure with <samp><span class="option">--disable-bootstrap</span></samp>.
<br><dt><code>--enable-bootstrap</code><dd>In special cases, you may want to perform a 3-stage build
-even if the target and host triplets are different.
+even if the target and host triplets are different.
This is possible when the host can run code compiled for
-the target (e.g. host is i686-linux, target is i486-linux).
+the target (e.g. host is i686-linux, target is i486-linux).
Starting from GCC 4.2, to do this you have to configure explicitly
with <samp><span class="option">--enable-bootstrap</span></samp>.
@@ -686,8 +686,8 @@ their runtime libraries should be built. For a list of valid values for
</pre>
<p>Currently, you can use any of the following:
<code>all</code>, <code>ada</code>, <code>c</code>, <code>c++</code>, <code>fortran</code>,
-<code>go</code>, <code>java</code>, <code>objc</code>, <code>obj-c++</code>.
-Building the Ada compiler has special requirements, see below.
+<code>go</code>, <code>java</code>, <code>objc</code>, <code>obj-c++</code>.
+Building the Ada compiler has special requirements, see below.
If you do not pass this flag, or specify the option <code>all</code>, then all
default languages available in the <samp><span class="file">gcc</span></samp> sub-tree will be configured.
Ada, Go and Objective-C++ are not default languages; the rest are.
@@ -729,13 +729,13 @@ use DWARF 2 debugging information as the default.
<br><dt><code>--enable-targets=all</code><dt><code>--enable-targets=</code><var>target_list</var><dd>Some GCC targets, e.g. powerpc64-linux, build bi-arch compilers.
These are compilers that are able to generate either 64-bit or 32-bit
-code. Typically, the corresponding 32-bit target, e.g.
+code. Typically, the corresponding 32-bit target, e.g.
powerpc-linux for powerpc64-linux, only generates 32-bit code. This
option enables the 32-bit target to be a bi-arch compiler, which is
useful when you want a bi-arch compiler that defaults to 32-bit, and
-you are building a bi-arch or multi-arch binutils in a combined tree.
+you are building a bi-arch or multi-arch binutils in a combined tree.
On mips-linux, this will build a tri-arch compiler (ABI o32/n32/64),
-defaulted to o32.
+defaulted to o32.
Currently, this option only affects sparc-linux, powerpc-linux, x86-linux,
mips-linux and s390-linux.
@@ -859,7 +859,7 @@ may enable this option manually.
<br><dt><code>--with-long-double-128</code><dd>Specify if <code>long double</code> type should be 128-bit by default on selected
GNU/Linux architectures. If using <code>--without-long-double-128</code>,
-<code>long double</code> will be by default 64-bit, the same as <code>double</code> type.
+<code>long double</code> will be by default 64-bit, the same as <code>double</code> type.
When neither of these configure options are used, the default will be
128-bit <code>long double</code> when built against GNU C Library 2.4 and later,
64-bit <code>long double</code> otherwise.
@@ -958,7 +958,7 @@ default, and may be disabled using <samp><span class="option">--disable-lto</spa
<br><dt><code>--with-plugin-ld=</code><var>pathname</var><dd>Enable an alternate linker to be used at link-time optimization (LTO)
link time when <samp><span class="option">-fuse-linker-plugin</span></samp> is enabled.
This linker should have plugin support such as gold starting with
-version 2.20 or GNU ld starting with version 2.21.
+version 2.20 or GNU ld starting with version 2.21.
See <samp><span class="option">-fuse-linker-plugin</span></samp> for details.
<br><dt><code>--enable-canonical-system-headers</code><dt><code>--disable-canonical-system-headers</code><dd>Enable system header path canonicalization for <samp><span class="file">libcpp</span></samp>. This can
@@ -974,7 +974,7 @@ environments. Enabled by default, and may be disabled using
<dl>
<dt><code>--with-sysroot</code><dt><code>--with-sysroot=</code><var>dir</var><dd>Tells GCC to consider <var>dir</var> as the root of a tree that contains
-(a subset of) the root filesystem of the target operating system.
+(a subset of) the root filesystem of the target operating system.
Target system headers, libraries and run-time object files will be
searched for in there. More specifically, this acts as if
<samp><span class="option">--sysroot=</span><var>dir</var></samp> was added to the default options of the built
@@ -1012,7 +1012,7 @@ option then the compiler will search that directory within <var>dirname</var> fo
native system headers rather than the default <samp><span class="file">/usr/include</span></samp>.
<br><dt><code>--with-headers</code><dt><code>--with-headers=</code><var>dir</var><dd>Deprecated in favor of <samp><span class="option">--with-sysroot</span></samp>.
-Specifies that target headers are available when building a cross compiler.
+Specifies that target headers are available when building a cross compiler.
The <var>dir</var> argument specifies a directory which has the target include
files. These include files will be copied into the <samp><span class="file">gcc</span></samp> install
directory. <em>This option with the </em><var>dir</var><em> argument is required</em> when
@@ -1040,7 +1040,7 @@ omitted from <samp><span class="file">libgcc.a</span></samp> on the assumption t
being used as the target C library. This causes float support
functions like <code>__addsf3</code> to be omitted from <samp><span class="file">libgcc.a</span></samp> on
the assumption that it will be provided by <samp><span class="file">libm.a</span></samp>. For more
-technical details, cf. <a href="http://gcc.gnu.org/PR54461">PR54461</a>.
+technical details, cf. <a href="http://gcc.gnu.org/PR54461">PR54461</a>.
This option is only supported for the AVR target. It is not supported for
RTEMS configurations, which currently use newlib. The option is
supported since version 4.7.2 and is the default in 4.8.0 and newer.
@@ -1059,7 +1059,7 @@ native tools in <samp><span class="file">/usr/bin</span></samp>.
<samp><span class="command">ar</span></samp>, <samp><span class="command">as</span></samp>, <samp><span class="command">ld</span></samp>, <samp><span class="command">nm</span></samp>,
<samp><span class="command">ranlib</span></samp> and <samp><span class="command">strip</span></samp> if necessary, and possibly
<samp><span class="command">objdump</span></samp>. Otherwise, GCC may use an inconsistent set of
-tools.
+tools.
</dl>
<h4 class="subheading"><a name="TOC4"></a>Java-Specific Options</h4>
@@ -1223,7 +1223,7 @@ on getting <samp><span class="file">unicows.dll</span></samp> from Microsoft.
<br><dt><code>unicode</code><dd>Use the <code>WCHAR</code> and Win32 W functions natively. Does <em>not</em>
add <code>-lunicows</code> to <samp><span class="file">libgcj.spec</span></samp>. The built executables will
-only run on Microsoft Windows NT and above.
+only run on Microsoft Windows NT and above.
</dl>
</dl>
diff --git a/gcc-4.8/INSTALL/download.html b/gcc-4.8/INSTALL/download.html
index 01a0b0b83..5eb846647 100644
--- a/gcc-4.8/INSTALL/download.html
+++ b/gcc-4.8/INSTALL/download.html
@@ -3,7 +3,7 @@
<title>Downloading GCC</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Downloading GCC">
-<meta name="generator" content="makeinfo 4.13">
+<meta name="generator" content="makeinfo 4.12">
<link title="Top" rel="top" href="#Top">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
@@ -50,7 +50,7 @@ for information on how to obtain GCC.
<p>The source distribution includes the C, C++, Objective-C, Fortran, Java,
and Ada (in the case of GCC 3.1 and later) compilers, as well as
-runtime libraries for C++, Objective-C, Fortran, and Java.
+runtime libraries for C++, Objective-C, Fortran, and Java.
For previous versions these were downloadable as separate components such
as the core GCC distribution, which included the C language front end and
shared components, and language-specific distributions including the
diff --git a/gcc-4.8/INSTALL/finalinstall.html b/gcc-4.8/INSTALL/finalinstall.html
index 0428124b0..18ba78262 100644
--- a/gcc-4.8/INSTALL/finalinstall.html
+++ b/gcc-4.8/INSTALL/finalinstall.html
@@ -3,7 +3,7 @@
<title>Installing GCC: Final installation</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Installing GCC: Final installation">
-<meta name="generator" content="makeinfo 4.13">
+<meta name="generator" content="makeinfo 4.12">
<link title="Top" rel="top" href="#Top">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
@@ -94,11 +94,11 @@ using the <code>DESTDIR</code> feature.
</pre>
<p>If you are bootstrapping a released version of GCC then please
quickly review the build status page for your release, available from
-<a href="http://gcc.gnu.org/buildstat.html">http://gcc.gnu.org/buildstat.html</a>.
+<a href="http://gcc.gnu.org/buildstat.html">http://gcc.gnu.org/buildstat.html</a>.
If your system is not listed for the version of GCC that you built,
send a note to
<a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a> indicating
-that you successfully built and installed GCC.
+that you successfully built and installed GCC.
Include the following information:
<ul>
@@ -132,7 +132,7 @@ relevant.
<li>Any other information that you think would be useful to people building
GCC on the same configuration. The new entry in the build status list
-will include a link to the archived copy of your message.
+will include a link to the archived copy of your message.
</ul>
<p>We'd also like to know if the
diff --git a/gcc-4.8/INSTALL/gfdl.html b/gcc-4.8/INSTALL/gfdl.html
index 089e3d4fe..10fdaa3bb 100644
--- a/gcc-4.8/INSTALL/gfdl.html
+++ b/gcc-4.8/INSTALL/gfdl.html
@@ -3,7 +3,7 @@
<title>Installing GCC: GNU Free Documentation License</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Installing GCC: GNU Free Documentation License">
-<meta name="generator" content="makeinfo 4.13">
+<meta name="generator" content="makeinfo 4.12">
<link title="Top" rel="top" href="#Top">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
@@ -56,7 +56,7 @@ license is included in the section entitled "GNU Free Documentation License".
<p>The purpose of this License is to make a manual, textbook, or other
functional and useful document <dfn>free</dfn> in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
-with or without modifying it, either commercially or noncommercially.
+with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.
@@ -123,7 +123,7 @@ drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters. A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
-or discourage subsequent modification by readers is not Transparent.
+or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text. A copy that is not &ldquo;Transparent&rdquo; is called &ldquo;Opaque&rdquo;.
@@ -190,7 +190,7 @@ Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover. Both covers must also clearly and legibly identify
you as the publisher of these copies. The front cover must present
the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
+visible. You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.
@@ -205,7 +205,7 @@ more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
-a complete Transparent copy of the Document, free of added material.
+a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
@@ -267,7 +267,7 @@ Version as stated in the previous sentence.
<li>Preserve the network location, if any, given in the Document for
public access to a Transparent copy of the Document, and likewise
the network locations given in the Document for previous versions
-it was based on. These may be placed in the &ldquo;History&rdquo; section.
+it was based on. These may be placed in the &ldquo;History&rdquo; section.
You may omit a network location for a work that was published at
least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
@@ -331,7 +331,7 @@ multiple identical Invariant Sections may be replaced with a single
copy. If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
+author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
@@ -369,14 +369,14 @@ derivative works of the Document.
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document's Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
-electronic equivalent of covers if the Document is in electronic form.
+electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.
<li>TRANSLATION
<p>Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
+distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
@@ -478,20 +478,20 @@ provided the MMC is eligible for relicensing.
the License in the document and put the following copyright and
license notices just after the title page:
-<pre class="smallexample"> Copyright (C) <var>year</var> <var>your name</var>.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
+<pre class="smallexample"> Copyright (C) <var>year</var> <var>your name</var>.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
</pre>
<p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the &ldquo;with...Texts.&rdquo; line with this:
-<pre class="smallexample"> with the Invariant Sections being <var>list their titles</var>, with
- the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts
- being <var>list</var>.
+<pre class="smallexample"> with the Invariant Sections being <var>list their titles</var>, with
+ the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts
+ being <var>list</var>.
</pre>
<p>If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
diff --git a/gcc-4.8/INSTALL/index.html b/gcc-4.8/INSTALL/index.html
index 695f088d2..29e6ee076 100644
--- a/gcc-4.8/INSTALL/index.html
+++ b/gcc-4.8/INSTALL/index.html
@@ -3,7 +3,7 @@
<title>Installing GCC</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Installing GCC">
-<meta name="generator" content="makeinfo 4.13">
+<meta name="generator" content="makeinfo 4.12">
<link title="Top" rel="top" href="#Top">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
@@ -41,7 +41,7 @@ license is included in the section entitled "GNU Free Documentation License".
<body>
<h1 class="settitle">Installing GCC</h1>
The latest version of this document is always available at
-<a href="http://gcc.gnu.org/install/">http://gcc.gnu.org/install/</a>.
+<a href="http://gcc.gnu.org/install/">http://gcc.gnu.org/install/</a>.
It refers to the current development sources, instructions for
specific released versions are included with the sources.
@@ -53,12 +53,12 @@ with their own installation instructions. This document supersedes all
package-specific installation instructions.
<p><em>Before</em> starting the build/install procedure please check the
-<a href="specific.html">host/target specific installation notes</a>.
+<a href="specific.html">host/target specific installation notes</a>.
We recommend you browse the entire generic installation instructions before
you proceed.
<p>Lists of successful builds for released versions of GCC are
-available at <a href="http://gcc.gnu.org/buildstat.html">http://gcc.gnu.org/buildstat.html</a>.
+available at <a href="http://gcc.gnu.org/buildstat.html">http://gcc.gnu.org/buildstat.html</a>.
These lists are updated as new information becomes available.
<p>The installation procedure itself is broken into five steps.
diff --git a/gcc-4.8/INSTALL/old.html b/gcc-4.8/INSTALL/old.html
index 97b62770d..4d814038f 100644
--- a/gcc-4.8/INSTALL/old.html
+++ b/gcc-4.8/INSTALL/old.html
@@ -3,7 +3,7 @@
<title>Installing GCC: Old documentation</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Installing GCC: Old documentation">
-<meta name="generator" content="makeinfo 4.13">
+<meta name="generator" content="makeinfo 4.12">
<link title="Top" rel="top" href="#Top">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
@@ -115,7 +115,7 @@ Here are the possible CPU types:
hppa1.0, hppa1.1, i370, i386, i486, i586, i686, i786, i860, i960, ip2k, m32r,
m68000, m68k, m88k, mcore, mips, mipsel, mips64, mips64el,
mn10200, mn10300, ns32k, pdp11, powerpc, powerpcle, romp, rs6000, sh, sparc,
-sparclite, sparc64, v850, vax, we32k.
+sparclite, sparc64, v850, vax, we32k.
</blockquote>
<p>Here are the recognized company names. As you can see, customary
@@ -127,7 +127,7 @@ acorn, alliant, altos, apollo, apple, att, bull,
cbm, convergent, convex, crds, dec, dg, dolphin,
elxsi, encore, harris, hitachi, hp, ibm, intergraph, isi,
mips, motorola, ncr, next, ns, omron, plexus,
-sequent, sgi, sony, sun, tti, unicom, wrs.
+sequent, sgi, sony, sun, tti, unicom, wrs.
</blockquote>
<p>The company name is meaningful only to disambiguate when the rest of
@@ -143,7 +143,7 @@ dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms, genix, gnu, linux,
linux-gnu, hiux, hpux, iris, irix, isc, luna, lynxos, mach, minix, msdos, mvs,
netbsd, newsos, nindy, ns, osf, osfrose, ptx, riscix, riscos, rtu, sco, sim,
solaris, sunos, sym, sysv, udi, ultrix, unicos, uniplus, unos, vms, vsta,
-vxworks, winnt, xenix.
+vxworks, winnt, xenix.
</blockquote>
<p class="noindent">You can omit the system type; then <samp><span class="file">configure</span></samp> guesses the
@@ -163,7 +163,7 @@ are obsolete.
<p>If you specify an impossible combination such as &lsquo;<samp><span class="samp">i860-dg-vms</span></samp>&rsquo;,
then you may get an error message from <samp><span class="file">configure</span></samp>, or it may
-ignore part of the information and do the best it can with the rest.
+ignore part of the information and do the best it can with the rest.
<samp><span class="file">configure</span></samp> always prints the canonical name for the alternative
that it used. GCC does not support all possible alternatives.
@@ -186,11 +186,11 @@ m3230, magnum, merlin, miniframe,
mmax, news-3600, news800, news, next,
pbd, pc532, pmax, powerpc, powerpcle, ps2, risc-news,
rtpc, sun2, sun386i, sun386, sun3,
-sun4, symmetry, tower-32, tower.
+sun4, symmetry, tower-32, tower.
</blockquote>
<p class="noindent">Remember that a machine name specifies both the cpu type and the company
-name.
+name.
<hr />
<p><a href="./index.html">Return to the GCC Installation page</a>
diff --git a/gcc-4.8/INSTALL/prerequisites.html b/gcc-4.8/INSTALL/prerequisites.html
index 4879f9286..00e60df71 100644
--- a/gcc-4.8/INSTALL/prerequisites.html
+++ b/gcc-4.8/INSTALL/prerequisites.html
@@ -3,7 +3,7 @@
<title>Prerequisites for GCC</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Prerequisites for GCC">
-<meta name="generator" content="makeinfo 4.13">
+<meta name="generator" content="makeinfo 4.12">
<link title="Top" rel="top" href="#Top">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
@@ -117,7 +117,7 @@ and up works.
<p>Necessary when regenerating <samp><span class="file">Makefile</span></samp> dependencies in libiberty.
Necessary when regenerating <samp><span class="file">libiberty/functions.texi</span></samp>.
-Necessary when generating manpages from Texinfo manuals.
+Necessary when generating manpages from Texinfo manuals.
Used by various scripts to generate some files included in SVN (mainly
Unicode-related and rarely changing) from source tables.
@@ -174,7 +174,7 @@ installed in your default library search path.
Necessary to build GCC with the Graphite loop optimizations. It can be
downloaded from <a href="ftp://gcc.gnu.org/pub/gcc/infrastructure/">ftp://gcc.gnu.org/pub/gcc/infrastructure/</a> as
<samp><span class="file">cloog-0.18.0.tar.gz</span></samp>. The <samp><span class="option">--with-cloog</span></samp> configure option should
-be used if CLooG is not installed in your default library search path.
+be used if CLooG is not installed in your default library search path.
CLooG needs to be built against ISL 0.11.1. Use <samp><span class="option">--with-isl=system</span></samp>
to direct CLooG to pick up an already installed ISL, otherwise it will use
ISL 0.11.1 as bundled with CLooG. CLooG needs to be configured to use GMP
diff --git a/gcc-4.8/INSTALL/specific.html b/gcc-4.8/INSTALL/specific.html
index caf81b60b..f4cbbe229 100644
--- a/gcc-4.8/INSTALL/specific.html
+++ b/gcc-4.8/INSTALL/specific.html
@@ -3,7 +3,7 @@
<title>Host/Target specific installation notes for GCC</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Host/Target specific installation notes for GCC">
-<meta name="generator" content="makeinfo 4.13">
+<meta name="generator" content="makeinfo 4.12">
<link title="Top" rel="top" href="#Top">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
@@ -47,7 +47,7 @@ GNU Compiler Collection on your machine.
<p>Note that this list of install notes is <em>not</em> a list of supported
hosts or targets. Not all supported hosts and targets are listed
here, only the ones that require host-specific or target-specific
-information have to.
+information have to.
<ul>
<li><a href="#alpha-x-x">alpha*-*-*</a>
@@ -169,7 +169,7 @@ and <code>arm-*-rtemseabi</code>.
<h3 class="heading"><a name="TOC4"></a><a name="avr"></a>avr</h3>
<p>ATMEL AVR-family micro controllers. These are used in embedded
-applications. There are no standard Unix configurations.
+applications. There are no standard Unix configurations.
See &ldquo;AVR Options&rdquo; in the main manual
for the list of supported MCU types.
@@ -194,7 +194,7 @@ can also be obtained from:
<h3 class="heading"><a name="TOC5"></a><a name="bfin"></a>Blackfin</h3>
-<p>The Blackfin processor, an Analog Devices DSP.
+<p>The Blackfin processor, an Analog Devices DSP.
See &ldquo;Blackfin Options&rdquo; in the main manual
<p>More information, and a version of binutils with support for this processor,
@@ -204,7 +204,7 @@ is available at <a href="http://blackfin.uclinux.org">http://blackfin.uclinux.or
<h3 class="heading"><a name="TOC6"></a><a name="cr16"></a>CR16</h3>
-<p>The CR16 CompactRISC architecture is a 16-bit architecture. This architecture is
+<p>The CR16 CompactRISC architecture is a 16-bit architecture. This architecture is
used in embedded applications.
<p>See &ldquo;CR16 Options&rdquo; in the main manual for a list of CR16-specific options.
@@ -256,7 +256,7 @@ and includes all the necessary compilation tools and libraries.
<h3 class="heading"><a name="TOC9"></a><a name="epiphany_002dx_002delf"></a>epiphany-*-elf</h3>
-<p>Adapteva Epiphany.
+<p>Adapteva Epiphany.
This configuration is intended for embedded systems.
<p><hr />
@@ -339,7 +339,7 @@ build many C++ applications.
<p>There are two default scheduling models for instructions. These are
PROCESSOR_7100LC and PROCESSOR_8000. They are selected from the pa-risc
-architecture specified for the target machine when configuring.
+architecture specified for the target machine when configuring.
PROCESSOR_8000 is the default. PROCESSOR_7100LC is selected when
the target is a &lsquo;<samp><span class="samp">hppa1*</span></samp>&rsquo; machine.
@@ -350,7 +350,7 @@ TARGET_SCHED_DEFAULT can be defined in BOOT_CFLAGS if a different
default scheduling model is desired.
<p>As of GCC 4.0, GCC uses the UNIX 95 namespace for HP-UX 10.10
-through 11.00, and the UNIX 98 namespace for HP-UX 11.11 and later.
+through 11.00, and the UNIX 98 namespace for HP-UX 11.11 and later.
This namespace change might cause problems when bootstrapping with
an earlier version of GCC or the HP compiler as essentially the same
namespace is required for an entire build. This problem can be avoided
@@ -402,20 +402,20 @@ command.
<p>There are several possible approaches to building the distribution.
Binutils can be built first using the HP tools. Then, the GCC
distribution can be built. The second approach is to build GCC
-first using the HP tools, then build binutils, then rebuild GCC.
+first using the HP tools, then build binutils, then rebuild GCC.
There have been problems with various binary distributions, so it
is best not to start from a binary distribution.
<p>On 64-bit capable systems, there are two distinct targets. Different
installation prefixes must be used if both are to be installed on
the same system. The &lsquo;<samp><span class="samp">hppa[1-2]*-hp-hpux11*</span></samp>&rsquo; target generates code
-for the 32-bit PA-RISC runtime architecture and uses the HP linker.
+for the 32-bit PA-RISC runtime architecture and uses the HP linker.
The &lsquo;<samp><span class="samp">hppa64-hp-hpux11*</span></samp>&rsquo; target generates 64-bit code for the
PA-RISC 2.0 architecture.
<p>The script config.guess now selects the target type based on the compiler
detected during configuration. You must define <samp><span class="env">PATH</span></samp> or <samp><span class="env">CC</span></samp> so
-that configure finds an appropriate compiler for the initial bootstrap.
+that configure finds an appropriate compiler for the initial bootstrap.
When <samp><span class="env">CC</span></samp> is used, the definition should contain the options that are
needed whenever <samp><span class="env">CC</span></samp> is used.
@@ -450,7 +450,7 @@ the currently recommended linker patch for your system.
<p>The patches are necessary for the support of weak symbols on the
32-bit port, and for the running of initializers and finalizers. Weak
symbols are implemented using SOM secondary definition symbols. Prior
-to HP-UX 11, there are bugs in the linker support for secondary symbols.
+to HP-UX 11, there are bugs in the linker support for secondary symbols.
The patches correct a problem of linker core dumps creating shared
libraries containing secondary symbols, as well as various other
linking issues involving secondary symbols.
@@ -494,7 +494,7 @@ libstdc++-v3 documentation.
<h3 class="heading"><a name="TOC16"></a><a name="ix86_002dx_002dlinux"></a>i?86-*-linux*</h3>
-<p>As of GCC 3.3, binutils 2.13.1 or later is required for this platform.
+<p>As of GCC 3.3, binutils 2.13.1 or later is required for this platform.
See <a href="http://gcc.gnu.org/PR10877">bug 10877</a> for more information.
<p>If you receive Signal 11 errors when building on GNU/Linux, then it is
@@ -505,7 +505,7 @@ found on <a href="http://www.bitwizard.nl/sig11/">www.bitwizard.nl</a>.
<h3 class="heading"><a name="TOC17"></a><a name="ix86_002dx_002dsolaris29"></a>i?86-*-solaris2.9</h3>
-<p>The Sun assembler in Solaris 9 has several bugs and limitations.
+<p>The Sun assembler in Solaris 9 has several bugs and limitations.
While GCC works around them, several features are missing, so it is
<!-- FIXME: which ones? -->
recommended to use the GNU assembler instead. There is no bundled
@@ -564,9 +564,9 @@ later.
<p>None of the following versions of GCC has an ABI that is compatible
with any of the other versions in this list, with the exception that
Red Hat 2.96 and Trillian 000171 are compatible with each other:
-3.1, 3.0.2, 3.0.1, 3.0, Red Hat 2.96, and Trillian 000717.
-This primarily affects C++ programs and programs that create shared libraries.
-GCC 3.1 or later is recommended for compiling linux, the kernel.
+3.1, 3.0.2, 3.0.1, 3.0, Red Hat 2.96, and Trillian 000717.
+This primarily affects C++ programs and programs that create shared libraries.
+GCC 3.1 or later is recommended for compiling linux, the kernel.
As of version 3.1 GCC is believed to be fully ABI compliant, and hence no
more major ABI changes are expected.
@@ -580,7 +580,7 @@ the option <samp><span class="option">--with-gnu-as</span></samp> may be necessa
<p>The GCC libunwind library has not been ported to HPUX. This means that for
GCC versions 3.2.3 and earlier, <samp><span class="option">--enable-libunwind-exceptions</span></samp>
-is required to build GCC. For GCC 3.3 and later, this is the default.
+is required to build GCC. For GCC 3.3 and later, this is the default.
For gcc 3.4.3 and later, <samp><span class="option">--enable-libunwind-exceptions</span></samp> is
removed and the system libunwind library will always be used.
@@ -589,7 +589,7 @@ removed and the system libunwind library will always be used.
<h3 class="heading"><a name="TOC21"></a><a name="x_002dibm_002daix"></a>*-ibm-aix*</h3>
-<p>Support for AIX version 3 and older was discontinued in GCC 3.4.
+<p>Support for AIX version 3 and older was discontinued in GCC 3.4.
Support for AIX version 4.2 and older was discontinued in GCC 4.5.
<p>&ldquo;out of memory&rdquo; bootstrap failures may indicate a problem with
@@ -686,7 +686,7 @@ executable.
<p>AIX 4.3 utilizes a &ldquo;large format&rdquo; archive to support both 32-bit and
64-bit object modules. The routines provided in AIX 4.3.0 and AIX 4.3.1
-to parse archive libraries did not handle the new format correctly.
+to parse archive libraries did not handle the new format correctly.
These routines are used by GCC and result in error messages during
linking such as &ldquo;not a COFF file&rdquo;. The version of the routines shipped
with AIX 4.3.1 should work for a 32-bit environment. The <samp><span class="option">-g</span></samp>
@@ -736,28 +736,28 @@ applications. There are no standard Unix configurations.
<h3 class="heading"><a name="TOC23"></a><a name="lm32_002dx_002delf"></a>lm32-*-elf</h3>
-<p>Lattice Mico32 processor.
+<p>Lattice Mico32 processor.
This configuration is intended for embedded systems.
<p><hr />
<h3 class="heading"><a name="TOC24"></a><a name="lm32_002dx_002duclinux"></a>lm32-*-uclinux</h3>
-<p>Lattice Mico32 processor.
+<p>Lattice Mico32 processor.
This configuration is intended for embedded systems running uClinux.
<p><hr />
<h3 class="heading"><a name="TOC25"></a><a name="m32c_002dx_002delf"></a>m32c-*-elf</h3>
-<p>Renesas M32C processor.
+<p>Renesas M32C processor.
This configuration is intended for embedded systems.
<p><hr />
<h3 class="heading"><a name="TOC26"></a><a name="m32r_002dx_002delf"></a>m32r-*-elf</h3>
-<p>Renesas M32R processor.
+<p>Renesas M32R processor.
This configuration is intended for embedded systems.
<p><hr />
@@ -801,14 +801,14 @@ both of which were ABI changes.
<h3 class="heading"><a name="TOC29"></a><a name="mep_002dx_002delf"></a>mep-*-elf</h3>
-<p>Toshiba Media embedded Processor.
+<p>Toshiba Media embedded Processor.
This configuration is intended for embedded systems.
<p><hr />
<h3 class="heading"><a name="TOC30"></a><a name="microblaze_002dx_002delf"></a>microblaze-*-elf</h3>
-<p>Xilinx MicroBlaze processor.
+<p>Xilinx MicroBlaze processor.
This configuration is intended for embedded systems.
<p><hr />
@@ -963,7 +963,7 @@ the PSIM simulator.
<h3 class="heading"><a name="TOC45"></a><a name="rl78_002dx_002delf"></a>rl78-*-elf</h3>
-<p>The Renesas RL78 processor.
+<p>The Renesas RL78 processor.
This configuration is intended for embedded systems.
<p><hr />
@@ -1051,7 +1051,7 @@ are known to work as well. Note that your mileage may vary
if you use a combination of the GNU tools and the Sun tools: while the
combination GNU <samp><span class="command">as</span></samp> + Sun <samp><span class="command">ld</span></samp> should reasonably work,
the reverse combination Sun <samp><span class="command">as</span></samp> + GNU <samp><span class="command">ld</span></samp> may fail to
-build or cause memory corruption at runtime in some cases for C++ programs.
+build or cause memory corruption at runtime in some cases for C++ programs.
<!-- FIXME: still? -->
GNU <samp><span class="command">ld</span></samp> usually works as well, although the version included in
Solaris 10 cannot be used due to several bugs. Again, the current
@@ -1148,13 +1148,13 @@ compiler. This is Sun bug 4974440. This is fixed with patch 112760-07.
<p>GCC 3.4 changed the default debugging format from Stabs to DWARF-2 for
32-bit code on Solaris 7 and later. If you use the Sun assembler, this
change apparently runs afoul of Sun bug 4910101 (which is referenced as
-an x86-only problem by Sun, probably because they do not use DWARF-2).
+an x86-only problem by Sun, probably because they do not use DWARF-2).
A symptom of the problem is that you cannot compile C++ programs like
<samp><span class="command">groff</span></samp> 1.19.1 without getting messages similar to the following:
<pre class="smallexample"> ld: warning: relocation error: R_SPARC_UA32: ...
- external symbolic relocation against non-allocatable section
- .debug_info cannot be processed at runtime: relocation ignored.
+ external symbolic relocation against non-allocatable section
+ .debug_info cannot be processed at runtime: relocation ignored.
</pre>
<p class="noindent">To work around this problem, compile with <samp><span class="option">-gstabs+</span></samp> instead of
plain <samp><span class="option">-g</span></samp>.
@@ -1175,7 +1175,7 @@ not that of GMP or MPFR or MPC). For example on a Solaris 9 system:
thread-local storage (TLS). A typical error message is
<pre class="smallexample"> ld: fatal: relocation error: R_SPARC_TLS_LE_HIX22: file /var/tmp//ccamPA1v.o:
- symbol &lt;unknown&gt;: bad symbol type SECT: symbol type must be TLS
+ symbol &lt;unknown&gt;: bad symbol type SECT: symbol type must be TLS
</pre>
<p class="noindent">This bug is fixed in Sun patch 118683-03 or later.
@@ -1237,8 +1237,8 @@ binutils-2.22 or newer.
<h3 class="heading"><a name="TOC60"></a><a name="x_002dx_002dvxworks"></a>*-*-vxworks*</h3>
<p>Support for VxWorks is in flux. At present GCC supports <em>only</em> the
-very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC.
-We welcome patches for other architectures supported by VxWorks 5.5.
+very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC.
+We welcome patches for other architectures supported by VxWorks 5.5.
Support for VxWorks AE would also be welcome; we believe this is merely
a matter of writing an appropriate &ldquo;configlette&rdquo; (see below). We are
not interested in supporting older, a.out or COFF-based, versions of
@@ -1246,7 +1246,7 @@ VxWorks in GCC 3.
<p>VxWorks comes with an older version of GCC installed in
<samp><var>$WIND_BASE</var><span class="file">/host</span></samp>; we recommend you do not overwrite it.
-Choose an installation <var>prefix</var> entirely outside <var>$WIND_BASE</var>.
+Choose an installation <var>prefix</var> entirely outside <var>$WIND_BASE</var>.
Before running <samp><span class="command">configure</span></samp>, create the directories <samp><var>prefix</var></samp>
and <samp><var>prefix</var><span class="file">/bin</span></samp>. Link or copy the appropriate assembler,
linker, etc. into <samp><var>prefix</var><span class="file">/bin</span></samp>, and set your <var>PATH</var> to
@@ -1272,7 +1272,7 @@ VxWorks will incorporate this module.)
<h3 class="heading"><a name="TOC61"></a><a name="x86_002d64_002dx_002dx"></a>x86_64-*-*, amd64-*-*</h3>
<p>GCC supports the x86-64 architecture implemented by the AMD64 processor
-(amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD.
+(amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD.
On GNU/Linux the default is a bi-arch compiler which is able to generate
both 64-bit x86-64 and 32-bit x86 code (via the <samp><span class="option">-m32</span></samp> switch).
@@ -1340,19 +1340,19 @@ and which C libraries are used.
<ul>
<li>Cygwin <a href="#x-x-cygwin">*-*-cygwin</a>: Cygwin provides a user-space
-Linux API emulation layer in the Win32 subsystem.
+Linux API emulation layer in the Win32 subsystem.
<li>Interix <a href="#x-x-interix">*-*-interix</a>: The Interix subsystem
-provides native support for POSIX.
+provides native support for POSIX.
<li>MinGW <a href="#x-x-mingw32">*-*-mingw32</a>: MinGW is a native GCC port for
-the Win32 subsystem that provides a subset of POSIX.
+the Win32 subsystem that provides a subset of POSIX.
<li>MKS i386-pc-mks: NuTCracker from MKS. See
-<a href="http://www.mkssoftware.com/">http://www.mkssoftware.com/</a> for more information.
+<a href="http://www.mkssoftware.com/">http://www.mkssoftware.com/</a> for more information.
</ul>
<h4 class="subheading"><a name="TOC68"></a>Intel 64-bit versions</h4>
<p>GCC contains support for x86-64 using the mingw-w64
-runtime library, available from <a href="http://mingw-w64.sourceforge.net/">http://mingw-w64.sourceforge.net/</a>.
+runtime library, available from <a href="http://mingw-w64.sourceforge.net/">http://mingw-w64.sourceforge.net/</a>.
This library should be used with the target triple x86_64-pc-mingw32.
<p>Presently Windows for Itanium is not supported.
@@ -1405,7 +1405,7 @@ the Win32 subsystem. This target was last known to work in GCC 3.3.
<h3 class="heading"><a name="TOC73"></a><a name="x_002dx_002dmingw32"></a>*-*-mingw32</h3>
-<p>GCC will build with and support only MinGW runtime 3.12 and later.
+<p>GCC will build with and support only MinGW runtime 3.12 and later.
Earlier versions of headers are incompatible with the new default semantics
of <code>extern inline</code> in <code>-std=c99</code> and <code>-std=gnu99</code> modes.
diff --git a/gcc-4.8/INSTALL/test.html b/gcc-4.8/INSTALL/test.html
index 1a104438e..8bc6b29a2 100644
--- a/gcc-4.8/INSTALL/test.html
+++ b/gcc-4.8/INSTALL/test.html
@@ -3,7 +3,7 @@
<title>Installing GCC: Testing</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Installing GCC: Testing">
-<meta name="generator" content="makeinfo 4.13">
+<meta name="generator" content="makeinfo 4.12">
<link title="Top" rel="top" href="#Top">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
@@ -44,10 +44,10 @@ license is included in the section entitled "GNU Free Documentation License".
Before you install GCC, we encourage you to run the testsuites and to
compare your results with results from a similar configuration that have
been submitted to the
-<a href="http://gcc.gnu.org/ml/gcc-testresults/">gcc-testresults mailing list</a>.
+<a href="http://gcc.gnu.org/ml/gcc-testresults/">gcc-testresults mailing list</a>.
Some of these archived results are linked from the build status lists
at <a href="http://gcc.gnu.org/buildstat.html">http://gcc.gnu.org/buildstat.html</a>, although not everyone who
-reports a successful build runs the testsuites and submits the results.
+reports a successful build runs the testsuites and submits the results.
This step is optional and may require you to download additional software,
but it can give you confidence in your new GCC installation or point out
problems before you install and start using your new GCC.
@@ -136,13 +136,13 @@ The following will run each testsuite eight times using the &lsquo;<samp><span c
target, as if you had specified all possible combinations yourself:
<pre class="smallexample"> --target_board='arm-sim/-mhard-float/-O1 \
- arm-sim/-mhard-float/-O2 \
- arm-sim/-mhard-float/-O3 \
- arm-sim/-mhard-float \
- arm-sim/-msoft-float/-O1 \
- arm-sim/-msoft-float/-O2 \
- arm-sim/-msoft-float/-O3 \
- arm-sim/-msoft-float'
+ arm-sim/-mhard-float/-O2 \
+ arm-sim/-mhard-float/-O3 \
+ arm-sim/-mhard-float \
+ arm-sim/-msoft-float/-O1 \
+ arm-sim/-msoft-float/-O2 \
+ arm-sim/-msoft-float/-O3 \
+ arm-sim/-msoft-float'
</pre>
<p>They can be combined as many times as you wish, in arbitrary ways. This
list:
diff --git a/gcc-4.8/LAST_UPDATED b/gcc-4.8/LAST_UPDATED
index 74b8af7c4..f22c5efd2 100644
--- a/gcc-4.8/LAST_UPDATED
+++ b/gcc-4.8/LAST_UPDATED
@@ -1 +1 @@
-Obtained from SVN: tags/gcc_4_8_1_release revision 199526
+Obtained from SVN: tags/gcc_4_8_3_release revision 210800
diff --git a/gcc-4.8/MD5SUMS b/gcc-4.8/MD5SUMS
index d67f9d898..c94f2cb44 100644
--- a/gcc-4.8/MD5SUMS
+++ b/gcc-4.8/MD5SUMS
@@ -1,5 +1,5 @@
# This file contains the MD5 checksums of the files in the
-# gcc-4.8.1.tar.bz2 tarball.
+# gcc-4.8.3.tar.bz2 tarball.
#
# Besides verifying that all files in the tarball were correctly expanded,
# it also can be used to determine if any files have changed since the
@@ -7,7 +7,7 @@
#
# Suggested usage:
# md5sum -c MD5SUMS | grep -v "OK$"
-
+#
1340a34b2615eff0c668e888f4539b82 .gitignore
8c00452ef1e298846493ec8b239f93e2 ABOUT-NLS
59530bdf33659b29e73d4adb9f9f6552 COPYING
@@ -15,30 +15,30 @@
fe60d87048567d4fe8c8a0ed2448bcc8 COPYING.RUNTIME
d32239bcb673463ab874e80d47fae504 COPYING3
6a6a8e020838b23406c81b19c1d46df6 COPYING3.LIB
-4c2680bb17a0ff56a2255cff6d7c2b52 ChangeLog
+83a45748148a28b8db01a25e4ff23b8b ChangeLog
09538b708302f1735f6fa05b622ecf5e ChangeLog.tree-ssa
79ef16e405f5873970e04cee49091ff8 INSTALL/README
-6e71fef68aceffc9bd1ca1d67b4a1a3e INSTALL/binaries.html
-c4f840ac790a5f400ba786135ffaa6b3 INSTALL/build.html
-6147a90ce41a275d274eb6354a6eca3c INSTALL/configure.html
-4b66d729f8d0d5d231d484f7d8e3e869 INSTALL/download.html
-b5c00e6e01eede2193fcb533a4025bb1 INSTALL/finalinstall.html
-5a03634e028ad09a5d057c846670cacd INSTALL/gfdl.html
-da731ed85630b74b28d55eb6c0b87b8a INSTALL/index.html
-ac167c1db25300d9640e17215415d201 INSTALL/old.html
-717ea1223e220560d2e774c17b52fd62 INSTALL/prerequisites.html
-3e67a9b9bf1e7d7f9a607247e49e3ff9 INSTALL/specific.html
-79849f69e8547772edfc9d639f24d8e5 INSTALL/test.html
-d96713329c67fe7aa759708fed464a8e LAST_UPDATED
+3b16322d5f7ab358199f36344db2f14c INSTALL/binaries.html
+6d2d249398f3e5cd9d1def4bc25335e9 INSTALL/build.html
+f6c14257a1883329fb409da16a286e3b INSTALL/configure.html
+b0c0b499c237bde96fca8ae327827a20 INSTALL/download.html
+42acaf5b9986d00a3980703017bc209a INSTALL/finalinstall.html
+cf5eb40dd0cfa55c4997b437ed9d949c INSTALL/gfdl.html
+d8f1b212050c5957479e21eeae08e8c0 INSTALL/index.html
+285ec9880ec5ddd174735715a64a6fbc INSTALL/old.html
+898b7611150477475da227e42e84354a INSTALL/prerequisites.html
+c5e4bab0ff014dd5803a8cf7d65773b7 INSTALL/specific.html
+fd26c25661c41c06199890dfac498d3b INSTALL/test.html
+52c32e20bc848547ad1806a0380b1098 LAST_UPDATED
98dba0586988a9aa76768f50ece2dc21 MAINTAINERS
9778e247c16e7f5a4de9f623068dc8ab Makefile.def
3ef32dc362ce6ac47f2882fe0334f79f Makefile.in
6b571c1e8f90bb088989c4350d479485 Makefile.tpl
-06739d5bd6f66d2bd50f0adc9b5aa358 NEWS
+ef6bde436acb6ecab805d835b6f162b6 NEWS
80d26bc3b1ad4f6969a96a24c9181bf5 README
b510a5285eb05298b5f3d9f5ae920588 boehm-gc/AmigaOS.c
2caafacabf758bb76a9dfce1fc544b97 boehm-gc/BCC_MAKEFILE
-df76f1f4fd4c031564c98d23bb538a50 boehm-gc/ChangeLog
+a4967175d1b1f1bf84d483aeff581f20 boehm-gc/ChangeLog
c18075e3729cd116028480307a8e845d boehm-gc/EMX_MAKEFILE
3b7cc3be9ed3c2135bbda990e8a69303 boehm-gc/MacOS.c
5cf7764626b7dd7272b2fe11403d1b6a boehm-gc/MacProjects.sit.hqx
@@ -47,11 +47,11 @@ e9d4bf13bdd11f9590788db857faf080 boehm-gc/Mac_files/MacOS_Test_config.h
f5f78130ed0450ba9503ca3122244195 boehm-gc/Mac_files/dataend.c
548c55b112b5d4766c7f87be96f79df2 boehm-gc/Mac_files/datastart.c
8ef74141b1fb9a289228c259044f4934 boehm-gc/Makefile.DLLs
-e3bfbe6fffb15626da8479bb70f75831 boehm-gc/Makefile.am
+c2d3a0b7bfa98d16040556aebd571b0e boehm-gc/Makefile.am
ee5852b604978c4bc485f3503799bea5 boehm-gc/Makefile.direct
dfbca9ef8eed29378fa34ab88a644c95 boehm-gc/Makefile.dist
a50d3b2e14f6cf62519f1f7e557e7221 boehm-gc/Makefile.dj
-a4b5833111a219fcf5546577ed412d14 boehm-gc/Makefile.in
+42f4ec798da512961041ba673cd6d3d2 boehm-gc/Makefile.in
bdf166ac9229e7e18158c3c84eb77915 boehm-gc/NT_MAKEFILE
4c48a2eb34d18243e169564ded1eda87 boehm-gc/NT_STATIC_THREADS_MAKEFILE
bc4287e5afadf75c1683ec57f0db80d0 boehm-gc/NT_THREADS_MAKEFILE
@@ -68,7 +68,7 @@ ccc4e9a52aa294110431eb9aead00666 boehm-gc/alpha_mach_dep.S
a2ed02a22235b4f27ab644ce4f3a9268 boehm-gc/blacklst.c
b19b7b67bff97d0bceba827fedb07d32 boehm-gc/callprocs
32e4857b7b4dbc4bc68e321f70f65dd4 boehm-gc/checksums.c
-9455269d820372c27a1def271bfd45db boehm-gc/configure
+818ba4dc5de904ce6e9502e023178a0f boehm-gc/configure
142143dc0570c46cdaa2c26a9208b324 boehm-gc/configure.ac
56328341fbfbe66715779252aa61943e boehm-gc/configure.host
61ccb6486d45cc6d99201cc19f3c579c boehm-gc/cord/cordbscs.c
@@ -162,7 +162,7 @@ deb33a288bb6bee23ac46c1e0717708e boehm-gc/include/private/darwin_stop_world.h
b68061acdca5298c1308c16bd0c14d3b boehm-gc/include/private/gc_locks.h
4f7c11f389c4b9cc843d53da0534fc0e boehm-gc/include/private/gc_pmark.h
770d2b9d5645f6eed368674166dfca96 boehm-gc/include/private/gc_priv.h
-b9d67bc203e6502254d4d0461ac3a978 boehm-gc/include/private/gcconfig.h
+505f3a6e48ef91c7ae74099ca247f06c boehm-gc/include/private/gcconfig.h
5549846c2f7dcd83f8550fd307f86c25 boehm-gc/include/private/pthread_stop_world.h
c6d1a299be177e91e40ec5a8c3de616b boehm-gc/include/private/pthread_support.h
a60de8578b76b4e565780c5ea9173bfc boehm-gc/include/private/specific.h
@@ -214,10 +214,10 @@ b04a1232318128ebd7c630fca10d02e5 boehm-gc/threads.mk.in
507b81a9cd1207556ad38357327dbeb9 boehm-gc/win32_threads.c
0d3c238b02b9d0c1c32347dea7fc490d compile
4adca919c67d00b948bf581991b79bbf config-ml.in
-9cd4b6d4d78c745db41c485daef7c56c config.guess
+eea34cf893bb060ee20189e256a8065a config.guess
040359150cf11493f973a46d8a25b06b config.rpath
-3cb710e658354c2f7e93ecd437c54a53 config.sub
-ff1577ed22df324711d6307d5b2d7868 config/ChangeLog
+9e38dc3cc2b4e471ea192c8984fb0cd1 config.sub
+53c8c02c3b133479295ff8a684d8af60 config/ChangeLog
0fcd4badfe2a2191778bdf5ab94aa40c config/acinclude.m4
9238d23c68259d195b332db71892d242 config/acx.m4
6b030f5cf640bdd401ea739f54a667f8 config/asmcfi.m4
@@ -297,9 +297,9 @@ b0d2f2e937c16091b330451e6883c4b6 config/tcl.m4
b6afa5c33fb98edfaf591dd38d198b0d config/warnings.m4
7ef51b0adb98e5c5f7aba46d2c7293f1 config/weakref.m4
e249d18c447a8372fd1ed5f084284d6b config/zlib.m4
-bcbc4ea392d20517126c03fb8734d3e1 configure
-a08f967203f9193ff9770f52755b7bcc configure.ac
-3d5d71e7a92ca7c29d4ac2ec0e41fd36 contrib/ChangeLog
+3ba1df961222c2c2164adb7b93feec90 configure
+24bd5c47cd8cd47278faa0679a6a66f1 configure.ac
+3aa11ff5a4c865ba37248ac5aabf9111 contrib/ChangeLog
7af8d2979bf1a7cfa88e30d05fa22be2 contrib/ChangeLog.tree-ssa
e0ea80d7094bf66610f2f60db444f9a1 contrib/analyze_brprob
998f0112578f801ac84646f060e18f89 contrib/check_GNU_style.sh
@@ -321,7 +321,7 @@ db03e57377f9eb202b7b783eb81fe40d contrib/filter_knr2ansi.pl
2e831f673656f3052f95930c3203cce9 contrib/filter_params.pl
480dbaa133b74e68d41762d6596bd034 contrib/gcc.doxy
55236e85d8087042189b701cd05d84be contrib/gcc_build
-4b795bcaeeb1452d0fc2fa81febf9669 contrib/gcc_update
+4e6283350284161af216a78ac414a9ed contrib/gcc_update
fd85ae267c18a59db529428f0e7ba27d contrib/gennews
59304fc08afa489baa6b920cc76dc625 contrib/gthr_supp_vxw_5x.c
fa945bac89ee68b410027dcfe1312f4b contrib/index-prop
@@ -331,7 +331,7 @@ fa945bac89ee68b410027dcfe1312f4b contrib/index-prop
0fb5c8c3cd465d8bd57b55b2548c683a contrib/paranoia.cc
9083c56c1c89c5bec355a27f78e49807 contrib/patch_tester.sh
87a19b40fbd220938cf6c23c42c255e2 contrib/prepare_patch.sh
-c9e4ffca7d2973fc13882e1a0d789cca contrib/reghunt/ChangeLog
+c4abda7ff13908d37fff4b1e9358618b contrib/reghunt/ChangeLog
cf247a580e49d212518de409793db0a8 contrib/reghunt/bin/gcc-build-full
724e70ea3e80f87f2a201bbe2f1eef37 contrib/reghunt/bin/gcc-build-simple
3f2318bae7562a4ad1639e686916a545 contrib/reghunt/bin/gcc-cleanup
@@ -390,7 +390,7 @@ f251d49dd87647250fcd74dd50b7835f contrib/reghunt/examples/common.config
e2829fc4af4f433a6a328a62d5ce8066 contrib/reghunt/examples/reg-watch
afd863c2ec84c906e20f9b9787b1f0fe contrib/reghunt/examples/reg-watch.awk
8955535523d4b5f48006bcb851ba9b4b contrib/reghunt/examples/testall
-7d9110d91d43f91d142a92ce944c6cbb contrib/regression/ChangeLog
+e5933be4d4fd364e2271b0ace3149524 contrib/regression/ChangeLog
30553bfced1b2b46bf7ca01ef6ba69d1 contrib/regression/GCC_Regression_Tester.wdgt/Default.png
ad38ddd771df222eb9d413e3c7f6a751 contrib/regression/GCC_Regression_Tester.wdgt/Icon.png
777bd286c147cc02861811f66b9a4440 contrib/regression/GCC_Regression_Tester.wdgt/Info.plist
@@ -414,7 +414,7 @@ e00fa8f7dd72b80ca5a64130e85fe4f4 contrib/uninclude
6ed51d5edccbae74c6500732f8a40540 contrib/update-copyright.py
7cb42cbdf8becd280d1e16191416fb62 contrib/warn_summary
21504de31981a67b5b93b265029d1865 depcomp
-1158d343479491e47ed236d932e64eea fixincludes/ChangeLog
+8ce894eff625e762189797f9bd3e4fa7 fixincludes/ChangeLog
8150ff8dbd50833dcd358501d665da10 fixincludes/Makefile.in
4eb8fdda3b3e303c7aa822d341495822 fixincludes/README
455903ad4ff71fa5c5340ef7ae41a0e6 fixincludes/README-fixinc
@@ -427,13 +427,13 @@ e06760e2aaa65a20f4f201cf50e62a16 fixincludes/fixfixes.c
497da58c4b47627a33f754b61f6eb051 fixincludes/fixinc.in
01aed58f85fe12db3071f34a29e54c9b fixincludes/fixincl.c
33eafc45c2f2fff3597f318ca0dfb5a1 fixincludes/fixincl.tpl
-54eff198bbd1a942d7f20a09711e7066 fixincludes/fixincl.x
+b7e036829920b37ab4b34cd43ee73221 fixincludes/fixincl.x
47da6e634225e1667c26a71bcf234bfa fixincludes/fixlib.c
440bb79da40ac194e1c91b5ae2754eb1 fixincludes/fixlib.h
5b2c1fd3ef9d44fb6beb1a0d45ddd533 fixincludes/fixopts.c
ed1415e9dbc8f421fd9288bde0d90ad1 fixincludes/fixtests.c
6df145c7cea1e2099cf97a0d83564aca fixincludes/genfixes
-b7fd413e11237c05919dfacb7eb88aa3 fixincludes/inclhack.def
+692c5c35ffa16845dc090956e036ed05 fixincludes/inclhack.def
6e093a147c4e377aa751d74c82d0bd87 fixincludes/mkfixinc.sh
5f9960cfe65b2e6bef658f770e52dfef fixincludes/mkheaders.in
3aa0563cd682ee61ecd9eb6eea0b0bce fixincludes/procopen.c
@@ -469,7 +469,7 @@ bfb58e3983fc133c965e434e57aed732 fixincludes/tests/base/ia64/sys/getppdp.h
833e9408a49784184bee7981d665c911 fixincludes/tests/base/io-quotes-def-1.h
a11561f51aa57e84e571f2073fb6bf60 fixincludes/tests/base/ioLib.h
5bf45a2b904d0885d71c55387cf3e8f2 fixincludes/tests/base/iso/math_c99.h
-42cc91f317475675d22133b73a59bad2 fixincludes/tests/base/iso/math_iso.h
+56aa16fdf3be46d7dc2b462246495f82 fixincludes/tests/base/iso/math_iso.h
8fc57cb4314d0f1fc5a2fcf839f50893 fixincludes/tests/base/iso/setjmp_iso.h
5b48936adb644e9aa4b78d21297cc193 fixincludes/tests/base/iso/stdio_iso.h
e1bd28539aceeab13a3028da02f8c4ae fixincludes/tests/base/iso/stdlib_iso.h
@@ -546,12 +546,12 @@ a5e817d35ded04a0fb03999b50c0e89e fixincludes/tests/base/tgmath.h
955462b555900ecd3934223c64e21fa7 fixincludes/tests/base/types/vxTypesBase.h
c78e762f2c91f2af991feda7d3d7f4b2 fixincludes/tests/base/unistd.h
ae1ca33497c87ae3e6d4558a8e5c6583 gcc/ABOUT-GCC-NLS
-f2355ebd5f1d98c840c777041e8bf6eb gcc/BASE-VER
+78ac1255d9cec0b766784a50cd6e4ef6 gcc/BASE-VER
59530bdf33659b29e73d4adb9f9f6552 gcc/COPYING
a916467b91076e631dd8edb7424769c7 gcc/COPYING.LIB
d32239bcb673463ab874e80d47fae504 gcc/COPYING3
6a6a8e020838b23406c81b19c1d46df6 gcc/COPYING3.LIB
-2eeca8fdbd518bb680ba824825218b86 gcc/ChangeLog
+2c49440c192cf87600d781123108126c gcc/ChangeLog
a3b63c675afa7a655cc2bfa8a907af79 gcc/ChangeLog-1997
d9a88529352a010253c2e8fb1ed6023b gcc/ChangeLog-1998
240f08f81cb4699e8b49347db38233db gcc/ChangeLog-1999
@@ -574,19 +574,19 @@ fb3fadb88e1d2b3b640cfaaa5ff11780 gcc/ChangeLog.graphite
3eb07e0b2e542409bf73d359f7f65609 gcc/ChangeLog.ptr
e13638e26743ba41e6011b76cc00d9a9 gcc/ChangeLog.tree-ssa
739ab47f6425bcea1d05e4fc0542de54 gcc/ChangeLog.tuples
-9e3fc21931789765db3e02888117aabc gcc/DATESTAMP
+378f4ecc02db13f628092c5c38e07c38 gcc/DATESTAMP
d41d8cd98f00b204e9800998ecf8427e gcc/DEV-PHASE
eb92e1ff5e982ca07e173e0eb286d243 gcc/FSFChangeLog
30e1e33411566388b3164558482dc5e6 gcc/FSFChangeLog.10
36698274bb69e2ada20f5cc434f3caa5 gcc/FSFChangeLog.11
6ece70576d3e44730c59ec687127ff1b gcc/LANGUAGES
-ab4445ca7d9f5368fc4a9196403e740b gcc/Makefile.in
+08f613fa788bc360750eb984f7d02dd7 gcc/Makefile.in
ec6799501b2eb2923d5de6a66169dbd2 gcc/ONEWS
68272a338eaa43b3076addba938a8c2c gcc/README.Portability
edaf2016f8d373efc2a2690dee7f6b98 gcc/acinclude.m4
3b531d1851da8752f541b0cc0f9b5abc gcc/aclocal.m4
30995d78221b41ce62c92b2f601b4ebb gcc/ada/9drpc.adb
-bab898ed180309895fdfc596f9702a57 gcc/ada/ChangeLog
+17d0d147dafb734bc5b3053864e55652 gcc/ada/ChangeLog
683be0b07dc4f64f118fd5e8ae9cb30d gcc/ada/ChangeLog-2001
7aff25efb203be4136b8776cdc812956 gcc/ada/ChangeLog-2002
cd2379152000f40157d349018fb9364d gcc/ada/ChangeLog-2003
@@ -1198,7 +1198,7 @@ b7ba7dea0723e4c5030b408e716eaea6 gcc/ada/aspects.ads
8024cd2aa6211a729b1c26837ab54aa0 gcc/ada/atree.h
32be50d674a4fb546a7e63ae09a84ac3 gcc/ada/aux-io.c
bbec592a07f6a983f9326e40c2db868b gcc/ada/back_end.adb
-f40d0c1fe9dd13724e8e6b0e50d7fb5b gcc/ada/back_end.ads
+4bafabcec625799eb4edbe33f96f9935 gcc/ada/back_end.ads
f231ca11e99d122020837317d65c9d77 gcc/ada/bcheck.adb
98cd146fde62237f7d4d21fe1b9765c5 gcc/ada/bcheck.ads
af19ff1114744fb03958c51a25105d2e gcc/ada/binde.adb
@@ -1227,7 +1227,7 @@ fbd23958a6d5c4207e39317e708436ac gcc/ada/config-lang.in
e34a03897482201c5244c56338ab1659 gcc/ada/csets.adb
9af07555e86e92295201752e93a58338 gcc/ada/csets.ads
00b3159bd154361d88cd7ed3f6673057 gcc/ada/csinfo.adb
-524e12d1282e2a878a5da3f81b1c07bf gcc/ada/cstand.adb
+0dda3bbf084b59a9c5bf3c0c8d39f3a8 gcc/ada/cstand.adb
0626c2b2827a691f6919c4f32956b44d gcc/ada/cstand.ads
8f229e779017f991851172588dbbb361 gcc/ada/cstreams.c
61437e1d9c8c1109b11ccc86cad3c393 gcc/ada/ctrl_c.c
@@ -1550,22 +1550,22 @@ f459c88852baf5a8d82a6acef1473c32 gcc/ada/g-wispch.adb
d7eca93022b3adc8f4a61dbe910e95d2 gcc/ada/g-zspche.adb
b45654446bc74bb68ae4adef78906e9b gcc/ada/g-zspche.ads
698b837b776abdf33504479af8506a50 gcc/ada/g-zstspl.ads
-10169e386a8f3569ae8eefa1584a7158 gcc/ada/gcc-interface/Make-lang.in
-c568a5224fae3582bcbf7aa222b714ce gcc/ada/gcc-interface/Makefile.in
+721c8bf6fabc106945d42626f54deaaf gcc/ada/gcc-interface/Make-lang.in
+e395c34cf5c231a62e57e1cfffbf587a gcc/ada/gcc-interface/Makefile.in
d47cdfac076a7e474979da4139393b39 gcc/ada/gcc-interface/ada-tree.def
-250f014a7d9cb58ee235ad1f824d27ba gcc/ada/gcc-interface/ada-tree.h
+0f3fcb0f27440adcf1de17ab96c2569e gcc/ada/gcc-interface/ada-tree.h
0b1c6ffed20c195e773f26671ffe4088 gcc/ada/gcc-interface/ada.h
4cbfd794461da0feb1b8661ec623b6c6 gcc/ada/gcc-interface/config-lang.in
-6208321217d96eec496baac4f3359129 gcc/ada/gcc-interface/cuintp.c
-fd5070e45eedb89d0c65d89209ddf6a3 gcc/ada/gcc-interface/decl.c
+9a1f64dccf2e1eee1759cc185d13d69f gcc/ada/gcc-interface/cuintp.c
+29cd27b4cf928521d9b7de044856d4e9 gcc/ada/gcc-interface/decl.c
c413d4d50e9563859f4d751a4404b705 gcc/ada/gcc-interface/gadaint.h
-076f85f4823576c4e2ac216654b3c1f3 gcc/ada/gcc-interface/gigi.h
+335c4dbe8a597efed167a3624c8ae1ed gcc/ada/gcc-interface/gigi.h
551c6c4d04e4f9c63340554e826c7bed gcc/ada/gcc-interface/lang-specs.h
88263527679e56259b31778ee188631c gcc/ada/gcc-interface/lang.opt
-c7359dcb677f882b3ffb3595fb26e6b2 gcc/ada/gcc-interface/misc.c
+889dfa345359d9ceb9db6d2d858b70a7 gcc/ada/gcc-interface/misc.c
4ce109758af9fd09626d5277a2507764 gcc/ada/gcc-interface/targtyps.c
-0321865bc2eb30a3ed0354976b9bf48d gcc/ada/gcc-interface/trans.c
-26cb9873951ebfb34e81755e94d72d06 gcc/ada/gcc-interface/utils.c
+fd58b320b7fb10ef35e5905f41a1a760 gcc/ada/gcc-interface/trans.c
+ac300a216cd0b5744d9155fe61f4660d gcc/ada/gcc-interface/utils.c
1ba2f2aa401642279d2941fa1abb632d gcc/ada/gcc-interface/utils2.c
f03992068d889f278ee525aca83f27fc gcc/ada/get_alfa.adb
3e1abd579a2bee793b5b7684cbf2b482 gcc/ada/get_alfa.ads
@@ -1633,6 +1633,7 @@ e0a2da8b569723f369319eb46da8edf6 gcc/ada/i-vxwork-x86.ads
768ced42847b3d05a7820a0b5a9143f5 gcc/ada/impunit.adb
35288e302507eee68c9063f0cfab1c2b gcc/ada/impunit.ads
5692b13029d53e103cdda72d10552798 gcc/ada/indepsw-aix.adb
+c40aa5991541ff9c1916c95c822ae607 gcc/ada/indepsw-darwin.adb
9d5a6db64ff3a9600f44879d30b0cf94 gcc/ada/indepsw-gnu.adb
d7687cbf6b1c440a90c770b40742ab35 gcc/ada/indepsw-mingw.adb
fa914ddcd147d8430f947dc903d68021 gcc/ada/indepsw.adb
@@ -2589,35 +2590,35 @@ dd11d29e6b3041d09a7ab042071b6e17 gcc/ada/symbols.ads
da309d7af5abd17a165c4143c7e0bccb gcc/ada/system-freebsd-x86_64.ads
6f7e8fd5d5e75e9bbcabbff5d17ea692 gcc/ada/system-hpux-ia64.ads
71cf86100729a9b020e6274f402fde78 gcc/ada/system-hpux.ads
-9bd47b32c42e6614af6fda43b12daedd gcc/ada/system-linux-alpha.ads
+2500ef78790fbf4080ab7bd2ed76cc7e gcc/ada/system-linux-alpha.ads
9d9b1ca3c03ea4ca9154c4845e6d60c6 gcc/ada/system-linux-armeb.ads
96eba4aa723a508813b10acf5d9804d7 gcc/ada/system-linux-armel.ads
4bedb034b76641ac360f6d7ada5131f5 gcc/ada/system-linux-hppa.ads
c27cafbf42de123eaf0a00331f4a235e gcc/ada/system-linux-ia64.ads
-31d6d35f3a7167ec563c64fe4c1b8113 gcc/ada/system-linux-mips.ads
-11576fde0094c52fc8177a98a4fea2da gcc/ada/system-linux-mips64el.ads
-f0d476eb15fa63ed6525691002f4de24 gcc/ada/system-linux-mipsel.ads
+44ee7ae570c76f68b0fe56aa45cc59e8 gcc/ada/system-linux-mips.ads
+9209f371e3408bdab454aa3637b19272 gcc/ada/system-linux-mips64el.ads
+7e9165dcf3bd651ea944931d0cfec040 gcc/ada/system-linux-mipsel.ads
df28dc39f73f61d24f4448f06ce1ca74 gcc/ada/system-linux-ppc.ads
211b99252543385cdc4d807648466a55 gcc/ada/system-linux-ppc64.ads
-8b8ab3bb459bf050026044f889c45adb gcc/ada/system-linux-s390.ads
-d20e0aae782463ee7015ec461d081b3d gcc/ada/system-linux-s390x.ads
+cebaf7c5b07b269c9d1a9503e60fe9d6 gcc/ada/system-linux-s390.ads
+8e90d8387078a2032a3a54085e886118 gcc/ada/system-linux-s390x.ads
0d59b2da682ec4b500001098b0e4d85c gcc/ada/system-linux-sh4.ads
-36a282e1f68ae01e1cf8b57420e0bea9 gcc/ada/system-linux-sparc.ads
-2f64cd764150093343e14e40192fe317 gcc/ada/system-linux-sparcv9.ads
+2c1a2c20ee6e777a3189d71030f7afc0 gcc/ada/system-linux-sparc.ads
+97a4fe7c0aaf50a452a7963002e9c797 gcc/ada/system-linux-sparcv9.ads
fec03cfb12f992bb6ad263c7b496dc3d gcc/ada/system-linux-x86.ads
92d3edd29fdd3be3cd45b7f3a6a10953 gcc/ada/system-linux-x86_64.ads
f5baf3884341860fff43adc3a3003375 gcc/ada/system-lynxos-ppc.ads
0f02fc81a997d88d4347f2675965c45f gcc/ada/system-lynxos-x86.ads
8018a8327e6f80112a451fa474b777f2 gcc/ada/system-mingw-x86_64.ads
c724719ab9a5cc8de97b7cf560bd8bd3 gcc/ada/system-mingw.ads
-54fc680ff591d235f1aebdaa6f432b07 gcc/ada/system-rtems.ads
+77455fc53024fce45d93094493eb163a gcc/ada/system-rtems.ads
e49faaf1d4fe16bc283646c2f5de67ff gcc/ada/system-solaris-sparc.ads
186fda494a9c9f5ab7e0fead02f72a18 gcc/ada/system-solaris-sparcv9.ads
9f940dfb6a6ca90905d43e123a6f812b gcc/ada/system-solaris-x86.ads
ba176067049e2b7f92699e07e5922401 gcc/ada/system-solaris-x86_64.ads
d1cb31ba39bd9693958ed277ad4cf9b0 gcc/ada/system-vms-ia64.ads
fa3e9600e4e317df076326f73d26beca gcc/ada/system-vms_64.ads
-591697f0d8345a8389f305eacfbe09d1 gcc/ada/system-vxworks-arm.ads
+a04ec4d8cd89a75b877766deb084067b gcc/ada/system-vxworks-arm.ads
aafb449bae0fe523fbe4f48d550f15ec gcc/ada/system-vxworks-m68k.ads
43e73c0fc2850094c4969fed12917911 gcc/ada/system-vxworks-mips.ads
6c31b0f275dbaac143795a20ba2d6d69 gcc/ada/system-vxworks-ppc.ads
@@ -2628,7 +2629,7 @@ bd56f227cab5f7994d2054b143e27758 gcc/ada/system.ads
c7e521591893e9b9fdbbc065b4268188 gcc/ada/table.ads
5c87a77d480930c745acf8222d7934bc gcc/ada/targext.c
4d2b5e751bb00245c37e428b4dd6cd62 gcc/ada/targparm.adb
-2f03ade63011cb8dc8e3c2d28ed48874 gcc/ada/targparm.ads
+e764ac52909b487dbeaca9910011228f gcc/ada/targparm.ads
66410fee16af89862bccbe8331656824 gcc/ada/tb-alvms.c
59d5afe5790e7c5e9d042bbc3924193c gcc/ada/tb-alvxw.c
7a238acfa7f13f0ebba35928cb42056e gcc/ada/tb-gcc.c
@@ -2693,29 +2694,29 @@ dff6c45dedc5b25498e3b38f561e4cc7 gcc/ada/xref_lib.ads
0493a7ed666c4b102be665a8e328be35 gcc/ada/xutil.adb
2c8b2f1975e4e064d3803db6dbd516cb gcc/ada/xutil.ads
6f00e9d30c30636379b35559b3b48da6 gcc/addresses.h
-ff8da8054927fb30c4aafefd1d5a31fb gcc/alias.c
+960b13b30f67665d59b185186ec8c8b2 gcc/alias.c
05034325efc1c6fd55a9496de09e7522 gcc/alias.h
1327c03cb48c01740371ed5411053654 gcc/alloc-pool.c
222eaa2b4cef8d542c786fbe9ae9cf07 gcc/alloc-pool.h
-65663381a0def5b78563aad1ab0a4b93 gcc/asan.c
+067ff3498b69c3591bb58ec493f694df gcc/asan.c
5132ae1421f71d792102b029ad59e831 gcc/asan.h
58d4f0310fe4e4bc8a27505b809f2867 gcc/attribs.c
6fa41f5c633490844145153b872b1ab0 gcc/auto-inc-dec.c
0365efb320499af6f47af02ff2022c7e gcc/basic-block.h
-1c23b30e13292c253b714454c27bbb6c gcc/bb-reorder.c
+4da6f9708309bb3d1652eacd4a493d47 gcc/bb-reorder.c
b2837343d716caad8e69c7410079d957 gcc/bb-reorder.h
a7cabc9047a37aa6f4bb7ce445d9af46 gcc/bitmap.c
e4bf7085119fadf0cf91a26d2df4cb24 gcc/bitmap.h
73d64c118493d16f7bcb420b410374cf gcc/bt-load.c
3491416604bfc66e00e66bc7d60cba2b gcc/builtin-attrs.def
88bdc69b421bdbe83e6351e8268e1a7a gcc/builtin-types.def
-cdd67c998b3c5e8698deb5d5cfb00934 gcc/builtins.c
-487ae8e1d9ed4cb1f8dacb56136dd8dc gcc/builtins.def
+b96cd9a5283d933e7553085d381be366 gcc/builtins.c
+94951e5a26827a8cb3bfe58cd045e4e8 gcc/builtins.def
ecdeb32db3d71ab656bf8f96b6dbcf7c gcc/builtins.h
-67f9ba69fd7b3043daa2bde915cfa3f9 gcc/c-family/ChangeLog
-3737a8a7d9a9e8f1b222436fbb53d70e gcc/c-family/c-ada-spec.c
+0e9822fbabf753f9dfe454405dc1a0a5 gcc/c-family/ChangeLog
+56497a0c46ef67a9abe43fc6daa48734 gcc/c-family/c-ada-spec.c
4755b05370bb4bf1aac2eb9d4d6df083 gcc/c-family/c-ada-spec.h
-8c7c4ac81fc84980b53c0e1e1fcd19c3 gcc/c-family/c-common.c
+a67fc004b253f61a7fd39dd94fe59d87 gcc/c-family/c-common.c
a4c3104a1278bb8b30367026bf98aa86 gcc/c-family/c-common.def
98d69aae253a9588768be5ee2ae8c4e1 gcc/c-family/c-common.h
93aaa3639b2be89bbca49a7b0394a821 gcc/c-family/c-cppbuiltin.c
@@ -2726,10 +2727,10 @@ a74381cbd045a4d2457d756bf1e8898b gcc/c-family/c-gimplify.c
708c592978951579b5db97a86cd0ab60 gcc/c-family/c-lex.c
de07bb8aecebc26a26d6d1930f360076 gcc/c-family/c-objc.h
b2fb15ad294766fedf686713d17e2d35 gcc/c-family/c-omp.c
-905c81e117d0823f613840f49c728fc7 gcc/c-family/c-opts.c
+a84f1f9d547a874b806faccecf5fb653 gcc/c-family/c-opts.c
df35419c47e7ccbcbfd8d4591bc21ae3 gcc/c-family/c-pch.c
4b5acba8a289261b2de692206c66f0a8 gcc/c-family/c-ppoutput.c
-ca38a4ee09de7974b20c6082c79d8ca3 gcc/c-family/c-pragma.c
+91e7aec544a94f9adb4f9cefa316a356 gcc/c-family/c-pragma.c
74c7da06c6b30d024067cbc33d1f65aa gcc/c-family/c-pragma.h
1902d4d63e3ecd4ad867727ffd02f512 gcc/c-family/c-pretty-print.c
b575390eae4a8eb2178655cf67163159 gcc/c-family/c-pretty-print.h
@@ -2737,51 +2738,51 @@ f1f058fd6e457ed4d31bdb2543ebb629 gcc/c-family/c-semantics.c
be9cc7d4020fedae08ec093776cd4c5b gcc/c-family/c-target-def.h
2494cb442ca6ba92d8a279a0f0b554bb gcc/c-family/c-target.def
bf9abbc411cb1aafd43579240cc4cc2c gcc/c-family/c-target.h
-778f7e3f42ab4fc58bae81d2334ce9e1 gcc/c-family/c.opt
+67fe1a47dcfa508fae450b55194a3695 gcc/c-family/c.opt
e349380027a0e4b3a8d6a7a3a7c0c10d gcc/c-family/cppspec.c
480089f4072c03d274c51c9b757fc9e6 gcc/c-family/stub-objc.c
-ecec96d25f090df8546f8ca4dcf75c99 gcc/c/ChangeLog
+7a3aec72401176b202b9bb3146bfe988 gcc/c/ChangeLog
0a9eb9433fb3d43ee8f87c141a16a9ce gcc/c/Make-lang.in
e085062e94ae6c0259e7613d5ab6a6ec gcc/c/c-aux-info.c
f36f96a5a736e62a50a5fbaa2eea981a gcc/c/c-convert.c
-57ddbcab3feaa62b348530ccc209cad1 gcc/c/c-decl.c
+af62bafc3156d47844ec74f9d5758dfb gcc/c/c-decl.c
e0ec23d5dcd08041bff4286d2bbaf116 gcc/c/c-errors.c
ac4b37299840bf0b4f5f9c79695d824b gcc/c/c-lang.c
3de1fd5a69a57d2807a5f9667d71803b gcc/c/c-lang.h
14f7eee15621fa9c5e3ed6120a26e0a2 gcc/c/c-objc-common.c
37a5cb6661baa0a0695d6c5c5fb5ed64 gcc/c/c-objc-common.h
-dd3fede7c44c3525321b9e287c26edb1 gcc/c/c-parser.c
-921200bd8cd990fce322887a878959ec gcc/c/c-tree.h
-5b3aa6a72f80216fa27ae95df320a8e1 gcc/c/c-typeck.c
+0db616f56674373133a29d888fd8eb72 gcc/c/c-parser.c
+3d770215af97e5de2ae605d59c4fa2c6 gcc/c/c-tree.h
+7babd4a1a1e55fade6c00dafb09142b7 gcc/c/c-typeck.c
914d221ba9adadb48ef8b7332eb9ccf9 gcc/c/config-lang.in
9aef7a187eddb37b7136d40ae52b6955 gcc/c/gccspec.c
a968ae8f347de13e31c2d3d5299a417f gcc/caller-save.c
-3b68be8b5c74a7ae8fee7a9183818141 gcc/calls.c
+9976968123917076e4bddcb99fd31a3b gcc/calls.c
e311154ce8f515bbc83b5b60c75b17d1 gcc/cfg-flags.def
5fcc616d4ae175ca4611cfe0d68b35c4 gcc/cfg.c
a9a92a0866d06d363474284ac2f71300 gcc/cfganal.c
840f7393d180c32863a3a5c977b4fe9e gcc/cfgbuild.c
-646708232e8d34463e664b1b609dd11d gcc/cfgcleanup.c
-5c50eef9f6dc27419b061923f6526c19 gcc/cfgexpand.c
+b7020b15cbe1461adb160211761248c3 gcc/cfgcleanup.c
+0505d64ed16279f4ca9b827d06332ab1 gcc/cfgexpand.c
404fce3cf1f8b3feac2fa39921040889 gcc/cfghooks.c
261acd694bb6b5bd1b745909214498c6 gcc/cfghooks.h
281cc859c5c55ba4bab0e8d62005d1c9 gcc/cfgloop.c
309dccb4d31fd9dd3d118a2a43ca1dfe gcc/cfgloop.h
5b42d064414c4d83080f8589c1fb4a50 gcc/cfgloopanal.c
bd52e0e46ebe6bda7ef58c01df9a4a65 gcc/cfgloopmanip.c
-2b5a11f0582fdb94e16c13f62df80577 gcc/cfgrtl.c
-3dc06dc12017e59c68212643a90da4ab gcc/cgraph.c
-8b7d3f625732f0134be671c326e38ac1 gcc/cgraph.h
-9c726270864fa0ca2b8b87912a8e9068 gcc/cgraphbuild.c
+22b06fe3a7a484d93604dadb8ed100c6 gcc/cfgrtl.c
+f4fade17a41d36e89a57be1254d2dfa5 gcc/cgraph.c
+f866eff3bcc99ffdcb64be468f867532 gcc/cgraph.h
+a026fe6c1029048e6433b50adf291995 gcc/cgraphbuild.c
5795a564552d1cf577f81883761d697b gcc/cgraphclones.c
6549ab5c391bfe5f1c3fc27c6e67521d gcc/cgraphunit.c
960d43483aa24e6815a21b550517a88d gcc/cif-code.def
033eb214c2b0dd97b349ad03ee419889 gcc/collect2-aix.c
825cf7626d842c24e486654be35ee2a3 gcc/collect2-aix.h
-da3309ae51b20eb6299fde3299d71cb7 gcc/collect2.c
-d4284c6601827e072f834863114975e3 gcc/collect2.h
+11377efa2a747fc5757a25d3242568ca gcc/collect2.c
+a70da9a8c6815a821962bc75c5ca378e gcc/collect2.h
0200808e761864973bcc678f8e3f6e0a gcc/combine-stack-adj.c
-3447f1072397738e4f2039b14cc285a8 gcc/combine.c
+f44b715e538ed32b7f2905cb3f74b746 gcc/combine.c
8c1942f30436a8abb35410a846b64e87 gcc/common.opt
c1988ff8d1243c26fe3afb844afd53b7 gcc/common/common-target-def.h
e3bd7e1ccc8c1d3b1e5bd363b379bdae gcc/common/common-target.def
@@ -2818,7 +2819,7 @@ d98393129c4e54ac682cb74e3e3bd4d1 gcc/common/config/pdp11/pdp11-common.c
c6632abe75c3e6d797d4582b22416687 gcc/common/config/picochip/picochip-common.c
80803132ac42cc1fcd666d6ee592897a gcc/common/config/rs6000/rs6000-common.c
a913a2b9e0b8fe50f46ba443011c2206 gcc/common/config/rx/rx-common.c
-264c9d03fa9411eafac77708446191b3 gcc/common/config/s390/s390-common.c
+4d7fdc92d47147b10f51fd3a569092c5 gcc/common/config/s390/s390-common.c
c4426b7b271911c210358adf2aa233d8 gcc/common/config/score/score-common.c
966ce84ee95e6b75a7c14f4843802fbb gcc/common/config/sh/sh-common.c
c6c95afea3bffdb71f270ed696bb9e8a gcc/common/config/sparc/sparc-common.c
@@ -2832,43 +2833,43 @@ ef626b893bd240d7df8a90b30f34e39d gcc/common/config/vax/vax-common.c
1ef3d944b329df2c0efa98d6cad7af2a gcc/compare-elim.c
fa96792072dbc4c07d2490b630737268 gcc/conditions.h
66d09ded30a98c13b7a2ca1f77a6a1b5 gcc/config.build
-efff737384eda1f4aa1cdf08f630b2df gcc/config.gcc
+410ea19afac695b83466a11b84ebf4fb gcc/config.gcc
0a351a88034d24ffd262aa77c2dcb9dc gcc/config.host
-8511f5b441facdd7a4850bd125957ce3 gcc/config.in
+a5d28d612a40380c2cb6b9d130dfbc08 gcc/config.in
8e697813dc96ca90f5d0f4c196efe2cc gcc/config/README
0dbcd27c257c4f7ed711324c0d3ebf53 gcc/config/aarch64/aarch64-arches.def
-69c42092a7d8c80823e8a4ada9a12d4a gcc/config/aarch64/aarch64-builtins.c
+be5740fbf2603eca3340c39841f94db3 gcc/config/aarch64/aarch64-builtins.c
f6606fbd4d252e15be5dfb676e6cb42e gcc/config/aarch64/aarch64-cores.def
5b9fed09df29c2832b423277b6e2c96c gcc/config/aarch64/aarch64-elf-raw.h
774fd1b71ba1f45508d04e47ddc4d423 gcc/config/aarch64/aarch64-elf.h
aca57d221026af131a6daf33da44a956 gcc/config/aarch64/aarch64-generic.md
-c6a3e2277c649f39ccc61fbc7dd68cce gcc/config/aarch64/aarch64-linux.h
+171d719ff7a3b4ecf01846813f3ad5e1 gcc/config/aarch64/aarch64-linux.h
eb6391d8ade2716d125b8d89ea76b3fc gcc/config/aarch64/aarch64-modes.def
9e64f4665941adf4bde1154b023246c8 gcc/config/aarch64/aarch64-option-extensions.def
7a13f8011a0119f87ba3ef3a20600744 gcc/config/aarch64/aarch64-opts.h
b41112a4f8a1a36fd196647d7c2a1177 gcc/config/aarch64/aarch64-protos.h
-e97f6c416dd891587bca71ce7e75e5d5 gcc/config/aarch64/aarch64-simd-builtins.def
-b8124ebe970d3134cfa9a6f61cfb2bb4 gcc/config/aarch64/aarch64-simd.md
+efcb511b1f61b6d5447f36e8638eb61e gcc/config/aarch64/aarch64-simd-builtins.def
+f2bcca10671c0c7ca921bcae7f6564ed gcc/config/aarch64/aarch64-simd.md
195cd734170316d54b39ffb66ec3480f gcc/config/aarch64/aarch64-tune.md
-95e6ebf1e6b5cc933648aafaa35ffa3c gcc/config/aarch64/aarch64.c
-235f75ab1c2c63a2930e5336bc96cdb2 gcc/config/aarch64/aarch64.h
-d8e0087223be25d0f6e0fef7ef2d2e3d gcc/config/aarch64/aarch64.md
+e236ac3b3d76b10a4de7bb83a4d759f0 gcc/config/aarch64/aarch64.c
+0ab69b10cb3fd17030f4f89c32cd20cb gcc/config/aarch64/aarch64.h
+2c9625a24b900df2a14f154fec1a8107 gcc/config/aarch64/aarch64.md
4ac7df22d60b80bac89a5670e94decf7 gcc/config/aarch64/aarch64.opt
-d947b04747cb317d6ce8f8171df5ef35 gcc/config/aarch64/arm_neon.h
+12148e6175e3b3452e19f6dc7e846978 gcc/config/aarch64/arm_neon.h
b13264d74fe40d07c69abc3574fea589 gcc/config/aarch64/atomics.md
33611f8bac32ca1bb434bf91226a5ceb gcc/config/aarch64/constraints.md
233778cb3d9926b58114d054a717effb gcc/config/aarch64/gentune.sh
-5d69606fc39cb88faf2bcb650e5ab25a gcc/config/aarch64/iterators.md
+b332ebacdf73014219bf5ef7b848740c gcc/config/aarch64/iterators.md
2306a03712ea79b8a8529a774d37739a gcc/config/aarch64/large.md
-43c613107ee54c11dccdae9dd914ea44 gcc/config/aarch64/predicates.md
+c729d26096ba7bdd017b438220eee45d gcc/config/aarch64/predicates.md
a7551ca197eb21652de7a48aeab05812 gcc/config/aarch64/small.md
2e870e4781cddb0c5f0b64c6d1155eec gcc/config/aarch64/t-aarch64
12c091d70d76335ee17cd22ab10bde54 gcc/config/aarch64/t-aarch64-linux
9d04cfe9d407d38bf2ced1c1414ea1bd gcc/config/alpha/alpha-modes.def
0907de78725031c4e92e0a7950d98cee gcc/config/alpha/alpha-protos.h
-12c66d725a508413f822c0417424c9b4 gcc/config/alpha/alpha.c
+5b352bab4c3826f0d9a64026cc21d0aa gcc/config/alpha/alpha.c
5d0b9ec764a170cb48b345b87fc95255 gcc/config/alpha/alpha.h
-85fbcbe6465679db6cd0fa26b739a255 gcc/config/alpha/alpha.md
+dca3410723c244ac12ea960455275089 gcc/config/alpha/alpha.md
0941b77621787a816b2ab1b33709601e gcc/config/alpha/alpha.opt
4a3f4d74e5b42dadac3058c6b6492624 gcc/config/alpha/constraints.md
a3151413a9b2c0a6241d36ef84864866 gcc/config/alpha/driver-alpha.c
@@ -2896,15 +2897,15 @@ b094c9cfc88292b80a5c169910b12a0a gcc/config/arm/arm-cores.def
62fa6237abd1f80f2dac66918f7910ac gcc/config/arm/arm-fixed.md
24b19f60db9a5168f9a0e1c224f03a9d gcc/config/arm/arm-fpus.def
9e49af02b17e7dd5b0a836d78e7d5c28 gcc/config/arm/arm-generic.md
-6943e1c6c7a24aca56bc5fbb587823a1 gcc/config/arm/arm-ldmstm.ml
+bbdf243382506221afe2043e767528ed gcc/config/arm/arm-ldmstm.ml
6fae5e1a1529d3384140e628569a773e gcc/config/arm/arm-modes.def
836f1b4334ea72cada94c7d927cd1058 gcc/config/arm/arm-opts.h
905d168ca431cc9f433aef653733b5b6 gcc/config/arm/arm-protos.h
4b4866800523024414368d9d07b2dcd9 gcc/config/arm/arm-tables.opt
5a53df61b7545ff777b7254670f8f3af gcc/config/arm/arm-tune.md
-2414e20ae48926cb79a38e52d9d8256f gcc/config/arm/arm.c
-8dea99c277e6311e28191436b14df948 gcc/config/arm/arm.h
-0b81ded9e1a32f93445123c37f50761d gcc/config/arm/arm.md
+c44e664908d7e6b72b83db49f7a0572e gcc/config/arm/arm.c
+34711d3a091a94583f0e35129d851a42 gcc/config/arm/arm.h
+52a9be26c378ace5641dafd0fc7deaef gcc/config/arm/arm.md
4c04a7fdc5fcff73b85309be29d86058 gcc/config/arm/arm.opt
e1dc9ff4ce0df7a0ea82336cce254e50 gcc/config/arm/arm1020e.md
9f6cb8e5cc5565ccb811b0e6400aecb5 gcc/config/arm/arm1026ejs.md
@@ -2935,10 +2936,10 @@ dbe2fbfbf70d8d9d225b776ebbb41c44 gcc/config/arm/fa726te.md
a2de5a139f922a5baa21752c15b069a4 gcc/config/arm/fmp626.md
b4ae6a7c9bd88c025038354b300f4123 gcc/config/arm/genopt.sh
118856620acac0b85eaa953599e26662 gcc/config/arm/gentune.sh
-0f7c35e03527816a056b60c044f88c51 gcc/config/arm/iterators.md
+49d6900f2f05ff572cc93131c7666780 gcc/config/arm/iterators.md
a3e204f302d84fa4da54ad6be5be04ca gcc/config/arm/iwmmxt.md
9759b62d5ac576bfefd786e09f28dab5 gcc/config/arm/iwmmxt2.md
-ed860868640f3d500ffdf68870f06998 gcc/config/arm/ldmstm.md
+fc349caf395aa72c85a0e860e748921b gcc/config/arm/ldmstm.md
3bc7f4476e2c3b47857283dc713de6d2 gcc/config/arm/linux-eabi.h
5a81d8ac8a51d501592b0cf60f4355a6 gcc/config/arm/linux-elf.h
cf29b31dd47e73c1e244a1e649021903 gcc/config/arm/linux-gas.h
@@ -2949,10 +2950,10 @@ b56b191eecc402066a8b343050d291e1 gcc/config/arm/neon-docgen.ml
276e5d88d8a84682984e16f144ff45dd gcc/config/arm/neon-gen.ml
e72c4e462cad59d37e0371afab4f7fb6 gcc/config/arm/neon-schedgen.ml
8255720b7ec13a1f512b56c97012e026 gcc/config/arm/neon-testgen.ml
-e8a6d64c1ebfaa75d61265581ec63322 gcc/config/arm/neon.md
+efb1ce51b251e348246f988052fe50a6 gcc/config/arm/neon.md
a7bf58e32a150f5d91a2a0a21dd24e73 gcc/config/arm/neon.ml
de92ae7e6ca13ac5c8e0364a78d3dea7 gcc/config/arm/netbsd-elf.h
-0875ea7b582c99fe8c5f650e701f6385 gcc/config/arm/predicates.md
+b0c0d279278ad47577814a6db4cbf7d2 gcc/config/arm/predicates.md
52871c18110249f6c6fd2917743b0246 gcc/config/arm/rtems-eabi.h
de88b0aa7b7e0f8986246491f7746ec1 gcc/config/arm/semi.h
515eda75b735944a621253871aa5f958 gcc/config/arm/symbian.h
@@ -2971,7 +2972,7 @@ c74b612ea78e3fe3115440eb445a363f gcc/config/arm/uclinux-eabi.h
60730710802ae80aeae4208695e82934 gcc/config/arm/unknown-elf.h
8dc8e38bd1b693ed003af2ea5c30e414 gcc/config/arm/unspecs.md
af9e31ade253a5825467e27b62f92a74 gcc/config/arm/vec-common.md
-d370369a4c0c1d9139b025aeff3dfa6b gcc/config/arm/vfp.md
+16ce4bbfad48c572e36ce9975a674591 gcc/config/arm/vfp.md
4606f73283303ca4a0c1f4d8bb737781 gcc/config/arm/vfp11.md
50402cb52a1a461a25c715fb08f6b06c gcc/config/arm/vxworks.h
fb9eed0718285fc0e5c65020c7e37c48 gcc/config/arm/vxworks.opt
@@ -2980,30 +2981,30 @@ a17a638dc98f3f18b0e13448c69e1e65 gcc/config/arm/x-arm
a1168d98724421f5bd6d3285ec713c92 gcc/config/avr/avr-c.c
2bfb88cf483d49c3527982a2a644df8c gcc/config/avr/avr-devices.c
ee97098a9434d6184f07c75d1f50aa20 gcc/config/avr/avr-dimode.md
-edf5c27427fc7c4ff3d874a4f504cf47 gcc/config/avr/avr-fixed.md
+68f60dd93c98b956f23789c497e49701 gcc/config/avr/avr-fixed.md
32bb7fb30251aaade2a495d79af47f9f gcc/config/avr/avr-log.c
-af82c86826db68fb3d5c4554f64c57ea gcc/config/avr/avr-mcus.def
+80b36806b62c1194f1a41ff37d8632b1 gcc/config/avr/avr-mcus.def
b13f3ac768820728756433782943d231 gcc/config/avr/avr-modes.def
-260802b888a99662c6860186cc2c4bd8 gcc/config/avr/avr-protos.h
+1efebb39956e5e1ef56c691b3dd16010 gcc/config/avr/avr-protos.h
39c73e900bd48ba5e4e439c9e7e57c58 gcc/config/avr/avr-stdint.h
-85a5ebbe78be35a7292ebd00a28f2a2f gcc/config/avr/avr-tables.opt
-6affc68f966f493dbe9516e634325404 gcc/config/avr/avr.c
+6e6e5d80331adb5ba7bf70a773a04af0 gcc/config/avr/avr-tables.opt
+a298c1ba21aed9f1c74189652040b767 gcc/config/avr/avr.c
7e1c1782fda865f163c108f7d2bd14d7 gcc/config/avr/avr.h
-1ea0ea08d7515b4c3a889457afdb1eaa gcc/config/avr/avr.md
-a7fc03d9ed6fd42d968e5c01022eff17 gcc/config/avr/avr.opt
+8f9b25ad6ab871efa83e64472238439c gcc/config/avr/avr.md
+9a7d42cbf8f07ffe8defeab349d2605d gcc/config/avr/avr.opt
b051562057ef0c881a45ef5897a1ceb7 gcc/config/avr/avrlibc.h
a9e31ccdad36999ad034531223c6af7b gcc/config/avr/builtins.def
5a54529823c5c0a0ec7194f70cd4d077 gcc/config/avr/constraints.md
5dca69f34b5f9c521a285cf7829f5714 gcc/config/avr/driver-avr.c
637939858818e9c2d48e32cc79fa4012 gcc/config/avr/elf.h
-af69314026052b0eff142c47c7b98a56 gcc/config/avr/gen-avr-mmcu-texi.c
+5e3c70cda32e029807a75757c1940910 gcc/config/avr/gen-avr-mmcu-texi.c
9aabbc5578697647065bca5658099b28 gcc/config/avr/genmultilib.awk
f3365c4aee09763d3a7fbd6d87a3372b gcc/config/avr/genopt.sh
88efe4be503d008324520466eb3bfdff gcc/config/avr/predicates.md
88efc9ac6ff9680e00197eaa56c02dce gcc/config/avr/rtems.h
69d0a05957dfaa9f38e3ba072fbc6f61 gcc/config/avr/stdfix.h
a52e886520716769137be24aa93fd333 gcc/config/avr/t-avr
-ff32a3afbc90b7e126f3d94e864e4230 gcc/config/avr/t-multilib
+3e8b783e87b45619e57cdcae6e52d512 gcc/config/avr/t-multilib
6aa29f64f366fd362ab1f548d54415cc gcc/config/avr/t-rtems
84c0f11e698cc880f403548f35ab0ec1 gcc/config/bfin/bfin-modes.def
e93b72a51566a7f787512b81920e7a6d gcc/config/bfin/bfin-opts.h
@@ -3062,12 +3063,12 @@ b16986d198166b6ae3ff2909d5ade5db gcc/config/cris/constraints.md
acac0a55719bae4c1f29e52ec320e52d gcc/config/cris/cris-protos.h
9e1c52f3cb76fd0520db80091c154458 gcc/config/cris/cris.c
b25d43b01c3a64089d4b56527e79ac60 gcc/config/cris/cris.h
-fceaa97634c5e8ee50b5fe5f600acdde gcc/config/cris/cris.md
+3d06aef9721736b1fac57372fa0513e8 gcc/config/cris/cris.md
c154ea299cdb35ba117ff171de527cae gcc/config/cris/cris.opt
7ae7f770a36e631d19b05982519054bd gcc/config/cris/elf.opt
3d238378f5fe1c8df8c04ae847304864 gcc/config/cris/linux.h
8dc37db8287694af3be334eeca3b76b7 gcc/config/cris/linux.opt
-4eee2207c3b8d6b038004a2b8e472c2a gcc/config/cris/predicates.md
+b8f85a5f15f5bd264e5ecf9891c2e840 gcc/config/cris/predicates.md
7a374576115cdcbb648f2d6661466c50 gcc/config/cris/sync.md
9be329859b272e9b6217c99cd5e11048 gcc/config/cris/t-cris
0377d4bfc893ab7b92e464367a24e639 gcc/config/cris/t-elfmulti
@@ -3076,9 +3077,9 @@ c606cc01ca984ed0b47214c469cb1dcf gcc/config/darwin-c.c
5f1a0c303bbe728e3d449b80ce01cb52 gcc/config/darwin-driver.c
4c1d1d2bbb3434a980ac858f9e0b77bd gcc/config/darwin-f.c
2603254c641b884801faee6075bc20c1 gcc/config/darwin-ppc-ldouble-patch.def
-848fd05f74f5d7915f452e81acbd2a05 gcc/config/darwin-protos.h
+d3310030788b3ed1fe3acec81d41b527 gcc/config/darwin-protos.h
5e536d2b4a91688c1cbcdc2429e07780 gcc/config/darwin-sections.def
-35933aa5f0ade1bde124d050f6e526cc gcc/config/darwin.c
+8f7320e96149248b7681f850804d6f52 gcc/config/darwin.c
26a2f9c449f7294a56013bf7b62c9bd3 gcc/config/darwin.h
a2f9c51feaa2cd2cc16bc9db4223fe91 gcc/config/darwin.opt
4525380607e9883a09de919ef082d632 gcc/config/darwin10.h
@@ -3168,7 +3169,7 @@ cb2e948f289990ca1548d4b52bebb2e8 gcc/config/i386/bdver1.md
20b2527fbd755cfff6d6f9911a4d0235 gcc/config/i386/biarch64.h
71ea68772e9a6e13945ce709b42d07f8 gcc/config/i386/biarchx32.h
aa501207205f1326bd8aaf15efd460a4 gcc/config/i386/bmi2intrin.h
-f41240b004e3d59c4396658b24de0f6c gcc/config/i386/bmiintrin.h
+dd06b6e981ec183fe3fad7987eb7acd2 gcc/config/i386/bmiintrin.h
3e8f794c4e58fe25047f68e79097d481 gcc/config/i386/bmmintrin.h
3cef6b5ae2efc24fd715e82ff6211b9f gcc/config/i386/bsd.h
e30b6772649ab0556a6d46cd518c1298 gcc/config/i386/btver2.md
@@ -3186,9 +3187,9 @@ c568b4759b79c17cb4d8e8d4568ef39e gcc/config/i386/darwin64.h
4785ccfc47eaaaa7c62dbfc05f9d8b86 gcc/config/i386/djgpp-stdint.h
dd1eaefa2553dd1e555c2733ef551527 gcc/config/i386/djgpp.h
d1586a91e8a2175dd88e5511afe55d0e gcc/config/i386/djgpp.opt
-8b442d9f51346bcda565c9a9a98a853c gcc/config/i386/driver-i386.c
+5853e26330fed17895b66ddbd24e16a5 gcc/config/i386/driver-i386.c
fb06e2d9664a39db5db3c6c0679de0ce gcc/config/i386/emmintrin.h
-c88535fbf132c1f278c15394aef3340b gcc/config/i386/f16cintrin.h
+8203f3ff24f2449720ad7f3511355689 gcc/config/i386/f16cintrin.h
2ba04392850cfd19dd7c92d443455ed2 gcc/config/i386/fma4intrin.h
aadb69eb747a6b9a98e674121ea755d1 gcc/config/i386/fmaintrin.h
cd09d0f29fb9a36bfada4b5e277d7e1e gcc/config/i386/freebsd.h
@@ -3212,9 +3213,9 @@ be3b23219ebac7970d1f9b1d5f82e4de gcc/config/i386/i386-builtin-types.awk
2ba789f83c27d255333f01d514c1592f gcc/config/i386/i386-modes.def
00be754e0e6424cf60e02acf796f5819 gcc/config/i386/i386-opts.h
e68f96b9008364ea0d5eabe9de379b54 gcc/config/i386/i386-protos.h
-c5c845148d816e1934326ab988474739 gcc/config/i386/i386.c
-5d7fdc81fdfd7ebcb48f93872a3cd80b gcc/config/i386/i386.h
-96f318e54ed0539d96844cb7f8e18fcc gcc/config/i386/i386.md
+5f6c712512dc22173a93cdffb3e61050 gcc/config/i386/i386.c
+25843c182210819f1d2167e7b98b3ead gcc/config/i386/i386.h
+bf06bd34cd2289e3d8a6548083a71c3b gcc/config/i386/i386.md
b7e49bcb9fea7b61eab73988a17ee919 gcc/config/i386/i386.opt
58bbfa9b8ce4fd4126c4ab71d0bd9476 gcc/config/i386/i386elf.h
155007e2bb73902c958d03bbebf517ce gcc/config/i386/ia32intrin.h
@@ -3253,7 +3254,7 @@ d8d2635dbaad7d1cc58a31bba70ba725 gcc/config/i386/openbsdelf.h
3ea357fcceb71528a81f46bb5656beb1 gcc/config/i386/pmmintrin.h
fa37ab5ba879ae8c48926987b4a7577a gcc/config/i386/popcntintrin.h
29125c3b6201eec3fef6a187635c67c6 gcc/config/i386/ppro.md
-8961c2a135215449c331c689b3111144 gcc/config/i386/predicates.md
+6e7e12a0b3f7faf71006c12e3aaac019 gcc/config/i386/predicates.md
bd747c19ad89b5915faddbdb7545a547 gcc/config/i386/prfchwintrin.h
bd2be3bd8743ee55b2489bbd906815c0 gcc/config/i386/rdos.h
455ec7883b27d216ff17dff5766f837d gcc/config/i386/rdos64.h
@@ -3263,7 +3264,7 @@ d6d0b9740afd348fc7288a251b6c7ecb gcc/config/i386/rtmintrin.h
c7dbf91cae1df04f0c69d17bdb9eb739 gcc/config/i386/smmintrin.h
356c9d5cf06fc52a905dc4ba4b8d1dd1 gcc/config/i386/sol2-bi.h
a0c6c5a1327e7aa2252656a0bd72921a gcc/config/i386/sol2.h
-2f372b859f6d313351c5fabfe9f413a6 gcc/config/i386/sse.md
+147fe75f4ddba9c2fd3387f9dad4fc74 gcc/config/i386/sse.md
133ed82593d2dcb4ebd649ccae429e2f gcc/config/i386/ssemath.h
779935bb416cf8724ffb3fa38dc4459b gcc/config/i386/sync.md
6c77cea4e52de21183c1ef931d6fce32 gcc/config/i386/sysv4.h
@@ -3281,7 +3282,7 @@ cd662e746e08a18749e8272fa759278e gcc/config/i386/t-mingw-w32
67bcf41f125bbec93a13ad3bd98abaee gcc/config/i386/t-mingw-w64
813c980909a4848e5aed5faeca6fe2bd gcc/config/i386/t-openbsd
12a68576d3577a8da82089f18d60c613 gcc/config/i386/t-pmm_malloc
-f38be182f71917b73561a90a02be3b48 gcc/config/i386/t-rtems
+b00d2c1b3a5cb385706cd1ba330452f7 gcc/config/i386/t-rtems
5caaadac91232f1132b9eda067d2ed21 gcc/config/i386/t-sol2-64
af24a4211ecc5bef39097e175d346788 gcc/config/i386/t-vxworks
b80a5a4a8c8fc32ca318158abc98dc20 gcc/config/i386/t-vxworksae
@@ -3293,19 +3294,19 @@ a883796a6a71f16f70589a90c24fe01a gcc/config/i386/vx-common.h
81192abfa622aa58e7fd2fa476520751 gcc/config/i386/vxworksae.h
ac803092fce09cef5f39fbf0bd1ee56d gcc/config/i386/winnt-cxx.c
4264fba32264f2088d4573a3628209eb gcc/config/i386/winnt-stubs.c
-8f479412e4c144166c5d0ebbe36848e5 gcc/config/i386/winnt.c
+2dedc478d4c5940e569c8424424d3634 gcc/config/i386/winnt.c
2c7e3fdc55a855f8ddfe352fa1fe4354 gcc/config/i386/wmmintrin.h
627c3e925a142fb6d2a14368fb637f28 gcc/config/i386/x-cygwin
58a984112f85a94b6be59817a4c57d48 gcc/config/i386/x-darwin
86959b066ad3234f6b1aec2533c8049d gcc/config/i386/x-i386
0c37bb392fd07fdf2cdb3c02d7cc0e3a gcc/config/i386/x-mingw32
-2b92813e977d23b3a6fad4639359f636 gcc/config/i386/x86-64.h
+165bebe6d0a5a7ced2d041d215c51258 gcc/config/i386/x86-64.h
749986da182c6615afce92a262a98b52 gcc/config/i386/x86intrin.h
95770cf9b1b03774a6a7fe23f1f4c649 gcc/config/i386/xm-cygwin.h
3685fb0714327699396f20c9a0fbbd83 gcc/config/i386/xm-djgpp.h
718bd13fe9636803ee1b1caf5c8acf00 gcc/config/i386/xm-mingw32.h
05355c40ad0c4f0c8d712ba10f192197 gcc/config/i386/xmmintrin.h
-e472d3e7d17c23e2701763c9d4162396 gcc/config/i386/xopintrin.h
+981c21fc07009a451cbc8570b5cdf2b4 gcc/config/i386/xopintrin.h
d83f66040bd1c13b082f5ea32679ee0f gcc/config/i386/xsaveintrin.h
53bed82e6204286a81d8ef4e955671b6 gcc/config/i386/xsaveoptintrin.h
bc50ddbe10ecf319da222ffa4865a1ca gcc/config/i386/xtestintrin.h
@@ -3415,7 +3416,7 @@ bff081c2e48aafde8a9457ddef6e58e7 gcc/config/m68k/m68k-microarchs.def
193b5d9804ffc73434f71a4c9f7194ba gcc/config/m68k/m68k-opts.h
4b0d5954a15f19b6177fed0e997a897b gcc/config/m68k/m68k-protos.h
b0e6f80caec611c986a6e6f37b7b42ab gcc/config/m68k/m68k-tables.opt
-d856111de28972caead193456a40c8ab gcc/config/m68k/m68k.c
+298d13253b444580b26d950f26618d02 gcc/config/m68k/m68k.c
edb1453ecb1a2be7107d27b300641599 gcc/config/m68k/m68k.h
ee19da648459674f9a8016d1420b1372 gcc/config/m68k/m68k.md
fc4a372d659d121ec6365516ecd21a91 gcc/config/m68k/m68k.opt
@@ -3472,11 +3473,11 @@ a21124435021085ec6e511d258f9c6db gcc/config/mep/predicates.md
e9a9df0e98a2a744bbc2fc01e1c8535f gcc/config/microblaze/linux.h
8bd33a6b733edfe38b314f85fc45dde7 gcc/config/microblaze/microblaze-c.c
67f74479946bf6e946698e0c56c2f4ce gcc/config/microblaze/microblaze-protos.h
-cbdb60d1e1fb2d69cfd62e4fbdee7cb3 gcc/config/microblaze/microblaze.c
-43b034509ede51ebd060aa5017202681 gcc/config/microblaze/microblaze.h
-a1a3072d5557c848d2341e9ffd16f55c gcc/config/microblaze/microblaze.md
+78e0400bc62a472b13a23781fc2a1fcc gcc/config/microblaze/microblaze.c
+5324229be892e782b8c75ce2176906d0 gcc/config/microblaze/microblaze.h
+2d43c56bbf52358a37e9c7bd1e8316bf gcc/config/microblaze/microblaze.md
4ed279d05619ce925a8de2d57c6a7207 gcc/config/microblaze/microblaze.opt
-060eefecceb2cf8901fc929100f90230 gcc/config/microblaze/predicates.md
+7167298b8adb1d13f25c51ad8e464bb1 gcc/config/microblaze/predicates.md
5e45a221d83a64728ff2bd46743c631b gcc/config/microblaze/rtems.h
17818a25ae3112098cd91d698e37f0f7 gcc/config/microblaze/t-microblaze
63ccba4e7f745d36609d7c129bac6288 gcc/config/microblaze/t-microblaze-linux
@@ -3500,7 +3501,7 @@ e93bfde35bb7b6efdf5cbcc267c70a91 gcc/config/mips/4130.md
0d29345530e843294cabaa328bfb9e6e gcc/config/mips/74k.md
9ed8ece6c42743c43ec26c2ac7db6650 gcc/config/mips/9000.md
2543d141c10f176375bc4ee5ac2f54d4 gcc/config/mips/constraints.md
-069ede8acb9aac9d6bb6a2bb943eaa3a gcc/config/mips/driver-native.c
+68d71ddeb1c8fdeaa478724c17f1159b gcc/config/mips/driver-native.c
de39c31281151a929212cec4dc286d8c gcc/config/mips/elf.h
950ddf382880576f284ccf64fe30e6c9 gcc/config/mips/elfoabi.h
f1231bbf2e6eee613b0791cdff5a8697 gcc/config/mips/elforion.h
@@ -3526,9 +3527,9 @@ cf30f1fae4d8ba91de7729b46e7d296d gcc/config/mips/mips-ftypes.def
ffcf73d9f64036b802fa047155289fac gcc/config/mips/mips-protos.h
56e4e147e889863e96add52a8170521a gcc/config/mips/mips-ps-3d.md
3dbb845857ce3922656be599dd8b9441 gcc/config/mips/mips-tables.opt
-f85efba5ec6000d796d1d088d8455372 gcc/config/mips/mips.c
-f3f37ddb5d704ccd136eb331cb54c805 gcc/config/mips/mips.h
-b30960462ef573c18271e500df60bffb gcc/config/mips/mips.md
+fefcc939519aa672bb77bc51a7ebbdc0 gcc/config/mips/mips.c
+48e81ea61d0e87f81217b3d8b47f07a6 gcc/config/mips/mips.h
+2e034c3c1126402726843dc511d82545 gcc/config/mips/mips.md
baeea74917c42edc6a00aea5aae0c311 gcc/config/mips/mips.opt
a37e38e49611bd674168dcff6aea0739 gcc/config/mips/mti-elf.h
253f6b24866b248b2f8ce9ea8c056926 gcc/config/mips/mti-linux.h
@@ -3624,9 +3625,9 @@ f6ece491057229f3a7db89a70039abbd gcc/config/pa/pa-hpux1131.opt
134a862333cd36aa9be58272c66ef672 gcc/config/pa/pa-openbsd.h
03fdc2c22864cbd070b6e87110142e0d gcc/config/pa/pa-opts.h
e2fc4a1737dbed493a8abc267b7764c4 gcc/config/pa/pa-protos.h
-3fad6fb19a70e43f915234d93bb564be gcc/config/pa/pa.c
-aac106ded96613868c7b978f31ba4146 gcc/config/pa/pa.h
-18eac5bc9177b98bbfa3bb6360ce71c8 gcc/config/pa/pa.md
+4d65aeac4e9db1afbed772a747e6ab08 gcc/config/pa/pa.c
+5a887ec04d19d55393e82b9ebb978973 gcc/config/pa/pa.h
+1e689ba950a9dcff7946d1a638aa0897 gcc/config/pa/pa.md
4da312d74afa896f8ad580f2d13c7995 gcc/config/pa/pa.opt
307965ddc82931797f2c18d014fd9545 gcc/config/pa/pa32-linux.h
016072534b66c153049cad0d853e1afc gcc/config/pa/pa32-openbsd.h
@@ -3695,19 +3696,20 @@ c3cc007b9d4d1bc1257a4579ff4b6a30 gcc/config/rs6000/aix52.h
7039c7de191d6589f7467fb9541e94d1 gcc/config/rs6000/aix53.h
c74d992c22cd4c77eef6467bffb151b2 gcc/config/rs6000/aix61.h
08c5560a95c96722616c024a02b45015 gcc/config/rs6000/aix64.opt
-64c94f078cc748e550d37246b7bf9883 gcc/config/rs6000/altivec.h
-bf329217f37e5dc3c5e54d7f9e782f2e gcc/config/rs6000/altivec.md
+fee5ba9f209f8817e17ac181a132fc39 gcc/config/rs6000/altivec.h
+df154a26bc13f5952eb448af335773ea gcc/config/rs6000/altivec.md
88fc51fa326caf24fe73a92078ff985c gcc/config/rs6000/biarch64.h
817c296ec0ab30ac42b9b7fb3bead44d gcc/config/rs6000/cell.md
-bfe3112e1e2013f04d3a8b82c5746919 gcc/config/rs6000/constraints.md
-9b7ea4fad8c2d5410c9a9fbe112d8fe7 gcc/config/rs6000/darwin.h
+7fdf76ee77bc5eb2bb723c6c8c31aed9 gcc/config/rs6000/constraints.md
+aacbcedb1a719159dcfa8ebf6b1a4c79 gcc/config/rs6000/crypto.md
+59ce100a248546e3a70cb997be057efc gcc/config/rs6000/darwin.h
6f3698b10847c1e351f178071c387fc4 gcc/config/rs6000/darwin.md
25a9ba5371a7d5a4922f66b90309f78b gcc/config/rs6000/darwin.opt
de1e58e023126d18861ecd6bf950be44 gcc/config/rs6000/darwin64.h
274a1a4679ee4d763744361d947515d0 gcc/config/rs6000/darwin7.h
502c371891710ae9a4526980a5d99ab7 gcc/config/rs6000/darwin8.h
-5dd5c8a3647eb27ef1ff9d1d37e01bd1 gcc/config/rs6000/default64.h
-c1a28adb9f39e8dfe77f2c37eb91cfec gcc/config/rs6000/dfp.md
+1ba3379bafb9241886a65a9413900250 gcc/config/rs6000/default64.h
+78e6d68d65c3ad282401ee5f76745774 gcc/config/rs6000/dfp.md
518da3fd76509f1214bf541cd37fa721 gcc/config/rs6000/driver-rs6000.c
647c9512f8e2b1e7b9aaaa0bcfbe8eba gcc/config/rs6000/e300c2c3.md
20c280571996373aeda564375e7b8c6b gcc/config/rs6000/e500.h
@@ -3724,48 +3726,52 @@ c9164c6d1f0780efca921dd6473e896a gcc/config/rs6000/freebsd.h
2dd91d7170e843afa16ce9773a0402f9 gcc/config/rs6000/genopt.sh
2d6e470d61d40f02ed935702b8656702 gcc/config/rs6000/host-darwin.c
15da2c30dd5e1822354f016081aa22f1 gcc/config/rs6000/host-ppc64-darwin.c
-6039dc316483dd6a7afa6bfb10fffe02 gcc/config/rs6000/linux.h
-abce75f1c5fb0bc967c27b2ff1e49c0c gcc/config/rs6000/linux64.h
+d081d7afc70df0ef42c0d6e65217b125 gcc/config/rs6000/htm.md
+cb085d898b2542e95e63a04f2061284f gcc/config/rs6000/htmintrin.h
+0c9088bc4c7e9448dfb659d06c8f9be2 gcc/config/rs6000/htmxlintrin.h
+4737b441859039ee14ec15323413eccd gcc/config/rs6000/linux.h
+f6c28b43569c4fafb93f1ddad72dd917 gcc/config/rs6000/linux64.h
8234299aeb4439357d76de9db97babad gcc/config/rs6000/linux64.opt
-8de856596606d746e9c2a231678a3b75 gcc/config/rs6000/linuxaltivec.h
-76f593c437e11a9f2cf9568758593265 gcc/config/rs6000/linuxspe.h
+c050ce5476e06a291aa23a8cdd84935b gcc/config/rs6000/linuxaltivec.h
+67560fa80452cf101107f94c34a67013 gcc/config/rs6000/linuxspe.h
ca1700694d7046be612275378c4200e5 gcc/config/rs6000/lynx.h
0cc3c5f9101501b8253ce3176c3ffce4 gcc/config/rs6000/milli.exp
b129a9ba5a810466224e0a535b3198a7 gcc/config/rs6000/mpc.md
426e58886d784136c8d6c7f607bd9595 gcc/config/rs6000/netbsd.h
-0258c6636e58ef31dfc50cd09ccd05c4 gcc/config/rs6000/option-defaults.h
+d54bbc7ae5087ecf83d520cef66eca92 gcc/config/rs6000/option-defaults.h
95b063713d06e8f125af283a10770ed0 gcc/config/rs6000/paired.h
b82a620cefdb9cf11c7b9141d3fab251 gcc/config/rs6000/paired.md
413c20b1e1c3fe973f3bbf2a33503a74 gcc/config/rs6000/power4.md
0dca1d8d6f56bcc8e84e40145cc8977e gcc/config/rs6000/power5.md
fe39ced9a340b2083ec767453b517ce3 gcc/config/rs6000/power6.md
ffc3754101a9853c46e39826585bc448 gcc/config/rs6000/power7.md
-aeb3fafb226082ace5572c5a6bc2c12f gcc/config/rs6000/ppc-asm.h
+478c3c4338191d71972ab2f7bde1f421 gcc/config/rs6000/power8.md
+8a5505035f44eb07bbc9e05702e37d3e gcc/config/rs6000/ppc-asm.h
47e26b4e2997e1eb1fa323fb7f83cb35 gcc/config/rs6000/ppu_intrinsics.h
-cdf9b8af2018b945cee20adb91bd1f85 gcc/config/rs6000/predicates.md
-8d935aff549ffe3c866f9dcfa9d9a276 gcc/config/rs6000/rs6000-builtin.def
-fd14a2221437963677c27841ec0dd8d8 gcc/config/rs6000/rs6000-c.c
-9675b0b5128d596388c45798ff833082 gcc/config/rs6000/rs6000-cpus.def
-54330971ce8f62b47f68f31d153478c4 gcc/config/rs6000/rs6000-modes.def
-da00f6c375e270a80467643901085b7a gcc/config/rs6000/rs6000-opts.h
-8f6568fd06b952b2aebd50c12ded676e gcc/config/rs6000/rs6000-protos.h
+a1ef868a4b4f4023ca201a99efa4034f gcc/config/rs6000/predicates.md
+2a81ede6340a9badead8d2ced3c0ea5d gcc/config/rs6000/rs6000-builtin.def
+4682f2c7e1614d72e05f7b669ea9689d gcc/config/rs6000/rs6000-c.c
+c5bdbffe6aa3ff8c4c116c21f46a06a2 gcc/config/rs6000/rs6000-cpus.def
+c6b59ba16925d7ffdc7796dfeb8854e2 gcc/config/rs6000/rs6000-modes.def
+33f78371b44ec32ce0515476e9e5875e gcc/config/rs6000/rs6000-opts.h
+66c1c3ecaa0fa52af799c62a772ed12d gcc/config/rs6000/rs6000-protos.h
3d464892d4463d95ff027607410640cb gcc/config/rs6000/rs6000-tables.opt
-3cb6d724d6f3099957689cf84e1824cc gcc/config/rs6000/rs6000.c
-5621920a815da1670c86af3fa77c8318 gcc/config/rs6000/rs6000.h
-6dd2cc43e0c84b0321f1863c031567a7 gcc/config/rs6000/rs6000.md
-e6e84f1bc31399685617cf4a1a97e37e gcc/config/rs6000/rs6000.opt
+7a5048de1f305f71c320d32d5e03337f gcc/config/rs6000/rs6000.c
+4e3ca38b4127c51c5f1e79c37b245404 gcc/config/rs6000/rs6000.h
+04fd9cffec5d547c9269934578d1f2c6 gcc/config/rs6000/rs6000.md
+0371f2a1342d3fcb5d6215ac34bdc155 gcc/config/rs6000/rs6000.opt
e1d48528802143c9fde5076eb841eea6 gcc/config/rs6000/rs64.md
-ed80ac892f8708fb0984d9176091a0b4 gcc/config/rs6000/rtems.h
+cffe153c5a922082f3e53a9f72f76cf0 gcc/config/rs6000/rtems.h
053e158620d93e03e5cca4dfb9fdb5c7 gcc/config/rs6000/secureplt.h
6de3a0be06280c4b673708cecd05e608 gcc/config/rs6000/si2vmx.h
d41abb901c584de2a35db0a208e96360 gcc/config/rs6000/singlefp.h
03636ed5c6dcefbc165211cb0cefb0e7 gcc/config/rs6000/spe.h
-5facad33c9fef4e775b0c6edd7fc92b5 gcc/config/rs6000/spe.md
+899ac44192250defa16c95d920330158 gcc/config/rs6000/spe.md
11b78241f26ad456c4c24d2e301d6cae gcc/config/rs6000/spu2vmx.h
-49f419bf96b5c0f1eefbaa88b9f0bf68 gcc/config/rs6000/sync.md
-7ba883f78f571203a07970ae116d6198 gcc/config/rs6000/sysv4.h
+9fe56a1b3a317020951bd2e0794de7b6 gcc/config/rs6000/sync.md
+48d27b8a272993fe2c66592eff01cc5c gcc/config/rs6000/sysv4.h
1a2f919a3dce90c9bd0c032097e9c929 gcc/config/rs6000/sysv4.opt
-94584c0dfede5b8925a5eb8b640f5dbd gcc/config/rs6000/sysv4le.h
+32ee71c067eb6d9cf41f1dc855948d44 gcc/config/rs6000/sysv4le.h
a487a9ff3cef979e51c91d36df02ae31 gcc/config/rs6000/t-aix43
302e3b21256a57e0053542a3bf992006 gcc/config/rs6000/t-aix52
f3250b9720d1149346f1ef8e21b52ea9 gcc/config/rs6000/t-darwin64
@@ -3773,14 +3779,17 @@ f3250b9720d1149346f1ef8e21b52ea9 gcc/config/rs6000/t-darwin64
24d9232649e7e5455be729d3c232a9df gcc/config/rs6000/t-fprules
ccad11982467f2d70b841bec7efd2f67 gcc/config/rs6000/t-freebsd64
4b73ff6971b1c8fbbe683358e74e1991 gcc/config/rs6000/t-linux
-328dd4b8c3f86335d8d594079c79f220 gcc/config/rs6000/t-linux64
+537890d1fe6a6e86f5b8a121fe01f4b9 gcc/config/rs6000/t-linux64
+71c0a0470047f0171a3bb4c483eb2b72 gcc/config/rs6000/t-linux64bele
+489699b655594f05bae0b429fd261edb gcc/config/rs6000/t-linux64le
+60f26523152f6a061a12cb17e987de12 gcc/config/rs6000/t-linux64lebe
58ac6a560d7101a7c69616edc41677e8 gcc/config/rs6000/t-lynx
33bb6ce3044f98e729ce9eab1ce18242 gcc/config/rs6000/t-netbsd
cd75d3393ef7ce491f9639d531ebc962 gcc/config/rs6000/t-ppccomm
a01d22497a6dfaf19f1b51c7051b913d gcc/config/rs6000/t-ppcendian
998ff807301c8f5c9a99eca62a2d0db5 gcc/config/rs6000/t-ppcgas
1b8aba690a39464c4ea9c647d73d6983 gcc/config/rs6000/t-ppcos
-9685261ed8eac071cd8c5ed265415a3f gcc/config/rs6000/t-rs6000
+0612b5d2e65e131061de927d8c2d7dba gcc/config/rs6000/t-rs6000
15f67be5f7dde11d1fe83ad15ced4faf gcc/config/rs6000/t-rtems
3876c4ad6239f10d9f17b7b34228981e gcc/config/rs6000/t-spe
ceba16be300b12ac9ad7f7921506443a gcc/config/rs6000/t-vxworks
@@ -3788,8 +3797,8 @@ f11925c88524d2fd457bf77944da1302 gcc/config/rs6000/t-vxworksae
1a8b6df4282e327608b394813a85fc7b gcc/config/rs6000/t-xilinx
937c4bf81c7314b8fbbaf1b02d8f6905 gcc/config/rs6000/titan.md
0455ba4aa9ce1d9f7175cbbaf86d5837 gcc/config/rs6000/vec_types.h
-95f4ce10f19d8a92b487d874ac0384be gcc/config/rs6000/vector.md
-be55af772bc642c7a5f199c58d9ba382 gcc/config/rs6000/vsx.md
+623a9d751ace9788bd3875a6e89b5fd6 gcc/config/rs6000/vector.md
+a7cffa7d81fba77070f2b78a3d016907 gcc/config/rs6000/vsx.md
55ee4632428151775a486a916c1aff61 gcc/config/rs6000/vxworks.h
5c2f724024335c015d76fe32d3da6de9 gcc/config/rs6000/x-aix
e6e0b24a5b8f8228e16c465d96dc1003 gcc/config/rs6000/x-darwin
@@ -3819,15 +3828,18 @@ dbfa630b44bc40188400c557bcae24ac gcc/config/s390/2084.md
fb146efd086d9001c0d468a92e9f03ee gcc/config/s390/2817.md
2162edbc9ce1aea7e5dd777928f486ff gcc/config/s390/2827.md
aad75e9cfee7b4a3ae7452e8321e3ecf gcc/config/s390/constraints.md
+70904ee44e0e3149fa54d9adb8f7ada6 gcc/config/s390/htmintrin.h
+797f6696543598b5c94e1c4422794cb9 gcc/config/s390/htmxlintrin.h
92a52bb44cb2ebf7e6fb7c8dea5af752 gcc/config/s390/linux.h
-be8743846f21af9066de8cba9e12264e gcc/config/s390/predicates.md
-fb549ecab8d9cbf16fd4acfd852005be gcc/config/s390/s390-modes.def
+6d4923ef6a6131547fce4df327193407 gcc/config/s390/predicates.md
+90bd21ef575e0643d65569d1a4f9aad9 gcc/config/s390/s390-modes.def
609500eb4414e9e848d3804134bfa79e gcc/config/s390/s390-opts.h
-77be6ad9560760beee18db2dc39a399e gcc/config/s390/s390-protos.h
-e7e5e56449f0d1d74b1c9448ec8b437d gcc/config/s390/s390.c
-17de719f00add4e6d0efb0717c3fdad1 gcc/config/s390/s390.h
-bd8f41e26383354f911db56eeef94a4b gcc/config/s390/s390.md
-3d23d388a3a4ff410bdfbb8af7160651 gcc/config/s390/s390.opt
+f8f19a8c18a096764d26229eeae665ae gcc/config/s390/s390-protos.h
+1248fec075015cf9a3639618bd335dac gcc/config/s390/s390.c
+5b6bf091210451b5008a27d870abaf47 gcc/config/s390/s390.h
+610ff5cffe636515f9461422f0a13bd8 gcc/config/s390/s390.md
+237b28c4996f7ed5b424f7458ca52c5e gcc/config/s390/s390.opt
+a6413643c6a352ed2a285f593cc2f96d gcc/config/s390/s390intrin.h
1f405766a3e2d465229b0197ef1a6107 gcc/config/s390/s390x.h
551847ee4c38fa1a7e95fd93cdb32f17 gcc/config/s390/t-linux64
e4669ad8dded968c0a14dc67f5c32fcc gcc/config/s390/tpf.h
@@ -3844,7 +3856,7 @@ c747af0360c8be518256b4b6cf5ec7e7 gcc/config/score/score-generic.md
3e991ad81d6eed806bcdfe7b6946db8d gcc/config/score/score.h
18880faf762788575ad101304d769438 gcc/config/score/score.md
c8b8c25c17cf5e839f8ce93052fd0b21 gcc/config/score/score.opt
-5960be83666a9cc6c617fdd0d705a12f gcc/config/sh/constraints.md
+ab89e2703d5fbf561e92af23400b5547 gcc/config/sh/constraints.md
d7ac9c886e9f407b86a33f4456396bc6 gcc/config/sh/divcost-analysis
862ad3aef49b4651fd77aaf83360ca0a gcc/config/sh/divtab-sh4-300.c
3333c4044a9455d56b6630c1e29e750c gcc/config/sh/divtab-sh4.c
@@ -3856,16 +3868,16 @@ e018506f9d2836d561b720e484279b34 gcc/config/sh/divtab.c
e5548c78703bb80a78213be560217e34 gcc/config/sh/little.h
03bb06cc7a728ac0925dec045e1abda5 gcc/config/sh/netbsd-elf.h
9969d0d0de1c69fd419a2e31e04864d4 gcc/config/sh/newlib.h
-46f96612ab3a3727bc7b356758c3783b gcc/config/sh/predicates.md
+aea8b9a2ebd754b960329a73b118ab07 gcc/config/sh/predicates.md
54b2dbce026e04e4454a2e40e844a099 gcc/config/sh/rtems.h
bde213ebbaee311cfdec4ae74a0a1504 gcc/config/sh/rtemself.h
478a949a555ded6891dcc98dafa592f2 gcc/config/sh/sh-c.c
981b6ec4b47c23da8b367105db12ab79 gcc/config/sh/sh-modes.def
-9257eb3435a01969664ba8d20b35c44b gcc/config/sh/sh-protos.h
-40b4f0cb9123b3cf3369a21bd5bd2229 gcc/config/sh/sh.c
+920320800240ca093fb61b7b2de8e677 gcc/config/sh/sh-protos.h
+fec33e4e6bdcc74232c73f39d5888fc1 gcc/config/sh/sh.c
43b4250562a6c95b5e25a336154bde1d gcc/config/sh/sh.h
-b683d9031e8486f4f8045c8874ae40c5 gcc/config/sh/sh.md
-f870631f7d199a77aee8c89b424d1c1d gcc/config/sh/sh.opt
+e2fa7620de8478f7830306271486b89e gcc/config/sh/sh.md
+0ee1ff36ae1410876f042e70aeba351e gcc/config/sh/sh.opt
1263fa72b2e5f7cbdf81a98d33bf721d gcc/config/sh/sh1.md
c546660841ebe9ce572a566753eca775 gcc/config/sh/sh4-300.md
37fb2d37b97ff3859b60e83455c7d37e gcc/config/sh/sh4.md
@@ -3901,7 +3913,7 @@ fa71ec60c7d509ba506b07a396ae88ba gcc/config/sparc/default-64.h
75280f2acefb40bc22f8220c41c11da0 gcc/config/sparc/driver-sparc.c
252d2589f2835388424f649a726febab gcc/config/sparc/freebsd.h
9169b21ce0e85d63bde44cf2efbb4e65 gcc/config/sparc/hypersparc.md
-cbf1cc6b395c13a0efa0d7c5681d0894 gcc/config/sparc/leon.md
+2f565efc7e7d18654acb47ce1dee9dc5 gcc/config/sparc/leon.md
a5a0061777c2c1da281f688a5e19eec4 gcc/config/sparc/linux.h
093ff99b24363952c35674ad16f5b4fb gcc/config/sparc/linux64.h
2bef0ee7b23cafb5e9621bea6bb75e98 gcc/config/sparc/long-double-switch.opt
@@ -3918,15 +3930,15 @@ d004f9a3eaebfaf8c55b760890d447bd gcc/config/sparc/sol2.h
4782cc3ccf1bf5decb2fa3f665cc96f5 gcc/config/sparc/sp64-elf.h
b75e22d37c9c2f8ad66d81fc06b17f8c gcc/config/sparc/sparc-c.c
02e826fd35d286ee705e2897332381f1 gcc/config/sparc/sparc-modes.def
-a63218af70abc2688f35e13614930208 gcc/config/sparc/sparc-opts.h
-79c4b40cafeb9e3e0f6bac420c81ea13 gcc/config/sparc/sparc-protos.h
-f964a2b0b798180e7b64c4acec0988f5 gcc/config/sparc/sparc.c
-c43cef8b1ff14eb630e7ef69268baa37 gcc/config/sparc/sparc.h
-e22b95ffb78b46d132719ac69055a7fe gcc/config/sparc/sparc.md
-4a7396c3931f8e1b4b161cef5c3b3eab gcc/config/sparc/sparc.opt
+6ac72e8972c90aa6919551fa2c61dda0 gcc/config/sparc/sparc-opts.h
+6e921dbab76e82074f07450f33d791dc gcc/config/sparc/sparc-protos.h
+adc7aa7cd9b2efbdab5593c101c243aa gcc/config/sparc/sparc.c
+e16df148c254e989317aeab889eb23c5 gcc/config/sparc/sparc.h
+9ba9f976ad900e7c1b00103bd6d6ccc6 gcc/config/sparc/sparc.md
+183248f701c0160176b55a290b499b74 gcc/config/sparc/sparc.opt
4d6cb72fa0b635c160177d0e310af6a8 gcc/config/sparc/sparclet.md
a333cb7df463e2e0d1a3d6484f2a8fcb gcc/config/sparc/supersparc.md
-b9ddb062d96fe3866e36ebd74548d8b5 gcc/config/sparc/sync.md
+87e242c68165af872c79e4b96f42afdd gcc/config/sparc/sync.md
432bf1dc230feec03fb4b278c9b44240 gcc/config/sparc/sysv4.h
5c5bb64a3a720ba26e17499e52069315 gcc/config/sparc/t-elf
48f511ffae2603df921d13ce2cc38f4d gcc/config/sparc/t-leon
@@ -3934,10 +3946,10 @@ c3cf074012369004d33351087af8fea8 gcc/config/sparc/t-leon3
4a7d3f368a24d549fabaafbe44fcb134 gcc/config/sparc/t-linux
6fea7e8cffd255398bc2386a77b28cf0 gcc/config/sparc/t-linux64
75987b7fdc6fa9c9ff2108ff1003e6d2 gcc/config/sparc/t-netbsd64
-6b0cf2769c3d3e9d9e1b997ff0faa938 gcc/config/sparc/t-rtems
+bbcf8d830c02487bc0cf93b576238ac2 gcc/config/sparc/t-rtems
016674912d270b254d697426c1dab9d9 gcc/config/sparc/t-rtems-64
511770bb20c2707fabd4f231ce8b83cf gcc/config/sparc/t-sol2-64
-f44f86d61d6f74675e30f41a11e08a60 gcc/config/sparc/t-sparc
+68e90f6783d11c0214cd7bd73c6e3589 gcc/config/sparc/t-sparc
b04597637b0c08dd3e6d1a40c43e76b4 gcc/config/sparc/t-vxworks
b3fa3a5d1a3157fda7e6516df50a8223 gcc/config/sparc/tso.h
c27670f15f58b2e0475df7587cf9a6bd gcc/config/sparc/ultra1_2.md
@@ -3988,18 +4000,18 @@ f62347fb17ffdccf93a30b860f9f4dc2 gcc/config/tilegx/feedback.h
9ce0e91fe77023ea088c2ef2ecf4c11b gcc/config/tilegx/linux.h
f9feaf0a320438636fdd5c0b7cb9b9a6 gcc/config/tilegx/mul-tables.c
60a01c79a6edc2f080956be9aaec1614 gcc/config/tilegx/predicates.md
-57576a68c815cc90aa280ea12340e198 gcc/config/tilegx/sync.md
+4cd24bfc1b7d9cd8a0afc1dac66bea21 gcc/config/tilegx/sync.md
7bf5713be56996f566a86927d32ac67b gcc/config/tilegx/t-tilegx
f4e30558c131f948951b7f6ad2bce237 gcc/config/tilegx/tilegx-builtins.h
-00d613fc87c170fc6464419cecc36e14 gcc/config/tilegx/tilegx-c.c
+1d467b437056f13e48303a2dcc7b3204 gcc/config/tilegx/tilegx-c.c
e114b40e7bb23ee50d8e216ef751fe5b gcc/config/tilegx/tilegx-generic.md
9e765b8f3a308d77b279e9564f93dede gcc/config/tilegx/tilegx-modes.def
ea41683402be9e3caa9f21abf2437d65 gcc/config/tilegx/tilegx-multiply.h
6aea463bc58500d1cc0137f65b1d58f9 gcc/config/tilegx/tilegx-opts.h
f83850fbb29e4a921fe9bfdcd5802ca0 gcc/config/tilegx/tilegx-protos.h
-df10642a748accc3743d0743f729077e gcc/config/tilegx/tilegx.c
+aafee20d23057df15e838c8c1172b3e6 gcc/config/tilegx/tilegx.c
9103fc4cfb2774454c296fc2951a387d gcc/config/tilegx/tilegx.h
-2fd1c8a2047f6eb591a55e62caaffc39 gcc/config/tilegx/tilegx.md
+0854dc463e53695d2f2b55591920172f gcc/config/tilegx/tilegx.md
36dac282ca58905798310e998ae97794 gcc/config/tilegx/tilegx.opt
bc176ed3cf54ea95cbcd8c10ec59e51d gcc/config/tilepro/constraints.md
f62347fb17ffdccf93a30b860f9f4dc2 gcc/config/tilepro/feedback.h
@@ -4009,14 +4021,14 @@ e7752726ffbc69c3ec389e20f1117c60 gcc/config/tilepro/gen-mul-tables.cc
d4ad4079ef03b793647d1b4620be5088 gcc/config/tilepro/predicates.md
d461bb0607d54c4bb58238f1fa5dc97d gcc/config/tilepro/t-tilepro
a123ea0c75de3595de5c78d3bf86f266 gcc/config/tilepro/tilepro-builtins.h
-4a3a477d356103b27f6c0f9ed7879a5a gcc/config/tilepro/tilepro-c.c
+f751a40869f3c436531bcf3752a1cd17 gcc/config/tilepro/tilepro-c.c
5a025ff9b78fa8168047a23997a875be gcc/config/tilepro/tilepro-generic.md
3efc2e67e2f15c8cce1e11344b51043d gcc/config/tilepro/tilepro-modes.def
7a8e0b91f5450a35736e028c44581507 gcc/config/tilepro/tilepro-multiply.h
d9c0529b9ce10ead06a265dfcc93be2a gcc/config/tilepro/tilepro-protos.h
-df610bf13ca3569d0b25d5e55848c21c gcc/config/tilepro/tilepro.c
+0a7c5ebc3d6733792dc557052d2a58f4 gcc/config/tilepro/tilepro.c
42e30454226c2a3a948f6697f46f1aed gcc/config/tilepro/tilepro.h
-fe93c42594c859853ae761253160d0f3 gcc/config/tilepro/tilepro.md
+13dcd247eeb62087712c72540c190f00 gcc/config/tilepro/tilepro.md
cff451a2e292f13129a959291e3281ff gcc/config/tilepro/tilepro.opt
17fd5cabcc31b720b23bad47cf7fe84c gcc/config/tm-dwarf2.h
cea004eebb176efb4c93b8160c374fee gcc/config/usegas.h
@@ -4088,14 +4100,14 @@ e467d0083111aa3269de2554300f8334 gcc/config/xtensa/xtensa.c
e8328aff294f934fd782b1db6da38f15 gcc/config/xtensa/xtensa.h
1100c938f8e867a8722d27de82af74f4 gcc/config/xtensa/xtensa.md
7a962c824317ff1c87b4122986416628 gcc/config/xtensa/xtensa.opt
-311c850c87c466275493145d2f98644c gcc/configure
-915fa4959c3fd7bb2c924eff9762bd4a gcc/configure.ac
+6415f06154ed665155b469779d5c3409 gcc/configure
+d2762ae02534d31cfc7e1a675006a1d6 gcc/configure.ac
7d2fe7eff451ca9f6f9f6d4f3b901ad3 gcc/convert.c
6e8b7421b0adf01e8252b45e8948f1cf gcc/convert.h
277effb7fe5e9806d8e9575b9beae14e gcc/coretypes.h
2d6dccd6278a672ff3a8fb498ea867f8 gcc/coverage.c
ed37861da2131579a9b43a44244db398 gcc/coverage.h
-cea06768388d7aae2acaf3c757372b87 gcc/cp/ChangeLog
+5bf89a796c2fba5e88060fcf86f42db1 gcc/cp/ChangeLog
d271e3663538ba1f3281cab3838e92cd gcc/cp/ChangeLog-1993
f5a44adbc05521162350ca409d1d95ce gcc/cp/ChangeLog-1994
ac55db48d964cb5469ff03c1cd3ee04d gcc/cp/ChangeLog-1995
@@ -4120,56 +4132,56 @@ c1c7801b9b0f379e702a4f6cb83972e7 gcc/cp/ChangeLog.ptr
9aa3cd9f75c785de9f51446e3f295515 gcc/cp/ChangeLog.tree-ssa
d0adaf2e34318d9a6e06563673d2baeb gcc/cp/Make-lang.in
a5696a858cc9f2fe6b75200cd0e01601 gcc/cp/NEWS
-0efb24d3b1a7490a3bc439c32615ff11 gcc/cp/call.c
+9c2890a3e3569d39e8deedd74fd92513 gcc/cp/call.c
4668e3154b2720dece7f59a74768fc4a gcc/cp/cfns.gperf
3e5da5c104ccaeefe88cc051c49fa087 gcc/cp/cfns.h
-6e8d760730cda99e2231d2fc7ed79621 gcc/cp/class.c
+b2e80fb525dee9d54114cd650a1e4981 gcc/cp/class.c
b6e8c949212a55c4140d5853853b8832 gcc/cp/config-lang.in
8bc8e24bd8c2256e9db7737a9319f740 gcc/cp/cp-gimplify.c
b58cad425e7a757d33958109aec0d5f2 gcc/cp/cp-lang.c
39fc1c8e9a41f6ac537e2688ecd93fa8 gcc/cp/cp-objcp-common.c
bebed592086c4f5998cdbb22cb15c4ff gcc/cp/cp-objcp-common.h
de5f0608b3ed90846da44a32c5582a52 gcc/cp/cp-tree.def
-d69cb2d52883b8af77866821bb0d1865 gcc/cp/cp-tree.h
-4e3d4f7f732c2d345ba63215939722e0 gcc/cp/cvt.c
+d825d7ef33d0977023d58a74cdc7c1ef gcc/cp/cp-tree.h
+9340db5954098dfa6a77ab16607c4cd2 gcc/cp/cvt.c
25917dc25eca9b0bbeb42839464fac3b gcc/cp/cxx-pretty-print.c
61f5739c6f20cceac3a22d7e2728b8f6 gcc/cp/cxx-pretty-print.h
-d737e22033ea3223ad003c0e08314c7f gcc/cp/decl.c
+b7d543c599e2aa112b34eacfacf9842b gcc/cp/decl.c
01f4c10ab7e6c042a9b220a017a7caeb gcc/cp/decl.h
-6f178cf22ed4fb13f70c62382bc287e7 gcc/cp/decl2.c
+3e0c8128a72c9ffdb5353922237a91d4 gcc/cp/decl2.c
b57a052726f7af023695d9a46ef9b38f gcc/cp/dump.c
59c0b788a8f73b40fefd139aefb24734 gcc/cp/error.c
-fbec6d940fa3cee0b1fe26036b26e5a3 gcc/cp/except.c
+5da2018acfcff43008c62de7b057d959 gcc/cp/except.c
ddcf267b9cc22edff977fe1cf38d8f2b gcc/cp/expr.c
45750dc2e50ca53a533ab357de22b304 gcc/cp/friend.c
beb71c78ba1fc9349e7790c116460ed3 gcc/cp/g++spec.c
-13cfdde692c67b469a76060cfe2541cb gcc/cp/init.c
+521cf47d8d1ae09f3f56e23b8b9f2b01 gcc/cp/init.c
4590371f76a1618ecb16e2dbb62bf330 gcc/cp/lang-specs.h
98dad6b273901f5b3fbaae9223500b78 gcc/cp/lex.c
-1d0fd225aacaca48c253a6685f0e843a gcc/cp/mangle.c
-3fb3fe84709c73fa93fff3609ffb6e46 gcc/cp/method.c
-949d7d9a17f4b98367c721368d79e4ef gcc/cp/name-lookup.c
+b76f2b9c12a9f0cdf5acee6a3700a44e gcc/cp/mangle.c
+41fa8841e8d6a9a65e424448a51ab85a gcc/cp/method.c
+b8bbc0f26a8b038d7c805fc4d7919a28 gcc/cp/name-lookup.c
36b461e0a914364150a6ee35950d3c02 gcc/cp/name-lookup.h
872eacd3a268bd51abeaa61950e9219f gcc/cp/operators.def
20a6d327a96b86d209c489a7e22d2b33 gcc/cp/optimize.c
-82e0f848421b824b78fc274867cd7647 gcc/cp/parser.c
+a02d87ff261ba0eb2ad86760fd906ccb gcc/cp/parser.c
cbb7a6f8e3c74ce2162166e304006c6e gcc/cp/parser.h
-5c28fd72adcd34e484e887682b24d68a gcc/cp/pt.c
+6a544286e3eac0cb77c9faed105095cd gcc/cp/pt.c
e7b848ff3b21f9c97cc834f363799159 gcc/cp/ptree.c
f47fed7918263c05f0eea80cd16cbfb9 gcc/cp/repo.c
f916295036ceeea0b4c4439a62059066 gcc/cp/rtti.c
6aed8541a18e3ed22eb433507aa6e60f gcc/cp/search.c
-5f1ce483a77f6a7aa123fe2fe48ced53 gcc/cp/semantics.c
-e2fd97bdba991a53ae8cbf9fee45c59e gcc/cp/tree.c
-aa42072b096c8ad5c35bef94b67a9b20 gcc/cp/typeck.c
-603a464d6e07890e5dcee854eae834dd gcc/cp/typeck2.c
+ac4d90fe9c378937e026674791dcb613 gcc/cp/semantics.c
+b5f0b2bfae08ac225ca922ec2b6436c8 gcc/cp/tree.c
+4656c92f2b27ff8d0ea83f211324104d gcc/cp/typeck.c
+1203164d04c1ae45112a8c9fa9d115f8 gcc/cp/typeck2.c
a1bca2fdf18733f4b65c1fa77bcd071d gcc/cppbuiltin.c
7d95b664f39094554ee524a3ceadfee7 gcc/cppbuiltin.h
31d9d722a592e33dfcfefb895549db88 gcc/cppdefault.c
fc7eda08443b47edf0b4f0cff0df7268 gcc/cppdefault.h
548b1aa955e2c7309e3f1fdd1e9b5c2a gcc/cprop.c
-e3ee7c1bdb016b201f5a839a6dfa3286 gcc/cse.c
-6cb81887108d9955dfeee37093e62598 gcc/cselib.c
+f1ab163585b8c9e123d99d470cd6177a gcc/cse.c
+34a12940cbf903ff6f98fd71cb664d61 gcc/cselib.c
a2b22364a4a672bd498a658191224796 gcc/cselib.h
1ded054093de910d9786c62bc4fe8cc6 gcc/cstamp-h.in
fea40ebe639b21e2248a3d0157fbf213 gcc/data-streamer-in.c
@@ -4198,9 +4210,9 @@ add2c52dd3bb8a7f60c69f44a7390b84 gcc/dfp.c
e75a87c3a73567191a1d647134a2dcf2 gcc/diagnostic.c
df9f056a8154820d69a97f1f312f12e1 gcc/diagnostic.def
02fc04f45a8003c350bbdd6553ae9a50 gcc/diagnostic.h
-0c21ab748907c727c9caa1f024a94ee9 gcc/doc/aot-compile.1
+4b81f492fc7f75b1f70223ae55f06ee5 gcc/doc/aot-compile.1
4bfbab1c5884cd362fd8e2517a846021 gcc/doc/arm-neon-intrinsics.texi
-af13c92a7f47f7c07d1346b23cbaf1c7 gcc/doc/avr-mmcu.texi
+418a1066cf3d3e579919b3ceba042431 gcc/doc/avr-mmcu.texi
e71b6352a1361e166e061ba42eb47717 gcc/doc/bugreport.texi
ee8f2b032786af921472100e667bbcea gcc/doc/cfg.texi
fbf2940011e16af51c303a45945872f6 gcc/doc/collect2.texi
@@ -4209,43 +4221,43 @@ fbf2940011e16af51c303a45945872f6 gcc/doc/collect2.texi
39e3a032e624656d48cf132bd0379946 gcc/doc/configterms.texi
113270a91fc21f6e7fbe7649b7f30a02 gcc/doc/contrib.texi
e39c1eaf3f355358055474f05a46b069 gcc/doc/contribute.texi
-d72d86bf2c2dea3ec79174fc3931bf0c gcc/doc/cpp.1
-2f233406893c67ec6889e4c867dd106b gcc/doc/cpp.info
-c50102059f5e19d134361cd6cd4ffe19 gcc/doc/cpp.texi
+39457ede7508b697ac867d7a7448b58b gcc/doc/cpp.1
+c3656e1d1702c37f4a84e5b1d36a16b3 gcc/doc/cpp.info
+441226d41a68854844d95e32b1933845 gcc/doc/cpp.texi
02824f5f17e5eca21fca7409a86eba49 gcc/doc/cppenv.texi
-f0e8402b83bdcd8f31b91e412961851b gcc/doc/cppinternals.info
+60288a417c3a7cd0479bb8e42cf1b907 gcc/doc/cppinternals.info
7c30c21d8684505c7ac6ebf63487bc62 gcc/doc/cppinternals.texi
60cbe6eeb5b2f3f885ae57d83ccca8e2 gcc/doc/cppopts.texi
-fe7cc6c46258af1b18b0e40e6a752fa0 gcc/doc/extend.texi
+19904cdf0f9dbf5e0d93ded3966b5a95 gcc/doc/extend.texi
b9edf829225f1dd35fc344fb797a73f8 gcc/doc/fragments.texi
f16e1063f3a2f89946d13908028f3043 gcc/doc/frontends.texi
-e48135c3bfa1fd68a65f77e9646a8c08 gcc/doc/fsf-funding.7
-588b79876bda2b435f209e9b7b70170d gcc/doc/g++.1
-f353d1e6744d9e88416b606a42f495fc gcc/doc/gc-analyze.1
-588b79876bda2b435f209e9b7b70170d gcc/doc/gcc.1
-43a9a4d74ed376a6562a023a62089d8f gcc/doc/gcc.info
+0127237381923fd9eb870fc88bbff722 gcc/doc/fsf-funding.7
+d9e755ea13ba2fe637049104fb03c1aa gcc/doc/g++.1
+790c49f38f0aaacf30af880fda7b7005 gcc/doc/gc-analyze.1
+d9e755ea13ba2fe637049104fb03c1aa gcc/doc/gcc.1
+214ec1ca35bb1ac420c6455202af18bf gcc/doc/gcc.info
69b61caf2f51ec5464380354a6c1af45 gcc/doc/gcc.texi
-bae53faa7bd2ce9cb1edcbab48852242 gcc/doc/gccinstall.info
-746732367624e9fcdb059f29fb5b053e gcc/doc/gccint.info
+310a3c56009132dc045f37eb62f9d780 gcc/doc/gccinstall.info
+63b1b0d8a2dea7c67a6780bd249c680e gcc/doc/gccint.info
6d002f7ed488c1b685d947634f2fd99e gcc/doc/gccint.texi
-0ee2f669c375ad408376ae990e6f029c gcc/doc/gcj-dbtool.1
-d624feb8f016bd58f98ed2d6a015c93d gcc/doc/gcj.1
-fb530072b25342404e9503dca5ee6f90 gcc/doc/gcj.info
-3691410685e4cdcd89e81cbea1c29f33 gcc/doc/gcov.1
+30ea9c6f6ac05d707a2babfb60f80c5f gcc/doc/gcj-dbtool.1
+2b57b4aa3ae255777d06386206024c89 gcc/doc/gcj.1
+d7ec7755a32d9681c8e045939625380d gcc/doc/gcj.info
+f09439f5af348e495d98fada567ff9ec gcc/doc/gcov.1
053bb48ea7f717b259c38318f71a215e gcc/doc/gcov.texi
534c71bc4d5016f14f06cc59d08229fa gcc/doc/generic.texi
-7421e23bad97141457b09d83f6c22c55 gcc/doc/gfdl.7
-dd5ee2b3089ec777a0bafbd72113bf08 gcc/doc/gfortran.1
-a234170a55b3fdc24c31320523f0e3d9 gcc/doc/gij.1
+251d386fd34836a3973d8dba64ee683b gcc/doc/gfdl.7
+127744b003b36ce174f86ad8abec500d gcc/doc/gfortran.1
+59f6cef63446bcfecd154b811cdfd53b gcc/doc/gij.1
3bc8d6f48d4261e4343c29a08dd83fa9 gcc/doc/gimple.texi
290370669f02bef1502ada9273e5261f gcc/doc/gnu.texi
-591dbca42b8e903c194cc474e1c0a247 gcc/doc/gpl.7
-4a4864270f0fd50f57f4f928d32f1a43 gcc/doc/grmic.1
+ef4a130691f676f4705dc29e2c76bb2c gcc/doc/gpl.7
+ebe363c0febfae56c57beae006b67469 gcc/doc/grmic.1
62ae21dd8415d4629be53ad0c18c07b1 gcc/doc/gty.texi
91b853490a8a6fcf664b92657a9ae2f0 gcc/doc/headerdirs.texi
453cc50c14627283ae92ac835a026e6b gcc/doc/hostconfig.texi
fad91d6cb415eed39a4bc882e3159b66 gcc/doc/implement-c.texi
-a9d88ce2f53b3310d25c2f5143d8edac gcc/doc/implement-cxx.texi
+f4b4e29efb521e5adfaf625224865384 gcc/doc/implement-cxx.texi
c9c72c6be45fb9d057a5590dab9dc5b2 gcc/doc/include/fdl.texi
8787976f426cd52da24a856cd41d87be gcc/doc/include/funding.texi
c0618b1390827c035f3d48e7360bf0f6 gcc/doc/include/gcc-common.texi
@@ -4255,24 +4267,24 @@ c0618b1390827c035f3d48e7360bf0f6 gcc/doc/include/gcc-common.texi
c6b6785b0b523679c6d41c25b9cccc45 gcc/doc/install.texi
95988b4d859b4aa130ee97cb1138477b gcc/doc/install.texi2html
1aa2c4a4454077d6ba564cd2d2b1db06 gcc/doc/interface.texi
-27f0d4eaa12da06560792a91a56aa8bc gcc/doc/invoke.texi
-d97bd549c8cb24673649289909f2b27d gcc/doc/jcf-dump.1
-9263e32dc15b34a750f6ab1617f80b2b gcc/doc/jv-convert.1
+197abd881492ea3e473847b8a20527bd gcc/doc/invoke.texi
+56f649b570d6b8f8f65a8a7f0e358ee3 gcc/doc/jcf-dump.1
+40175add3f67fe18daa8e8e45c2580fe gcc/doc/jv-convert.1
b923b4b2eae6b79de44136ab176a1ac0 gcc/doc/languages.texi
939a4e9504972e6a945b121c1c034287 gcc/doc/libgcc.texi
fc7eb0cd34527600ed376ab397567cb6 gcc/doc/loop.texi
fb20b06d02601d320bc9848cc6f611a1 gcc/doc/lto.texi
90f46d3953b0bab19e92beb6a2b5db8c gcc/doc/makefile.texi
-eced7540c96f029596c2ecbe3cf307d9 gcc/doc/md.texi
+eaf28c2e3583114f18301f38d68691b6 gcc/doc/md.texi
1f77425916d899f06d9e014662b791d3 gcc/doc/objc.texi
28d42160721a777e0328a931998a2932 gcc/doc/options.texi
a4bc7518259e39fb793e0ce7891a7b4a gcc/doc/passes.texi
bd754972af866dcd903b7dc93aff4f85 gcc/doc/plugins.texi
959d744eb4f6390f76608288d18a9139 gcc/doc/portability.texi
-b95b6ee2ff26c9e744f86dbc798ee172 gcc/doc/rebuild-gcj-db.1
+4c192e35949d59587c5162b27622ccd8 gcc/doc/rebuild-gcj-db.1
cf83bddba61bf3df2fba5ed6fd389e1f gcc/doc/rtl.texi
35b0914f1d92947f75df771e34ccceb1 gcc/doc/service.texi
-b4b1a0826a0e0694cfed33674937afa6 gcc/doc/sourcebuild.texi
+fb74dbe47e312d1020a68820b1fdc68b gcc/doc/sourcebuild.texi
cd25f37758cf52ebb34bc9f4e9f93319 gcc/doc/standards.texi
170d6c1d49b073d0eec0683fdd42261d gcc/doc/tm.texi
86951a037ce4341916de7a23a45457d1 gcc/doc/tm.texi.in
@@ -4284,7 +4296,7 @@ af1a458a73d921649868a0f44cbf9dc7 gcc/dominance.c
78bd9858ef99fd44de60f858f33faf6c gcc/domwalk.h
d876a5764bc920d72ef37b85bae2e82b gcc/double-int.c
d62af6dd95e204ad3b8c408fcf53ede0 gcc/double-int.h
-9e79a11f040f46de5f1a91c0449fdb6b gcc/dse.c
+c6aa541b71a142661bfd4880f6ff2985 gcc/dse.c
f8e3340a4ada8a5f11b6c7f4cd5465ad gcc/dumpfile.c
c2ceb9f21632f3fde50685b3493283ec gcc/dumpfile.h
9ee16d7b8619a2e56b05cdd2f7026adc gcc/dwarf2asm.c
@@ -4301,20 +4313,20 @@ a4ae0b091656152b1d43ac556c6d2821 gcc/dwarf2cfi.c
0120398ec00f6d49ed232142ded227db gcc/except.c
dd5b502ae8cb8aac91b3c13e6ea5ccfa gcc/except.h
93c33a0cf1e0e3f59d71b257b2b7598e gcc/exec-tool.in
-0b80bac63bf75995b4e7ac10d03b6e6a gcc/explow.c
+9048721952c370d0b68d83fff2e2b5ea gcc/explow.c
fb9da3a428d708e90d13d30e22444458 gcc/expmed.c
3b3170f98f4cbedf560e72f2ffd3e5f3 gcc/expmed.h
-d56ec831a076534db96954849852107a gcc/expr.c
-1fbba4512061e09ca2bcf40a5f970dbf gcc/expr.h
-e65854ecda471fc3b5a2b815fdc61c1e gcc/file-find.c
-4e245017429e2a2102de48cf32ebd59d gcc/file-find.h
+d6805d791a1f8b55797d9acdcaecfffd gcc/expr.c
+cfb468a404fba59e937f39a667f7486d gcc/expr.h
+014008d01729bc9cb46c49b36e47ed73 gcc/file-find.c
+2a6edc19b20daab7de76d6fd01d0f56d gcc/file-find.h
8e474617b91fa6ac98e9f4116a4a09b3 gcc/final.c
90481cbbee3777f3dd8bde5fc37da5ca gcc/fixed-value.c
8a229e17f465e980e8af273fc426db78 gcc/fixed-value.h
1ed59924f8844366de01c2dfa6fc66e1 gcc/flag-types.h
ed2aae469fdd4b6cc5194ab957a2f03e gcc/flags.h
-e92c676e0f37e7ea6c02e4f497efe617 gcc/fold-const.c
-4ff79e88c5cb8fb42f02cf907bf74c17 gcc/fortran/ChangeLog
+e24b8d866007f47339f2a43b68ad274f gcc/fold-const.c
+49bf53c647ede89e8c0e709a339850c7 gcc/fortran/ChangeLog
3330102ad3a0217cba963be6b5eefd58 gcc/fortran/ChangeLog-2002
d000ab985b1eeb1ad5749f98b8fef99f gcc/fortran/ChangeLog-2003
bf42f94f0c51dcc7d8051cc7fda1efdc gcc/fortran/ChangeLog-2004
@@ -4332,35 +4344,35 @@ d63199226d39368ea9a8d6c440bb1b1e gcc/fortran/Make-lang.in
10af7632e374ac2c7fba547c037ddef4 gcc/fortran/arith.h
4d4e33dc4af5291cddc84320daec02fe gcc/fortran/array.c
a143230e82129a2bc96046b1c570f85d gcc/fortran/bbt.c
-fcd3a28ee4e1df8f865389042ebbefcf gcc/fortran/check.c
-d1f3c90ec1bdbcbcbf8b5db2dc230809 gcc/fortran/class.c
+0833be1cb231aab3f8d2eb99a0a647bc gcc/fortran/check.c
+161a789b40d05c5493bff16b9d56ce0e gcc/fortran/class.c
0bb177494ebfb65b93599a2ca9858101 gcc/fortran/config-lang.in
c556a947f0977d106a22e1096c7ebe55 gcc/fortran/constructor.c
23c42dc62fa501b6d9efa1c2384c17fe gcc/fortran/constructor.h
4f91793aee4137b63a1ba517129b51ac gcc/fortran/convert.c
-e539a7d8d8ed26823363245044b06e5f gcc/fortran/cpp.c
+840552954db5087acd2ed593c4570868 gcc/fortran/cpp.c
57f9dd510838afd011f009b1e9d88c4d gcc/fortran/cpp.h
1c3d5c14546de2295d9e8e2e0ca620ca gcc/fortran/data.c
fe102cf4acc58e54bcdd4e67c71560b8 gcc/fortran/data.h
-df62744b17457b16fa37b60ae89fbac9 gcc/fortran/decl.c
+d9ae520a89f3ff61566b047fd4b33bb5 gcc/fortran/decl.c
46c1bf999823ed42c4e0d43d5a4e332f gcc/fortran/dependency.c
6fe596fb4e72d17ff89aa5be5066f218 gcc/fortran/dependency.h
-4a49efe66d19280c9b956a6963c4a61e gcc/fortran/dump-parse-tree.c
+a99de039c0fc2fa7f9baf0ec60f9461d gcc/fortran/dump-parse-tree.c
38ecc4546d797e4b9b77fcb8e0309e71 gcc/fortran/error.c
-16f72adffecf05fa09374b2380f19d0a gcc/fortran/expr.c
+119cc9f0b29052ee7078dd8ba104629e gcc/fortran/expr.c
45710159b257a307a31661d761982b4b gcc/fortran/f95-lang.c
-809f2e3a8b839022851f8d4ecf31dc72 gcc/fortran/frontend-passes.c
+4ba37acfb15094612a8391be183eafe3 gcc/fortran/frontend-passes.c
05bb4858a9a865a30dc4c1c8082427de gcc/fortran/gfc-internals.texi
-59d0a123c188023bdb8d2a5fb238de1e gcc/fortran/gfortran.h
-ed44b9837d87102bd90a7fc777c01786 gcc/fortran/gfortran.info
+219b10593ff8f2c04c576f01557c2963 gcc/fortran/gfortran.h
+6dfde9dd5eefd95b08ae93e1e98c1365 gcc/fortran/gfortran.info
08b1538c6c9d0bbaa8da80b18bfb9fd7 gcc/fortran/gfortran.texi
73a639129e92c89d873219c2af0c14fb gcc/fortran/gfortranspec.c
-1101c0f27dde58a043ec2980f5a3f1fd gcc/fortran/interface.c
-8bc1da83cd83b8d92b598e9fa58d7ac9 gcc/fortran/intrinsic.c
+51fd5501bb5d3ecbbf2d1446e9d51a7e gcc/fortran/interface.c
+09d34c9ab83e45437dc8a0980371f4f1 gcc/fortran/intrinsic.c
4a3423bd1dd13b19872f978074c97642 gcc/fortran/intrinsic.h
-5b4911828e900e92c90a395aa0d1c799 gcc/fortran/intrinsic.texi
-908ab309271fb27ae67adc49cb0f68e3 gcc/fortran/invoke.texi
-54756d3680eea2b743aeefd91440a44c gcc/fortran/io.c
+359a26df1e407f1176f865cf5007a364 gcc/fortran/intrinsic.texi
+fafefc228ebc105bc107684ee4415986 gcc/fortran/invoke.texi
+94aafeb3809714fb2b1c9ec210e6c115 gcc/fortran/io.c
891646dcc48fbf762d15231d513529de gcc/fortran/ioparm.def
f10da363d65a2ec21baba9252806dcc9 gcc/fortran/iresolve.c
0ee4a917b5fe12ea039a77f473e2ac37 gcc/fortran/iso-c-binding.def
@@ -4368,35 +4380,35 @@ f10da363d65a2ec21baba9252806dcc9 gcc/fortran/iresolve.c
84edf7c8dcecc9bf8eda92dea95e9c64 gcc/fortran/lang-specs.h
eed737c6d8bf2cef95e7993d147a1293 gcc/fortran/lang.opt
7440739cad63a7c456b17e9be97545c2 gcc/fortran/libgfortran.h
-f7388b4993b983fa59b8dd1a1b9727e0 gcc/fortran/match.c
+0efaa84b3161f777b2538a884b47584d gcc/fortran/match.c
7cf341657aada6ae8555c5805e2634a6 gcc/fortran/match.h
08bd88d78f50f4eab24194b95c6f4ed7 gcc/fortran/matchexp.c
755064d40baddcd119d05e0bd7480c77 gcc/fortran/mathbuiltins.def
3a2af8688ea886e70abd88d5600c59ea gcc/fortran/misc.c
-31ea77d1f3b8e79834ab828075af3014 gcc/fortran/module.c
+a88d4d276aa67ff652c375fcd180051d gcc/fortran/module.c
2124ba47c440011b3bccc6ea2b184fe3 gcc/fortran/openmp.c
27d9b99db693336fe0faeafd4f5c1a7c gcc/fortran/options.c
-d0c7270c8b0f0d65d215b56d02216f54 gcc/fortran/parse.c
+c4d9a393cc9de45de8a06779e7726e58 gcc/fortran/parse.c
b88644b4efd366ba77747907326deb00 gcc/fortran/parse.h
-a061e311f1cdf443a43bb948d20342b6 gcc/fortran/primary.c
-26cb41a46f8d85b40f7c758d0bfd24f1 gcc/fortran/resolve.c
+ba6c1378b7cbb9e653b43e7899231cfd gcc/fortran/primary.c
+c137409c9d2dd5e384a09fae5294b6f7 gcc/fortran/resolve.c
6ff7107ec2833891b530cfa903efe6a1 gcc/fortran/scanner.c
-2771cd8ef1d25e89209feeaeb11a552f gcc/fortran/simplify.c
+824484664b8cd7c8e196341027283ffa gcc/fortran/simplify.c
a565e159d186cbaa127c6b44d388b6b3 gcc/fortran/st.c
-858c69d40a96e1a3c737b1cfeeb96caa gcc/fortran/symbol.c
+fc1c9fce6c0047fb94818022298112a9 gcc/fortran/symbol.c
809dd4637fbe05e624166de3eda72990 gcc/fortran/target-memory.c
ca7c1acc0e3997a47f70eea33ac5b477 gcc/fortran/target-memory.h
-e0172f4de52b70902943027db0abb51d gcc/fortran/trans-array.c
+b66a37ac62df14863c1ed23a09440a86 gcc/fortran/trans-array.c
893c2fd62d74117f50c9db52280c2437 gcc/fortran/trans-array.h
c1f19bac05b796a4657d959197090d7c gcc/fortran/trans-common.c
d20eed979de96ec592a6451b46ac4269 gcc/fortran/trans-const.c
0c13272845dfd5152bae2845d0948abe gcc/fortran/trans-const.h
-da20820d7064cf2f8ac97940ae66dccf gcc/fortran/trans-decl.c
-b4e9b8e2904682b0227e77c779fc0837 gcc/fortran/trans-expr.c
-da2b55ca00df503ae000d3a8999cfe05 gcc/fortran/trans-intrinsic.c
-e8f2f050d016b608d5cfec6e79903a11 gcc/fortran/trans-io.c
+91f4202639b27161d6f4ea777a1dcff6 gcc/fortran/trans-decl.c
+9deaa2ddc9c96de27f66c57a68cdbe6e gcc/fortran/trans-expr.c
+3b31f457b4da7d7040d26e575a93f3d4 gcc/fortran/trans-intrinsic.c
+8e48392ae5a6b0a4a9065ab08d5f334a gcc/fortran/trans-io.c
3b0b6530af69c2750fbe26d226bed07d gcc/fortran/trans-openmp.c
-6591d4e6d0c7c8740554b98127940d67 gcc/fortran/trans-stmt.c
+b00b1a7c1aec4a761114b78715651427 gcc/fortran/trans-stmt.c
5872a33454ba8537969c772abf45fc50 gcc/fortran/trans-stmt.h
a0dcfb64f1079fea8e8156a7ca7271d2 gcc/fortran/trans-types.c
9ad0f217802a3be494402eeffa170be3 gcc/fortran/trans-types.h
@@ -4404,12 +4416,12 @@ a0dcfb64f1079fea8e8156a7ca7271d2 gcc/fortran/trans-types.c
6fd98f60469d15a7227a481d0f36a69e gcc/fortran/trans.h
3894b1523cb0e78721b7ba250e3bc84f gcc/fortran/types.def
dc6d9c951cdfbc5a92fe2731cc414c2e gcc/fp-test.c
-b4500a98518d321eaceb34508c68fc68 gcc/function.c
+c56d0b74a551761328c7f31e8a0a16d8 gcc/function.c
ddaeb24288c774b25fb7039eac9a4e53 gcc/function.h
bd0cc249df0a8ecbcae3633c6024d6e4 gcc/fwprop.c
-d57d8604bd77386f61a85c741b5deb2c gcc/gcc-ar.c
+4ac4107f1828b55ebce6d8a583c84664 gcc/gcc-ar.c
84fd4ac6893c78c599b92ec4a771459f gcc/gcc-plugin.h
-397ae3491b8155e2abdea3f9c11e13b4 gcc/gcc.c
+100c4b58a8b3711f2b6bd3df69544acb gcc/gcc.c
f63d6bc2ff7313bb7bedc35a302e7403 gcc/gcc.h
a6eb5c4e45ebe897b62b455d509787fb gcc/gcov-dump.c
cc938010b99e885c08f0b7a5d44d0983 gcc/gcov-io.c
@@ -4434,7 +4446,7 @@ c3b285ca47b1a00515107e2be9d80fb0 gcc/genconfig.c
94e3cdbc1f5f335198dab2b321c59699 gcc/genextract.c
10cf2ce540500cd073f69fcd732ff270 gcc/genflags.c
c6a4032b87f7558ae66e1d35d8f98801 gcc/gengenrtl.c
-7175fc1403aaa7073d186266818a1e50 gcc/gengtype-lex.c
+a3950620ab4f30bafa81a030baf03e10 gcc/gengtype-lex.c
c3aaa5fc0c08e0eaa7367bbc611d786a gcc/gengtype-lex.l
e3f7768565a5af266ecee6fe2b4b2ef8 gcc/gengtype-parse.c
f0d6354c49ffee0688dfa781a7621735 gcc/gengtype-state.c
@@ -4446,7 +4458,7 @@ ceb0dabc18c2a5a775665e1925175843 gcc/gengtype.h
448feb0d0ad0adc839511ad703885135 gcc/genmodes.c
f2ec67897723f368f0aaa94d899d4009 gcc/genmultilib
66ae4d38e29e799231213ba7496e1469 gcc/genopinit.c
-dd7258eb546048834129d355bf20c71a gcc/genoutput.c
+a4658941a9f57b3d07e373f50c5b76bd gcc/genoutput.c
c47738eef9b802788857c62d16ec4e1c gcc/genpeep.c
841fee5553f331fb534611029be74442 gcc/genpreds.c
cb75a53d61df88efb8fb7167cb63cf1e gcc/genrecog.c
@@ -4457,20 +4469,20 @@ cb75a53d61df88efb8fb7167cb63cf1e gcc/genrecog.c
e1fba29ced67c2b4f16c899b2cc57e01 gcc/ggc-none.c
9271246c4067fff26d2e4b7f8aa30148 gcc/ggc-page.c
ef439b475638555f1dc2665f0d26853a gcc/ggc.h
-aeb71d32e547dd56409cd7abca846f82 gcc/gimple-fold.c
+953dc2eefece906f0e78e117505c2e01 gcc/gimple-fold.c
126e36a3b68e56341d6239d04fc2ac86 gcc/gimple-fold.h
686b43f44358c9d9040dc80ecdbd4e2e gcc/gimple-iterator.c
-d7d1faf994dc885b19f85b0c555459db gcc/gimple-low.c
+2d71e7a3506ddb12b66f11eaccfdbcdb gcc/gimple-low.c
28e6e754e088d30ac7573d7f49fb67e2 gcc/gimple-pretty-print.c
9ed3d871b98e55c037b960ab3a832003 gcc/gimple-pretty-print.h
-846a79973169439df6819c12ca445e23 gcc/gimple-ssa-strength-reduction.c
+ea2673728307253154dcb463307b7b10 gcc/gimple-ssa-strength-reduction.c
7672cd91eeb03f05cc6eadc7c5147bbc gcc/gimple-streamer-in.c
f4f035722f05b217c70a2c9b2495d5e0 gcc/gimple-streamer-out.c
68accf658c29df78d7bfea9378d8d1e9 gcc/gimple-streamer.h
-e572d1ed4cd275d8fafbd58f3f81b6d3 gcc/gimple.c
+ab53fe7a493a6ccf8562a4d6307dea61 gcc/gimple.c
0d589ffbb5e11833d5b80ec5e093d9ea gcc/gimple.def
-deee5b84bec974f7768f1fe2832ebc72 gcc/gimple.h
-47d4ae178238fb0f15a63ee7aad93683 gcc/gimplify.c
+d333585b087ab68248cb18959be73b07 gcc/gimple.h
+6800a49fc17fbde909dd32654b1b917e gcc/gimplify.c
c37b64f99065b8c75db7d3b935643dd7 gcc/ginclude/float.h
769e2f8bbc357723e3679d322773b935 gcc/ginclude/iso646.h
bfe88277863a78bb0c2020bd2d30ff35 gcc/ginclude/stdalign.h
@@ -4485,15 +4497,15 @@ f85aa0745c3e9e0d32fa64753089b2f1 gcc/ginclude/stdint-wrap.h
c522d64edf87b51ba2a93c23b17eacd4 gcc/ginclude/unwind-arm-common.h
8d9ecf0d6ef93c79623ce1d27a32a2cb gcc/ginclude/varargs.h
778d9444027fa170bbc983e69203bfe8 gcc/glimits.h
-4d49af1e63652bcac25dcc674eb2e38b gcc/go/ChangeLog
+51fc2461222d4254c91ce6282a6de845 gcc/go/ChangeLog
58101808498c03cc8a6701b36e1c11f2 gcc/go/Make-lang.in
60ea054548c83c7f66170073f9f3e74c gcc/go/README.gcc
092b7ac61164339dc0360d02523e6737 gcc/go/config-lang.in
c5e3ffe9c479a8ee08232eb46692ce9f gcc/go/gccgo.texi
bcfab40222211b0d2384dcfb8a90969f gcc/go/go-backend.c
e94769af7598cdf70250fa4f67bb27e0 gcc/go/go-c.h
-c637ceab54b6e507a8ac7e5e9fc52ea1 gcc/go/go-gcc.cc
-d94d786d197fb1ffa104d4d8a09090aa gcc/go/go-lang.c
+2f0624e21520a56d9e589fb0409840bd gcc/go/go-gcc.cc
+31c972a70129863389097467041d4c1a gcc/go/go-lang.c
23c13bf184eab0071ce44a00188801f6 gcc/go/go-linemap.cc
e044aac17049110bf65f2288f6f7cace gcc/go/go-location.h
b2a38f77f1ef3fe1311c4a6e949c9b50 gcc/go/go-system.h
@@ -4502,38 +4514,38 @@ b2a38f77f1ef3fe1311c4a6e949c9b50 gcc/go/go-system.h
09b47be9ee44cac640658e346eb568be gcc/go/gofrontend/README
897d8051261e2e293a60b8ee09b04f32 gcc/go/gofrontend/ast-dump.cc
456b6d4cc785176b6e3eb0c685a93b39 gcc/go/gofrontend/ast-dump.h
-620fc1c74f01ecd126d805ac11c2bd83 gcc/go/gofrontend/backend.h
+75dd805de0592a872b18aef73cd912e4 gcc/go/gofrontend/backend.h
2b32f2111cb0863a0f232de883d9fd1c gcc/go/gofrontend/dataflow.cc
ac50f288c85f0d8fff72198966a48008 gcc/go/gofrontend/dataflow.h
8734f348c527b9800d30461119288c38 gcc/go/gofrontend/export.cc
5725a5fa742fd955d4c6d2c2c1befb13 gcc/go/gofrontend/export.h
-3b8b263786ea30af87339031f14dea08 gcc/go/gofrontend/expressions.cc
-9940d778db1ee4e80ad7859b1ea9c25f gcc/go/gofrontend/expressions.h
+88652971f6021d02536a0868459e74bd gcc/go/gofrontend/expressions.cc
+6d90e18ee1b4e4917937594d1a94d64d gcc/go/gofrontend/expressions.h
19e66447fa803385274b4e1a7501a4d5 gcc/go/gofrontend/go-dump.cc
e3f005ccc40000dcaf14ab6eec979f69 gcc/go/gofrontend/go-dump.h
505078b1e9185e86c97fda5cda6fa67a gcc/go/gofrontend/go-linemap.h
a9976cefc0150a7132d127b093292abb gcc/go/gofrontend/go-optimize.cc
6d061113313f445cd9a8a626d8138a43 gcc/go/gofrontend/go-optimize.h
-959d260ce5e9d4d11760f564b82713c1 gcc/go/gofrontend/go.cc
-7abd523099c1b598aac1c55216d42425 gcc/go/gofrontend/gogo-tree.cc
-a135a7a3220c8412d66e073716f79a2f gcc/go/gofrontend/gogo.cc
-0766e783cb1eca48c5ded3894258fa6b gcc/go/gofrontend/gogo.h
+0e0ea3150f1775faaf3e21729196c772 gcc/go/gofrontend/go.cc
+4f4d4da4c711b5a82cee7439ec6c8635 gcc/go/gofrontend/gogo-tree.cc
+0991c68bca404e4216098b4101523021 gcc/go/gofrontend/gogo.cc
+096c4d2f495f7c273a98052f182950bb gcc/go/gofrontend/gogo.h
a54db7e2c0bee63493b5e156afd1e29c gcc/go/gofrontend/import-archive.cc
499fe8bccdd0651f0566d8c145b8d5f7 gcc/go/gofrontend/import.cc
-8ce6ea644300b19ee74606e62d1d80f1 gcc/go/gofrontend/import.h
-8f83bc27d55752bb2acf3f1a71cfc88f gcc/go/gofrontend/lex.cc
+46ea027bf693486499d4396551ed674d gcc/go/gofrontend/import.h
+33c61fb692bc083f4b5774ea4325871f gcc/go/gofrontend/lex.cc
50f7fe6bed67437bd8cdedbdadbfd777 gcc/go/gofrontend/lex.h
98235b1a736055cd6a130337a9ee8e8e gcc/go/gofrontend/operator.h
-1661021452fd90f6bbd7d4ceeef0e26c gcc/go/gofrontend/parse.cc
+ed9ad973d7bb8b99886ecfb62dd4b9c6 gcc/go/gofrontend/parse.cc
6631a726a5759b4d2a6ced1a2e58145c gcc/go/gofrontend/parse.h
-31eaeff317416896237d8796924dc570 gcc/go/gofrontend/runtime.cc
-c9e8926e03bae873c931c4c07a4245fd gcc/go/gofrontend/runtime.def
+54c01de4f23c86d50a4429c32253d476 gcc/go/gofrontend/runtime.cc
+45bc779e35d40ec3490143ed056716e3 gcc/go/gofrontend/runtime.def
df0b2e89a7ce7d87c1816e63cdecbf48 gcc/go/gofrontend/runtime.h
-d63063d1d940afb9e1e13554b2e90d5d gcc/go/gofrontend/statements.cc
-c5b2ebe8d164bf2a1eb89a18970de2d3 gcc/go/gofrontend/statements.h
+e5e906544c53837a1c28120cb0ccaea4 gcc/go/gofrontend/statements.cc
+fffe9b016a63c2398001c1b17232f80b gcc/go/gofrontend/statements.h
0ba1a11b029f92c6795e4c940c966f48 gcc/go/gofrontend/string-dump.h
-0e9fef199b62c030f4d836844718c2dc gcc/go/gofrontend/types.cc
-1c0205ae3ce27f81c8dc86617353da90 gcc/go/gofrontend/types.h
+03378a6c7298870c792a8d9f29702a7a gcc/go/gofrontend/types.cc
+6d66c75cf37729e63752a67f6d32776d gcc/go/gofrontend/types.h
14f99064d66c4b9bc9ab92b14d4e7afe gcc/go/gofrontend/unsafe.cc
af481ad648303227ee2ef686a790de46 gcc/go/gospec.c
bdc23beb6b5dad1dd4f9c56b8ab36ef7 gcc/go/lang-specs.h
@@ -4551,7 +4563,7 @@ e37c3d7cadb1244992639edd382e8e36 gcc/graphite-clast-to-gimple.c
262156bee6802f4e86777108c2d38c9d gcc/graphite-optimize-isl.c
34c8ab03f1a8e2adeaf7c8eab52c2053 gcc/graphite-poly.c
108b6eca4e39b9949047b13f9e239d91 gcc/graphite-poly.h
-0f0cb39eae225df889ffd43aabd4a821 gcc/graphite-scop-detection.c
+512b6d85515ac85d9085a4b2bd888fd0 gcc/graphite-scop-detection.c
539e2ca11e9660ed43ad45bb25fbb0d7 gcc/graphite-scop-detection.h
d5c1b0a0b7076e92f1d0870b1810a12d gcc/graphite-sese-to-poly.c
76cf0bf9cece7a4e57265d8cf9a93663 gcc/graphite-sese-to-poly.h
@@ -4575,7 +4587,7 @@ ca11550d3202afe8893f03c7840f7ce8 gcc/host-default.c
f0cb991473d6dfe4cc4d2c846719aa56 gcc/hw-doloop.h
6110cbc1b1e4bf0f94bac25f1130a971 gcc/hwint.c
1331672a0894135bf280caffe9244415 gcc/hwint.h
-184d4d59802a2f9ee5326914378ed91c gcc/ifcvt.c
+a03aa81d5d389d6985a9cb4ab4168f86 gcc/ifcvt.c
bde81dcfb0db15a09684f067a4e9fef1 gcc/incpath.c
96685db74fd7c5cffca649314245c47a gcc/incpath.h
31c8fdc7b53c29460f71cbca00ceb06c gcc/init-regs.c
@@ -4588,23 +4600,23 @@ de7db9c6960cbe5162609cec2f6ba810 gcc/internal-fn.c
4b13ac923a155c59a97e134de001f046 gcc/internal-fn.h
08ad208dcf308926a7ef015f7a93632a gcc/intl.c
e95886d905202cdb6d037116025e894b gcc/intl.h
-42aaf8df612ffb0cea158503eb874d57 gcc/ipa-cp.c
+0a2bc972410f386231586165a93bd4c1 gcc/ipa-cp.c
f1900b0b6fffbe515061bb8a981e84ac gcc/ipa-inline-analysis.c
6f1d185e0b4b5800833d9595dd675e6e gcc/ipa-inline-transform.c
02d1214f8a90777148ac30c95cdc5b2f gcc/ipa-inline.c
974fa89b4cf3941591022f9b8a05d15a gcc/ipa-inline.h
-9b2fa197c026c8d4f6790480ee66bd7c gcc/ipa-prop.c
+64aad27cb90a30427247eaafc69a9b98 gcc/ipa-prop.c
a90d1e4de5c33678f506dfd0e91bb4f3 gcc/ipa-prop.h
-8120dae084b913b84ce470c8138586d9 gcc/ipa-pure-const.c
+4955f2d226e3b4d6293a694df69dc740 gcc/ipa-pure-const.c
fce4172c2e96de50855f90d643271aa1 gcc/ipa-ref-inline.h
a951dc8a76b3cb0a26c8ae519fc0c41d gcc/ipa-ref.c
f655f3de18b9f678d69e17085f9863bd gcc/ipa-ref.h
8858324429e2f953a8777237319f1e18 gcc/ipa-reference.c
89d45214bb2d0a2df613e4d482eb100c gcc/ipa-reference.h
-915418b0ab8ff529529d2765101bd309 gcc/ipa-split.c
+4fd0969e8217c341ab76cf07d20bf4b7 gcc/ipa-split.c
9409707448e63ce0f262258a8ac60c23 gcc/ipa-utils.c
abe5cee17cf53f7cfe810111942e0a20 gcc/ipa-utils.h
-87e7948c9eb146715de86a02d4aec8bc gcc/ipa.c
+3d212c62eefdb52f9ce2362175dc1b34 gcc/ipa.c
e8f1b89f9b82709509f42a2149b6a8cf gcc/ira-build.c
e59dc57d7716539fbc80579df5287112 gcc/ira-color.c
0a0325cab447b78a64d51d4526992c3d gcc/ira-conflicts.c
@@ -4612,10 +4624,10 @@ f1b17b1c1b0efb2f64270a15ddc9913a gcc/ira-costs.c
a9f389295b1585eb58c77a8d6d62817b gcc/ira-emit.c
71cf2884b64be5fec4c073f206d46dc3 gcc/ira-int.h
2ba2df17476a9a79056eefe863cc7750 gcc/ira-lives.c
-7003bc09af29c6916a789b7e5f3c08fc gcc/ira.c
+f50c5a523489e6c208cb475d96bc70c4 gcc/ira.c
2714c0e87bd0fac348a05d59d2cab626 gcc/ira.h
7a8e145db61bfb35670d7544ea6de83d gcc/is-a.h
-9209a0f5300c189c1d2cb7d5328eb745 gcc/java/ChangeLog
+b423d28c1f05c2123e3e258eb52b1f17 gcc/java/ChangeLog
3becfaac793f49e1f52cd74e78172b48 gcc/java/ChangeLog.ptr
1c698a5c434720749e71a0ea3eb5a0ea gcc/java/ChangeLog.tree-ssa
4b9afc39cd80ed1c750024ffe858b2f2 gcc/java/Make-lang.in
@@ -4670,14 +4682,14 @@ d3f5fe6efe95d3b45f3b344eaff7dc03 gcc/libfuncs.h
39585a81e28f4c2f33c752933c276013 gcc/loop-doloop.c
1dbb6f09fc2c2fe90a65727aa9af7d6d gcc/loop-init.c
ec3b15e79ebc8010284c494ec5813d88 gcc/loop-invariant.c
-6968c85d2dd4d8d6580a7a1bfe00c6cb gcc/loop-iv.c
+3f898dbe11462822d23bbef7b297a979 gcc/loop-iv.c
07718d4133e88f31694b505d68aca6a7 gcc/loop-unroll.c
-038f8924b66f34d9d4f49994fe9ce617 gcc/loop-unswitch.c
+e581f5ae9bd2879ea815ee11c5e08127 gcc/loop-unswitch.c
e6c7f1bfe95901186341d92f67a9bf8f gcc/lower-subreg.c
13ff04415157268c7c354fac1a222262 gcc/lower-subreg.h
-758a47286d8a2a9d8c14513067f694ff gcc/lra-assigns.c
-06ba8900e3d200332f441148a8bbf4c2 gcc/lra-coalesce.c
-f0cd78d189372cfb3bae1cfa5a3aa407 gcc/lra-constraints.c
+ed34b3bd2406ceba47aeac3cc35ee2e8 gcc/lra-assigns.c
+e63cdddb9299ec62f5638e334c88b42c gcc/lra-coalesce.c
+40d0a34b1db8e3f8fc759a38588c92ae gcc/lra-constraints.c
de94c4459d8a6f57fba2cee8651711e5 gcc/lra-eliminations.c
77d159fb59e63ddcd255d6cebeb06943 gcc/lra-int.h
f8a94dbecb891b8f4f400ad6ef99d54a gcc/lra-lives.c
@@ -4696,7 +4708,7 @@ a44181185d8546ca59ab03eaa4a3d2ea gcc/lto-streamer-out.c
fa502faa2e9b61cd604e737b97a69a9c gcc/lto-streamer.h
552665902f7953a08486e14749e6fc17 gcc/lto-symtab.c
856d79679d0b3d5e94b7e9de5d8253ee gcc/lto-wrapper.c
-a39e9e5820e85047ee3ea81e2005f40a gcc/lto/ChangeLog
+68e7840c3156c43b0185d2be47a1a6f4 gcc/lto/ChangeLog
8e9737eed782ed19149b9679a87ebade gcc/lto/Make-lang.in
87a474ea195ea7bb5375f26939ca92dc gcc/lto/common.c
6b94d922e55046ef560c709289e121d4 gcc/lto/common.h
@@ -4716,9 +4728,9 @@ c27e4d9e84c13ed741c8c8f1d431b966 gcc/lto/lang-specs.h
93fb21f3a2e3da3c7afa3fc1a97c5f68 gcc/mcf.c
c9d8e9f5b89c2254c9a5080160a101d5 gcc/mkconfig.sh
5879bfc1e48884989641ea1e246cb833 gcc/mode-classes.def
-2af7bb21a85297320df4680f8ef51999 gcc/mode-switching.c
+2c319bd7ace4a86849451cfe9fbf9da9 gcc/mode-switching.c
d0abe7376864afded216a2bb219a595b gcc/modulo-sched.c
-3711207de778398da81dc44594c3f264 gcc/objc/ChangeLog
+daa41c7790ddb2b568bb8cf13db3d041 gcc/objc/ChangeLog
e76cc4ca44cba1d1e9da27c20b9c2afa gcc/objc/Make-lang.in
f6bb154fcc19f8645fae88e2c5f47642 gcc/objc/config-lang.in
a0ab2b2514b06d0268271da158f2ed06 gcc/objc/lang-specs.h
@@ -4731,13 +4743,13 @@ c7e44322e05ebbbbdd05eb8761d9f8cd gcc/objc/objc-gnu-runtime-abi-01.c
4baa72d2413a35df66f650c31d618efc gcc/objc/objc-map.c
7b7f75eb4f52f1973eca4862f97e5ef9 gcc/objc/objc-map.h
f1c7e367cfcd368009cdf37b465cfbe6 gcc/objc/objc-next-metadata-tags.h
-ab226cb4f791beb9d63c84a44c5b9d1e gcc/objc/objc-next-runtime-abi-01.c
-9f709ad43bc1bcc97dfbd49901cf785b gcc/objc/objc-next-runtime-abi-02.c
+572359ce319a31dd5f302da8360a59a1 gcc/objc/objc-next-runtime-abi-01.c
+8aef148516c689c24366ee43d63c60b2 gcc/objc/objc-next-runtime-abi-02.c
76063153abae07e47c2fc9ff16ea203c gcc/objc/objc-runtime-hooks.h
9fb982fa0c2bb9715c3cad81b5ca03ca gcc/objc/objc-runtime-shared-support.c
c9fe30074726aab0d94736073d4d916a gcc/objc/objc-runtime-shared-support.h
f594fdaff13b8567308947ab49a9a2ba gcc/objc/objc-tree.def
-e168f7be50e1ea1bd89b9345d88f5157 gcc/objcp/ChangeLog
+d22a8d6c7906d7ec4ce4a22e416fd924 gcc/objcp/ChangeLog
bd26df0245faf7987e131dbeaffb90da gcc/objcp/Make-lang.in
0e23bb53ac4b2cda2c11805264d0f753 gcc/objcp/config-lang.in
5fbe8381b779b412f3d72e29cca21ee5 gcc/objcp/lang-specs.h
@@ -4747,12 +4759,12 @@ b31982a12f25c1540752a12e817a8955 gcc/objcp/objcp-decl.h
a141eaac80536a7f731eaec8a8f7b997 gcc/omega.c
d4c17fba3450bb742d0cbf82a49e127a gcc/omega.h
2805a2e221dccbe76398688035ca8a6d gcc/omp-builtins.def
-cc80c8751703de0853732c3d73b56d1c gcc/omp-low.c
+d25b0ccef2c9f65b28fcfe01288d9959 gcc/omp-low.c
abe40c7e66ee44bded017aeb23a2f09b gcc/opt-functions.awk
343fadfef7e8b770b9c5279dbaa738c0 gcc/opt-gather.awk
fd851f016e2f49c572d80627cc3a88be gcc/opt-include.awk
5e0399a3836d8ce6488ef1b867589213 gcc/opt-read.awk
-77b79401dfe986fbc16a3274d044d7f6 gcc/optabs.c
+e2174a6cef88a19906ed768496900822 gcc/optabs.c
c601777eb2716567e9f5bbeff05c6e21 gcc/optabs.def
02c0329ba8b3bc51d383c325a8a6a6cc gcc/optabs.h
65a7e4de27d2418f973249c489437d92 gcc/optc-gen.awk
@@ -4761,17 +4773,17 @@ be3b48a29fc9478f273dc156d51a27be gcc/optc-save-gen.awk
c4f19e3385b2e37d90ffd37b760a4f1d gcc/opts-common.c
749511276f2a7af61518d5bb8090453c gcc/opts-diagnostic.h
d893df41ec49e4f4f668f303e010b0b5 gcc/opts-global.c
-fc8d560f93f24f6e0dce1890693ee7b0 gcc/opts.c
+31cd110bf231819c2093a5daa2942b0d gcc/opts.c
9ca007b583e8318c6a7410e9560b8cb8 gcc/opts.h
4b78d330d19490bb353e9338b0e96a5d gcc/output.h
af1c244ad89c0048275767a8f7fbeb0e gcc/params.c
-c4d5b2c4795d130551a557dbc75959ec gcc/params.def
+f2a5da3a1bda2d4d5f3f4a7dae38490e gcc/params.def
380184a14b8e78710b46f5e4ab79404c gcc/params.h
-469e5070c05609b1de0e4fe64d19b87a gcc/passes.c
+0e8d625c167c78530b3e9607c3ab9c30 gcc/passes.c
3e0be78cbc18df33e50629e13310013c gcc/plugin.c
e66d277467c8fd7470bc7d1b0ba0287c gcc/plugin.def
b8dcb1ca1517990206efd591e8d1fae7 gcc/plugin.h
-45baab183bab29fd98c06e364c1e4267 gcc/po/ChangeLog
+174c692f378e350e42f97aeda0fe2f60 gcc/po/ChangeLog
083d211180afd5c4004e6992c3678e5b gcc/po/EXCLUDES
345fe081d102dab1ed296ffbf69067ea gcc/po/be.gmo
7fbfc0bf33162e9149ae6f57672d94c9 gcc/po/be.po
@@ -4784,8 +4796,8 @@ f0f5bde900e27f89bb431b6ee20fc0a3 gcc/po/el.gmo
c97646cb2820aee61c55b4b1c51be740 gcc/po/es.gmo
873bf17b3ef2e6f5e5e37fab552cedf9 gcc/po/es.po
bc07cfc6023a889a3117d381761c3203 gcc/po/exgettext
-0d3c8d3e7bb41b9bca7ee6daa1adfb8d gcc/po/fi.gmo
-858b3832b8eac89a877ff4abaf24a31a gcc/po/fi.po
+3f09018d570aa21259a340288755c020 gcc/po/fi.gmo
+3ee44bde77f675e7c4b6b2df82b2b396 gcc/po/fi.po
9131b14d07d5f8a93ec1fe28e219607b gcc/po/fr.gmo
6c5a525015267d4e609fefc7d7b4479b gcc/po/fr.po
99e446ea7d28a68c767522eb75180cef gcc/po/gcc.pot
@@ -4797,8 +4809,8 @@ ddcbb8f75c0b4a9703667740e75fbbe0 gcc/po/hr.po
480b098f5b9eba7848f97e5874147d51 gcc/po/ja.po
c6cbad029ba199df0ac5e6a78f930acc gcc/po/nl.gmo
e41095ac68cbf4ca5fba2150a0d00a18 gcc/po/nl.po
-041de48884ddd2db183414f819360a22 gcc/po/ru.gmo
-041dbea5e873c61da5787210d7da730e gcc/po/ru.po
+54bc7ca65baf834cb7b508147e091a46 gcc/po/ru.gmo
+b2812c2aa11502012c510b8a7a24c892 gcc/po/ru.po
5c1ef4447fa187d26bccc0aa052217ec gcc/po/sr.gmo
6a2bf79d20c827a4a8392367ac353782 gcc/po/sr.po
7f864a9435df7ef955c2154dbc93b1a5 gcc/po/sv.gmo
@@ -4809,8 +4821,8 @@ cab4bff8b231f597ccfcdd9d9772887f gcc/po/vi.gmo
eaf1c61b65760abd2d338d375d490d6a gcc/po/vi.po
0b8e1bc2decf0f8f91e3069554b3859e gcc/po/zh_CN.gmo
8f9b6d8719ad8b4de29bce8f0cf4597f gcc/po/zh_CN.po
-a5b4b52ac871142c5325a12728133064 gcc/po/zh_TW.gmo
-387d296abd399669ac96b7c8775f72c5 gcc/po/zh_TW.po
+04453db2a7b52e2d1d1e106ff15c33ba gcc/po/zh_TW.gmo
+b1b8522cddb184d441cb28e848f29045 gcc/po/zh_TW.po
b3f35fff414cd4ecf269bd373cda0fd0 gcc/pointer-set.c
64b5ae3d2b5555011ed0ad2c2f408584 gcc/pointer-set.h
dde6c38ce21723e08ddbfee904185ff6 gcc/postreload-gcse.c
@@ -4822,7 +4834,7 @@ f9e0a4d63c1ac2b3618eaf78ed8992f8 gcc/predict.def
fac38d73bcebaf15b8b1c6c3d7804146 gcc/prefix.h
6f6e310ef040e11be598b08f64ca258f gcc/pretty-print.c
282bbab141431f05d72f75f42a3dd23f gcc/pretty-print.h
-9974004265d19375c8d5a5fb8b418bc7 gcc/print-rtl.c
+f1fa9e0ce27762be9f2735e0b8b66379 gcc/print-rtl.c
d9bd64877d6ebb4cf342d77fe139f165 gcc/print-tree.c
1bd933f221518f2f17c83d35aaf2a7ce gcc/profile.c
df786e7aeed5444a31cc046f96a0e595 gcc/profile.h
@@ -4833,13 +4845,13 @@ df786e7aeed5444a31cc046f96a0e595 gcc/profile.h
f0b6eb17f649f89f758701316c2ca4f2 gcc/real.h
292a6839db089b75a5ab94bb18a87472 gcc/realmpfr.c
6979c412281b44f88ca8ab4cdf0d3f25 gcc/realmpfr.h
-6806212f20063297cb735ad95853d1dc gcc/recog.c
-6ad2e92bfeae9af3250d213cdffce04e gcc/recog.h
+23ba1e1b240ee3a56b928715b81aed49 gcc/recog.c
+80afecce497880a9aae51ca70f16c83a gcc/recog.h
f06d3f959d7f0b47d0699ea7fcafbb6c gcc/ree.c
260b147174cddde5226ae71568c4b458 gcc/reg-notes.def
06fcf5e75ae0461a5316443164c0b51e gcc/reg-stack.c
-c20d8bb4a24661758897505e6cb49cc9 gcc/regcprop.c
-96a4c5624aeb5771a4a6d8a1bd8dba6b gcc/reginfo.c
+cc7670645c955ba29e1b3244aca726bd gcc/regcprop.c
+0eb5cad32f0d945fc44788e191297b9e gcc/reginfo.c
83ec4dbfd58d45ab62a0a4edc6e5bbe7 gcc/regmove.c
f8a4b8ece31ebb21a53828285dde0fbf gcc/regrename.c
5d2882765c68dd4ab62e9c5eec85d344 gcc/regrename.h
@@ -4849,15 +4861,15 @@ f14bd9e80a410e4fe8bb0e99fda1b64f gcc/regstat.c
46bd543f580d241c7532b0fad5a2ec51 gcc/reload.c
200f7aceea0d4dd6411864aee96ecc42 gcc/reload.h
66e564c1c35f1edd32b9f0fc12d13672 gcc/reload1.c
-ee4400ce5b8b6216cdf0fbd4e54c64e3 gcc/reorg.c
+c559f94da5e4f2a9fa90a2e117e67b37 gcc/reorg.c
d11b91f12982b9bf2d5e4689ee3af9d1 gcc/resource.c
0e9b51b1480c2715c3fe93e08ad3357f gcc/resource.h
9a32bf4c8378ff3c8c1a6eae42875fb7 gcc/rtl-error.c
71a922f19d30870f74f89a150b114202 gcc/rtl-error.h
73763859cf590dd811be82b9ff9e063d gcc/rtl.c
3566d3925941ec06c785c81ea437e448 gcc/rtl.def
-0051ae1cc847c322c9317e5887fb561d gcc/rtl.h
-3806acab64a418b0d7ea98347483cb13 gcc/rtlanal.c
+d40603341ef7f24667bd290dc0131648 gcc/rtl.h
+a795f42f2cb137e734835bb9d26d2a2f gcc/rtlanal.c
5e302cb4689fba30de1bc77d927ede46 gcc/rtlhooks-def.h
65d77868d275d2179b9bbd9153cb95b9 gcc/rtlhooks.c
60114c11db1a0165161610326212a1a0 gcc/sanitizer.def
@@ -4868,17 +4880,17 @@ ef723c38f9834cb07f11ed7194ec039e gcc/sched-ebb.c
0b970e52ad64d489c6f9439adf40bf35 gcc/sched-int.h
a841bf3d17af315d419f5f62af356656 gcc/sched-rgn.c
d7d6274e64f51e0df276bff5404182c7 gcc/sched-vis.c
-775594eb7dae867dbce455c6faa93c70 gcc/sdbout.c
+6f3066cb02b66e352681ca226f13cb92 gcc/sdbout.c
54d5e42d5e2c17e6192d8bdf78e23f3f gcc/sdbout.h
6141bc19dd82453e1ee40a2e764c6d8a gcc/sel-sched-dump.c
c3f5409b641cfb8e5ded10e902427522 gcc/sel-sched-dump.h
70f22323cceb1ef561ce6c58a6f87913 gcc/sel-sched-ir.c
3d972a21596bdce987520c62e028fc36 gcc/sel-sched-ir.h
-93ac8b9b1e0e7aef7d24b013235a10de gcc/sel-sched.c
+e2991afb3bde1c70ae509fc93c33f354 gcc/sel-sched.c
d359df32a7ce16b6a9ca523af60cb9e7 gcc/sel-sched.h
bba33efde25142bd2d16863a8d152ddc gcc/sese.c
ef2b93259dadd69307f6c7963f34609d gcc/sese.h
-83c6b5d07dca1a40f1b389c93da7cf8b gcc/simplify-rtx.c
+bc1b82d45cd976d8be5441f3daa4a7da gcc/simplify-rtx.c
80352eb700db465d575b821ae855402f gcc/sparseset.c
69088101c47e18900b2be73c3b42ad2c gcc/sparseset.h
c4e9683377d8a2b4ef0132f0bd9c4acc gcc/sreal.c
@@ -4888,7 +4900,7 @@ d1271633f8ffd85d06b40c7abec29d90 gcc/ssaexpand.h
76174c42a910eb60feb3b9e632c6da16 gcc/stack-ptr-mod.c
fcd50b76553e5909e599a0ab7d512e0e gcc/statistics.c
21e74efa37c41d87f7ff63b6e9afc171 gcc/statistics.h
-c8e056ff91ebdc1afa4e5fe767d44448 gcc/stmt.c
+daad877922190cd189b666ad5abf3e0a gcc/stmt.c
fcdc9bf2076ecc101a01906046ffa199 gcc/stor-layout.c
4c262d95fcc939317e27f251439cab89 gcc/store-motion.c
efb41aaf206f28483ac9ab36e70780f5 gcc/streamer-hooks.c
@@ -4905,7 +4917,7 @@ bb0c215bbbd2a9b34178d0329d271539 gcc/target-globals.h
38ec82f7ebd1744dc00b09e2d6cbc019 gcc/target.h
750b54ed76b3ba238b67b4ff7a9cefc0 gcc/targhooks.c
aeb4c1ff2a1bbbcfc5611149fbf4a5c1 gcc/targhooks.h
-7d7844cee9fd7426d1cd14da8865c583 gcc/testsuite/ChangeLog
+86ffa3c5d733546783b13a6597b05ebb gcc/testsuite/ChangeLog
862f04afbd87da2cc6bc432c3f28430f gcc/testsuite/ChangeLog-1993-2007
0cfd18f5e11308d47955263801f31753 gcc/testsuite/ChangeLog-2008
60d3faaef4bf51b170759743d2081977 gcc/testsuite/ChangeLog-2009
@@ -7575,10 +7587,15 @@ dcd81f0d6cf4d767d2d3f42f805b143b gcc/testsuite/c-c++-common/asmgoto-4.c
292821efd19a5d49bffff909953846d5 gcc/testsuite/c-c++-common/attr-used-2.c
e123297fccae243c537f91e155c74a71 gcc/testsuite/c-c++-common/attr-used.c
41df51bc4faa62cf4b0a5b0f48fd7eda gcc/testsuite/c-c++-common/builtin-offsetof.c
-e5ec9a1f71373127b27f8ee5cecf0fd7 gcc/testsuite/c-c++-common/convert-vec-1.c
+9d9c46947813115ec77f53871be955d1 gcc/testsuite/c-c++-common/convert-vec-1.c
7df2c1d437a437ae20fe8cd33d071a1a gcc/testsuite/c-c++-common/cpp/diagnostic-pragma-1.c
a573e5ba86fa5b9976e75d3d2e51854b gcc/testsuite/c-c++-common/cpp/normalize-3.c
c85025f0def783f70f9bb6a4ea9a23f3 gcc/testsuite/c-c++-common/cpp/pr45457.c
+eff73d3df17e8342527c47aee668fc90 gcc/testsuite/c-c++-common/cpp/pr58844-1.c
+cc15eb517954aa29a1c57133705ca83b gcc/testsuite/c-c++-common/cpp/pr58844-2.c
+4bb69916f59c91d0c3c7583ed1c0eb97 gcc/testsuite/c-c++-common/cpp/pr60400-1.h
+87d0240913bd5df7fe5938e4ab645f1f gcc/testsuite/c-c++-common/cpp/pr60400-2.h
+21a90e49fc0287311c756b774010fdb0 gcc/testsuite/c-c++-common/cpp/pr60400.c
7444806716b3bae848d518d64de74d70 gcc/testsuite/c-c++-common/cpp/warning-directive-1.c
0bc290b1fdfa6458aec0ec7a0e16ca76 gcc/testsuite/c-c++-common/cpp/warning-directive-2.c
b15ede4348fb88921443e477ccfed8c5 gcc/testsuite/c-c++-common/cpp/warning-directive-3.c
@@ -7672,6 +7689,7 @@ c0e0d2f46bf19ec2b6f3291f97a1ac27 gcc/testsuite/c-c++-common/dfp/usual-arith-con
97429dd130e2a831a3f5643ed92516ef gcc/testsuite/c-c++-common/dwarf2/vla1.c
96f0e5d2934bad532f8e2b3eae950604 gcc/testsuite/c-c++-common/fmax-errors.c
8c4578c689c753c4ce7ec68c341673ec gcc/testsuite/c-c++-common/fold-bitand-4.c
+892d42994f79176417ff604e527b171a gcc/testsuite/c-c++-common/fold-divmul-1.c
450622eac3970da63e43723374af5da7 gcc/testsuite/c-c++-common/gomp/atomic-1.c
5df253c1522c1e6e86d208e596c858ef gcc/testsuite/c-c++-common/gomp/atomic-10.c
0ff1c3a6c0628a5b02b5f2f75d16b718 gcc/testsuite/c-c++-common/gomp/atomic-12.c
@@ -7688,6 +7706,9 @@ e16ef156ad193ef1f3cba60ad16e57ab gcc/testsuite/c-c++-common/gomp/pr51360.c
84c977571aeb43c0224137efe7f5b213 gcc/testsuite/c-c++-common/gomp/pr53580.c
28bfd873981083756a16f70fdb0b86db gcc/testsuite/c-c++-common/gomp/pr54017.c
48f64493dfa602c2fef9c13d9dee50d4 gcc/testsuite/c-c++-common/gomp/pr56883.c
+a7d789b5091f59130b63c3467560e1e1 gcc/testsuite/c-c++-common/gomp/pr58257.c
+7515e609442cad5707cc4e3a2b48c8ae gcc/testsuite/c-c++-common/gomp/pr58809.c
+05e6a38172b7bfc26de83040dfc8c364 gcc/testsuite/c-c++-common/gomp/pr59467.c
715226741a182526f3d2c9f0d0384ac7 gcc/testsuite/c-c++-common/guality/pr43141.c
efe9ef98b52d49485763af49dfafca8c gcc/testsuite/c-c++-common/init-vec-1.c
ed31996e3dda298f798652d482bc4224 gcc/testsuite/c-c++-common/int128-1.c
@@ -7697,8 +7718,13 @@ de3dd2daeb344b4e1fbcc4551d6441bc gcc/testsuite/c-c++-common/int128-types-1.c
03893c0c4f66153aa898b08886692eb7 gcc/testsuite/c-c++-common/pr28656.c
b26d0787722b770e1bedb29da6ca65db gcc/testsuite/c-c++-common/pr33193.c
19a0263d13d2e33c9a7e8aeaa26cf684 gcc/testsuite/c-c++-common/pr33763.c
+a35a58b3b493f052b0bf4ba74eefead5 gcc/testsuite/c-c++-common/pr36282-1.c
+34cf6e3a3ee13163cf912fe7228fe32f gcc/testsuite/c-c++-common/pr36282-2.c
+3066c34876746e18bc19dfa90edf3930 gcc/testsuite/c-c++-common/pr36282-3.c
+af25df4aa640eae33159416614e7be0e gcc/testsuite/c-c++-common/pr36282-4.c
b44f1a2b8f8186510fb3c16515aa210b gcc/testsuite/c-c++-common/pr36513-2.c
b7b47baf0eefc44ea18b3fd4f3ec1f7a gcc/testsuite/c-c++-common/pr36513.c
+2d231290c51129fd7985cf8d86b66bd3 gcc/testsuite/c-c++-common/pr37743.c
7a382f5e750b25abc9c999fb1a112aaf gcc/testsuite/c-c++-common/pr41779.c
26c78741b77cfef13280be97946c1113 gcc/testsuite/c-c++-common/pr41935.c
87edf7a633ed33acea1114b550edc33b gcc/testsuite/c-c++-common/pr42674.c
@@ -7720,6 +7746,11 @@ caf425d291c32e42708e1312d4b4b7c8 gcc/testsuite/c-c++-common/pr54486.c
f1d943c48a18ca5c666d26543205d144 gcc/testsuite/c-c++-common/pr55619.c
0c7d9dbc79d0449ecbce0d3cf963a080 gcc/testsuite/c-c++-common/pr56302.c
a1cf9769412d39f47e2c2ee4b650e4b2 gcc/testsuite/c-c++-common/pr56607.c
+770ddad4b09eec26315a0781ccbc6400 gcc/testsuite/c-c++-common/pr59032.c
+7225dd9014c53a23626cebda50fdb083 gcc/testsuite/c-c++-common/pr59037.c
+9f0da9b08a8d5e519fd58b254bd3155c gcc/testsuite/c-c++-common/pr59280.c
+f3125845677b94c2dee85b2ae8c05868 gcc/testsuite/c-c++-common/pr60101.c
+ab61337b42c3bf4f5a41d815a9fcd323 gcc/testsuite/c-c++-common/pr60689.c
b0ba836310044e7b419ef679f0b48d6f gcc/testsuite/c-c++-common/raw-string-1.c
554e7071d2525351de28445762633866 gcc/testsuite/c-c++-common/raw-string-10.c
1183cc89c3223291d7813cf8d78ef4d6 gcc/testsuite/c-c++-common/raw-string-11.c
@@ -7736,7 +7767,7 @@ a183a8ddeb27d5e9654e05ba36537908 gcc/testsuite/c-c++-common/raw-string-7.c
9af9c8c37a6c37568a326ef2b75c8ae6 gcc/testsuite/c-c++-common/restrict-2.c
274a7af43e911841a9071c9cc7f274a1 gcc/testsuite/c-c++-common/restrict-4.c
4961f55bd8b40e3280d218cce5859300 gcc/testsuite/c-c++-common/scal-to-vec1.c
-8b12d8a516ce50c13ecb8cb4156c7d7c gcc/testsuite/c-c++-common/scal-to-vec2.c
+56185c5eccbe01ad46244faa1da60110 gcc/testsuite/c-c++-common/scal-to-vec2.c
3c2fa8dfd083c62e12d99765cea7f5e6 gcc/testsuite/c-c++-common/simulate-thread/bitfields-1.c
844c7134dd96eca68c4ba9def7ce9c8d gcc/testsuite/c-c++-common/simulate-thread/bitfields-2.c
adb50709ddcf8583700615ea9a6ffcdd gcc/testsuite/c-c++-common/simulate-thread/bitfields-3.c
@@ -7780,6 +7811,9 @@ d6a230e22444b633319bb1e309e0641c gcc/testsuite/c-c++-common/torture/complex-sig
9f1ae2fa915c5159ec134a1894ad5cf1 gcc/testsuite/c-c++-common/torture/pr42834.c
675e839574d99a5e8a0446f66b3520ca gcc/testsuite/c-c++-common/torture/pr46137.c
dad442c09041500a2c414da240f49b82 gcc/testsuite/c-c++-common/torture/pr53505.c
+baa15b278da5bb4b2b348d4043f1c97e gcc/testsuite/c-c++-common/torture/pr58794-1.c
+c816e733ed428f32e49d50b564aaef54 gcc/testsuite/c-c++-common/torture/pr58794-2.c
+51789b713733d1d6693238c2ca4e9b85 gcc/testsuite/c-c++-common/torture/pr60026.c
fdeec1e5ecb339bf68961fab033b606e gcc/testsuite/c-c++-common/torture/vector-compare-1.c
e098360b3686787abea6589b13d9e806 gcc/testsuite/c-c++-common/torture/vector-compare-2.c
26c13a49130d1f2d291bea112073585f gcc/testsuite/c-c++-common/torture/vector-shift.c
@@ -7823,7 +7857,7 @@ a762b6bd97faadf1c7c4e9c8168ef73a gcc/testsuite/c-c++-common/vector-2.c
899d453ef37273ceef880f8d7731327b gcc/testsuite/c-c++-common/vector-3.c
8ed24f63fe194926f15c7a2b4c47a2ca gcc/testsuite/c-c++-common/vector-4.c
6ecac8feb023aa9a744a4ae8793c2e21 gcc/testsuite/c-c++-common/vector-compare-1.c
-d2e9672bd2c681d104bc6f7d452c28e8 gcc/testsuite/c-c++-common/vector-compare-2.c
+f8659571f3f421873f7c60e1570d92dd gcc/testsuite/c-c++-common/vector-compare-2.c
0b88b6a257d580d32e1a5b0e87ac7c64 gcc/testsuite/c-c++-common/vector-compare-3.c
1e47ef8c1dfa5108f30fd869de0fe86c gcc/testsuite/c-c++-common/vector-init-1.c
352717900a7e0ec3677f617f1400c58a gcc/testsuite/c-c++-common/vector-init-2.c
@@ -8233,7 +8267,7 @@ b0e427443037919ee45a88d886f4f4f9 gcc/testsuite/g++.dg/conversion/const1.C
cd42b5b37923de04f2f1d946dfbd433c gcc/testsuite/g++.dg/conversion/const2.C
8dae0b4264c4a22a22f3c8abe5fbdf3b gcc/testsuite/g++.dg/conversion/const3.C
424f02c389b9f1fb60fa25d7cda32717 gcc/testsuite/g++.dg/conversion/dr195-1.C
-ef561373a484d0cfc492aef62fb42418 gcc/testsuite/g++.dg/conversion/dr195.C
+908400ebe2c8fcf150ec539706d323ae gcc/testsuite/g++.dg/conversion/dr195.C
eb10fe6db1351b178c1c1068e9806fed gcc/testsuite/g++.dg/conversion/dynamic1.C
2e281007b9998371bac78412c4e9f5c0 gcc/testsuite/g++.dg/conversion/enum1.C
4323bc310ebd03f9141f337dcf986f7a gcc/testsuite/g++.dg/conversion/err-recover1.C
@@ -8261,7 +8295,7 @@ da446c68ad3e26a27f1f02cfb80bb439 gcc/testsuite/g++.dg/conversion/reinterpret2.C
d4e80e3dcc4416f9be4b4b9e390904bd gcc/testsuite/g++.dg/conversion/reinterpret3.C
75182cadb5387652dec18b1fdc77dc36 gcc/testsuite/g++.dg/conversion/reinterpret4.C
9f33237b06a0754b17722be2e4ac5adf gcc/testsuite/g++.dg/conversion/self1.C
-08568af38f19ec63e390cfc822ad7562 gcc/testsuite/g++.dg/conversion/simd1.C
+5f33a6ce841493c407b8a33be8f48158 gcc/testsuite/g++.dg/conversion/simd1.C
8e41381be792deb70891ea9cc1764f4a gcc/testsuite/g++.dg/conversion/simd2.C
68a160a4b068da5d72e23fb674936f97 gcc/testsuite/g++.dg/conversion/simd3.C
cbf6c39df44754b216a83ab9d8de5418 gcc/testsuite/g++.dg/conversion/simd4.C
@@ -8290,6 +8324,7 @@ df753262319074dd4214b2f4bdc624bc gcc/testsuite/g++.dg/cpp0x/Wliteral-suffix.C
6dd0c327b455a24f191956a4c227db24 gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-2.C
fd509d418a54163fd3341bc1594e68f8 gcc/testsuite/g++.dg/cpp0x/__func__.C
02606f2cc5924e3860b348ccdf6f8c0f gcc/testsuite/g++.dg/cpp0x/access01.C
+40b47ed7e2a4054550c2b4f2cace869b gcc/testsuite/g++.dg/cpp0x/access02.C
ecde3d57ae3e2af8978a4309445ae59f gcc/testsuite/g++.dg/cpp0x/alias-decl-0.C
b2d724d02c63c22fb172409e4543f497 gcc/testsuite/g++.dg/cpp0x/alias-decl-1.C
42702b3f965de8fa15f5ec74dfc8ea8a gcc/testsuite/g++.dg/cpp0x/alias-decl-10.C
@@ -8320,6 +8355,7 @@ b5b5655baa65fca823be8f56b2a84f4d gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C
1cee05b5f8cdb176bf9a6bfc9ad90770 gcc/testsuite/g++.dg/cpp0x/alias-decl-34.C
6594efe8f80c0023b66df6ae2d369086 gcc/testsuite/g++.dg/cpp0x/alias-decl-35.C
59c96509b9564cc1faff3739baa87da7 gcc/testsuite/g++.dg/cpp0x/alias-decl-4.C
+99499efe942d19fb669e10a40ff36723 gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C
0d73b2e329c0d6e43b1f9a3230a989dc gcc/testsuite/g++.dg/cpp0x/alias-decl-5.C
232896574d12e65ac42860209dd0bd10 gcc/testsuite/g++.dg/cpp0x/alias-decl-6.C
9ad941ed8f3a18d01ebcb090e882fb9f gcc/testsuite/g++.dg/cpp0x/alias-decl-7.C
@@ -8361,6 +8397,7 @@ ffc1211fae171a684affe62988b240b6 gcc/testsuite/g++.dg/cpp0x/auto36.C
1767c76e31b9ebb6a0a0297b61c70aaa gcc/testsuite/g++.dg/cpp0x/auto37.C
901c3113c76d7a71ea7d860f910010af gcc/testsuite/g++.dg/cpp0x/auto38.C
8754523bb1846890e4b8d81b2740ba1e gcc/testsuite/g++.dg/cpp0x/auto4.C
+fd70def1cb3bc4ef08b2f4df1a5980d4 gcc/testsuite/g++.dg/cpp0x/auto42.C
fd8b8fe7fe5a5692d13a285ecdb8f37d gcc/testsuite/g++.dg/cpp0x/auto5.C
5caa4e4d8ccbe6986b71a0c37cc6dc35 gcc/testsuite/g++.dg/cpp0x/auto7.C
a73e9b7b064e3c8aa13e0913baaf9595 gcc/testsuite/g++.dg/cpp0x/auto9.C
@@ -8383,7 +8420,7 @@ db6c8715fba011a5ced47ca1680fbd25 gcc/testsuite/g++.dg/cpp0x/constexpr-46336.C
61e0658a2d9b684067e081fa5193d4d2 gcc/testsuite/g++.dg/cpp0x/constexpr-51369.C
4d5a5d24727d162248791dc1c6a08c45 gcc/testsuite/g++.dg/cpp0x/constexpr-52672.C
1ff8561a9e56b10fd480d3c22d4f2b3c gcc/testsuite/g++.dg/cpp0x/constexpr-53094-1.C
-bf47121c1c1e87215fd41fcab5acb500 gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C
+45d31d05190c6af6046229a9ec5871ef gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C
969f41577bfff1fd7346e836c331ad46 gcc/testsuite/g++.dg/cpp0x/constexpr-53094-3.C
f89607f18b0bf238690c5efba99e738c gcc/testsuite/g++.dg/cpp0x/constexpr-55432.C
b159b2940888e61fe4593b2ba39a3f48 gcc/testsuite/g++.dg/cpp0x/constexpr-55573.C
@@ -8547,6 +8584,7 @@ e3cde1e3883c11e3d5cde9c482349c05 gcc/testsuite/g++.dg/cpp0x/constexpr-switch.C
8b3ed3d6cf4068c9d3fdfece45008782 gcc/testsuite/g++.dg/cpp0x/constexpr-template1.C
4bb3cfc75a235b33f98f8f995f9a11fd gcc/testsuite/g++.dg/cpp0x/constexpr-template2.C
3b2b4457fde8f7dc12f34b88ef1233f4 gcc/testsuite/g++.dg/cpp0x/constexpr-template3.C
+c8f4b2a1fc592c775772936761ed4795 gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C
073877c0f17d1d119a359d495a52a784 gcc/testsuite/g++.dg/cpp0x/constexpr-throw.C
77e5599180280cec4988ec1ddb372b25 gcc/testsuite/g++.dg/cpp0x/constexpr-tuple.C
ae133db1f290b78e3c82f5736cbbedd5 gcc/testsuite/g++.dg/cpp0x/constexpr-typedef1.C
@@ -8561,6 +8599,7 @@ ef299d52e4acb0accc6e4fa4baf91cc1 gcc/testsuite/g++.dg/cpp0x/constexpr-union3.C
a80be7ed60483526cbc73b734a6567d3 gcc/testsuite/g++.dg/cpp0x/constexpr-value.C
213357e480e4e1b2ced92b711e3ca2c8 gcc/testsuite/g++.dg/cpp0x/constexpr-value2.C
a930284b1953ab77dcbc0ec94543b57b gcc/testsuite/g++.dg/cpp0x/constexpr-value3.C
+9723fae309dff5e39e0b630954d2d10e gcc/testsuite/g++.dg/cpp0x/constexpr-value4.C
443012f7b572f9e31cec22b76face1b0 gcc/testsuite/g++.dg/cpp0x/constexpr-variadic.C
4138d75ee330a5d2fd3099d8f561e59b gcc/testsuite/g++.dg/cpp0x/constexpr-virtual.C
74b6dc368af3203141184d90425c0b43 gcc/testsuite/g++.dg/cpp0x/constexpr-virtual2.C
@@ -8629,6 +8668,8 @@ bdba0a334769e5b07579a00b83619135 gcc/testsuite/g++.dg/cpp0x/decltype48.C
386eaa55c3c1d627d49e5f9e7adec123 gcc/testsuite/g++.dg/cpp0x/decltype5.C
93d62035309e5a9b0197c32f19717624 gcc/testsuite/g++.dg/cpp0x/decltype52.C
18ed71440e53d896399bdba36dc42a08 gcc/testsuite/g++.dg/cpp0x/decltype53.C
+f94e897a0b87b037c2e3f9e1357c1cab gcc/testsuite/g++.dg/cpp0x/decltype55.C
+dd6c683be4f9a9a39eaad1f127661efd gcc/testsuite/g++.dg/cpp0x/decltype57.C
5e830daa5bfe8780960733c15cef7f74 gcc/testsuite/g++.dg/cpp0x/decltype6.C
c3626f3b26fbb53bd234a4e39649b63f gcc/testsuite/g++.dg/cpp0x/decltype7.C
bbdff105c665351973aaa6a25eaa0940 gcc/testsuite/g++.dg/cpp0x/decltype8.C
@@ -8670,11 +8711,15 @@ c163e76b6fe04152df8ad492d1575982 gcc/testsuite/g++.dg/cpp0x/defaulted4.C
1a3c0b47ba7c2e8534100aba130285d9 gcc/testsuite/g++.dg/cpp0x/defaulted40.C
ac76d900f119c9ca0e7c93a364ec9ca8 gcc/testsuite/g++.dg/cpp0x/defaulted41.C
973e3938ae3516d6d2de0d6490aaa504 gcc/testsuite/g++.dg/cpp0x/defaulted42.C
+2ee0772db61578cee819eb3f0c529df5 gcc/testsuite/g++.dg/cpp0x/defaulted44.C
+bf3070d396c7bb7e08191019deb59497 gcc/testsuite/g++.dg/cpp0x/defaulted45.C
+c7e6cc6230f1d5b6c871906050eb4a8e gcc/testsuite/g++.dg/cpp0x/defaulted48.C
a542994a8950397c6e282c0db4479373 gcc/testsuite/g++.dg/cpp0x/defaulted5.C
d55216a62be51ae4ddecbd573454b5cd gcc/testsuite/g++.dg/cpp0x/defaulted6.C
7ce42a1717ccdfef065fa2abb34b230c gcc/testsuite/g++.dg/cpp0x/defaulted7.C
e4eda3d1136f1741945b988346e3fedf gcc/testsuite/g++.dg/cpp0x/defaulted8.C
48330e103022acc7a08050ed88e86cac gcc/testsuite/g++.dg/cpp0x/defaulted9.C
+a9129f4cd34b93dbe745e3849ea1c38a gcc/testsuite/g++.dg/cpp0x/deleted3.C
26ffaaea937dea1cd3e6293db9b589e0 gcc/testsuite/g++.dg/cpp0x/dependent1.C
0747f84ce4389f82cb88229d28e39c3a gcc/testsuite/g++.dg/cpp0x/diag1.C
614bd2c770efa2ba339de0abcc46f4cb gcc/testsuite/g++.dg/cpp0x/elision.C
@@ -8690,7 +8735,7 @@ c59dd44c446a74f887d02cded81ac68d gcc/testsuite/g++.dg/cpp0x/enum14.C
136cf9f59d9f42c7f21ac24a24fb8505 gcc/testsuite/g++.dg/cpp0x/enum15.C
3daab85e397ec0ebb4d72935af3769af gcc/testsuite/g++.dg/cpp0x/enum16.C
366127817ed249e734c8240648919022 gcc/testsuite/g++.dg/cpp0x/enum17.C
-96f064b57a9747912f56ab170241407f gcc/testsuite/g++.dg/cpp0x/enum18.C
+577b64950eb155d98808a78644ec2644 gcc/testsuite/g++.dg/cpp0x/enum18.C
ebe8e05bc54f51359fbdd8f97f3a1e5d gcc/testsuite/g++.dg/cpp0x/enum19.C
a8073df4790689eb8b20d4a6f09abde1 gcc/testsuite/g++.dg/cpp0x/enum2.C
9beff7ab26dc0851c19db4790deb4e47 gcc/testsuite/g++.dg/cpp0x/enum20.C
@@ -8708,6 +8753,7 @@ ec6b0bf4b17fabec5ae1aaf79db31e6f gcc/testsuite/g++.dg/cpp0x/enum7.C
684bb209b58a089455fc93617b1e4a87 gcc/testsuite/g++.dg/cpp0x/enum8.C
a66db01feb4dd1cae2e0f64cd85a8cae gcc/testsuite/g++.dg/cpp0x/enum9.C
0da5e64b4ad2e2d41e648440cc17438b gcc/testsuite/g++.dg/cpp0x/enum_base.C
+f55b557f4964b9a55a6419d83ef1aef3 gcc/testsuite/g++.dg/cpp0x/enum_base2.C
bf868bae8ff5bad206ff223cb32f9072 gcc/testsuite/g++.dg/cpp0x/enum_base_warn.C
609d70ad463c19840a3dde6aff121c32 gcc/testsuite/g++.dg/cpp0x/error1.C
ec1091145e02c8aa85de065481f9afda gcc/testsuite/g++.dg/cpp0x/error2.C
@@ -8921,7 +8967,13 @@ a68c6107558f25b70fd1a97ccd9b3825 gcc/testsuite/g++.dg/cpp0x/initlist66.C
d0fee121db223a5055591a32f5294ffe gcc/testsuite/g++.dg/cpp0x/initlist69.C
613b80eadd3f31808de00e614b6391fa gcc/testsuite/g++.dg/cpp0x/initlist7.C
2d66a677a148bf90b713edeecf9c1bbb gcc/testsuite/g++.dg/cpp0x/initlist70.C
+8c9b40880020e82966f1de834781daf0 gcc/testsuite/g++.dg/cpp0x/initlist71.C
+17dc666d60c45aa84904ad515bee0392 gcc/testsuite/g++.dg/cpp0x/initlist76.C
+0ea881619a668e35542e587d9eb84ead gcc/testsuite/g++.dg/cpp0x/initlist78.C
+11f7b1bf623dafb7980bb254a51eb178 gcc/testsuite/g++.dg/cpp0x/initlist79.C
d3a348c4b49e1b0531708a46d1a74cce gcc/testsuite/g++.dg/cpp0x/initlist8.C
+02ef88866a33af3b82367f920d4380ba gcc/testsuite/g++.dg/cpp0x/initlist81.C
+3df81dd8acdfbccf6fba7648b64b32c5 gcc/testsuite/g++.dg/cpp0x/initlist82.C
73b80da7e3c8fd208ac554539a446c84 gcc/testsuite/g++.dg/cpp0x/initlist9.C
42dda7ee38ea7ff6645882f3f9a6eaa0 gcc/testsuite/g++.dg/cpp0x/inline-ns1.C
8d0f6e24a8b9f019ab2ca763acb7a904 gcc/testsuite/g++.dg/cpp0x/inline-ns2.C
@@ -8934,6 +8986,7 @@ d9b3b9597d3bf51088b71abd8f440104 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-98.C
90b350c0b9cc2b8f8033e108b56da294 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__.C
4a88207602c959a71cb68833ac3176a7 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-array.C
35a01a9ec2c183901d61e92e474c0aa5 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto1.C
+c5dc01d7b5c6d100481180d9a0f8ce62 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto3.C
414981bc7d01f6877362173a78b37d06 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-const-ref-neg.C
51dab2ccc004f3b91f60a7b710c8d2f0 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-const-ref.C
e2a083691b1566f137dbcda5f4010917 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-neg.C
@@ -8966,6 +9019,7 @@ a30e26da337ef1a550b5b617672f3782 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduc
7b0aad310340521d4ca9c11fd880f129 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg2.C
d102c62f275734141afe46d44e6c3423 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg3.C
ffc39c5b4c152803a184a9a8a8a77a77 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg4.C
+0ee6fa2440a52fd8a86025d3704e8fc8 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg5.C
42c269128ec251cc935bf084af3fbf0b gcc/testsuite/g++.dg/cpp0x/lambda/lambda-direct-init.C
4d150a5c8a885c4059815a3096459204 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh.C
b88a795aaa2898fb80b0ec0b82214e74 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh2.C
@@ -8978,6 +9032,7 @@ d6b61c53f6746bab283cfde83dd61400 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errlo
bcb561a88f61bda5399b57a2891eb5ca gcc/testsuite/g++.dg/cpp0x/lambda/lambda-field-names.C
02f20fb8b429131ddea86b03510488e5 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C
d571c1f713fa3db34b2ad3b7c961930a gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice1.C
+d010708ff9dfabefb31e6ac59b3c7b96 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice10.C
9ce51776cab44241098f2ddbefc57b8e gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C
aeedb86ecc165de825ed34f0347ad287 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice3.C
d861ff7bb238770549f1f9ba4261c13c gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice4.C
@@ -9011,6 +9066,7 @@ fc8b20e80b7a3acae5bba366690c4d56 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-neste
d2325a6665eff9c4ec0ee3926899f7f2 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi1.C
771626fe4c5491ce91092c43744cb02c gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi2.C
6a7d73b6c513d33dae55973e8fe4ad1d gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi3.C
+62d7f10d8b81906e7fae7383427bf38d gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C
d99567b8456dc927600ebf819b5a5619 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nullptr.C
80c65dd7b2e3c9f25b1983ac66332449 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-pass.C
12e661c561e08767d0eba1cd070bbb1b gcc/testsuite/g++.dg/cpp0x/lambda/lambda-qualified.C
@@ -9018,6 +9074,7 @@ d99567b8456dc927600ebf819b5a5619 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nullp
1c8ff3c470a354b483ecd257a3ce332b gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref-default.C
0059c3472d7a3d6ab23c7aa58857fedc gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref.C
acbae52bdbdaf07e52af0298a84decea gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref2.C
+1513e36e6bd3517091ebe8591db0f6a9 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-return1.C
8b146a8ee8aad9a37f05efbe4398473d gcc/testsuite/g++.dg/cpp0x/lambda/lambda-sfinae1.C
edbfa2dc925571a1d9ea613aa37a589c gcc/testsuite/g++.dg/cpp0x/lambda/lambda-std-function.C
56bd211474cf91f523f453555f6eb049 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C
@@ -9084,6 +9141,8 @@ ae7b9d7f58a9bc802bcf7ffd5e196b3b gcc/testsuite/g++.dg/cpp0x/noexcept16.C
f10a73fb8e727619c647ab5fa4bfc33d gcc/testsuite/g++.dg/cpp0x/noexcept18.C
106c122a0f8476e054941f5467d4db3e gcc/testsuite/g++.dg/cpp0x/noexcept19.C
2c2ee75fa09bba00462d8640b91c498d gcc/testsuite/g++.dg/cpp0x/noexcept20.C
+2b6c095cbaee8a1afa6ee4b8efb3eca6 gcc/testsuite/g++.dg/cpp0x/noexcept21.C
+8a1b4a9dc941644e560680d40bba31d3 gcc/testsuite/g++.dg/cpp0x/noexcept22.C
b2aeffa807ca947f2ac1ce254e43f97a gcc/testsuite/g++.dg/cpp0x/nolinkage1.C
6b7c91b931bbdacbbffbf9b90a79bc6a gcc/testsuite/g++.dg/cpp0x/nolinkage1.h
84840c32c28b1c181ccc33aecc2459a7 gcc/testsuite/g++.dg/cpp0x/nolinkage1a.cc
@@ -9100,6 +9159,7 @@ f082c50c01c8cec0d6fd704527c3f118 gcc/testsuite/g++.dg/cpp0x/nsdmi-list1.C
4081fbdea4fc44ccd938c05a0e878309 gcc/testsuite/g++.dg/cpp0x/nsdmi-list2.C
a991f089eb46483c38cc2db17004d0a7 gcc/testsuite/g++.dg/cpp0x/nsdmi-template1.C
45f92eae32dfec7a066fa0f9dba87d46 gcc/testsuite/g++.dg/cpp0x/nsdmi-template2.C
+24d435bfe180c503be113a8efa76cca0 gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C
661a11fea161ac10da2a3f11c1c84b8a gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual1.C
1cfd54eaf855a2659d8b6664c12d3f67 gcc/testsuite/g++.dg/cpp0x/nsdmi1.C
6616cc2af1b383e5b3e2d4ffb858d686 gcc/testsuite/g++.dg/cpp0x/nsdmi2.C
@@ -9109,6 +9169,7 @@ d0f1e5c23db6af95e7372d6667d31bcc gcc/testsuite/g++.dg/cpp0x/nsdmi5.C
b78afbce5f76bf92f521b06d792bb9a3 gcc/testsuite/g++.dg/cpp0x/nsdmi6.C
7336d347a569b68e83957b55f41dd9ea gcc/testsuite/g++.dg/cpp0x/nsdmi7.C
f6b13d6e4f8551af6696e76147a52fb9 gcc/testsuite/g++.dg/cpp0x/nsdmi8.C
+5a5bafe524b9f0057c94b91719d88f06 gcc/testsuite/g++.dg/cpp0x/nsdmi9.C
df7390e08ffa68c7677abb541132fcc1 gcc/testsuite/g++.dg/cpp0x/nullptr01.C
d5f395547392e9d98091aa5bb12cb267 gcc/testsuite/g++.dg/cpp0x/nullptr02.C
3855c82744e3ead00bbf18a01719a246 gcc/testsuite/g++.dg/cpp0x/nullptr03.C
@@ -9201,6 +9262,7 @@ b52e8ee1319932d3b243a6fa7a55c976 gcc/testsuite/g++.dg/cpp0x/pr51463.C
17842e627dda285d3231b7dc2e1dd2e5 gcc/testsuite/g++.dg/cpp0x/pr52744.C
d99b705d92b5a7195917ee59c6c04bc6 gcc/testsuite/g++.dg/cpp0x/pr52841.C
6eb4712996c5c48893b31133038f46f0 gcc/testsuite/g++.dg/cpp0x/pr54323.C
+e68bf835ac536338752ce48bd0776207 gcc/testsuite/g++.dg/cpp0x/pr57981.C
e4fa87f30de032d5f1a1cdd560512371 gcc/testsuite/g++.dg/cpp0x/ptrmem-cst-arg1.C
edffb4150e3adee1e7286e8172cde88a gcc/testsuite/g++.dg/cpp0x/range-for1.C
a704049cf608b9b47381e29ee9dbb3fc gcc/testsuite/g++.dg/cpp0x/range-for10.C
@@ -9233,6 +9295,7 @@ d0d588806aef3922d92ee7fb7c632659 gcc/testsuite/g++.dg/cpp0x/ref-qual1.C
e25aa6f18faad387b7f1ade3529476a6 gcc/testsuite/g++.dg/cpp0x/ref-qual11.C
0a0c7a2db84d28ba649ea53e136a1d9c gcc/testsuite/g++.dg/cpp0x/ref-qual12.C
759a26dd15a061d3f5a982b5eb65098b gcc/testsuite/g++.dg/cpp0x/ref-qual13.C
+bf679e1b75877f28dc4d57155f61bcb1 gcc/testsuite/g++.dg/cpp0x/ref-qual14.C
17d77d3ef6cc0e1cfd53228f15a40017 gcc/testsuite/g++.dg/cpp0x/ref-qual2.C
68b27ec15231994ad0330625660d2720 gcc/testsuite/g++.dg/cpp0x/ref-qual3.C
1bb06529f586a3e77263290dd006534e gcc/testsuite/g++.dg/cpp0x/ref-qual4.C
@@ -9363,6 +9426,7 @@ c0ddc01112aa192a88c0dba4a0d12c7d gcc/testsuite/g++.dg/cpp0x/static_assert5.C
e350c673dd8aa7e9eac7c3c7a4a190d3 gcc/testsuite/g++.dg/cpp0x/static_assert6.C
02e741d11fbbf54ed0b3d7bb7818f401 gcc/testsuite/g++.dg/cpp0x/static_assert7.C
8cae2b606ad47af14c0ca89c95671f51 gcc/testsuite/g++.dg/cpp0x/static_assert8.C
+96a83ae08e1b9f6eabf194d6d9b2bb73 gcc/testsuite/g++.dg/cpp0x/static_assert9.C
024127b05a89710621edb486968b4e3c gcc/testsuite/g++.dg/cpp0x/std-layout1.C
e3cdbacd76fde93ec6f86b10cf1fd20d gcc/testsuite/g++.dg/cpp0x/std_fext-numeric-literals.C
cd5d2c01411877db63686a301d0a80c5 gcc/testsuite/g++.dg/cpp0x/std_fno-ext-numeric-literals.C
@@ -9522,7 +9586,13 @@ a287638c6141fa58d63987ca9a2cbf37 gcc/testsuite/g++.dg/cpp0x/variadic135.C
3588193f67880fd7b7b73747e553c75a gcc/testsuite/g++.dg/cpp0x/variadic140.C
e59ed046186a8e2ac6689a10b22b2f82 gcc/testsuite/g++.dg/cpp0x/variadic141.C
01d2770ed46151593ccd92811cd6a518 gcc/testsuite/g++.dg/cpp0x/variadic142.C
+f6a4eb51424f9635fa1af33258378276 gcc/testsuite/g++.dg/cpp0x/variadic144.C
+6b91136ea42e52059454c7003332f69e gcc/testsuite/g++.dg/cpp0x/variadic145.C
+8d31f7fd59614525209b8161d93ce8b5 gcc/testsuite/g++.dg/cpp0x/variadic147.C
+8d874e8495457ec0384a91c3b91e03a5 gcc/testsuite/g++.dg/cpp0x/variadic148.C
+812fa88d8659fdb840378e6b8af20e63 gcc/testsuite/g++.dg/cpp0x/variadic149.C
6ed2e036536de09852464be3cd9a350a gcc/testsuite/g++.dg/cpp0x/variadic15.C
+80ff2b10632dcf314d21c5a8921f3a55 gcc/testsuite/g++.dg/cpp0x/variadic150.C
5e1e29412f063305c242c74862e86181 gcc/testsuite/g++.dg/cpp0x/variadic16.C
3053d79335fc919b210a3cc63f124ff4 gcc/testsuite/g++.dg/cpp0x/variadic17.C
a235bb78ea18efc7b76823629a43177f gcc/testsuite/g++.dg/cpp0x/variadic18.C
@@ -9805,6 +9875,7 @@ a864ac9ace6ee08b0ae00899e67445f0 gcc/testsuite/g++.dg/debug/pr47209.C
3dc7fc950cc8912775fd7b3753944d23 gcc/testsuite/g++.dg/debug/pr56819.C
c3f392076ad11f8768ef0321b89abd5f gcc/testsuite/g++.dg/debug/static1.C
7e13d86d33b17cfb7cdf61b7b8cca961 gcc/testsuite/g++.dg/debug/template1.C
+23dff563f4e6898790a381f0897b988f gcc/testsuite/g++.dg/debug/template2.C
f50cc26d9a41a3cc4afb62032326372f gcc/testsuite/g++.dg/debug/trivial.C
863c8434199f0ac4d3a2d8d915bd5d1a gcc/testsuite/g++.dg/debug/typedef1.C
798848d35df1829cb7c468058c887871 gcc/testsuite/g++.dg/debug/typedef2.C
@@ -9836,6 +9907,9 @@ f3c789df79994ad5c2e7bf06c592e5aa gcc/testsuite/g++.dg/diagnostic/bitfld2.C
3127905a449847bc27a84d6b88588e2a gcc/testsuite/g++.dg/diagnostic/expr1.C
f3b416e81c428ee9582715ac61d2b3d7 gcc/testsuite/g++.dg/diagnostic/method1.C
87d8d501c7c4afd85a94fca95720d273 gcc/testsuite/g++.dg/diagnostic/parm1.C
+c09f2d4a9a5c6437ae44f10ee9d8cfd3 gcc/testsuite/g++.dg/diagnostic/pedantic.C
+88fee03436512dbcf1e58122fba64aea gcc/testsuite/g++.dg/diagnostic/pr58979.C
+7447a4913a5c3f623216b378589bebc7 gcc/testsuite/g++.dg/diagnostic/pr59838.C
c7f8ff703c53611ffdb66eccc4747879 gcc/testsuite/g++.dg/diagnostic/wrong-tag-1.C
99f14d5ed8c140b0a7c970bb12a4c5f0 gcc/testsuite/g++.dg/eh/080514-1.C
562ca7c694e89bb3ac76711c239d5c5e gcc/testsuite/g++.dg/eh/alias1.C
@@ -9904,6 +9978,7 @@ c8f6f4459095bf15bd799a6d96061277 gcc/testsuite/g++.dg/eh/nested-try.C
ee5fb539eb5e41ab9f5aa0028f011fce gcc/testsuite/g++.dg/eh/omit-frame-pointer.C
dfa0fe611ce9682e5de477f908c0b5c0 gcc/testsuite/g++.dg/eh/omit-frame-pointer2.C
b0149e5a2fbd5ae0fa0d1eb763a1f18e gcc/testsuite/g++.dg/eh/partial1.C
+bafc15005abdfe9131f6074efde175eb gcc/testsuite/g++.dg/eh/ppc64-sighandle-cr.C
f31dc353c4075f1cee72592569d86e2e gcc/testsuite/g++.dg/eh/pr29166.C
7f6fb1de797a759786743fea91fe804f gcc/testsuite/g++.dg/eh/pr38662.C
6a9998276cbf3cf9c6d6f6f64f96a145 gcc/testsuite/g++.dg/eh/pr41819.C
@@ -9942,9 +10017,10 @@ fd9d6b2aeb10f429dd19c2675cd7ac03 gcc/testsuite/g++.dg/eh/terminate1.C
7549d75346531f9c6ff9ee0763a142b5 gcc/testsuite/g++.dg/eh/throw1.C
7f4aab5cdb2954060fab6ebdbf157a33 gcc/testsuite/g++.dg/eh/throw2.C
45cea983dcee48d4c249758ac270c782 gcc/testsuite/g++.dg/eh/throw3.C
-82da5127d5ab16e1719d0acbdd8dc675 gcc/testsuite/g++.dg/eh/uncaught1.C
+c7d37e91415ca637d75ff50b8ef9cfe1 gcc/testsuite/g++.dg/eh/uncaught1.C
c77f4b5da310cb17818365cde0e153dd gcc/testsuite/g++.dg/eh/uncaught2.C
794cca1303d30d70c6d5c47c972e23a7 gcc/testsuite/g++.dg/eh/uncaught3.C
+fcfb3b280dbfcc3f1855c13475f2e865 gcc/testsuite/g++.dg/eh/uncaught4.C
1ff41980dd5d1398018fd0852361341a gcc/testsuite/g++.dg/eh/unexpected1.C
75e632be1251d6094d2cf9147ed3621d gcc/testsuite/g++.dg/eh/unwind1.C
a758dbc649ac4070d4dbe5fa7130d1e5 gcc/testsuite/g++.dg/eh/unwind2.C
@@ -9978,7 +10054,7 @@ ce7b6234ca0490c5f395644574322ca2 gcc/testsuite/g++.dg/expr/call1.C
47ee2e9f4d1f4caaa66273c534a05700 gcc/testsuite/g++.dg/expr/call5.C
2ef606c671097dddd5d5000c30530ba5 gcc/testsuite/g++.dg/expr/cast1.C
234b04abbf4ba798c38bda66394b82a7 gcc/testsuite/g++.dg/expr/cast10.C
-0e456a0f4355cca0f4c5d2b05dc17f38 gcc/testsuite/g++.dg/expr/cast2.C
+87cf1e986278e73844d707b2ae5abd5f gcc/testsuite/g++.dg/expr/cast2.C
43b3f0cf8dc0665f8a82af5379392da1 gcc/testsuite/g++.dg/expr/cast3.C
ed8e65f6a9fb8340f4d8881b00bc8a62 gcc/testsuite/g++.dg/expr/cast4.C
0c73fdd0b381eed7e392d54723abee36 gcc/testsuite/g++.dg/expr/cast6.C
@@ -9995,6 +10071,7 @@ d30ef5af28e6363dab6713f12d513bc9 gcc/testsuite/g++.dg/expr/cond4.C
f30409fd40ff04e848318e2beb14a1c7 gcc/testsuite/g++.dg/expr/cond7.C
40070278213343c0b01841f7df7492ae gcc/testsuite/g++.dg/expr/cond8.C
d66ca920348778bbeb8e0826f1345ba0 gcc/testsuite/g++.dg/expr/cond9.C
+89913df130d2e40e91c042ff5d6c302d gcc/testsuite/g++.dg/expr/const1.C
40c29dc173bf365777a7de4d0970b286 gcc/testsuite/g++.dg/expr/copy1.C
5943e958df776a88c39dc200ec5d291c gcc/testsuite/g++.dg/expr/crash-1.C
4ddfe508094ae855749b3a8b63fd8063 gcc/testsuite/g++.dg/expr/crash2.C
@@ -10171,15 +10248,16 @@ eb7c01a3c27870b31eff78eaff0e6292 gcc/testsuite/g++.dg/ext/attrib43.C
a9b531299f7c87d3798a11d5ed6f2ecb gcc/testsuite/g++.dg/ext/attrib44.C
a73db09c380f6e6f784f26040b011488 gcc/testsuite/g++.dg/ext/attrib45.C
ad40278e44f810062402fc64b141c84f gcc/testsuite/g++.dg/ext/attrib46.C
+ca699314b91eb8b52392070eaa448db1 gcc/testsuite/g++.dg/ext/attrib48.C
ec01dbb0bb96c7cda806a516a5cf87d4 gcc/testsuite/g++.dg/ext/attrib5.C
76284b29c6fce52f56ddbcc04acd3a97 gcc/testsuite/g++.dg/ext/attrib6.C
7af1e9265de26187b4a3a3880f99ac11 gcc/testsuite/g++.dg/ext/attrib7.C
23c4a640241391acec5a1fd2c3fa5f25 gcc/testsuite/g++.dg/ext/attrib8.C
db629587302d47a98b453a1702e900c9 gcc/testsuite/g++.dg/ext/attrib9.C
-e7f9381db119c9c6ce6e52d04c2a9bd8 gcc/testsuite/g++.dg/ext/attribute-test-1.C
-016eae4ddf61006a6806f72fa852465a gcc/testsuite/g++.dg/ext/attribute-test-2.C
-04060e02810f1cd111d917969c46a202 gcc/testsuite/g++.dg/ext/attribute-test-3.C
-8e6e1312959fe9db5e04d5e0bfcacd37 gcc/testsuite/g++.dg/ext/attribute-test-4.C
+ca94f9782ff19bc2f53f5f625b6feffe gcc/testsuite/g++.dg/ext/attribute-test-1.C
+e2de938850cd9962c18c0007baaec934 gcc/testsuite/g++.dg/ext/attribute-test-2.C
+6ed72516e9f4d78a022f1835bdb61857 gcc/testsuite/g++.dg/ext/attribute-test-3.C
+fc54da8c09474e6aa630170df92c6131 gcc/testsuite/g++.dg/ext/attribute-test-4.C
ee83a641465f65bee83868a5e82b6e54 gcc/testsuite/g++.dg/ext/bases.C
923b176668f5084b5c9e372d30ecd044 gcc/testsuite/g++.dg/ext/bitfield1.C
c96e03b84c7e1cbbeb5d28b361467e3f gcc/testsuite/g++.dg/ext/bitfield2.C
@@ -10187,6 +10265,7 @@ c96e03b84c7e1cbbeb5d28b361467e3f gcc/testsuite/g++.dg/ext/bitfield2.C
27e7f277d640d9764e58437f0345ad9d gcc/testsuite/g++.dg/ext/bitfield4.C
63134a6f65156e17a7ff7c98dfcea812 gcc/testsuite/g++.dg/ext/bitfield5.C
1371f46aed56d32c7b6433596ea7eacf gcc/testsuite/g++.dg/ext/boolcomplex-1.c
+fff9b32833bf9b9b7bbcc10ac630a0d9 gcc/testsuite/g++.dg/ext/builtin-bswap1.C
8de123d2034c7e35f3a466e763cbefc8 gcc/testsuite/g++.dg/ext/builtin-object-size1.C
88b60ec42eecbed410b21afccf5a7be3 gcc/testsuite/g++.dg/ext/builtin-object-size2.C
40741adc7f2c6007d3a4b1ea58cbdfc8 gcc/testsuite/g++.dg/ext/builtin-object-size3.C
@@ -10412,6 +10491,8 @@ f5e4ea70b45a11c5323da18215d95112 gcc/testsuite/g++.dg/ext/pr27019.C
d5eea1e0f08dca8eab2b57d02f7bc73a gcc/testsuite/g++.dg/ext/pr34829.C
188a8d2b9be2004a264afef6a0d937cb gcc/testsuite/g++.dg/ext/pr47213.C
098b8140ebbd429d9c2b2419717ce9d6 gcc/testsuite/g++.dg/ext/pr53605.C
+627009ec0ac71a6fc351693f33db780f gcc/testsuite/g++.dg/ext/pr57362.C
+db6ceb60c85d19ebe96df1d062b22334 gcc/testsuite/g++.dg/ext/pr57735.C
ad117686eb16e680b29f2f5e45ebe0df gcc/testsuite/g++.dg/ext/pragmaweak1.C
ae2794e104309a224e228d70e4cede48 gcc/testsuite/g++.dg/ext/pretty1.C
faa8333681bedde3ba84daa60ec26ff8 gcc/testsuite/g++.dg/ext/pretty2.C
@@ -10427,6 +10508,7 @@ b1f2237b354111a738a7ac26e40fca77 gcc/testsuite/g++.dg/ext/stmtexpr10.C
9d43ea9a813c48446105372589470afa gcc/testsuite/g++.dg/ext/stmtexpr12.C
a35a509e151456af5b8cfb76d49c85ed gcc/testsuite/g++.dg/ext/stmtexpr13.C
e5c3a36ac53e4069367fadc126c6b8d9 gcc/testsuite/g++.dg/ext/stmtexpr14.C
+9b1b14cb509eb63fa5b3e30e98dc19b3 gcc/testsuite/g++.dg/ext/stmtexpr15.C
e6bc1a09cf3c9d838c7ad4575c3d8740 gcc/testsuite/g++.dg/ext/stmtexpr2.C
15be25b1a07f94e4d65103bfb52d6406 gcc/testsuite/g++.dg/ext/stmtexpr3.C
7f4e8ebedb382ebc1349d7067b034121 gcc/testsuite/g++.dg/ext/stmtexpr4.C
@@ -10440,6 +10522,7 @@ e4a78d4631d98dda8d34b1baf828c158 gcc/testsuite/g++.dg/ext/sync-1.C
7d2ab13d9258d8fc570367eacc626bf6 gcc/testsuite/g++.dg/ext/sync-2.C
96d325d0b1cb729ac3fd1b3d32a6b67b gcc/testsuite/g++.dg/ext/sync-3.C
18d30ada6b99d67b123655316ee84e3f gcc/testsuite/g++.dg/ext/timevar1.C
+01c68a4ad6501d5104065731b3cf67c4 gcc/testsuite/g++.dg/ext/timevar2.C
b0c4b5418bbb0cea1304a888bae68465 gcc/testsuite/g++.dg/ext/tmplattr1.C
089638758b33bf99338184db0181179c gcc/testsuite/g++.dg/ext/tmplattr2.C
ff67a3df89d9e5bed9e2259c840fd1c3 gcc/testsuite/g++.dg/ext/tmplattr3.C
@@ -10449,6 +10532,7 @@ b2cbeefe0b660f19695decd8817dfef1 gcc/testsuite/g++.dg/ext/tmplattr6.C
3ebac9950d9d5de5060e8a708e6c45b8 gcc/testsuite/g++.dg/ext/tmplattr7.C
bcdc198bba142d390818f427b8129565 gcc/testsuite/g++.dg/ext/tmplattr8.C
025a5972f75731b8e82a3214589eeedc gcc/testsuite/g++.dg/ext/tmplattr9.C
+5c82bcad933c856bb7bc2222cad5ff0f gcc/testsuite/g++.dg/ext/traits1.C
1b8acb86eb35f02c108334294530bd02 gcc/testsuite/g++.dg/ext/transparent-union.C
c2ab0a5977a08b46134ba61eb8b22222 gcc/testsuite/g++.dg/ext/typedef-init.C
a55635b999e217d4900dcb3975178408 gcc/testsuite/g++.dg/ext/typename1.C
@@ -10524,6 +10608,8 @@ f0ce7d14c6af3b42645a73bd7a9fd205 gcc/testsuite/g++.dg/ext/utf32-3.C
57043e727057494f47b0926ae5e1bbfd gcc/testsuite/g++.dg/ext/vector19.C
a74f644ad1795f7b948fde6bec0f0e1e gcc/testsuite/g++.dg/ext/vector2.C
7adefb87e76aa3bd1f41e2301294c59f gcc/testsuite/g++.dg/ext/vector20.C
+f006e9fbc60cef8755f4653f8255d665 gcc/testsuite/g++.dg/ext/vector25.C
+da6a6b67e5b0bd14588fbe068ec0af21 gcc/testsuite/g++.dg/ext/vector27.C
06e44a4208434952189cfd9cd55ae2d8 gcc/testsuite/g++.dg/ext/vector3.C
1d6b45dce331a414b31b64c5104ab383 gcc/testsuite/g++.dg/ext/vector4.C
3231264b4b96091ab8a2351e76707e8d gcc/testsuite/g++.dg/ext/vector5.C
@@ -10677,6 +10763,7 @@ b0c773d45d10c0af972510732dfd12b4 gcc/testsuite/g++.dg/gomp/for-17.C
346ebf6198dbf562511da712952ea387 gcc/testsuite/g++.dg/gomp/for-18.C
c606392381e5a5cbb2559dac807ff16e gcc/testsuite/g++.dg/gomp/for-19.C
124228411a0289faecf6d140e979971c gcc/testsuite/g++.dg/gomp/for-2.C
+206a717a3136f8c1885ed7bf8f9de921 gcc/testsuite/g++.dg/gomp/for-20.C
9181a87e2f994d63d21b965bd8baf5ad gcc/testsuite/g++.dg/gomp/for-3.C
267f636c6e44565ab5681b6144cb7f54 gcc/testsuite/g++.dg/gomp/for-4.C
aeeb9dbf3c534cb54714343479d0da90 gcc/testsuite/g++.dg/gomp/for-5.C
@@ -10772,6 +10859,7 @@ d26dc16e551e9c50eaca4ea300e37bd2 gcc/testsuite/g++.dg/gomp/pr48716.C
07b2ae49f8ff75d1230e86dbfe3f3ef3 gcc/testsuite/g++.dg/gomp/pr51360.C
7a2da759d2704e78a3b0d45bae8fc384 gcc/testsuite/g++.dg/gomp/pr51669.C
271355b3ab79506b8ff11b6ce0ae4994 gcc/testsuite/g++.dg/gomp/pr56217.C
+2638eeaa7af8cdffb3a98b0f4894d2dc gcc/testsuite/g++.dg/gomp/pr59297.C
d2c2484d4d1236326efc32a01fddaa03 gcc/testsuite/g++.dg/gomp/predetermined-1.C
edac71d2b358ecd6e646fece69c5426d gcc/testsuite/g++.dg/gomp/private-1.C
536359d59fc418a1570a6d8574a66ca1 gcc/testsuite/g++.dg/gomp/sections-1.C
@@ -10902,6 +10990,7 @@ c9b550ead8867586800cdeee63308c31 gcc/testsuite/g++.dg/inherit/using3.C
2a609ed8062419576ed46e3e969999d6 gcc/testsuite/g++.dg/inherit/using6.C
824afb5f78d6295dc194ab9e7d3ef6c1 gcc/testsuite/g++.dg/inherit/using7.C
5d675d5e8dcd9e6e6286c004b1e515ee gcc/testsuite/g++.dg/inherit/virtual1.C
+a7e9d57f0ba4f7ea8ed0340c0dd10f3e gcc/testsuite/g++.dg/inherit/virtual11.C
97a2f1a9fc23a8a008f5567cb6bbefa7 gcc/testsuite/g++.dg/inherit/virtual2.C
88e3f23768b2dfe530d163660b058796 gcc/testsuite/g++.dg/inherit/virtual3.C
b7f032736331f1ff851d46fe5aef118a gcc/testsuite/g++.dg/inherit/virtual4.C
@@ -11213,6 +11302,10 @@ b6207250e81c199b2860b99758c7c707 gcc/testsuite/g++.dg/ipa/pr50605.C
5645876c592391b1a221e2bbadde0436 gcc/testsuite/g++.dg/ipa/pr52939.C
31b6d18c1858b5f5148de832f3fb7915 gcc/testsuite/g++.dg/ipa/pr55264.C
da3ab59e12c64fabaf4786b4f5835618 gcc/testsuite/g++.dg/ipa/pr56310.C
+cc7882632634230561bec7316fae94c5 gcc/testsuite/g++.dg/ipa/pr60419.C
+190bb52be2caa70fd51cc2a735d45f1e gcc/testsuite/g++.dg/ipa/pr60640-1.C
+b4277c2887fdb910bdca2a8dbf0de117 gcc/testsuite/g++.dg/ipa/pr60640-2.C
+2b5d243c5137f370d06b3628cfde2864 gcc/testsuite/g++.dg/ipa/pr60640-3.C
2b091ec065310fe84169c6f447b3a338 gcc/testsuite/g++.dg/lookup/ambig1.C
b9932960a2c5344244e109ba4c3ad748 gcc/testsuite/g++.dg/lookup/ambig2.C
8a8e297ff58b448ef6aadeaf54236aa9 gcc/testsuite/g++.dg/lookup/ambig3.C
@@ -11817,6 +11910,12 @@ eb316460089208481c6b3e5a0c34a90a gcc/testsuite/g++.dg/opt/pr55331.C
7057b0c0d36c90d59e489132e8fff3fe gcc/testsuite/g++.dg/opt/pr55717.C
374e458734ce7fe1729a8ba680a51657 gcc/testsuite/g++.dg/opt/pr56381.C
c68a9b9f4514e9c73fd26523ebebc10e gcc/testsuite/g++.dg/opt/pr56999.C
+828022ccc1e84d3cca942139c1d8d082 gcc/testsuite/g++.dg/opt/pr58006.C
+1cadcb34706f8ce0f09e6fdea8d1e401 gcc/testsuite/g++.dg/opt/pr58165.C
+e12ba3a3e0fee8d465b2d12fd7262b42 gcc/testsuite/g++.dg/opt/pr58864.C
+b5c6104c29743bbd0bba0fb8c0978bd7 gcc/testsuite/g++.dg/opt/pr59470.C
+658809bc6695a7036a3aa07912cf983c gcc/testsuite/g++.dg/opt/pr59647.C
+cd9ce81573f1dd55ed9926ad0afbe423 gcc/testsuite/g++.dg/opt/pr60849.C
ac2356162f00cd5e8804482480f1795a gcc/testsuite/g++.dg/opt/pr6713.C
90bdbfd9313461944756a9e9f01ce788 gcc/testsuite/g++.dg/opt/pr7503-1.C
1451eba24eea82cbd0c1ab87885c0f77 gcc/testsuite/g++.dg/opt/preinc1.C
@@ -12162,6 +12261,7 @@ fe0dbe1f81b80b364b6cd8c9b5d5967e gcc/testsuite/g++.dg/overload/defarg4.C
0a4cc2ee926db95999e0ef1222d10ad1 gcc/testsuite/g++.dg/overload/defarg5.C
0ed49131967a0758247fa8e7cdb7f814 gcc/testsuite/g++.dg/overload/defarg6.C
de833d8751ce7fbcf8622b1a3ccd7a5c gcc/testsuite/g++.dg/overload/defarg7.C
+5e9c0762b18e3b0d060a064fa92aafc7 gcc/testsuite/g++.dg/overload/defarg8.C
c2637510918df429c7fea49fbd959112 gcc/testsuite/g++.dg/overload/ellipsis1.C
eb8955b4f4568177f29d90808e350304 gcc/testsuite/g++.dg/overload/error1.C
e4753bb05dc59e57b5bb60b1877f1fc1 gcc/testsuite/g++.dg/overload/error2.C
@@ -12326,6 +12426,7 @@ fcbbcebb755ba0db8bde5a91a31088a8 gcc/testsuite/g++.dg/parse/crash56.C
3cae354cb01ecb5097fe78c4d17c8ccd gcc/testsuite/g++.dg/parse/crash6.C
84cac2482e8cc58f9b56a35359690164 gcc/testsuite/g++.dg/parse/crash60.C
02796255ff9d4aacb61ea075da81bea0 gcc/testsuite/g++.dg/parse/crash61.C
+3fae4596904aa2d63a517ea2ea3ed98a gcc/testsuite/g++.dg/parse/crash62.C
34393b72e5dec85fca930dee15e2f669 gcc/testsuite/g++.dg/parse/crash7.C
5818f331167c496db06ad694932a1beb gcc/testsuite/g++.dg/parse/crash9.C
5940e29a523673e2c47048c21c11d678 gcc/testsuite/g++.dg/parse/ctor1.C
@@ -12565,6 +12666,7 @@ d58864cd4550e9a43e5536d8ea904e26 gcc/testsuite/g++.dg/parse/qualified4.C
8d6d8891281e77e95edf66cda3bc270f gcc/testsuite/g++.dg/parse/redef1.C
fc942a22cb8c9c4f56299a12c41b226e gcc/testsuite/g++.dg/parse/redef2.C
19c9483f0726842c500357ad04acc983 gcc/testsuite/g++.dg/parse/ref-qual1.C
+70d93639ad9e4d1ee8748d9329dfae12 gcc/testsuite/g++.dg/parse/ref-qual2.C
176cd37bac0e17d41ebe5f535df4a12c gcc/testsuite/g++.dg/parse/ref1.C
0ac246d1c2c84000962245c7661e60cc gcc/testsuite/g++.dg/parse/register1.C
15c20313893567659b867565ddb52b45 gcc/testsuite/g++.dg/parse/repo1.C
@@ -12652,6 +12754,7 @@ e831cec93609978519f8f94b9c7e0a97 gcc/testsuite/g++.dg/parse/undefined5.C
6bd4c0f7191355f693af56ab02582e5d gcc/testsuite/g++.dg/parse/using1.C
b0efdadcde3dc0c5df6d0eb6b88135b3 gcc/testsuite/g++.dg/parse/using2.C
ac80fae137a8a1ef9021d6e173ca8090 gcc/testsuite/g++.dg/parse/using3.C
+7bdf885c8575c5234e7e0016e3c76dcc gcc/testsuite/g++.dg/parse/using4.C
2b4ab97a787e4e5ab0056f2bb0da4a6d gcc/testsuite/g++.dg/parse/varmod1.C
87484ba10cbb539c4f84ec334125b020 gcc/testsuite/g++.dg/parse/wrong-inline1.C
d9064b328bf2156a9e67df26156ec572 gcc/testsuite/g++.dg/pch/array-1.C
@@ -12723,6 +12826,9 @@ da36360b1eaeaaf6b1adffefc9001717 gcc/testsuite/g++.dg/pr54655.C
87fdbc7f65a77794bc417b29c89d0401 gcc/testsuite/g++.dg/pr55263.C
99ec6374b2f0e4e6df67c98e4c982d12 gcc/testsuite/g++.dg/pr55513.C
0ae4a428b317c1c96fedab8dbcaf1da0 gcc/testsuite/g++.dg/pr55604.C
+5abc6bae2519525e59b2a021bb5cd489 gcc/testsuite/g++.dg/pr57878.C
+6ef903a30658765c574e6f3aa8592058 gcc/testsuite/g++.dg/pr59695.C
+70e9c0dd0d7ee853af583f1de142f6f4 gcc/testsuite/g++.dg/pr60769.C
ae8863cdd596655bd9501c7a7e546fc7 gcc/testsuite/g++.dg/predict-loop-exit-1.C
112161f9cc2e99ed1a64b608b234d230 gcc/testsuite/g++.dg/predict-loop-exit-2.C
9fdf45388f73e8c9a46342cf4ec52cb6 gcc/testsuite/g++.dg/predict-loop-exit-3.C
@@ -12810,6 +12916,7 @@ fddf6e4104e367506b1483b55a539b63 gcc/testsuite/g++.dg/tc1/dr80.C
c241bed1d85ccf57402c8efd46ab9b8c gcc/testsuite/g++.dg/tc1/dr85.C
bf475bf32acceb9eb23c5b5b7013f7fe gcc/testsuite/g++.dg/tc1/dr90.C
2b6b832186c8ccf57001b2888f9dec54 gcc/testsuite/g++.dg/tc1/dr94.C
+c07d50142bc334d2ce490d4f68be9ca4 gcc/testsuite/g++.dg/template/abstract1.C
1c360b630dc5835068452f918bda8fb6 gcc/testsuite/g++.dg/template/access1.C
71d21b2797de6268bae8a876a61f64ac gcc/testsuite/g++.dg/template/access10.C
4258b0983bb1e6a711060fef0bfee6ae gcc/testsuite/g++.dg/template/access11.C
@@ -12828,6 +12935,7 @@ bd880d8d2c138019357fe824987745e3 gcc/testsuite/g++.dg/template/access2.C
edd1a0ccdc40a95e3ee5956e50250f9a gcc/testsuite/g++.dg/template/access23.C
e369c82013a70a752273af1adface28c gcc/testsuite/g++.dg/template/access24.C
8fd60bfd6c2c2368d8cb3afb7640aa87 gcc/testsuite/g++.dg/template/access25.C
+c7c275427c1f23da1f5270746886e61d gcc/testsuite/g++.dg/template/access27.C
bb203818faa22dcb1d2c8ada7ef4ec82 gcc/testsuite/g++.dg/template/access3.C
7ea6af968e54287945d17d2352e36fd6 gcc/testsuite/g++.dg/template/access4.C
043c53bbc7cad60a3c72bfa79987f011 gcc/testsuite/g++.dg/template/access5.C
@@ -12853,6 +12961,7 @@ c306ff6eb2399c47b955c0f32952ba01 gcc/testsuite/g++.dg/template/arg4.C
f90e567b7331a6236abd917963c61a0f gcc/testsuite/g++.dg/template/arg6.C
9fda611eb6ff85fc5c7bbaaf0b553563 gcc/testsuite/g++.dg/template/arg7.C
ab34028d94948742f14d5352356f20d5 gcc/testsuite/g++.dg/template/arg8.C
+9a06687b448bfad17e2e10a4c58cfcf5 gcc/testsuite/g++.dg/template/arg9.C
99d7b1deba3ad5e11fcbd2dc7d70e9ee gcc/testsuite/g++.dg/template/array1-1.C
075227803fea6455eb958b3d2d173e9b gcc/testsuite/g++.dg/template/array1-2.C
2960ad36eda739b652d2efa379834c5c gcc/testsuite/g++.dg/template/array10.C
@@ -13094,6 +13203,7 @@ e55baeaf118c452b9f707b8236ee86b1 gcc/testsuite/g++.dg/template/defarg3.C
5a9ab10f62078b4d20766a00362fa933 gcc/testsuite/g++.dg/template/defarg8.C
bbc0cedc0c23e5084b73fd2bd7d12be0 gcc/testsuite/g++.dg/template/defarg9.C
08e2480f72bcb72f3f0c69f74625bd4c gcc/testsuite/g++.dg/template/delete1.C
+f64b5dcbfa3d3051a358c8d1c1e8a878 gcc/testsuite/g++.dg/template/delete2.C
3e39818cd75d670c263210d492e83fc2 gcc/testsuite/g++.dg/template/dependent-args1.C
4e28ad3da9cf0f80841dd7ac6a9a0233 gcc/testsuite/g++.dg/template/dependent-expr1.C
5c363f74bcfd32858f0d7daa76f3d56b gcc/testsuite/g++.dg/template/dependent-expr2.C
@@ -13273,6 +13383,7 @@ c617d0614fa2c65ab23502fc466e2592 gcc/testsuite/g++.dg/template/inherit5.C
f324fc75e2ce740742e957e7c3d64819 gcc/testsuite/g++.dg/template/inherit6.C
512af16a8d227668dfd611f18408ff34 gcc/testsuite/g++.dg/template/inherit7.C
25ec4783042b53fc8562540bbe248d82 gcc/testsuite/g++.dg/template/inherit8.C
+19797273bb7cf4155972bbcb4d4fb8c3 gcc/testsuite/g++.dg/template/inherit9.C
9783cba5cd0e48e50ecc5c42ed1dd282 gcc/testsuite/g++.dg/template/init-list.C
f30fe425de51d4cb2ab5ff05b71d616a gcc/testsuite/g++.dg/template/init1.C
7c6a96d0550437ed561f8825ad2bc25e gcc/testsuite/g++.dg/template/init10.C
@@ -13463,6 +13574,8 @@ bb04475dfd1abb6699b6daee337bc7ef gcc/testsuite/g++.dg/template/partial1.C
3dc2f7f38ec49323d6044ddb2bc2e191 gcc/testsuite/g++.dg/template/partial11.C
de5b350b4a291d22a6e427de9a0c69fc gcc/testsuite/g++.dg/template/partial12.C
60cae52d36e0a429fcd673ddc92f855f gcc/testsuite/g++.dg/template/partial13.C
+ed8b9d57a67bc5c5ea55951ca907f5d9 gcc/testsuite/g++.dg/template/partial14.C
+007e963e6560ba4fd5ed5856096ee4cc gcc/testsuite/g++.dg/template/partial15.C
e2ea27f4d30c89986de472da016881a2 gcc/testsuite/g++.dg/template/partial2.C
629ba41b72a6f4a573aa2b2fc66bf5c8 gcc/testsuite/g++.dg/template/partial3.C
dbd288590e967c40dee79909821124df gcc/testsuite/g++.dg/template/partial4.C
@@ -13555,6 +13668,7 @@ a02f5612e9219b8cd807bc11c6baa86d gcc/testsuite/g++.dg/template/ref2.C
c3bbc6f642a26de6b3238750b8f9c01f gcc/testsuite/g++.dg/template/ref4.C
506e5f8f23105cf0257a836058d1806b gcc/testsuite/g++.dg/template/ref5.C
be5ada7fe947b5c46a81b039d0695560 gcc/testsuite/g++.dg/template/ref6.C
+2928bc911881998ad77feee4157cbfa5 gcc/testsuite/g++.dg/template/ref7.C
0a632cddef1c669686cf95071e3afa4f gcc/testsuite/g++.dg/template/repo1.C
78a6f5ce3eb51c78d7602a071bd63d23 gcc/testsuite/g++.dg/template/repo10.C
5126d45ee77f7897ba034d0dea05e3dc gcc/testsuite/g++.dg/template/repo2.C
@@ -13600,6 +13714,7 @@ d489a85672b2d956beff65b15b095039 gcc/testsuite/g++.dg/template/sfinae5.C
ddcb9be925a64a1c49b8f8cc6c154cf3 gcc/testsuite/g++.dg/template/sfinae7.C
6f91239bd167bb9f6b68f4d27c340176 gcc/testsuite/g++.dg/template/sfinae8.C
a9f3ce4ee662be853b285ba58e2dfe52 gcc/testsuite/g++.dg/template/sfinae9.C
+29035539c4fa91a4347b7a40e31e2701 gcc/testsuite/g++.dg/template/shadow1.C
429c749d4a969d6e6782e2108d66cc72 gcc/testsuite/g++.dg/template/shift1.C
f23ba0af1fed6ed0d84fb59d38cc32a2 gcc/testsuite/g++.dg/template/sizeof-template-argument.C
8af3d67f6d9f4dd6cda097137e1aaa5e gcc/testsuite/g++.dg/template/sizeof1.C
@@ -13820,6 +13935,10 @@ cfc21cabe74fa837433fc899f5f5211c gcc/testsuite/g++.dg/template/using18.C
320afc20e453862a122ac3d0bdda181b gcc/testsuite/g++.dg/template/using20.C
8f24a6602645350feb421484b6b3ea57 gcc/testsuite/g++.dg/template/using21.C
15875b358b7888d3afb1bb2d41b1be7f gcc/testsuite/g++.dg/template/using22.C
+b6fd01563ec784b5aec55681183ee573 gcc/testsuite/g++.dg/template/using23.C
+cc03adff320bfe4d556ca4c56ce6a4d6 gcc/testsuite/g++.dg/template/using27.C
+cb0bcba86115588eec939f8284e3cf91 gcc/testsuite/g++.dg/template/using28.C
+97d5663b600fcdde53f2a0e991d27e6e gcc/testsuite/g++.dg/template/using29.C
2131f7be9d523457118116995b368d74 gcc/testsuite/g++.dg/template/using3.C
cd698ebd98a80f55920d17ae629b4d9b gcc/testsuite/g++.dg/template/using4.C
730dbbdbfc73d70df6d68467f8af3c39 gcc/testsuite/g++.dg/template/using5.C
@@ -13864,6 +13983,7 @@ a9720fe58f11ddd0e2a21ab5df5a77bf gcc/testsuite/g++.dg/tls/static-1.C
40f776e4d949ac2761cee0de2064d991 gcc/testsuite/g++.dg/tls/static2.C
6f6e55742e0f3b50edcd20ccae77b241 gcc/testsuite/g++.dg/tls/thread_local-cse.C
a84301e7ad976f6a03d4c4141ca0dbd1 gcc/testsuite/g++.dg/tls/thread_local-ice.C
+5376b74f85742d48a86569f86027d523 gcc/testsuite/g++.dg/tls/thread_local-ice2.C
60fd7bbf4cf208f22ce5f6c3480f805a gcc/testsuite/g++.dg/tls/thread_local-order1.C
ed2e86bb1963a8ee8dd918835d8b97cc gcc/testsuite/g++.dg/tls/thread_local-order2.C
602f574625ed830db0aa0b98f8f6ffa4 gcc/testsuite/g++.dg/tls/thread_local-wrap1.C
@@ -13883,6 +14003,7 @@ f0bbfb06532e9af552924fe9bed687de gcc/testsuite/g++.dg/tls/thread_local5g.C
d9c8b773089b3a64c3bf0071fb4bbefb gcc/testsuite/g++.dg/tls/thread_local6g.C
91e80c0ea5c20f53d18784fa8d09f30a gcc/testsuite/g++.dg/tls/thread_local7.C
4a40b7580bd20028aa92784998b84bcd gcc/testsuite/g++.dg/tls/thread_local7g.C
+d23eb1fed39b7eaae96375309eeca308 gcc/testsuite/g++.dg/tls/thread_local8.C
4be954cca4e833cfee83b2bf882757f3 gcc/testsuite/g++.dg/tls/tls.exp
7212556766805451a098e554a8ab648e gcc/testsuite/g++.dg/tls/trivial.C
debf53c602437e43da099fa943834a84 gcc/testsuite/g++.dg/tm/20100429.C
@@ -13902,6 +14023,7 @@ cdc7b2399908eab653cc4fc892699046 gcc/testsuite/g++.dg/tm/nested-3.C
dbf73018b39d3a8448dc1e40c8cde019 gcc/testsuite/g++.dg/tm/noexcept-3.C
c40b5c5db70be9b852bc760e505141d6 gcc/testsuite/g++.dg/tm/noexcept-4.C
b955b92a1697b3db056e68d4f5f76728 gcc/testsuite/g++.dg/tm/noexcept-5.C
+d9679790119a16f5ef4bd06033d7cc37 gcc/testsuite/g++.dg/tm/noexcept-6.C
ea59b8bd032828e4847843e35708c051 gcc/testsuite/g++.dg/tm/opt-1.C
f57dc280ca8262993f1656af5de4d8e8 gcc/testsuite/g++.dg/tm/pr45940-2.C
ab1fc8e002302cf3993d553b5114313e gcc/testsuite/g++.dg/tm/pr45940-3.C
@@ -13928,6 +14050,7 @@ d13425070f8f85ea54f79340635d9f50 gcc/testsuite/g++.dg/tm/pr51411.C
952243048b6a0091ad81e5f303c03998 gcc/testsuite/g++.dg/tm/pr51516.C
f351d5c844cb8476077b6d37a74faeb7 gcc/testsuite/g++.dg/tm/pr51928.C
64234cd1ae76904e77f66b6cb0453198 gcc/testsuite/g++.dg/tm/pr56419.C
+c9e5bbfe98ec7fbaa16a15a1f925bb18 gcc/testsuite/g++.dg/tm/pr60004.C
d1d8828bb1842a1f639c2d50c70a554a gcc/testsuite/g++.dg/tm/template-1.C
ec739e78eca3ade8edc23054b90bc5da gcc/testsuite/g++.dg/tm/template-2.C
d4dd66f7147406451abcfe9412aa0ed3 gcc/testsuite/g++.dg/tm/tm.exp
@@ -13997,7 +14120,7 @@ b9e867af0146342c37d2ac67626d327e gcc/testsuite/g++.dg/torture/pr37421.C
ddcb713d149db91f8154d95a295da33d gcc/testsuite/g++.dg/torture/pr37456.C
de29b40a08801f9b5e56f032d4682fb1 gcc/testsuite/g++.dg/torture/pr37716.C
1ecbbaaa6e73ba832830eab989e19fa4 gcc/testsuite/g++.dg/torture/pr37922.C
-f532ea52badae9bec7e18063e926083e gcc/testsuite/g++.dg/torture/pr38565.C
+ede4fc5c3a3f3d90c072941dd1ff17b4 gcc/testsuite/g++.dg/torture/pr38565.C
3b157b9f50453a488b521cd22a937234 gcc/testsuite/g++.dg/torture/pr38705.C
b40a32ddc241492f6a395ad16cd948ee gcc/testsuite/g++.dg/torture/pr38745.C
45aef0fb4191dc0ae2c98c11807df53f gcc/testsuite/g++.dg/torture/pr38747.C
@@ -14154,6 +14277,11 @@ e89f1c8379e462d6700cbd10ca024539 gcc/testsuite/g++.dg/torture/pr56635.C
f9035d95e3a4d25bf372dccc2aebea06 gcc/testsuite/g++.dg/torture/pr56768.C
fe66aa54712cb20fed5ebb73157c6c9b gcc/testsuite/g++.dg/torture/pr56817.C
8a7d86131908cdb65be662a8ab125bb0 gcc/testsuite/g++.dg/torture/pr56837.C
+f57dc8a39ba283ab87221e83f802be5a gcc/testsuite/g++.dg/torture/pr57499.C
+20f86b01bbea5b4795e1e12cf98b140c gcc/testsuite/g++.dg/torture/pr59163.C
+ce5bd74dda85ecae08b1e79c21fc231c gcc/testsuite/g++.dg/torture/pr60609.C
+5f42e568cc105049d43016ffc65ea36f gcc/testsuite/g++.dg/torture/pr60750.C
+ea51728c5e2ae154940893c6ccb374f8 gcc/testsuite/g++.dg/torture/pr60895.C
389892c1f2e87d69449479d1b053c70c gcc/testsuite/g++.dg/torture/predcom-1.C
d28910105d9c9253d94d70eacd5e19d4 gcc/testsuite/g++.dg/torture/pushpop_macro.C
a1b47b9c3e69d79d1895ebc4fd11032b gcc/testsuite/g++.dg/torture/stackalign/check.h
@@ -14207,6 +14335,7 @@ f15cd67e323998a8316039d5d94282ed gcc/testsuite/g++.dg/tree-prof/partition2.C
ea1da784f9e49aa78c8f869baf3f3bd7 gcc/testsuite/g++.dg/tree-prof/partition3.C
fb8bbe2d556b451e4da43891336e8c73 gcc/testsuite/g++.dg/tree-prof/pr51719.C
6619c40836c140325a5ea9b8f43ee291 gcc/testsuite/g++.dg/tree-prof/pr53460.C
+4fac3d88407f206826089ade827e2297 gcc/testsuite/g++.dg/tree-prof/pr59255.C
da7f395008c4cf955da8a2fd9219158a gcc/testsuite/g++.dg/tree-prof/tree-prof.exp
2a1f9c8b1ccb241e4745f1e06c56fac3 gcc/testsuite/g++.dg/tree-ssa/20040317-1.C
d4c530769d43a1d750e74fd5f10a662c gcc/testsuite/g++.dg/tree-ssa/block1.C
@@ -14355,6 +14484,7 @@ f0a1fb92cf38358bf8b5f06449cca963 gcc/testsuite/g++.dg/uninit-pred-2_a.C
c299a2e8f2fcb74286fbc4d6d1cf115d gcc/testsuite/g++.dg/uninit-pred-2_b.C
5786bf78cee1b70c9836b60ec34f42ba gcc/testsuite/g++.dg/uninit-pred-3_a.C
e7062d8b8ae34f0a4f8b5b407e180316 gcc/testsuite/g++.dg/uninit-pred-3_b.C
+5ee1b7f723d2f67283e9a5a7eb0c38f1 gcc/testsuite/g++.dg/uninit-pred-4.C
2fcbc57bdfc93414220095e1211dcd11 gcc/testsuite/g++.dg/uninit-pred-loop-1_a.cc
03d2a78bcc9e78b2411e9795306910ae gcc/testsuite/g++.dg/uninit-pred-loop-1_b.cc
78a350564146421e6be7ebee31e87669 gcc/testsuite/g++.dg/uninit-pred-loop-1_c.cc
@@ -14379,6 +14509,8 @@ d1ef96fc614e0d315e7e981b47a381eb gcc/testsuite/g++.dg/vect/pr45470-a.cc
add1cfbf96f3e44641caf48f126f9c38 gcc/testsuite/g++.dg/vect/pr45470-b.cc
2ca30e69a8e116c38fb2eb4a91256121 gcc/testsuite/g++.dg/vect/pr50698.cc
1c0f9bee33babd1810c8b1c90d011c27 gcc/testsuite/g++.dg/vect/pr51485.cc
+3bff2af6c3bfd7ad46d2d49817f2f165 gcc/testsuite/g++.dg/vect/pr60729.cc
+6fedf5fcd346e8a54e1ea882011da7e0 gcc/testsuite/g++.dg/vect/pr60836.cc
ec0bb90313e9ca2ccc37960fa89a8795 gcc/testsuite/g++.dg/vect/slp-pr50413.cc
3481608244850612e5329609e7d0d7ae gcc/testsuite/g++.dg/vect/slp-pr50819.cc
fd84ebce322ceeb84d248e41301c6baa gcc/testsuite/g++.dg/vect/vect.exp
@@ -14584,6 +14716,7 @@ f11e1a6a7c64d32c0698605c42c159c1 gcc/testsuite/g++.dg/warn/Wunused-parm-4.C
b44ce135d8c96099ca5e30272b8ceaa0 gcc/testsuite/g++.dg/warn/Wunused-var-18.C
457e420b30b84147da9f1deedcd1c32b gcc/testsuite/g++.dg/warn/Wunused-var-19.C
6f250a1bec102f3ef4c4450109985c6c gcc/testsuite/g++.dg/warn/Wunused-var-2.C
+0c5df293cc7c104d4640b26ebae4ed15 gcc/testsuite/g++.dg/warn/Wunused-var-21.C
dd0f2a1889a83658587b5f12c08c0c1c gcc/testsuite/g++.dg/warn/Wunused-var-3.C
62e5565091b4ee3f018515196f818bf3 gcc/testsuite/g++.dg/warn/Wunused-var-4.C
d9191ea69f8ac18b1043d3d093b1f0d4 gcc/testsuite/g++.dg/warn/Wunused-var-5.C
@@ -16200,7 +16333,7 @@ e7c9db1b2be675ff14addb88e2a90cef gcc/testsuite/g++.old-deja/g++.mike/misc2.C
cc10249212aad9171788f0541d34cad0 gcc/testsuite/g++.old-deja/g++.mike/misc6.C
c9236b6c45f41911c2786a0c494cbd04 gcc/testsuite/g++.old-deja/g++.mike/misc7.C
7baa89fdc351351ac514a4fdec32841e gcc/testsuite/g++.old-deja/g++.mike/misc8.C
-9d678ffaa0a7fb192c5e40b3b989e778 gcc/testsuite/g++.old-deja/g++.mike/misc9.C
+c0a0ee051f07383fd186d9c88990720f gcc/testsuite/g++.old-deja/g++.mike/misc9.C
d8c035c73c2a5073c19014f1eec91dd9 gcc/testsuite/g++.old-deja/g++.mike/net1.C
cd9054e1e5f8438c5b5ed72aa90b5f17 gcc/testsuite/g++.old-deja/g++.mike/net10.C
1943b8a0ba3e57ee8e1a45729af9388a gcc/testsuite/g++.old-deja/g++.mike/net11.C
@@ -19264,6 +19397,14 @@ aff7f7ad2ad7fb2c1d7c7583cac7cbd9 gcc/testsuite/gcc.c-torture/compile/pr56539.c
c5f5e137c2f8e6dd178cf3e0d2f39551 gcc/testsuite/gcc.c-torture/compile/pr56571.c
d4fcbeedbb50d5d862a10fb29f188f75 gcc/testsuite/gcc.c-torture/compile/pr56745.c
a6c492944eeef02cb44d6b3efeac2e1f gcc/testsuite/gcc.c-torture/compile/pr56984.c
+3d5e2d289193cbadd96cde226ed96cc8 gcc/testsuite/gcc.c-torture/compile/pr58088.c
+a71124ce890a6be17c193b949f241ac4 gcc/testsuite/gcc.c-torture/compile/pr58164.c
+571c52faa25d3608854e219ebf69b6af gcc/testsuite/gcc.c-torture/compile/pr58970-1.c
+f37bac81441c991f1d44253a46743598 gcc/testsuite/gcc.c-torture/compile/pr58970-2.c
+34ba73f54116b554873bd5c90d0e99af gcc/testsuite/gcc.c-torture/compile/pr58997.c
+281d9c7686306959b5b18e7a449ced24 gcc/testsuite/gcc.c-torture/compile/pr59362.c
+fd97c8c1cad086f7aa91299db41c6ca1 gcc/testsuite/gcc.c-torture/compile/pr59803.c
+c81d14b770f15026bfe61a7d372c3d0c gcc/testsuite/gcc.c-torture/compile/pr60502.c
b9e6ce52b90320c1c3803c25113844c5 gcc/testsuite/gcc.c-torture/compile/pta-1.c
ed716c1d1727fc2c748162e0cbc4ee47 gcc/testsuite/gcc.c-torture/compile/ptr-conv-1.c
8d869e3426345f0cf8837c5eaafd43b5 gcc/testsuite/gcc.c-torture/compile/simd-1.c
@@ -19763,6 +19904,10 @@ a9e5c6f1ee1639039816100f1e790283 gcc/testsuite/gcc.c-torture/execute/20120808-1
abc3d2a8de565b718300dbad8f4192a8 gcc/testsuite/gcc.c-torture/execute/20120919-1.c
7284d69731c716f5645e1e6026e095bf gcc/testsuite/gcc.c-torture/execute/20120919-1.x
e930646e7dc4ae306668360758733d33 gcc/testsuite/gcc.c-torture/execute/20121108-1.c
+91f48b05bc9d42c398d7b5856e001a8d gcc/testsuite/gcc.c-torture/execute/20131127-1.c
+00319451004c266ad1b8c6aeb089eb51 gcc/testsuite/gcc.c-torture/execute/20140212-1.c
+4ad9d497fc6da5c1d93322b91642142c gcc/testsuite/gcc.c-torture/execute/20140326-1.c
+a5f4cdd2313a084c86b42c022d5711d7 gcc/testsuite/gcc.c-torture/execute/20140425-1.c
65f01ac7346bd4d47ed9c1ca94ab74ff gcc/testsuite/gcc.c-torture/execute/900409-1.c
5aefab4daab0bd29ecf2a389f3c44f40 gcc/testsuite/gcc.c-torture/execute/920202-1.c
655936aaf9a63e991a555cbc16738485 gcc/testsuite/gcc.c-torture/execute/920302-1.c
@@ -20413,6 +20558,7 @@ f5bf213254196069bdc2f4abece6c1cd gcc/testsuite/gcc.c-torture/execute/mode-depen
42a724c275e627732267a4990711c28b gcc/testsuite/gcc.c-torture/execute/multdi-1.c
558a99bf90e011acde6ff3a4538d3ee5 gcc/testsuite/gcc.c-torture/execute/multi-ix.c
58ee45237d40aa51ec8417546f0a94c1 gcc/testsuite/gcc.c-torture/execute/nest-align-1.c
+7640dcfda4cf687ecdb5fd8260478415 gcc/testsuite/gcc.c-torture/execute/nest-align-1.x
b07a89f75cb6cca54f6a324b7bbae1ab gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c
3fc3711523c60ede825fe7d2be3620e1 gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c
41499442e4d8bf92f1ed068c66da251b gcc/testsuite/gcc.c-torture/execute/nestfunc-2.c
@@ -20709,6 +20855,29 @@ bb473d2731dd977b955a467b41d4b0a7 gcc/testsuite/gcc.c-torture/execute/pr57321.c
a6ee4f90175761323521d06c87d8f3cf gcc/testsuite/gcc.c-torture/execute/pr57344-2.c
50e495b0fabb8f95697b9eafd2f73302 gcc/testsuite/gcc.c-torture/execute/pr57344-3.c
4f00e03c7572cce58e5e17e4cf8506dd gcc/testsuite/gcc.c-torture/execute/pr57344-4.c
+0771ee8b89aebedb83998f5ffe49b94f gcc/testsuite/gcc.c-torture/execute/pr57568.c
+08fd7473bb8a1bd8223764857d3fe1f2 gcc/testsuite/gcc.c-torture/execute/pr57829.c
+7b314b618bd13790f4474067f69058e8 gcc/testsuite/gcc.c-torture/execute/pr58209.c
+fde008949dd0c0020ce7e53727e1af7b gcc/testsuite/gcc.c-torture/execute/pr58277-1.c
+f0a6494062a64d2fc689d8a4192959c2 gcc/testsuite/gcc.c-torture/execute/pr58277-2.c
+bd86b21061018f4f7333c7161ae55fde gcc/testsuite/gcc.c-torture/execute/pr58364.c
+a23a8e366e50c4fc95caccc34c4936a7 gcc/testsuite/gcc.c-torture/execute/pr58365.c
+5a8aed9f9f8292f522056ba7ca80d4b3 gcc/testsuite/gcc.c-torture/execute/pr58385.c
+cab5da103e14455c850172740640b27c gcc/testsuite/gcc.c-torture/execute/pr58564.c
+2f577ba387848a723e6649715b59a5ba gcc/testsuite/gcc.c-torture/execute/pr58574.c
+6c61be9faf45f2289bfe4e72534b3b67 gcc/testsuite/gcc.c-torture/execute/pr58726.c
+107e31f1ece1534d49d334b0b347e9a2 gcc/testsuite/gcc.c-torture/execute/pr58831.c
+1a3ad3adf0fd29074f5e02ae84400800 gcc/testsuite/gcc.c-torture/execute/pr58984.c
+a0805a93c878ba5b6bbad037b4565428 gcc/testsuite/gcc.c-torture/execute/pr59014-2.c
+368f6dd22bdbb68be24ec532b96befe5 gcc/testsuite/gcc.c-torture/execute/pr59014.c
+3739df7efd9db516415c65375f7c54a8 gcc/testsuite/gcc.c-torture/execute/pr59101.c
+04ea45cb22f89cc875c88ae412fe7521 gcc/testsuite/gcc.c-torture/execute/pr59358.c
+1e6bacdc40613155ae97989cd2cc3a80 gcc/testsuite/gcc.c-torture/execute/pr59388.c
+00f4289039c3911c4b904297745cdc30 gcc/testsuite/gcc.c-torture/execute/pr60017.c
+c9a0c78ab7e5e97f8d9f79003415e3c1 gcc/testsuite/gcc.c-torture/execute/pr60062.c
+525a1e55ab5e4b58132522416d2abb4a gcc/testsuite/gcc.c-torture/execute/pr60072.c
+2d9ffe4c8d2f9f03fc51460365e7419e gcc/testsuite/gcc.c-torture/execute/pr60454.c
+1313e26f31dd7d7fb997709384d78e64 gcc/testsuite/gcc.c-torture/execute/pr60960.c
ecfc31f12ce09d6ccbcced04ff04deba gcc/testsuite/gcc.c-torture/execute/pr7284-1.c
89f3c7ee990221eeb33cb08a0772e024 gcc/testsuite/gcc.c-torture/execute/pr7284-1.x
f4610e3bba97324f7005c428fe41e597 gcc/testsuite/gcc.c-torture/execute/printf-1.c
@@ -21260,8 +21429,8 @@ fa18390f14716298dbf37d393e23050e gcc/testsuite/gcc.dg/20050517-1.c
ab89b562ce3a43cf41dedcdb60fa19b8 gcc/testsuite/gcc.dg/20050811-1.c
fb7b37bff127b9b0d25a42302a6753db gcc/testsuite/gcc.dg/20050811-2.c
0037187d0fb90575d3c3fbef86dde69a gcc/testsuite/gcc.dg/20050826-1.c
-e1fdeda4a350d6b903a481d48aa14167 gcc/testsuite/gcc.dg/20050922-1.c
-f2e3943d2c5612941b954a35780305be gcc/testsuite/gcc.dg/20050922-2.c
+1d0848bc5bd04ad4942f02553ed28dea gcc/testsuite/gcc.dg/20050922-1.c
+74299bf0623bb9fa6059b8a26911d123 gcc/testsuite/gcc.dg/20050922-2.c
c315befd785458b73975a2f1f5ce88cc gcc/testsuite/gcc.dg/20051201-1.c
c502623cffcbe817706e0c34b3bc2591 gcc/testsuite/gcc.dg/20051207-1.c
5b92e5d1894a37ebf3ba4c9d5008cd98 gcc/testsuite/gcc.dg/20051207-2.c
@@ -21448,7 +21617,7 @@ de6b1943c045eaa118ec274192a6935c gcc/testsuite/gcc.dg/Wredundant-decls-2.c
3a7ae7960ae82ab1685a31948e9dec07 gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-const-ptr-nonconst-ptr.c
9016254766f4f60f27ba7db959765253 gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-never-dereferenced.c
11133e767498d2c300e770ea51fbecd5 gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-pta-1.c
-dfd0185544a68a407d764dc291c2acbb gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c
+eb6f77cdcf6feacc5a799af27c78f878 gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c
d0997c5fed01cd2efc214b96c6556a71 gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all.c
3ac29da988040023b0dafa874e9983d2 gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-struct-included.c
1545ca240f4614ac8a8de951fe61aacf gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-vla-1.c
@@ -21561,6 +21730,7 @@ f5a2800fc5f21185bd9bdbd69e270c10 gcc/testsuite/gcc.dg/array-init-2.c
fb704062563e6eb92ac46a371e6936ef gcc/testsuite/gcc.dg/array-quals-1.c
7751728a827a1c380d5ac446406e618f gcc/testsuite/gcc.dg/array-quals-2.c
62742c1c20ac0ef8771a66f64177b3ca gcc/testsuite/gcc.dg/asan/asan.exp
+a5e988481cd66b8acf6c610b847cb713 gcc/testsuite/gcc.dg/asan/pr56417.c
5ff39290aee620ff2495e8cb5a3905ee gcc/testsuite/gcc.dg/asm-1.c
b8a6dfeb58832a8b8624357eed99557a gcc/testsuite/gcc.dg/asm-2.c
b911cf51d486403e3ca1c067a8a15675 gcc/testsuite/gcc.dg/asm-3.c
@@ -21616,6 +21786,7 @@ d7602ad09d5eea3db942d4889dbbd78c gcc/testsuite/gcc.dg/atomic-store-2.c
364d6b1e3828c0c3e1b976a33f971c60 gcc/testsuite/gcc.dg/atomic-store-3.c
5d8fa2f9c507818b1875a0d1fa8e1505 gcc/testsuite/gcc.dg/atomic-store-4.c
fe8909975b6ede03308685e9f19dddaa gcc/testsuite/gcc.dg/atomic-store-5.c
+ce7e52f61e6fb003d8ae0bf9772503eb gcc/testsuite/gcc.dg/atomic-store-6.c
bfcf3d61cfaeb70ffaf79290c46dc732 gcc/testsuite/gcc.dg/attr-alias-1.c
e1871215b9eef07b10dc8c1bf21c038a gcc/testsuite/gcc.dg/attr-alias-2.c
07756b46e287f9093e0aa869a0472f80 gcc/testsuite/gcc.dg/attr-alias-3.c
@@ -21651,7 +21822,7 @@ fa7929b130df76e25cb947b7f8fdc470 gcc/testsuite/gcc.dg/attr-weak-1.c
db8374eda20551d6cd60bccb85b32576 gcc/testsuite/gcc.dg/attr-weak-hidden-1.c
9d67dfe9d24216b60cb82426bce86193 gcc/testsuite/gcc.dg/attr-weak-hidden-1a.c
9ae36569202bfebd5eef9afc2457f445 gcc/testsuite/gcc.dg/attr-weakref-1-darwin.c
-089bee60b0d5031abd5eae261529cbf4 gcc/testsuite/gcc.dg/attr-weakref-1.c
+60efa60f4ae5d7c878c6541480e14736 gcc/testsuite/gcc.dg/attr-weakref-1.c
f348c9eb66b29ddb21e87abea341a730 gcc/testsuite/gcc.dg/attr-weakref-1a.c
b32f0ffe033e8bca2840070b64fc6314 gcc/testsuite/gcc.dg/attr-weakref-1b.c
0e9f1da058d76aa4fbad24a3687c8454 gcc/testsuite/gcc.dg/attr-weakref-2.c
@@ -21771,13 +21942,14 @@ a5a4d19e21634719277dbf99071f35e6 gcc/testsuite/gcc.dg/builtin-object-size-1.c
29cb6d78c786bc7b73227ad10000c00c gcc/testsuite/gcc.dg/builtin-object-size-11.c
7b0a4ff07e98aabe7730bc4b5a26e330 gcc/testsuite/gcc.dg/builtin-object-size-12.c
9f066d6a8e0811eae2ce1fbd68b6a261 gcc/testsuite/gcc.dg/builtin-object-size-13.c
+06173dc325d89329fd5bac54f74ca67c gcc/testsuite/gcc.dg/builtin-object-size-14.c
431002404118e2db545969a82388c1b4 gcc/testsuite/gcc.dg/builtin-object-size-2.c
0d20e709f701e5e93b9c11f44ecb9f24 gcc/testsuite/gcc.dg/builtin-object-size-3.c
47b395df408fb14f6a8b0840fa49b2b4 gcc/testsuite/gcc.dg/builtin-object-size-4.c
0ae2bc37f4c5644109b9894eafe17e0d gcc/testsuite/gcc.dg/builtin-object-size-5.c
67f72c638739e21e5096efb451c998f8 gcc/testsuite/gcc.dg/builtin-object-size-6.c
7d6776c6e0c882e6255b02670cc2458d gcc/testsuite/gcc.dg/builtin-object-size-7.c
-a0bd451c7871f0760177c77696edb398 gcc/testsuite/gcc.dg/builtin-object-size-8.c
+6cc4c5737df46810ea698b6978820d9e gcc/testsuite/gcc.dg/builtin-object-size-8.c
7c3e911f08750fc7d2d79ad0e689c38a gcc/testsuite/gcc.dg/builtin-object-size-9.c
8a97ebf058fb89f3b374807943c1fa63 gcc/testsuite/gcc.dg/builtin-prefetch-1.c
9592adb58bb664e7d9b8270d44906bb8 gcc/testsuite/gcc.dg/builtin-protos-1.c
@@ -22951,6 +23123,7 @@ a1143cf9856465515508cbb17a8a67ca gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-float.
15d047847af0af05d2d3bd67d4103acd gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-merge.c
70e1bd8d16df92a5c6cfa80f71734b4e gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-uninit.c
b4e0f819c8f05b8accc38cd123db0193 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c
+5454a34d94985b5f978ecbed8256b184 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c
de315fbe27672aba5400f1e8918fc093 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp
99324191b306546b9aefb21ce12748bb gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.c
f7dc86f08b2d23f2ec144956f62a155d gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.h
@@ -23668,6 +23841,7 @@ d202c807b4080808baf99ab9f32b21a4 gcc/testsuite/gcc.dg/gomp/pr39495-1.c
57958d723d900c37a089d21688ee23af gcc/testsuite/gcc.dg/gomp/pr49640.c
e586b829c695fbfbbe72ba2d88105ef9 gcc/testsuite/gcc.dg/gomp/pr51339.c
0ef23e0bf072b29475ef72be5859edf2 gcc/testsuite/gcc.dg/gomp/pr53992.c
+febf12d386af32718f70a553818628b1 gcc/testsuite/gcc.dg/gomp/pr58809.c
32d1b4709fce01c7b0f596da5c040f2a gcc/testsuite/gcc.dg/gomp/preprocess-1.c
536359d59fc418a1570a6d8574a66ca1 gcc/testsuite/gcc.dg/gomp/sections-1.c
c8fdbed05305ecb29a74eae041f265e9 gcc/testsuite/gcc.dg/gomp/sections-2.c
@@ -23828,6 +24002,10 @@ d4dabab1bbce98d5d64c6bba5d4e5017 gcc/testsuite/gcc.dg/graphite/pr43083.c
540832f49fa877346ca2196757e356f8 gcc/testsuite/gcc.dg/graphite/pr46966.c
6ac2201f5ceaf1d669d875abfffae276 gcc/testsuite/gcc.dg/graphite/pr46970.c
78520b60a1ee3851ffd28abd9cd2e62d gcc/testsuite/gcc.dg/graphite/pr50561.c
+fb5a862ce6ffbade0ae64b3575de6664 gcc/testsuite/gcc.dg/graphite/pr55022.c
+16b9ffb71e6313c09e32f8d47736f438 gcc/testsuite/gcc.dg/graphite/pr59817-1.c
+3ef979f48d76e0fd94ea3b71fc3510af gcc/testsuite/gcc.dg/graphite/pr59817-2.c
+60c6684ae0f8c1d5b794c4d512a928be gcc/testsuite/gcc.dg/graphite/pr60740.c
16574d3df752f79e2361bed11b712e31 gcc/testsuite/gcc.dg/graphite/run-id-1.c
69c11dc302a921c92977db519167bec1 gcc/testsuite/gcc.dg/graphite/run-id-2.c
84a75a861553ce658d85018a3ced0a6b gcc/testsuite/gcc.dg/graphite/run-id-3.c
@@ -23921,6 +24099,7 @@ f2e11607d04914713628932840c715c5 gcc/testsuite/gcc.dg/guality/pr56154-2.c
93af310cf109bfc0389356d204c56ae4 gcc/testsuite/gcc.dg/guality/pr56154-3.c
65ec6e80388a7d16c5fa3558ab822e2e gcc/testsuite/gcc.dg/guality/pr56154-4.c
e7dd4b85c878db0844a2af69bc853d37 gcc/testsuite/gcc.dg/guality/pr56154-aux.c
+9f6c7f7929224c0a1ec9cb2ff4568296 gcc/testsuite/gcc.dg/guality/pr59776.c
30542ebb173f597ea401826f540f5f2f gcc/testsuite/gcc.dg/guality/rotatetest.c
77da7acc11a3913ab51f621ed002fd37 gcc/testsuite/gcc.dg/guality/sra-1.c
27dd6623fcb9b7b3e1c3c993c13d9b7f gcc/testsuite/gcc.dg/guality/vla-1.c
@@ -24092,8 +24271,11 @@ e4887053c792f4f78b03804c148839ce gcc/testsuite/gcc.dg/ipa/pr45644.c
5c428c219954576c308c245d9256f052 gcc/testsuite/gcc.dg/ipa/pr48195.c
cdec1b240b89ad7bf971aa799a1ea4a0 gcc/testsuite/gcc.dg/ipa/pr50744.c
ca6dd47eed2470f390bd2cdca32f96fb gcc/testsuite/gcc.dg/ipa/pr51362.c
+ef3f699c90a5350ceb595934cf210763 gcc/testsuite/gcc.dg/ipa/pr55260.c
b4b413e9bfe0953511e137aebc29136a gcc/testsuite/gcc.dg/ipa/pr56988.c
58f2a6cfb6cca81430c94183416b499f gcc/testsuite/gcc.dg/ipa/pr57347.c
+028bd5e9b5fe94c915a410cf6f55ef3f gcc/testsuite/gcc.dg/ipa/pr57358.c
+6756bcd91aee8a132f5c93449b1b00b8 gcc/testsuite/gcc.dg/ipa/pr59610.c
b58d896a4d97e5f7f8b082f407df9a92 gcc/testsuite/gcc.dg/ipa/pure-const-1.c
96d395d8b51f69b544facb9312923acf gcc/testsuite/gcc.dg/ipa/pure-const-2.c
8f5983946d28dca5853e89d0aa48b65d gcc/testsuite/gcc.dg/kpice1.c
@@ -25247,7 +25429,7 @@ bd2a9344f971f9fb29951b0169a27637 gcc/testsuite/gcc.dg/pr46255.c
9deec327085e0021426559ae24f523a6 gcc/testsuite/gcc.dg/pr46288.c
68021a4bf59a7075a9b1382b5cdd814e gcc/testsuite/gcc.dg/pr46307.c
205492dac3dc16ef122600548271e7bf gcc/testsuite/gcc.dg/pr46309-2.c
-5b4957a3d508f2d25fc02570974c573b gcc/testsuite/gcc.dg/pr46309.c
+6cf8a5b4987e7f7e106dde44d4d8956b gcc/testsuite/gcc.dg/pr46309.c
d2f1443d164b1d691134da37b60f2cf1 gcc/testsuite/gcc.dg/pr46315.c
9d26fa5e79e48bd2318afed2a713a45d gcc/testsuite/gcc.dg/pr46355.c
4678517971747460e7eed94817974fda gcc/testsuite/gcc.dg/pr46375.c
@@ -25443,7 +25625,7 @@ fd89861b9252a0fb20bd9228ee0e3ce8 gcc/testsuite/gcc.dg/pr52803.c
ad689ece2d595b416c80a2cdf1e37fb1 gcc/testsuite/gcc.dg/pr52808.c
e2ec6d72bdfd63430ec334fa1b08a13a gcc/testsuite/gcc.dg/pr52862.c
972a77d78979d9949f2962ab47e1409b gcc/testsuite/gcc.dg/pr52880.c
-a91b501e3a98857b909e4e1689879a40 gcc/testsuite/gcc.dg/pr53060.c
+c4f54a6a3a20e90a2eafd3acc457a478 gcc/testsuite/gcc.dg/pr53060.c
ad9efc6ea1fff6fe6aadd886a38482a0 gcc/testsuite/gcc.dg/pr53153.c
d26f1ab8cfff735e347c468d126c2d91 gcc/testsuite/gcc.dg/pr53174.c
0012603eb1df3dd9383df82e98f31e59 gcc/testsuite/gcc.dg/pr53196-1.c
@@ -25510,15 +25692,31 @@ d49dc3b48eaa905ccfaa6054fcbc7232 gcc/testsuite/gcc.dg/pr56275.c
97ba31ae856ce1141c43c41edad31ff7 gcc/testsuite/gcc.dg/pr56494.c
ef3410d3545c2b9132200b302b552936 gcc/testsuite/gcc.dg/pr56510.c
e4a2d97c5aa27b96f13bb39a2628cf46 gcc/testsuite/gcc.dg/pr56548.c
+c190644fa957e1a9b70d4a1173fb83f8 gcc/testsuite/gcc.dg/pr56824.c
f26f8c6b2b3adcb38915f56973447282 gcc/testsuite/gcc.dg/pr56847.c
df4b816776f2c4e40c56112e07abeeca gcc/testsuite/gcc.dg/pr56890-1.c
8fe731c15e241e6c041ba662739f3d48 gcc/testsuite/gcc.dg/pr56890-2.c
+9fb688d9b964a566c7e58955b48c1b97 gcc/testsuite/gcc.dg/pr56977.c
0cd01efbdd291345aec2641113cc4ca4 gcc/testsuite/gcc.dg/pr56990.c
652c6f195eab46e89dabc36583be9dcb gcc/testsuite/gcc.dg/pr56992.c
f6f3bb5c15b24fa2eea3282ce7841295 gcc/testsuite/gcc.dg/pr57104.c
605598c67818ee5aed3cb1f08d3c11f5 gcc/testsuite/gcc.dg/pr57149.c
a7df18a8bb63d3ca237dbd1011053c66 gcc/testsuite/gcc.dg/pr57184.c
f2ca35cbd43cf9bf71e9cbf3e52945f0 gcc/testsuite/gcc.dg/pr57300.c
+68300336b6228aa085ca881ce1c2f48b gcc/testsuite/gcc.dg/pr57518.c
+d62e4be4c8237006d589df7d27fb262c gcc/testsuite/gcc.dg/pr57980.c
+b21bdd688c2c75ad2d1f53e4f66341fa gcc/testsuite/gcc.dg/pr58010.c
+c98f58ca0ac52f1af517f2e7335529ea gcc/testsuite/gcc.dg/pr58145-1.c
+4468b012f14454dc854790c2b1c956f6 gcc/testsuite/gcc.dg/pr58145-2.c
+6d4a2a985c3bca6f3d6d31b8abadc7b1 gcc/testsuite/gcc.dg/pr58463.c
+e92cfd038b9e1797c67f22be9ed51543 gcc/testsuite/gcc.dg/pr58668.c
+53bdc6b3c8070f247855898c5cc29765 gcc/testsuite/gcc.dg/pr58805.c
+14cefbd9364068522b289c9670f3a54f gcc/testsuite/gcc.dg/pr59011.c
+deafb79e049ef501e2ec2c5790980392 gcc/testsuite/gcc.dg/pr59351.c
+f18635f965743e50249d91d9c5ad76ae gcc/testsuite/gcc.dg/pr59827.c
+a31c84173e933dc1d9758138a857f165 gcc/testsuite/gcc.dg/pr59860.c
+9aae35a21ca6b69f0f3fbbfc0a4a8817 gcc/testsuite/gcc.dg/pr60485-1.c
+2f16adca4bc0fdda359fc1a9f8ab1fd8 gcc/testsuite/gcc.dg/pr60485-2.c
8b7d73da2d5d78000716492365a85d5a gcc/testsuite/gcc.dg/pr8715.c
3d08410b2dd57259aa63f0e1c64b376e gcc/testsuite/gcc.dg/pr8788-1.c
be04382a35ebb1cfae1b2168f1693a94 gcc/testsuite/gcc.dg/pr8835-1.c
@@ -25694,7 +25892,7 @@ b695a71f38f4d6774377bab3f330110a gcc/testsuite/gcc.dg/ssp-1.c
5498a1d66a7371d14579d8a6c4241699 gcc/testsuite/gcc.dg/ssp-2.c
b84a0c1609f48675e3a3b8dda8e7c372 gcc/testsuite/gcc.dg/stack-layout-1.c
40cb229734c802207ae374e549adb629 gcc/testsuite/gcc.dg/stack-layout-2.c
-5d42dc4090910e4bbe92b3bf578eca2d gcc/testsuite/gcc.dg/stack-usage-1.c
+368529ee0534b4ff2c1688a06a273b7f gcc/testsuite/gcc.dg/stack-usage-1.c
204b1b7942e684d89f169882d71407a6 gcc/testsuite/gcc.dg/stack-usage-2.c
cc4c4b4f3d828c816c22793a90c03eb1 gcc/testsuite/gcc.dg/stmt-expr-1.c
8b47d043f375a5995d83feae8f86a8d3 gcc/testsuite/gcc.dg/stmt-expr-2.c
@@ -25717,13 +25915,13 @@ e84b717e1a01beb0a82c64c1672ff12d gcc/testsuite/gcc.dg/strlenopt-11.c
934d2e6918ebe6b710d247a4038ee354 gcc/testsuite/gcc.dg/strlenopt-12g.c
0b75267e94fe85eb1d51523a07d13458 gcc/testsuite/gcc.dg/strlenopt-13.c
9236f6bc0a80431922352977bc90ecde gcc/testsuite/gcc.dg/strlenopt-14g.c
-1ce20b71fae1e252725d03839691bdd4 gcc/testsuite/gcc.dg/strlenopt-14gf.c
+5f923302537c8d253fe07f615f6e66bc gcc/testsuite/gcc.dg/strlenopt-14gf.c
f0098927159979d4d7b7b967d9e81c4f gcc/testsuite/gcc.dg/strlenopt-15.c
9dfbd59c95151a7dee49bdea1009cc7c gcc/testsuite/gcc.dg/strlenopt-16g.c
429ddbcae75586504663e43a0778dc72 gcc/testsuite/gcc.dg/strlenopt-17g.c
44c45b7a05e8107fc5f05ab902552467 gcc/testsuite/gcc.dg/strlenopt-18g.c
60bd418cf8cefbeca9cc9bc6f4fec613 gcc/testsuite/gcc.dg/strlenopt-19.c
-dad7ffa14d7aa7198ddad010ef0c9aed gcc/testsuite/gcc.dg/strlenopt-1f.c
+743ca1874e0f63b2ebb6ca8aaa6154a2 gcc/testsuite/gcc.dg/strlenopt-1f.c
04a75e927709d7fbab33a1bd19d81105 gcc/testsuite/gcc.dg/strlenopt-2.c
04d8a4241b497653a1d4476e22e90518 gcc/testsuite/gcc.dg/strlenopt-20.c
baed2654d0e7347b730e668bd39ab7b6 gcc/testsuite/gcc.dg/strlenopt-21.c
@@ -25732,9 +25930,9 @@ ea0853a882391782586d6ebaf2023e9c gcc/testsuite/gcc.dg/strlenopt-22g.c
183189a194965b2af592fc3078e905a8 gcc/testsuite/gcc.dg/strlenopt-23.c
2ec6adda34938b3838edbe80d5b9d106 gcc/testsuite/gcc.dg/strlenopt-2f.c
f0cc43ad6c07d97ef8d861a90fbc0e27 gcc/testsuite/gcc.dg/strlenopt-3.c
-443b7a7422c945928623c1e0535aa34c gcc/testsuite/gcc.dg/strlenopt-4.c
+59f6e83dd959a1a14200b44bb8526b4f gcc/testsuite/gcc.dg/strlenopt-4.c
de10ffd15c0b23f8d14fc7fe0b041cb1 gcc/testsuite/gcc.dg/strlenopt-4g.c
-21bbcf97f5050743f573af8ae8dccbad gcc/testsuite/gcc.dg/strlenopt-4gf.c
+00817901c5630cc81824870304d4abf0 gcc/testsuite/gcc.dg/strlenopt-4gf.c
8abf8a59409a7d63a3cab4c624deaaed gcc/testsuite/gcc.dg/strlenopt-5.c
ecd788b09daf9e89dd848715ed64f32c gcc/testsuite/gcc.dg/strlenopt-6.c
db747e82f58950b7e9c55817c9933601 gcc/testsuite/gcc.dg/strlenopt-7.c
@@ -25821,6 +26019,7 @@ d743617d99e1150e9731ee3f80d89afd gcc/testsuite/gcc.dg/tls/pr42894.c
93d977f747be4e8f0b7d4970b60707ea gcc/testsuite/gcc.dg/tls/pr47715-3.c
11e4d3cac92ac81d517ecad709d55aef gcc/testsuite/gcc.dg/tls/pr47715-4.c
3fb5ccff70fc82da2e2aac8594fb9457 gcc/testsuite/gcc.dg/tls/pr47715-5.c
+643280b4295187070c29c8bdfd246944 gcc/testsuite/gcc.dg/tls/pr58595.c
796d5642fd9a5bf2871955a7f51a2b2c gcc/testsuite/gcc.dg/tls/section-1.c
8a7ac847cc234a02986b204d9590a7fa gcc/testsuite/gcc.dg/tls/section-2.c
bd750cfcc2981be8695d1ba87cf4e02d gcc/testsuite/gcc.dg/tls/struct-1.c
@@ -26300,7 +26499,7 @@ eb7c28f8fb377dba0060e3879194722d gcc/testsuite/gcc.dg/torture/pr53663-1.c
03807cc67dfb92ed7387ab445e76f0df gcc/testsuite/gcc.dg/torture/pr53703.c
58809eab4a9186297cc9e6413399f775 gcc/testsuite/gcc.dg/torture/pr53790.c
d0ffb441d208abf83622aa00e25e03a4 gcc/testsuite/gcc.dg/torture/pr53908.c
-4fd418db1390f6cd951cdc7e8abb94be gcc/testsuite/gcc.dg/torture/pr53922.c
+562e76c6fc0b3ff4f6222d1b1c2e24f6 gcc/testsuite/gcc.dg/torture/pr53922.c
24ce0b8d2ec767f9039e313b7fecd173 gcc/testsuite/gcc.dg/torture/pr54027.c
a3c366ae7818844a5ca45d4ccef993bc gcc/testsuite/gcc.dg/torture/pr54098.c
9907f0a9a984ffb7426cf1c7963914ab gcc/testsuite/gcc.dg/torture/pr54109.c
@@ -26362,6 +26561,46 @@ bfa7e58f4ea5172e739ce75b74990c90 gcc/testsuite/gcc.dg/torture/pr57214.c
845769847030f070941db74e9782dce5 gcc/testsuite/gcc.dg/torture/pr57303.c
c99cd8db49c08f93e69d5c56eb0556fa gcc/testsuite/gcc.dg/torture/pr57330.c
bf886fb9169b1bea9c33c365078fa538 gcc/testsuite/gcc.dg/torture/pr57341.c
+60a1c407cd875990011861fd700b448b gcc/testsuite/gcc.dg/torture/pr57343.c
+69a811a55301952804831d2352da7869 gcc/testsuite/gcc.dg/torture/pr57381.c
+ee1a66e4d4e596c1ede2df5349d53f89 gcc/testsuite/gcc.dg/torture/pr57417.c
+5acdfb9838b95cec82dfbd72ef01e0f5 gcc/testsuite/gcc.dg/torture/pr57425-1.c
+a9c0a63cb2336704303155095a6c453f gcc/testsuite/gcc.dg/torture/pr57425-2.c
+1577315853d6922850d2be88287d8a9b gcc/testsuite/gcc.dg/torture/pr57425-3.c
+60fa3b16eab10f13baaf6da81c53fa1b gcc/testsuite/gcc.dg/torture/pr57488.c
+e1f76d1c7221d8b358de9e1afec3b0af gcc/testsuite/gcc.dg/torture/pr57517.c
+a5c2783ab5ddf3529e7f6c7e2fd5069b gcc/testsuite/gcc.dg/torture/pr57521.c
+d4d870805cc25dec6df7af24f58f6572 gcc/testsuite/gcc.dg/torture/pr57569.c
+8534fdea4d74f4a82515872dd4723697 gcc/testsuite/gcc.dg/torture/pr57656.c
+26110023944b046641989ad92c41a349 gcc/testsuite/gcc.dg/torture/pr57685.c
+5bfa303899e64bffcddb82847e6a434f gcc/testsuite/gcc.dg/torture/pr57864.c
+d89477ea0d429b92206325d86a42808d gcc/testsuite/gcc.dg/torture/pr58041.c
+c2c6c72f54a3fc6deda388aab4aac735 gcc/testsuite/gcc.dg/torture/pr58079.c
+3672fe011b698a3686c1bf8c3bade169 gcc/testsuite/gcc.dg/torture/pr58143-1.c
+7bd154522de4c96cc4e3c809e5710cf2 gcc/testsuite/gcc.dg/torture/pr58143-2.c
+008f0eded2aeb4da9764a6e49590cc06 gcc/testsuite/gcc.dg/torture/pr58143-3.c
+c0dbc10c6440a10949cd2b0e7665d7ec gcc/testsuite/gcc.dg/torture/pr58223.c
+c47ad0b2897e63ad3159940f9b7fa206 gcc/testsuite/gcc.dg/torture/pr58228.c
+ea30d11931d516d6e92b14fe47202b4e gcc/testsuite/gcc.dg/torture/pr58246.c
+9bc5f90faa2efd8139900d4888af0d50 gcc/testsuite/gcc.dg/torture/pr58539.c
+b0f851c79dae61f576b8598934dfcf2b gcc/testsuite/gcc.dg/torture/pr58670.c
+b808753df674764b99cc4e8be71634bb gcc/testsuite/gcc.dg/torture/pr58779.c
+dadc8df99ab8509fcfb1fc6b4af32ed4 gcc/testsuite/gcc.dg/torture/pr58830.c
+156921543fc7ef104ab2878070475099 gcc/testsuite/gcc.dg/torture/pr58941.c
+21d36d73431b93289f6d93f7c4ba8342 gcc/testsuite/gcc.dg/torture/pr58956.c
+07e4ca61df2c447b5a5a3a2544f480e3 gcc/testsuite/gcc.dg/torture/pr59047.c
+186aa3e257ca36e1b48a1bf9e8e613b1 gcc/testsuite/gcc.dg/torture/pr59139.c
+f160d85466fcb0f2f4699161fbb2a447 gcc/testsuite/gcc.dg/torture/pr59164.c
+5aff5d636c8b18aba20ff56b7cd632da gcc/testsuite/gcc.dg/torture/pr59288.c
+ac9ffdd6018cd2c07f686e78ec7737bf gcc/testsuite/gcc.dg/torture/pr59330.c
+80b325ade15bfd6d3d7dcef2e97c2467 gcc/testsuite/gcc.dg/torture/pr59715.c
+22da1d150be6e6b8bbfc20ccd0cd1d85 gcc/testsuite/gcc.dg/torture/pr59891.c
+bce1a41800b1242ba448fe4938c4ee1a gcc/testsuite/gcc.dg/torture/pr59903.c
+1e0c7fa9a60ee1e7c4d0ea1eb8ec37ab gcc/testsuite/gcc.dg/torture/pr60115.c
+befa7c23a58d98ffbf51808b1f541e69 gcc/testsuite/gcc.dg/torture/pr60183.c
+bc7d88b95c8be08a1a73b15283ed1f06 gcc/testsuite/gcc.dg/torture/pr60766.c
+b7419f520b851243b27be91c272be4ec gcc/testsuite/gcc.dg/torture/pr60903.c
+cd6896f9999dc19951f9e8e74e12f5f8 gcc/testsuite/gcc.dg/torture/pr60930.c
c99c3745eca0ddc81822cc070070a4d3 gcc/testsuite/gcc.dg/torture/pr8081.c
b3a9e4f2af6462183da8d6c5cb13bf1f gcc/testsuite/gcc.dg/torture/pta-callused-1.c
98fde0e59e55c1ed923ee9d9f034d7f2 gcc/testsuite/gcc.dg/torture/pta-escape-1.c
@@ -26586,7 +26825,7 @@ a8e0545c6492970683efd6d5ceba4cd9 gcc/testsuite/gcc.dg/tree-ssa/20040430-1.c
f7d8908a2270406c7805d42c68ef22e4 gcc/testsuite/gcc.dg/tree-ssa/20040513-2.c
e05bb8ea189e2d916245aee7b6a843d1 gcc/testsuite/gcc.dg/tree-ssa/20040514-1.c
5773cc5738deb83e41728d5142ddc0ac gcc/testsuite/gcc.dg/tree-ssa/20040514-2.c
-fdb2e4e5f8fbdd5e499b0971e9752c7c gcc/testsuite/gcc.dg/tree-ssa/20040517-1.c
+f387435c533232d21b0398cf11e36efb gcc/testsuite/gcc.dg/tree-ssa/20040517-1.c
9bad61c83fd90cf20061a06c69b8604f gcc/testsuite/gcc.dg/tree-ssa/20040518-1.c
713ffd35a4dae03d69b611c8fc0229b5 gcc/testsuite/gcc.dg/tree-ssa/20040518-2.c
d060f97fcba01f85527e8794f09576c6 gcc/testsuite/gcc.dg/tree-ssa/20040615-1.c
@@ -26789,7 +27028,7 @@ a93992ffe78f03f6cd4cbd4e8ed9cbe3 gcc/testsuite/gcc.dg/tree-ssa/ldist-12.c
7916a3a3d6f570fad84d74b8c2a4f488 gcc/testsuite/gcc.dg/tree-ssa/ldist-13.c
0f06cbfcc7026f848fa34cb2cf6a03b8 gcc/testsuite/gcc.dg/tree-ssa/ldist-14.c
d45bb4e1f0fa1ee10ae07e8c358f346d gcc/testsuite/gcc.dg/tree-ssa/ldist-15.c
-81397916e541847b186040b5c1a50ded gcc/testsuite/gcc.dg/tree-ssa/ldist-16.c
+180689bda7d14d8800cb88f6da20b3a2 gcc/testsuite/gcc.dg/tree-ssa/ldist-16.c
7ba69d40ffb4f2b50dda5ab94ec6adc1 gcc/testsuite/gcc.dg/tree-ssa/ldist-17.c
ba0de0c308a8a8c3067ebecd59de53dc gcc/testsuite/gcc.dg/tree-ssa/ldist-18.c
2b2fb28884ef2d243a9e30751c5876bd gcc/testsuite/gcc.dg/tree-ssa/ldist-19.c
@@ -27077,6 +27316,8 @@ e69a11968c8d3bd61d110c2fbc09a63f gcc/testsuite/gcc.dg/tree-ssa/predcom-2.c
d2bb80f7dc1eb91f7fc51b7e83fa8b73 gcc/testsuite/gcc.dg/tree-ssa/predcom-3.c
f3c888d0f9e134c0d79ae86ef60e253d gcc/testsuite/gcc.dg/tree-ssa/predcom-4.c
ec5de330e505a9ff1b0d2c7443a7ddbb gcc/testsuite/gcc.dg/tree-ssa/predcom-5.c
+f074ed864b6237472d965d7c12fd63be gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c
+5a7d6c2628ed4f95569a806da6bc6736 gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c
d2186e6ad7302cd7d3c522f9d526123d gcc/testsuite/gcc.dg/tree-ssa/prefetch-3.c
4de981100b861a7475081ec49abc982f gcc/testsuite/gcc.dg/tree-ssa/prefetch-4.c
e1eec3d245d78e18db5f02e685a49e4f gcc/testsuite/gcc.dg/tree-ssa/prefetch-5.c
@@ -27597,6 +27838,7 @@ d057a4907971998a1473fdea2ead40cc gcc/testsuite/gcc.dg/unused-6-WallWextra.c
43d1bfb1c3e82e590c699df9328c86ff gcc/testsuite/gcc.dg/unused-6-no.c
e3db8ed02ca0ecad28455ac3f0b93696 gcc/testsuite/gcc.dg/unused-6.c
b9094e47fb1bcf5228d5a172f181d34c gcc/testsuite/gcc.dg/unused-7.c
+615e1e240a379f560bb499664764aa19 gcc/testsuite/gcc.dg/unused-8b.c
3026c7972826035f46319fe0338270d0 gcc/testsuite/gcc.dg/unwind-1.c
82e97901e9d95cb7baff3da146a5c919 gcc/testsuite/gcc.dg/utf-array-short-wchar.c
58bb3d290d515392b37ec7e27a115e8e gcc/testsuite/gcc.dg/utf-array.c
@@ -27689,7 +27931,7 @@ cc5fb3817623d6f0743eb9c14f743cca gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmo
8334641143225456a1847fea7acf87e2 gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-pr37194.c
04e5951ff78139051ecbe6f7934c3b02 gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-12.c
2ed394040b610b37e14521b117c600a6 gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-33.c
-26acbf7d5a7f088c4d584abe81781a26 gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-34.c
+af836776258b19632a4bf8521a3572be gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-34.c
8df0034a4ef6c3bf159b226e9490cd9c gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31a.c
342fc78aef4d3c5c2338eff1487fe39c gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31b.c
21623d475777db86cc41cd9a41f5bee0 gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31c.c
@@ -27950,6 +28192,8 @@ fad83fec1f66073862f5c0f4b3e8556b gcc/testsuite/gcc.dg/vect/pr53185-2.c
cad0063882ee779858d0d7c85122c26b gcc/testsuite/gcc.dg/vect/pr55857-2.c
b7dd96f207a808672d43ea71732df03b gcc/testsuite/gcc.dg/vect/pr56918.c
cb1fccf6388023924b55ca860197a163 gcc/testsuite/gcc.dg/vect/pr56920.c
+a866350e19555393d6961e8b412e9124 gcc/testsuite/gcc.dg/vect/pr60276.c
+b107b5d9d8332504cce7d4f98d0296f7 gcc/testsuite/gcc.dg/vect/pr60382.c
0706a6b1e589668022cd055b960dd18d gcc/testsuite/gcc.dg/vect/section-anchors-pr27770.c
260e2f31b30dda89387f41e7bfe71e1e gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c
4d2e98feff81733536fba7cd2d0ca053 gcc/testsuite/gcc.dg/vect/slp-1.c
@@ -28531,7 +28775,11 @@ f7c4950997d941571fd2d72291a1242c gcc/testsuite/gcc.dg/vmx/debug-2.c
d2800ec511e2b3478d695416e2ca90ec gcc/testsuite/gcc.dg/vmx/debug-4.c
a618f16e3af202f712d6cfc127c0f51d gcc/testsuite/gcc.dg/vmx/dos-bug-1-gdb.c
8c31a6e12629208ece747c6627759e50 gcc/testsuite/gcc.dg/vmx/dos-bug-2-gdb.c
-f79094cee7c097564ab800e96700ebe8 gcc/testsuite/gcc.dg/vmx/eg-5.c
+6a1a156aa2b71ec97b1690516e6e9563 gcc/testsuite/gcc.dg/vmx/eg-5.c
+d0f18d19c58f9a788099474faf91bb3f gcc/testsuite/gcc.dg/vmx/extract-be-order.c
+0b114fae046801adbcd1dbf56d29f50e gcc/testsuite/gcc.dg/vmx/extract-vsx-be-order.c
+eaf17f85674101b5600882dc38243fc8 gcc/testsuite/gcc.dg/vmx/extract-vsx.c
+4c43f4dd229af50225814ea1bf310c5e gcc/testsuite/gcc.dg/vmx/extract.c
43079faac406fa6c19965bd7b5ffd05f gcc/testsuite/gcc.dg/vmx/fft.c
8322a206fa7dd30b037ad95c67279f6e gcc/testsuite/gcc.dg/vmx/gcc-bug-1.c
a71e00a8c42763e79d9233af60eec0cf gcc/testsuite/gcc.dg/vmx/gcc-bug-2.c
@@ -28548,25 +28796,67 @@ b2b6feca94837f5cb8c691c4060fef16 gcc/testsuite/gcc.dg/vmx/gcc-bug-c.c
641cf884651e0adb1dee027edec6e229 gcc/testsuite/gcc.dg/vmx/gcc-bug-e.c
4fe15b25479c09555ed8eef540fe4fe6 gcc/testsuite/gcc.dg/vmx/gcc-bug-f.c
2e93eb6cb35666f7b5d487045924c050 gcc/testsuite/gcc.dg/vmx/gcc-bug-g.c
-bdec5b8eb3a408587f220f19e8782405 gcc/testsuite/gcc.dg/vmx/gcc-bug-i.c
+e2befcc6fe6551ddaf8c5af8ff8af9ed gcc/testsuite/gcc.dg/vmx/gcc-bug-i.c
abaa24fa7500a965c56cca5b81277f0f gcc/testsuite/gcc.dg/vmx/harness.h
+225fbe47d964737fa72d56d90f586e87 gcc/testsuite/gcc.dg/vmx/insert-be-order.c
+9175ee91b4d6fdaffbf31b79fd6e2776 gcc/testsuite/gcc.dg/vmx/insert-vsx-be-order.c
+5c46e639faee20461e5f5c58c3c65dd9 gcc/testsuite/gcc.dg/vmx/insert-vsx.c
+64af108d7752fb394591059e10b8e535 gcc/testsuite/gcc.dg/vmx/insert.c
d3b05480227b07877585af8d0a518ce0 gcc/testsuite/gcc.dg/vmx/ira1.c
30bcd6f60465176cca2c3074c112b5d6 gcc/testsuite/gcc.dg/vmx/ira2.c
0671a52dbfeaff599fbd3b31683b8fa3 gcc/testsuite/gcc.dg/vmx/ira2a.c
e7bfe6764f1081cf12917fc6bb429d99 gcc/testsuite/gcc.dg/vmx/ira2b.c
b79fe506ab529c34a54312a7e9e864cf gcc/testsuite/gcc.dg/vmx/ira2c.c
+c8064e432bef40c09f94459a233fb610 gcc/testsuite/gcc.dg/vmx/ld-be-order.c
+5cc68493e4e387fd68cad37d4776d14c gcc/testsuite/gcc.dg/vmx/ld-vsx-be-order.c
+e60266299c7bea997e0a6c67fa89bbb8 gcc/testsuite/gcc.dg/vmx/ld-vsx.c
+8d6c80453f3995148bde37b78ce9a8dd gcc/testsuite/gcc.dg/vmx/ld.c
+6b56e242fd417d9d663b35609c9bdbd2 gcc/testsuite/gcc.dg/vmx/lde-be-order.c
+1258396dbf67ebb40317211d94dc5696 gcc/testsuite/gcc.dg/vmx/lde.c
+15abb9a3d84f8903bd08fa33c4bb5dcc gcc/testsuite/gcc.dg/vmx/ldl-be-order.c
+5c356d1c870e7271a4c1870c70f54806 gcc/testsuite/gcc.dg/vmx/ldl-vsx-be-order.c
+b22e613ba2712c4e8f7204eed0adc88a gcc/testsuite/gcc.dg/vmx/ldl-vsx.c
+c3039576bdd2e286778c9c26319c1266 gcc/testsuite/gcc.dg/vmx/ldl.c
02e4a282249f914f0c14a216ba9d4cfc gcc/testsuite/gcc.dg/vmx/mem.c
+6aae24591b76899daf226454ac9b1991 gcc/testsuite/gcc.dg/vmx/merge-be-order.c
+201b16426a5ac5b3987ba0dccc6f5a71 gcc/testsuite/gcc.dg/vmx/merge-vsx-be-order.c
+2e6a5aaa5824f852ad0030af451aeb08 gcc/testsuite/gcc.dg/vmx/merge-vsx.c
+eb7dd9debe1674f5d04a9841461e4954 gcc/testsuite/gcc.dg/vmx/merge.c
+1bf3417266f1541ffcf1dd896b544b2e gcc/testsuite/gcc.dg/vmx/mult-even-odd-be-order.c
+69b4a248b11c1f8cdf318024cf68f3f6 gcc/testsuite/gcc.dg/vmx/mult-even-odd.c
b3442dce1a513e0fadd3087959cc98e2 gcc/testsuite/gcc.dg/vmx/newton-1.c
807f04667fc7f568229453e9ea808b2e gcc/testsuite/gcc.dg/vmx/ops-long-1.c
0ece5b66996a21bf2abdeba3d4730225 gcc/testsuite/gcc.dg/vmx/ops-long-2.c
e48979537730ba12b1183393f8332f5d gcc/testsuite/gcc.dg/vmx/ops.c
+dc7c69a367e45e370ba63cd6a29882a8 gcc/testsuite/gcc.dg/vmx/pack-be-order.c
+7a3395ea24edb9768321e94484553d23 gcc/testsuite/gcc.dg/vmx/pack.c
+0227d77cb4ed28b390aacb87d32533c5 gcc/testsuite/gcc.dg/vmx/perm-be-order.c
+720a825389f2bdbc69225675b554bc5c gcc/testsuite/gcc.dg/vmx/perm.c
3b4c24c7f9868d1b2dbf4a0051f1c424 gcc/testsuite/gcc.dg/vmx/pr27006.c
5a0396a64eb86e2cdd5726c7addf1fa2 gcc/testsuite/gcc.dg/vmx/pr27842.c
-b6c968a4a2a4da000763558515282905 gcc/testsuite/gcc.dg/vmx/sn7153.c
+5222962891a706a8cb28747ebc976065 gcc/testsuite/gcc.dg/vmx/sn7153.c
a6cbfa0e1febdc24c55462118baed2d9 gcc/testsuite/gcc.dg/vmx/spill.c
a89c7a49191b8c215d45bfcd40dbf073 gcc/testsuite/gcc.dg/vmx/spill2.c
4ad67e9b592e66eb6b2836bd582e41ea gcc/testsuite/gcc.dg/vmx/spill3.c
+1448812be20369929fc891248c3b6ed6 gcc/testsuite/gcc.dg/vmx/splat-be-order.c
+b1c794582c2b01e958c6d559ff8e4953 gcc/testsuite/gcc.dg/vmx/splat-vsx-be-order.c
+c95066c27923d81c9f58753e03bbff03 gcc/testsuite/gcc.dg/vmx/splat-vsx.c
+266739867e8f0e5420b410b6edd290e8 gcc/testsuite/gcc.dg/vmx/splat.c
+59cdd24b90ad834a37912a1e1f47728e gcc/testsuite/gcc.dg/vmx/st-be-order.c
+b941c40df3d5ad8d953f431d872b55fb gcc/testsuite/gcc.dg/vmx/st-vsx-be-order.c
+9d05b15bcc3966ce3002fc6293c26502 gcc/testsuite/gcc.dg/vmx/st-vsx.c
+53630833b841b3f5beb646fecebe43de gcc/testsuite/gcc.dg/vmx/st.c
+649c9af06659b1741e2dfa081c223417 gcc/testsuite/gcc.dg/vmx/ste-be-order.c
+d7c1dff498081073d4fdd36432c36b87 gcc/testsuite/gcc.dg/vmx/ste.c
+c210a8af4d138d28db225861b72ec675 gcc/testsuite/gcc.dg/vmx/stl-be-order.c
+f2606b28eca742f2e6f3ca86fffcf7cc gcc/testsuite/gcc.dg/vmx/stl-vsx-be-order.c
+8ad504c071f387126fb04fe8dbf293ce gcc/testsuite/gcc.dg/vmx/stl-vsx.c
+c4b3ca8cd9535dfc22cf3942d2de6d41 gcc/testsuite/gcc.dg/vmx/stl.c
+6f5acbc66a5ea6d66814b27b424d4e5c gcc/testsuite/gcc.dg/vmx/sum2s-be-order.c
+90381187ab18cfc9506fd2dbe5c8fa35 gcc/testsuite/gcc.dg/vmx/sum2s.c
b74b4229263d70abbf112c2c622f29ba gcc/testsuite/gcc.dg/vmx/t.c
+faeeb2c9f604b1942f4a703d504c45dd gcc/testsuite/gcc.dg/vmx/unpack-be-order.c
+257607657b34e71e924fd556115dbef8 gcc/testsuite/gcc.dg/vmx/unpack.c
45503aad478d338e7fe457e2a68fced4 gcc/testsuite/gcc.dg/vmx/varargs-1.c
15ebdb6bd2f562d6d29fd6dcfabbef19 gcc/testsuite/gcc.dg/vmx/varargs-2.c
882296448ff1569550d5cc0fbbffd7cb gcc/testsuite/gcc.dg/vmx/varargs-3.c
@@ -28574,7 +28864,10 @@ b74b4229263d70abbf112c2c622f29ba gcc/testsuite/gcc.dg/vmx/t.c
3b83b84983785b62d2f5d8f3e3a9e4a0 gcc/testsuite/gcc.dg/vmx/varargs-5.c
5cc01078c1f3f451644a44dfdc807444 gcc/testsuite/gcc.dg/vmx/varargs-6.c
441584a435c20e33e9ba2840da79de7b gcc/testsuite/gcc.dg/vmx/varargs-7.c
+88d7e6b1c915da50092f2f05e8403f00 gcc/testsuite/gcc.dg/vmx/vec-set.c
91eb95f9389d831a37850a8ef78c0753 gcc/testsuite/gcc.dg/vmx/vmx.exp
+86f972b1649ec583ecedec34f5b742ec gcc/testsuite/gcc.dg/vmx/vsums-be-order.c
+7b36f93de20205be4944182fe8222120 gcc/testsuite/gcc.dg/vmx/vsums.c
0e39fb03e625fd0928ac3568284946cb gcc/testsuite/gcc.dg/vmx/x-01.c
780491d8a6964b34313eb871098c1ec6 gcc/testsuite/gcc.dg/vmx/x-02.c
ff3cd9551d1dd9b4583c366dae3bac4e gcc/testsuite/gcc.dg/vmx/x-03.c
@@ -28835,11 +29128,12 @@ d56e1d54601d45793aabb89d50201a58 gcc/testsuite/gcc.target/aarch64/mnegl-2.c
7fff87a71a10bdb4442a83328d11198d gcc/testsuite/gcc.target/aarch64/narrow_high-intrinsics.c
a1759a4eb1fc0f62e2222315d0eb8cc0 gcc/testsuite/gcc.target/aarch64/pic-constantpool1.c
100e94c4ffeea90b2da74a773d59f1cf gcc/testsuite/gcc.target/aarch64/pic-symrefplus.c
+e668fb9e0d32efadd671247467dc90db gcc/testsuite/gcc.target/aarch64/pr58460.c
1f95766b4ed5bfb5f2cf1f168a607a8d gcc/testsuite/gcc.target/aarch64/predefine_large.c
d38e476730748c653068e7cb2d8d6ca6 gcc/testsuite/gcc.target/aarch64/predefine_small.c
29e7dbfba15c0f945488b33400b908b4 gcc/testsuite/gcc.target/aarch64/predefine_tiny.c
19e276c42231e43545326700b7252478 gcc/testsuite/gcc.target/aarch64/reload-valid-spoff.c
-dd7f55a14703be45d7826a1bd1ec64bd gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
+d10c9b8327965fc60c77b9a862a4ca24 gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
49024de201ed5116d85217d7038dead6 gcc/testsuite/gcc.target/aarch64/subs.c
f9ebdbd62829628926e51d1f7f49ac97 gcc/testsuite/gcc.target/aarch64/table-intrinsics.c
a6690a127789f063ffc112a1ebdd5ca0 gcc/testsuite/gcc.target/aarch64/test-framepointer-1.c
@@ -29044,6 +29338,7 @@ bf821309d2cd93b8c0d6b0704742bc45 gcc/testsuite/gcc.target/arm/long-calls-1.c
42a78271420e5c48df61165376eb067e gcc/testsuite/gcc.target/arm/long-calls-2.c
045075d4c4f653f51cab15b6c12b3e09 gcc/testsuite/gcc.target/arm/long-calls-3.c
856b2cad766c5a53d737088d9056031b gcc/testsuite/gcc.target/arm/long-calls-4.c
+37fc8929c0e544dc7359fee7cd1c61e2 gcc/testsuite/gcc.target/arm/lp1189445.c
a806646e365240ac5e4717aadb89dd85 gcc/testsuite/gcc.target/arm/mla-1.c
7a61babf21fe0e2b87f08d86f719bd45 gcc/testsuite/gcc.target/arm/mla-2.c
72c8a20787a9bdd11b0b784553c2b94d gcc/testsuite/gcc.target/arm/mmx-1.c
@@ -30748,6 +31043,7 @@ a726243ab2c7fda6475a16bc86f0b171 gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes3
66562a61b02b7c5e3e808f267b73c385 gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes8.c
b6a426b55fdd4225b9d9deef6f4d0f52 gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu16.c
811ad8ff5c1005a49d72cb4c5e6a047f gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu32.c
+ff28ae8cb37237e4cca542b4782cbd4b gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c
f8dd7ae8aaf2cf38a7a7a63d88862c94 gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64.c
d3534038313edc2397009aaedb56925c gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu8.c
7e71d400e005cb2d36b8e07e372b7652 gcc/testsuite/gcc.target/arm/neon/vst1Qf32.c
@@ -31076,12 +31372,17 @@ d8c2b3438057bd37308e16b1228b0738 gcc/testsuite/gcc.target/arm/pr53187.c
9a6c78c74218ccc7be4511d7bbf530d0 gcc/testsuite/gcc.target/arm/pr53636.c
4f8bbd8590bd295e95df0cfef75e77cb gcc/testsuite/gcc.target/arm/pr53859.c
6af15a37f89b2eda59754bf3f8c6c2d3 gcc/testsuite/gcc.target/arm/pr54051.c
+dd6fcf2d02dd51f43eca4035c2609ea3 gcc/testsuite/gcc.target/arm/pr54300.C
144c19487bb0a02183a211f107af4c26 gcc/testsuite/gcc.target/arm/pr54892.c
342549b2c2e7198ce4650b879ad7bd28 gcc/testsuite/gcc.target/arm/pr55073.C
e61aebaf5b575834daaa3b467a7df60c gcc/testsuite/gcc.target/arm/pr55642.c
0a7c9241c50089dadefc674da11d9d78 gcc/testsuite/gcc.target/arm/pr56184.C
20dfa54a1381508ca3646536cfa44c09 gcc/testsuite/gcc.target/arm/pr56732-1.c
+f959f5c10e21a15d658780237062fe2c gcc/testsuite/gcc.target/arm/pr57637.c
+54166fd5f347708a423e88701c6c6679 gcc/testsuite/gcc.target/arm/pr58041.c
+fe54b5343975d99581cd4f90bc6f812e gcc/testsuite/gcc.target/arm/pr59826.c
3143560976572191d8bba6ba78a45aa6 gcc/testsuite/gcc.target/arm/register-variables.c
+9891ac3dc9739983de683e418f98f801 gcc/testsuite/gcc.target/arm/require-pic-register-loc.c
f4b0167ffa11835780a49b6681dae08a gcc/testsuite/gcc.target/arm/sat-1.c
8ad9146d832ee4875783406d1578ca80 gcc/testsuite/gcc.target/arm/scd42-1.c
51d048052e528d51adf660bb64ab1012 gcc/testsuite/gcc.target/arm/scd42-2.c
@@ -31112,8 +31413,11 @@ c0d093a1e77e17f4b29f6d2be56fefa7 gcc/testsuite/gcc.target/arm/thumb-find-work-r
f362d64184584a135071c712d4ebc2e3 gcc/testsuite/gcc.target/arm/thumb-ifcvt.c
903cc66b84907ea3367f74ea1d9d97f9 gcc/testsuite/gcc.target/arm/thumb-ltu.c
7184e928dc61e9e887edd32b11343712 gcc/testsuite/gcc.target/arm/thumb-stackframe.c
+edc79cd40be95cb422077e36df6f78dd gcc/testsuite/gcc.target/arm/thumb1-Os-mult.c
620a6821f4b18cc04954fc837f2d5761 gcc/testsuite/gcc.target/arm/thumb1-imm.c
32f5855db5242a89b54d8bce82ade4ec gcc/testsuite/gcc.target/arm/thumb1-mul-moves.c
+16fd10a998b538e828305bb9ffe9a623 gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c
+8f2563c0c5628738d00c5883c3043e50 gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c
d28c50f238226623cf455200121f3794 gcc/testsuite/gcc.target/arm/thumb2-cmpneg2add-1.c
f91077e8dbda998082dcdf52e9606e4e gcc/testsuite/gcc.target/arm/thumb2-cmpneg2add-2.c
5b561681f538688324b898c9b33d54c6 gcc/testsuite/gcc.target/arm/thumb2-cond-cmp-1.c
@@ -31153,6 +31457,7 @@ ce70e532069dd0735b884ab02a3058da gcc/testsuite/gcc.target/arm/volatile-bitfield
46773d880c6bda16896a27bdee5424ea gcc/testsuite/gcc.target/arm/volatile-bitfields-2.c
41dcb12d0b32ea9905000973463528bf gcc/testsuite/gcc.target/arm/volatile-bitfields-3.c
9e0831818da0dfe31c8560c6dfee10ab gcc/testsuite/gcc.target/arm/volatile-bitfields-4.c
+245f8ad63a6a2e1b6fb8d8e3a2b7554f gcc/testsuite/gcc.target/arm/vrinta-ce.c
22c159438f9959b6666b395d5c6aecbe gcc/testsuite/gcc.target/arm/vrintaf32.c
c9f286d71ee58c4562f8ce595d9435f7 gcc/testsuite/gcc.target/arm/vrintaf64.c
7ae924766d744675519935afb228f3db gcc/testsuite/gcc.target/arm/vrintmf32.c
@@ -31185,6 +31490,7 @@ f1148ddb95a6320ace4c79914eafc0a3 gcc/testsuite/gcc.target/arm/xor-and.c
2028ceccf9f97e5e84e9adf6beb7597e gcc/testsuite/gcc.target/avr/exit-abort.h
2931177f4aeff49d531d5474224448f6 gcc/testsuite/gcc.target/avr/pr46779-1.c
572dc228e08385a1db0fcbab66dbaa4e gcc/testsuite/gcc.target/avr/pr46779-2.c
+9e82df166e8b559cb56d2c4f48cbaf30 gcc/testsuite/gcc.target/avr/pr60991.c
881cb1836ddfc3105e0aacacc481aa09 gcc/testsuite/gcc.target/avr/progmem-error-1.c
881cb1836ddfc3105e0aacacc481aa09 gcc/testsuite/gcc.target/avr/progmem-error-1.cpp
56de611fd29076ce9da389a853476819 gcc/testsuite/gcc.target/avr/progmem-warning-1.c
@@ -31205,7 +31511,7 @@ a0d24b6b729b3316832b85d84ee2f113 gcc/testsuite/gcc.target/avr/torture/addr-spac
6f7a316d69505eb726fcfadde1df3047 gcc/testsuite/gcc.target/avr/torture/builtins-1.c
4e8775f7644c516578716a8ea7d588b2 gcc/testsuite/gcc.target/avr/torture/builtins-2.c
174c31ad852080b435229b98d586eb45 gcc/testsuite/gcc.target/avr/torture/builtins-3-absfx.c
-17050684920770e143ea841e175ff83c gcc/testsuite/gcc.target/avr/torture/builtins-4-roundfx.c
+72764bd3fc957d6e2c5475fdf94633ff gcc/testsuite/gcc.target/avr/torture/builtins-4-roundfx.c
0d57054a27e8f45b06571358f92c481b gcc/testsuite/gcc.target/avr/torture/builtins-5-countlsfx.c
4a5987f17a5b1c68712021003150be18 gcc/testsuite/gcc.target/avr/torture/builtins-error.c
c458c2462e23a4c58a7e4d05b6200907 gcc/testsuite/gcc.target/avr/torture/fix-types.h
@@ -31214,6 +31520,7 @@ c458c2462e23a4c58a7e4d05b6200907 gcc/testsuite/gcc.target/avr/torture/fix-types
8fb17af722ee890b7fa08b5610cdb80e gcc/testsuite/gcc.target/avr/torture/pr41885.c
70b849f57ecf42299230b99b7734dd2d gcc/testsuite/gcc.target/avr/torture/pr51374-1.c
640699ff4839c2a7798488c85177d381 gcc/testsuite/gcc.target/avr/torture/pr51782-1.c
+fea352b16ae79edc9965b1f39680a709 gcc/testsuite/gcc.target/avr/torture/pr61055.c
21a45d34960ba9567b9f2483d22c843f gcc/testsuite/gcc.target/avr/torture/progmem-1.c
564c71a894aff68e98d5c4a6db2b47ae gcc/testsuite/gcc.target/avr/torture/progmem-1.cpp
e3e1c41865f5287c9ff7e200745758fd gcc/testsuite/gcc.target/avr/torture/sat-hr-plus-minus.c
@@ -31884,8 +32191,8 @@ d32777702ddc7ca220279d28c7df2ece gcc/testsuite/gcc.target/i386/avx-vminps-256-1
79a87f92b29bbb443e1a9ab03e15962a gcc/testsuite/gcc.target/i386/avx-vminss-1.c
19519d6ba32480bdca3e0162db489f45 gcc/testsuite/gcc.target/i386/avx-vmovapd-1.c
a0bfa855273d324d1a55d6ba19336d86 gcc/testsuite/gcc.target/i386/avx-vmovapd-2.c
-0da01abb4fa30bbdd814b067da054524 gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c
-f38b1fb99649469904936600bd88c6c5 gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c
+6b0b34a0d5cd1e19841be42d7f36bec6 gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c
+fcbe3a6c36ef11759c7fd7b249d99f4d gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c
50d6bda8ddd8a8b35c48909d7f056f2a gcc/testsuite/gcc.target/i386/avx-vmovaps-1.c
bd220359275de86b2e6313646af5119b gcc/testsuite/gcc.target/i386/avx-vmovaps-2.c
692c97475a3285ac7a86e8bc89865d58 gcc/testsuite/gcc.target/i386/avx-vmovaps-256-1.c
@@ -32170,9 +32477,9 @@ e574c1cd5d253ccd4178534da6c08128 gcc/testsuite/gcc.target/i386/avx-vzeroupper-1
8f4945cde0bafb95376035acb8001955 gcc/testsuite/gcc.target/i386/avx-vzeroupper-13.c
cd5932f7a525e4a13b1b235ef16ce52b gcc/testsuite/gcc.target/i386/avx-vzeroupper-14.c
888bb5644f6dcfbfced23d392f7bb7c2 gcc/testsuite/gcc.target/i386/avx-vzeroupper-15.c
-41286095070eadda9f285bc5d8fffba2 gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c
-066a87a39cce9b4976fa3d471533ac3c gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c
-5bfe050591e1582e5f74d12a129cc88b gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c
+64965d8f14d562ab6c57dbaef19d8d9f gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c
+6ed640206904213478eab95a2fa8bcf1 gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c
+335a513c2436ba224f471bc60f219938 gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c
f5afa4a199eac7745127045b3cb2ca76 gcc/testsuite/gcc.target/i386/avx-vzeroupper-19.c
b2f6965ef1085f96f81ddfe840fc62a0 gcc/testsuite/gcc.target/i386/avx-vzeroupper-2.c
deda3f2ff19cc62cface6b28bf504c55 gcc/testsuite/gcc.target/i386/avx-vzeroupper-20.c
@@ -32607,8 +32914,8 @@ f71785cfb6f7da40bab4b1f4c7a8c590 gcc/testsuite/gcc.target/i386/avxfp-2.c
3337c95e7c07c6cd87ce0fa94f6b609c gcc/testsuite/gcc.target/i386/bitfield1.c
d66616bf53bd4a5815503634d62e1fc5 gcc/testsuite/gcc.target/i386/bitfield2.c
b7e1d2270e9e86c4a2b4f064a58c9780 gcc/testsuite/gcc.target/i386/bitfield3.c
-48640e9f41354e13d70aeced97399ed8 gcc/testsuite/gcc.target/i386/bmi-1.c
-8885c9ba6276c28a717ce25a4260f415 gcc/testsuite/gcc.target/i386/bmi-2.c
+fa67e684d1aa14f6e3c969d5bba83ce5 gcc/testsuite/gcc.target/i386/bmi-1.c
+259dd2b0ea62567196e3d430d73bde8a gcc/testsuite/gcc.target/i386/bmi-2.c
fc48ef0f1e33b7021253ebb6122ab809 gcc/testsuite/gcc.target/i386/bmi-3.c
5c41f4a1da9d179a1e082c5737b33e73 gcc/testsuite/gcc.target/i386/bmi-4.c
11456bbe2b105dfd8b430a5bd4fa34dd gcc/testsuite/gcc.target/i386/bmi-5.c
@@ -32621,6 +32928,7 @@ c5c0bf5c0799ea247b5c4285106ed0e7 gcc/testsuite/gcc.target/i386/bmi-andn-2a.c
519fc1dbd9a690adb68f647190c125a9 gcc/testsuite/gcc.target/i386/bmi-bextr-1a.c
9caf25ffef27d09a188988bb7307fb43 gcc/testsuite/gcc.target/i386/bmi-bextr-2.c
fed20c01e309fe356e55e3cc116c5e00 gcc/testsuite/gcc.target/i386/bmi-bextr-2a.c
+ab7b0415123a9edc18231c77b77ec43d gcc/testsuite/gcc.target/i386/bmi-bextr-3.c
6a7249c775a4e50d86020cb0fd1b0c5e gcc/testsuite/gcc.target/i386/bmi-blsi-1.c
bd48ce53571cdd48fe6e6784a994f7e7 gcc/testsuite/gcc.target/i386/bmi-blsi-1a.c
4e27601f29d1f40e91892c4a8371f943 gcc/testsuite/gcc.target/i386/bmi-blsi-2.c
@@ -32638,6 +32946,7 @@ be3fee1889ad65677a041f24f858b1cb gcc/testsuite/gcc.target/i386/bmi-blsr-2a.c
bddf7c2fb14fca97f8ff604d99aa87eb gcc/testsuite/gcc.target/i386/bmi-tzcnt-1a.c
f696e5f06827c19304c1291071f8675b gcc/testsuite/gcc.target/i386/bmi-tzcnt-2.c
0c9052e28cad40006a0099159bd98468 gcc/testsuite/gcc.target/i386/bmi-tzcnt-2a.c
+9950789cb130fff96f198223bbe0f518 gcc/testsuite/gcc.target/i386/bmi2-bzhi-1.c
a2c0c7d391a581fc83d61c68b6bd649b gcc/testsuite/gcc.target/i386/bmi2-bzhi32-1.c
3ead3d8eb2eb9104a7e22ff065727719 gcc/testsuite/gcc.target/i386/bmi2-bzhi32-1a.c
abb025375057fca2257ef280333b1bc3 gcc/testsuite/gcc.target/i386/bmi2-bzhi64-1.c
@@ -32995,6 +33304,7 @@ e06a25d8009fb83e07df79ef139ed068 gcc/testsuite/gcc.target/i386/mmx-2.c
acfecf30891fca26ef446ceccb8bdac6 gcc/testsuite/gcc.target/i386/mmx-check.h
3469a132e934293324b61b6f23458c92 gcc/testsuite/gcc.target/i386/mod-1.c
0df5ef30c53dec7183c7eb19bdaa491b gcc/testsuite/gcc.target/i386/monitor.c
+0da0edded160ecacdaaf3c0403ab6a77 gcc/testsuite/gcc.target/i386/movabs-1.c
a6f8c88f5ffc21bacd41b8da9e685138 gcc/testsuite/gcc.target/i386/movbe-1.c
ae6730a7d536bb012c657f60f9beedda gcc/testsuite/gcc.target/i386/movbe-2.c
0d20bce1f8d326eae5b8360ae189013a gcc/testsuite/gcc.target/i386/movdi-rex64.c
@@ -33005,6 +33315,7 @@ bb0703a0cfe126aeba12e7589d46db56 gcc/testsuite/gcc.target/i386/movsi-sm-1.c
c6304e928bcf1393de99639a142057ad gcc/testsuite/gcc.target/i386/movti.c
8eb0888c65213c6a136f005c9b089501 gcc/testsuite/gcc.target/i386/ms_hook_prologue.c
0e6e9e397831921b702df0167f01b9d2 gcc/testsuite/gcc.target/i386/mul.c
+a7f204e20c0df5dad30eac30c4a089ab gcc/testsuite/gcc.target/i386/nest-1.c
c4736e46fe7effe8aa0f8d946367703d gcc/testsuite/gcc.target/i386/nrv1.c
50b8bcd150bf9d9e5338438449a8f71f gcc/testsuite/gcc.target/i386/opt-1.c
d7a02dbcdc54a18a392397fb1ed438e2 gcc/testsuite/gcc.target/i386/opt-2.c
@@ -33093,7 +33404,7 @@ c5e38f94d34776548cce9b30a886d383 gcc/testsuite/gcc.target/i386/pr28839.c
3aa9b823d9d01f15098aa3ea4e9bace9 gcc/testsuite/gcc.target/i386/pr28946.c
11491d553f7be969ca12f9fc5f13efe4 gcc/testsuite/gcc.target/i386/pr29978.c
7dc3bb9ffdd974f461d453f9756e2cde gcc/testsuite/gcc.target/i386/pr30120.c
-c9d5a1ffb954d5b026f25ea9c5206d35 gcc/testsuite/gcc.target/i386/pr30315.c
+63677bcdd8ebcf86323172bd91499d28 gcc/testsuite/gcc.target/i386/pr30315.c
2181ddbcd9ee21c4fa1cca3a92cc1f5b gcc/testsuite/gcc.target/i386/pr30413.c
dcfc47d5c6f74562228eb399293c4bc5 gcc/testsuite/gcc.target/i386/pr30505.c
cc7150857198a660bd08df2767715c77 gcc/testsuite/gcc.target/i386/pr30848.c
@@ -33186,7 +33497,7 @@ cc52fb6e855215f99580b9fa0002669f gcc/testsuite/gcc.target/i386/pr38931.c
feb8f591ba5163f89986ad64e6633226 gcc/testsuite/gcc.target/i386/pr39058.c
00fcd1bcc574fcaad5e7aca9892a3609 gcc/testsuite/gcc.target/i386/pr39082-1.c
94f116f1e5835fc4ff466f7510f151e4 gcc/testsuite/gcc.target/i386/pr39139.c
-76394bbab0c962da8e9eba9e1f5571c9 gcc/testsuite/gcc.target/i386/pr39162.c
+ba80cacdbccf01662459084fcb1ecd4a gcc/testsuite/gcc.target/i386/pr39162.c
e4d2b64cced64941f3d4566006c98041 gcc/testsuite/gcc.target/i386/pr39315-1.c
a4f00037c34adc5e43d6e3cdd6220a24 gcc/testsuite/gcc.target/i386/pr39315-2.c
a474bfdfe558ff6ab774624e5cf8b502 gcc/testsuite/gcc.target/i386/pr39315-3.c
@@ -33237,14 +33548,15 @@ c91c6015a1130478e24fe506bc452e64 gcc/testsuite/gcc.target/i386/pr42891.c
aa073f4162ffad443bb245d594813932 gcc/testsuite/gcc.target/i386/pr43508.c
f959f9b7f68ec9300176ea5f3b5b723a gcc/testsuite/gcc.target/i386/pr43524.c
1066419aa0129e03db1a00505876de93 gcc/testsuite/gcc.target/i386/pr43528.c
+58183b44c704bf8f6adb8c75a84488d9 gcc/testsuite/gcc.target/i386/pr43546.c
5635dcc46744c1f49edb4c954be65a2a gcc/testsuite/gcc.target/i386/pr43638.c
3ab94ca7094b4b2701ceb9a87bd5055b gcc/testsuite/gcc.target/i386/pr43653.c
-1e6cfad2ee7ef499c25f339998f4e63f gcc/testsuite/gcc.target/i386/pr43662.c
+a061c5992b6b5eb3f8692799a16da8f0 gcc/testsuite/gcc.target/i386/pr43662.c
5fc034f7335e1d13da593214c69166d4 gcc/testsuite/gcc.target/i386/pr43668.c
6ab8a2adf42dab65fcb8bf08d5d35627 gcc/testsuite/gcc.target/i386/pr43671.c
1567ad5bd013e5738980e72132f53a3f gcc/testsuite/gcc.target/i386/pr43766.c
b05f423e2e73dc286c577252283d529f gcc/testsuite/gcc.target/i386/pr43799.c
-171a677c5298c0c69b83154415e55228 gcc/testsuite/gcc.target/i386/pr43869.c
+95bcbc86cf3f408e4fb2c3901cc21f16 gcc/testsuite/gcc.target/i386/pr43869.c
e5b6fcba4b57a5ffec09acc18c64fa8e gcc/testsuite/gcc.target/i386/pr44071.c
5a3c2f5a9fc0503752e7b93db02bc654 gcc/testsuite/gcc.target/i386/pr44130.c
ee71afab95575089e9dde62fa2f3df3b gcc/testsuite/gcc.target/i386/pr44144.c
@@ -33383,6 +33695,7 @@ dba42c939904ce7e33213ea822d41659 gcc/testsuite/gcc.target/i386/pr54400.c
b560ba0077291fd4eafff85b86975597 gcc/testsuite/gcc.target/i386/pr54445-2.c
ab461f4f1557c30722b9dc36d2fe9c72 gcc/testsuite/gcc.target/i386/pr54457.c
ae5d7df3b109ad314dc1953f09da0d6b gcc/testsuite/gcc.target/i386/pr54592.c
+6d7b053bbb28bb9e1a4e8c1967a60835 gcc/testsuite/gcc.target/i386/pr54694.c
c502c143bfe08e286784446e3a530233 gcc/testsuite/gcc.target/i386/pr54703.c
249e3a01a12bb3e0f357b1670d97535c gcc/testsuite/gcc.target/i386/pr55049-1.c
84eb65747b94a2b95d8e7a68f18c38bf gcc/testsuite/gcc.target/i386/pr55093.c
@@ -33427,7 +33740,7 @@ bedc2906b19d90b34bbca83245d800ea gcc/testsuite/gcc.target/i386/pr56151.c
3111de20bdd1ba9007fc6ea6331f6b09 gcc/testsuite/gcc.target/i386/pr56560.c
bd02b8a0614713f55733fac63a3e9c06 gcc/testsuite/gcc.target/i386/pr56866.c
3568c4b3ce2c7cade44746d81d1eac8b gcc/testsuite/gcc.target/i386/pr56903.c
-e84b92ba658d892841e7606e6312188e gcc/testsuite/gcc.target/i386/pr57003.c
+e26f0d680eb63962bfecdf3453c24e4a gcc/testsuite/gcc.target/i386/pr57003.c
8f35b23c364eec98865f376fc604a54d gcc/testsuite/gcc.target/i386/pr57018.c
0037b23bb497c1ed7bbde7fb0c6fac31 gcc/testsuite/gcc.target/i386/pr57046.c
6f70dfee8fdef2308ac550207132caae gcc/testsuite/gcc.target/i386/pr57091.c
@@ -33435,7 +33748,34 @@ c7f426034d9df3b9350c1df80138c8dc gcc/testsuite/gcc.target/i386/pr57097.c
c2db58543174fc682e6c481e525df5d6 gcc/testsuite/gcc.target/i386/pr57098.c
a995edc07e467f878e75e842897b1cfd gcc/testsuite/gcc.target/i386/pr57106.c
1be3cad52880bd204c5668a12dc63bc1 gcc/testsuite/gcc.target/i386/pr57264.c
-bbfa334a0bc4402cca428e4d748bf58a gcc/testsuite/gcc.target/i386/pr9771-1.c
+7e388cbf0472c0b7b43d3d478bbe0e43 gcc/testsuite/gcc.target/i386/pr57459.c
+137ff6c74763639089440687727cf6c3 gcc/testsuite/gcc.target/i386/pr57655.c
+681638da206cb4838378ec263136509c gcc/testsuite/gcc.target/i386/pr57736.c
+c01a05903164ed251d7228d2c57431ed gcc/testsuite/gcc.target/i386/pr57777.c
+5b6c881f720337a7ea82155d974e222a gcc/testsuite/gcc.target/i386/pr58137.c
+e718e67bc7810d948894cb16a9fac0a6 gcc/testsuite/gcc.target/i386/pr58218.c
+317bcd4823bc8303d4f7b8d91d8fb171 gcc/testsuite/gcc.target/i386/pr58690.c
+8535b7377d32162c5d39914b810ccd30 gcc/testsuite/gcc.target/i386/pr59021.c
+bce4b06335aca879482f5be7b3a4ec55 gcc/testsuite/gcc.target/i386/pr59034-1.c
+c6dcd8a6648738159a0f110632984379 gcc/testsuite/gcc.target/i386/pr59034-2.c
+559290e7377f2854389da57f75e00d90 gcc/testsuite/gcc.target/i386/pr59405.c
+30d1cab89894411b849b6e07de1b058a gcc/testsuite/gcc.target/i386/pr59470.c
+126329f763ee878621a02870dbdc35d3 gcc/testsuite/gcc.target/i386/pr59625.c
+98b3d629ea88dfc65d638d123b3d9c9c gcc/testsuite/gcc.target/i386/pr59794-1.c
+022d62fcfd8f1d3d9298a9b4451f2507 gcc/testsuite/gcc.target/i386/pr59794-2.c
+b3b3ecaf9a73618a0676a1f5146e94e7 gcc/testsuite/gcc.target/i386/pr59794-3.c
+2db0d184d2cbfe023e674fbe7742392a gcc/testsuite/gcc.target/i386/pr59794-4.c
+56ce1e860b3b0e8eee6af2d1e4a406ce gcc/testsuite/gcc.target/i386/pr59794-5.c
+697084b75df10cfa059a6c91d39111fd gcc/testsuite/gcc.target/i386/pr59794-6.c
+fbc800706742db8be4052de5e8f52eba gcc/testsuite/gcc.target/i386/pr59794-7.c
+0c2d582f00adc7472660160cba8ba19b gcc/testsuite/gcc.target/i386/pr59839.c
+ef5e7cf22fd8cf05d21ba509a8796cae gcc/testsuite/gcc.target/i386/pr59929.c
+697da7d0cc19b38fd886149eb3d4af13 gcc/testsuite/gcc.target/i386/pr60516.c
+3c94cee0c51e457793c9d3861c12d06d gcc/testsuite/gcc.target/i386/pr60693.c
+aa9afa3fae8ccdc655d286ee8211123a gcc/testsuite/gcc.target/i386/pr60700.c
+90c5be2a3f80aff7d7204eaa36133881 gcc/testsuite/gcc.target/i386/pr60909-1.c
+65d3cafc066a01d0520d7d9137813522 gcc/testsuite/gcc.target/i386/pr60909-2.c
+707512ec49461522d8afd5aff9320ac0 gcc/testsuite/gcc.target/i386/pr9771-1.c
24ceb6d5f3f5cde4b9d852839bdb98ae gcc/testsuite/gcc.target/i386/prefetchw-1.c
267203167ae369a7a0f5d3c309117f35 gcc/testsuite/gcc.target/i386/quad-sse.c
f5672f5c8f5bc6c8c4ec453cac0d4b2e gcc/testsuite/gcc.target/i386/rdfsbase-1.c
@@ -33496,7 +33836,7 @@ d5e7e4c7d488a953399d853e48aa484e gcc/testsuite/gcc.target/i386/sse-21.c
867f62d0f6bb019d1344e530937652fb gcc/testsuite/gcc.target/i386/sse-24.c
9dfe2cc74e998cef475e202f64ff8322 gcc/testsuite/gcc.target/i386/sse-3.c
5d81ca69ddc7b70211c056c3bdc53dfa gcc/testsuite/gcc.target/i386/sse-4.c
-bbf895317da54653b638efdd7831fc18 gcc/testsuite/gcc.target/i386/sse-5.c
+ef7d3880b59ecd512252a17d2abf1ef2 gcc/testsuite/gcc.target/i386/sse-5.c
34561bfb4872c917d97994d7de3828b5 gcc/testsuite/gcc.target/i386/sse-6.c
f6cdb29d66458dbcca710bda033dc0ca gcc/testsuite/gcc.target/i386/sse-7.c
b3b5bc8c0bda286d794a088170067893 gcc/testsuite/gcc.target/i386/sse-8.c
@@ -33612,8 +33952,8 @@ de4aecf22a8108ad2498b7a0761ed800 gcc/testsuite/gcc.target/i386/sse2-lrint-vec.c
aefc174798cfd957968a0915e9989648 gcc/testsuite/gcc.target/i386/sse2-minpd-1.c
fc86a82738b060b9900f3f68205d60d9 gcc/testsuite/gcc.target/i386/sse2-minsd-1.c
87efe59d21cddd4ccc1f8caa2e5300d4 gcc/testsuite/gcc.target/i386/sse2-mmx.c
-99700c0bbb9ac7119491dacab03a852e gcc/testsuite/gcc.target/i386/sse2-movapd-1.c
-6b01c60d5cfc36bc3fb3861e7c65fafb gcc/testsuite/gcc.target/i386/sse2-movapd-2.c
+807c3a987219d4de388ae04700d49c59 gcc/testsuite/gcc.target/i386/sse2-movapd-1.c
+355faabc7545ead3e8b6bee48a939af5 gcc/testsuite/gcc.target/i386/sse2-movapd-2.c
df256dc991af0bd27068e98f9914f7e9 gcc/testsuite/gcc.target/i386/sse2-movd-1.c
f904689d8d0067d93105e377367edd5b gcc/testsuite/gcc.target/i386/sse2-movd-2.c
a2458c99d49657dc72864ee69a151f31 gcc/testsuite/gcc.target/i386/sse2-movdqa-1.c
@@ -34028,6 +34368,7 @@ a122c2ab185f51e5f4aeac16a47595e0 gcc/testsuite/gcc.target/i386/wrgsbase-2.c
e45be5b5dd5f8be0a75495bb33be0404 gcc/testsuite/gcc.target/i386/xchg-1.c
b6d6abcfbd5245e5750e48d0e9518639 gcc/testsuite/gcc.target/i386/xchg-2.c
5ee25ab13ecf1397089259762302768b gcc/testsuite/gcc.target/i386/xop-check.h
+c37d749cc823fbe15fae562023e669f6 gcc/testsuite/gcc.target/i386/xop-frczX.c
1dfb32c9098a172a7ddbb001e0617c92 gcc/testsuite/gcc.target/i386/xop-haddX.c
90c1c8a0f655fa0eb23cd02904702233 gcc/testsuite/gcc.target/i386/xop-hadduX.c
561407eb95492b3c08b4d76921b9e89c gcc/testsuite/gcc.target/i386/xop-hsubX.c
@@ -34147,6 +34488,7 @@ ff9e93d3e77e32e0ebcc4ee4d9ace05d gcc/testsuite/gcc.target/microblaze/isa/bshift
6b0045d8d4687ce8b771c9e95d2825eb gcc/testsuite/gcc.target/microblaze/isa/fcmp1.c
1511dc8689e393c4eba262c5025d283f gcc/testsuite/gcc.target/microblaze/isa/fcmp2.c
e26b5e2810c778271b3566e0648a477c gcc/testsuite/gcc.target/microblaze/isa/fcmp3.c
+f518418a345df7455fbf45d2755aabfd gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c
13116e55c6dc9d1e27361d96171e4efd gcc/testsuite/gcc.target/microblaze/isa/fcvt.c
8559aefca5d5bbcf1662fcc0b10d2684 gcc/testsuite/gcc.target/microblaze/isa/float.c
65b7ac5e997d43763d364e2632b09140 gcc/testsuite/gcc.target/microblaze/isa/fsqrt.c
@@ -34160,10 +34502,12 @@ e143618b2c8e9f74a89e408849d5ea9e gcc/testsuite/gcc.target/microblaze/isa/nofcmp
7d11470d188b8ddbdb82b31ba91f41ff gcc/testsuite/gcc.target/microblaze/isa/pcmp.c
950feeef0cf00d66d2c89478821978e0 gcc/testsuite/gcc.target/microblaze/isa/vanilla.c
25e2425f341bce7c0a181b8b91a4f163 gcc/testsuite/gcc.target/microblaze/microblaze.exp
+6da8565fda6bca91e6bd8e83373e0b2c gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c
a0e81f6aa36d0ae7fdfd918cdece1702 gcc/testsuite/gcc.target/microblaze/others/data_var1.c
bb6646d391f2d64afe83d6ea230d5896 gcc/testsuite/gcc.target/microblaze/others/data_var2.c
c53c1db3a47170265f893afd2dbc06e2 gcc/testsuite/gcc.target/microblaze/others/data_var3.c
695f69109adf0e72123a173619dc184b gcc/testsuite/gcc.target/microblaze/others/interrupt_handler_leaf.c
+eb4bb49d076758668761be5e0fbb2f4b gcc/testsuite/gcc.target/microblaze/others/mem_reload.c
6f5950534999370eecc3f9aeba90946e gcc/testsuite/gcc.target/microblaze/others/sdata_var1.c
6239f557cf9fc53c6eecdd483c447728 gcc/testsuite/gcc.target/microblaze/others/sdata_var2.c
df2b7ff55346ea4d41074a7b9c3e8e43 gcc/testsuite/gcc.target/microblaze/others/sdata_var3.c
@@ -34229,6 +34573,12 @@ da7c92b747af7163cb49cd8b03b34c1c gcc/testsuite/gcc.target/mips/branch-9.c
01ccbd4c33c1eb10d99c6bc24c4aa8ce gcc/testsuite/gcc.target/mips/branch-cost-1.c
9a32ac670a8658386faac08cb23bb8ed gcc/testsuite/gcc.target/mips/branch-cost-2.c
8683b56a4c4a360a46d4c5e200419fe6 gcc/testsuite/gcc.target/mips/branch-helper.h
+29693edc94738e43dfe2522f02ffcc87 gcc/testsuite/gcc.target/mips/bswap-1.c
+cd2c03a51a97923d710850a4e2fd7a03 gcc/testsuite/gcc.target/mips/bswap-2.c
+59380121c4699c956e32b5dde269377f gcc/testsuite/gcc.target/mips/bswap-3.c
+a96d84214b187b42a6e24c4bab58f789 gcc/testsuite/gcc.target/mips/bswap-4.c
+29bd7f8cebfb02a2fc8965b0af28e99a gcc/testsuite/gcc.target/mips/bswap-5.c
+2230520d1ef1886463333fd2dcedd190 gcc/testsuite/gcc.target/mips/bswap-6.c
b1facdebb98463584872620656c72843 gcc/testsuite/gcc.target/mips/cache-1.c
db9e6503706448de5dce06ab9f0d1609 gcc/testsuite/gcc.target/mips/call-1.c
2ab220c6278e0ce6163cca1a60b9398b gcc/testsuite/gcc.target/mips/call-2.c
@@ -34509,6 +34859,7 @@ f95e6890f2bc69d7a36990c9bc30b80c gcc/testsuite/gcc.target/mips/pr34831.c
69edb2929290a0a3448743d3f29c5381 gcc/testsuite/gcc.target/mips/pr54240.c
16bf586e6551b9052ad841307f40acbf gcc/testsuite/gcc.target/mips/pr55315.c
03fc0f42e7c40dad6deb69e4b8b5d98f gcc/testsuite/gcc.target/mips/pr56524.c
+0b360d767e5fb6d71b355df1b16f546e gcc/testsuite/gcc.target/mips/pr59137.c
a3d18616f89634c190f4bb31b9165dbc gcc/testsuite/gcc.target/mips/r10k-cache-barrier-1.c
668f845b2b56ba796d8efa350bd5f072 gcc/testsuite/gcc.target/mips/r10k-cache-barrier-10.c
32ddce9e3a3bbe0a7c0283da638073ae gcc/testsuite/gcc.target/mips/r10k-cache-barrier-11.c
@@ -34588,7 +34939,7 @@ d41d8cd98f00b204e9800998ecf8427e gcc/testsuite/gcc.target/mips/umips-swp-7.c
02c4c8d0119ce2bc51f551d7c42c6af6 gcc/testsuite/gcc.target/mips/va-arg-1.c
48f200c43fab7d67a5ee8d4fd8af91a5 gcc/testsuite/gcc.target/mips/vr-mult-1.c
bdbe1b2e833e8da48eee27859726180e gcc/testsuite/gcc.target/mips/vr-mult-2.c
-4e25612c3feea3064b5df8cc4b5abde6 gcc/testsuite/gcc.target/powerpc/20020118-1.c
+062154ab36a8a3302cf52ce4762996ac gcc/testsuite/gcc.target/powerpc/20020118-1.c
0c9de9fb151f4887897fb0ef6652d679 gcc/testsuite/gcc.target/powerpc/20030218-1.c
5ad9d2d0ffe29d1973ef77bb7de54467 gcc/testsuite/gcc.target/powerpc/20030505.c
ee737184c69185ff4d7409ed3d8ba237 gcc/testsuite/gcc.target/powerpc/20040121-1.c
@@ -34703,10 +35054,11 @@ a0e560e56bf1611760575d6fab16e0c8 gcc/testsuite/gcc.target/powerpc/altivec-cell-
a992cefc8fadc224aab3acadbe8c81e5 gcc/testsuite/gcc.target/powerpc/altivec-cell-6.c
53eae7638cc25a670ceae4ceb2da4973 gcc/testsuite/gcc.target/powerpc/altivec-cell-7.c
e71ad93cf02de4196b122d33c5312bb6 gcc/testsuite/gcc.target/powerpc/altivec-cell-8.c
-8c4aae27dcbaa3f557a8519fadb313b5 gcc/testsuite/gcc.target/powerpc/altivec-consts.c
+f84afb22ce6cbb4426503258a87d5c5a gcc/testsuite/gcc.target/powerpc/altivec-consts.c
363a776f6e4b0eac12304bbd2c6c34a0 gcc/testsuite/gcc.target/powerpc/altivec-macros.c
-538664c4bd63a23bf0b45b5692e71f55 gcc/testsuite/gcc.target/powerpc/altivec-perm-1.c
+6644929740c819648f0e7c5223035282 gcc/testsuite/gcc.target/powerpc/altivec-perm-1.c
1ada2df7c2add0bec64338812ac2b0bd gcc/testsuite/gcc.target/powerpc/altivec-perm-2.c
+6d3d73c2edb010f68c44087938e68b46 gcc/testsuite/gcc.target/powerpc/altivec-perm-3.c
e93ba710909870214aa19f34f632d067 gcc/testsuite/gcc.target/powerpc/altivec-perm-4.c
23da645e0f4f73f8ce9c211a3319f80c gcc/testsuite/gcc.target/powerpc/altivec-pr22085.c
4a776196d75e283b54c3d66265ee6e60 gcc/testsuite/gcc.target/powerpc/altivec-splat.c
@@ -34720,9 +35072,25 @@ c1ad5df368bf78f67f3b4c15cbe1c757 gcc/testsuite/gcc.target/powerpc/altivec-volat
f92704c5f7f462e7f0b0f7a56209b9c1 gcc/testsuite/gcc.target/powerpc/asm-es-1.c
ab233b59d18c7aa71a26292124ceae27 gcc/testsuite/gcc.target/powerpc/asm-es-2.c
f1f6a9ec080c7f1554b538d5701c21e2 gcc/testsuite/gcc.target/powerpc/asm-y.c
+2fd70566b2ca4fa7b4416071c002a1d0 gcc/testsuite/gcc.target/powerpc/atomic-p7.c
+e476471a7edb5f299042583dac1e4886 gcc/testsuite/gcc.target/powerpc/atomic-p8.c
+1bb3c02dda5fc71d0e39b0833c955824 gcc/testsuite/gcc.target/powerpc/atomic_load_store-p8.c
f7e7c3525d555350473e6eaeb20a763c gcc/testsuite/gcc.target/powerpc/avoid-indexed-addresses.c
+68a98ba6065eb1bd5a5a38ffaebe3628 gcc/testsuite/gcc.target/powerpc/bcd-1.c
+4c4454e8a943ac537214d0651d7689fc gcc/testsuite/gcc.target/powerpc/bcd-2.c
+130b8d095a504ba76a81116d57667e8a gcc/testsuite/gcc.target/powerpc/bcd-3.c
d71e4fffd67fe9a02068065c31f40a8c gcc/testsuite/gcc.target/powerpc/block-move-1.c
acce3a59dc7d4ef94160abede8f06c07 gcc/testsuite/gcc.target/powerpc/block-move-2.c
+8b94a94a7dff0052358065a48eaa4f9f gcc/testsuite/gcc.target/powerpc/bool.c
+0c471439cd9eccf80397e5b8e5151bd1 gcc/testsuite/gcc.target/powerpc/bool2-av.c
+213d93e0d5ef4719879bd97bc3d6a0ad gcc/testsuite/gcc.target/powerpc/bool2-p5.c
+df623972e00d7afee4c86a52e8067815 gcc/testsuite/gcc.target/powerpc/bool2-p7.c
+f0f305232735a923fc24e9d8eb465c3d gcc/testsuite/gcc.target/powerpc/bool2-p8.c
+c9f98da2825e699344ef8948cd8d19fa gcc/testsuite/gcc.target/powerpc/bool2.h
+c073986c3938bde8b4e52f88512d6bcf gcc/testsuite/gcc.target/powerpc/bool3-av.c
+c8cca19a861c186e619c14f7eac0f82f gcc/testsuite/gcc.target/powerpc/bool3-p7.c
+9032dc90f36bce1030ff04b39ce51d97 gcc/testsuite/gcc.target/powerpc/bool3-p8.c
+438f4e658462567e81a685ced3c5a415 gcc/testsuite/gcc.target/powerpc/bool3.h
5f5298f748bcfaf7c81d750d7b190615 gcc/testsuite/gcc.target/powerpc/bswap-run.c
83b860118c2602e26698368661e795c2 gcc/testsuite/gcc.target/powerpc/bswap16.c
caf01994c96172dac156c3da29317823 gcc/testsuite/gcc.target/powerpc/bswap32.c
@@ -34741,6 +35109,7 @@ b496b6c0f22345ea109540fd44354ea1 gcc/testsuite/gcc.target/powerpc/cell_builtin-
a5f9bde4e3b75b1650c086d628abc346 gcc/testsuite/gcc.target/powerpc/compress-float-ppc-pic.c
200c7976ba75f6c986aedec205aad73b gcc/testsuite/gcc.target/powerpc/compress-float-ppc.c
6419d1aaea22c0476688f484ac4f0f43 gcc/testsuite/gcc.target/powerpc/const-compare.c
+47a9f9dea649ab7026cf89ae29f2ff7d gcc/testsuite/gcc.target/powerpc/crypto-builtin-1.c
965986b227062a2b8c664c916a71ad45 gcc/testsuite/gcc.target/powerpc/darwin-abi-1.c
9a0e4836781f28669ddca26eb214c2b2 gcc/testsuite/gcc.target/powerpc/darwin-abi-10.c
66e5cfd1b7491e37c0ef258d09b6634d gcc/testsuite/gcc.target/powerpc/darwin-abi-11.c
@@ -34757,20 +35126,40 @@ f8920aee2833fd404308e7134a58361a gcc/testsuite/gcc.target/powerpc/darwin-bool-1
d898994d2dd12e123fcb756d46aed2c4 gcc/testsuite/gcc.target/powerpc/darwin-bool-2.c
f262b5e5f7c5ffc8df6aea1bb567debc gcc/testsuite/gcc.target/powerpc/darwin-ehreturn-1.c
e5a3f954e535f339c4a0f35fc50c6302 gcc/testsuite/gcc.target/powerpc/darwin-longdouble.c
-f6316fde08bb2baa543bd1222a078438 gcc/testsuite/gcc.target/powerpc/darwin-longlong.c
+bab9d2b9475b292a01a50c6972b9f682 gcc/testsuite/gcc.target/powerpc/darwin-longlong.c
4dbff077cb3e8124197729c3a94647bb gcc/testsuite/gcc.target/powerpc/darwin-misaligned.c
7ba33272da50fd8bee6d1536c3e99d26 gcc/testsuite/gcc.target/powerpc/darwin-save-world-1.c
a034d7a8bf265623a75800f01113e836 gcc/testsuite/gcc.target/powerpc/darwin-split-ld-stret.c
548fc585bcbf766f23bef7319f0b0a18 gcc/testsuite/gcc.target/powerpc/darwin64-abi.c
b4bba5410c6e6f914897ce86ffaca508 gcc/testsuite/gcc.target/powerpc/dfmode_off.c
+57ea0173da68940a58564009a30679b4 gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c
+a5f66daa4a8160a6e06231f0c816da83 gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c
+c25b0e4bf35d335bbde9c753c70ff289 gcc/testsuite/gcc.target/powerpc/dfp-dd-2.c
1957dd277fc1f9a9eef7275766fcea8e gcc/testsuite/gcc.target/powerpc/dfp-dd.c
+b2bd0e99cbcd0dff49c3d07bafb4ad8c gcc/testsuite/gcc.target/powerpc/dfp-td-2.c
+cead4a4557a9145d009eba98a59695a0 gcc/testsuite/gcc.target/powerpc/dfp-td-3.c
959a8e3eee9bdbcce21dbca02a1a3d91 gcc/testsuite/gcc.target/powerpc/dfp-td.c
79996f6965a8addb9bd561b6f7277f32 gcc/testsuite/gcc.target/powerpc/dimode_off.c
+bb7ca43e611843e4192117389e6f9362 gcc/testsuite/gcc.target/powerpc/direct-move-double1.c
+3937e8b0b515b3c0233bc1c107e06e8e gcc/testsuite/gcc.target/powerpc/direct-move-double2.c
+8f85ec72258e4f5102f71ed2ad6f1db2 gcc/testsuite/gcc.target/powerpc/direct-move-float1.c
+cae7b947a524ca73094c7a90fe16b489 gcc/testsuite/gcc.target/powerpc/direct-move-float2.c
+95f6d559d66e6b6cdd1731de60a79063 gcc/testsuite/gcc.target/powerpc/direct-move-long1.c
+8ca0bd0c2899dbcddcadf7afee8c208e gcc/testsuite/gcc.target/powerpc/direct-move-long2.c
+1a60144e7e50e43a3d223d019ef2fb14 gcc/testsuite/gcc.target/powerpc/direct-move-vint1.c
+b19d0826a9a86f3c5edebafadb6cb8b3 gcc/testsuite/gcc.target/powerpc/direct-move-vint2.c
+41ee88c8c723f9bce618326a87040f03 gcc/testsuite/gcc.target/powerpc/direct-move.h
8f2229fba1c4dc16358c52a26e62a35e gcc/testsuite/gcc.target/powerpc/doloop-1.c
1e28ad29e43de3bf402fb713b7540c32 gcc/testsuite/gcc.target/powerpc/e500-1.c
52468a71868e251587d1c07bc7e2b10f gcc/testsuite/gcc.target/powerpc/ehreturn.c
+9a3782b86e33933301343450411ef697 gcc/testsuite/gcc.target/powerpc/extend-divide-1.c
+391b21c9192f7bcd5ab0a0179c012e29 gcc/testsuite/gcc.target/powerpc/extend-divide-2.c
+fbe44e0943c31011fa30a479b0856bc9 gcc/testsuite/gcc.target/powerpc/fusion.c
4109709d89c976bec9d1d05e94004ff2 gcc/testsuite/gcc.target/powerpc/gcse-1.c
+f5543e6f996fc00e4ca43418e125fb66 gcc/testsuite/gcc.target/powerpc/htm-builtin-1.c
+bd2f03394b7690c22ce1aab465adb75f gcc/testsuite/gcc.target/powerpc/htm-xl-intrin-1.c
8d634b2a7d443f1e5b4b69716e57ac00 gcc/testsuite/gcc.target/powerpc/indexed-addr.c
+a06c80b6841f0e175447fb154db9d45d gcc/testsuite/gcc.target/powerpc/le-altivec-consts.c
7893fdf7b4681a84cb4d049bea9ffc10 gcc/testsuite/gcc.target/powerpc/leaf.c
d168802e448650c65bc82b38f289b3a6 gcc/testsuite/gcc.target/powerpc/lhs-1.c
5ce146376f07e418dde2aaa36d530c96 gcc/testsuite/gcc.target/powerpc/lhs-2.c
@@ -34778,14 +35167,35 @@ dbee7c9f93d4fe35b33a0b7cbc1e3ba0 gcc/testsuite/gcc.target/powerpc/lhs-3.c
edd0512cd703018bda99c607e742ce2c gcc/testsuite/gcc.target/powerpc/longcall-1.c
b887e71546fef4cd97ce265a9f589091 gcc/testsuite/gcc.target/powerpc/loop_align.c
95f0a3ed470b480e62e5510f13cd33b8 gcc/testsuite/gcc.target/powerpc/macho-lo-sum.c
-156006c545dd6b278b9557a1e8f2d3c0 gcc/testsuite/gcc.target/powerpc/no-r11-1.c
-7203a7a786e05d8615868de562377136 gcc/testsuite/gcc.target/powerpc/no-r11-2.c
-8b89818de31d77b5c58daecc5f1b9391 gcc/testsuite/gcc.target/powerpc/no-r11-3.c
+2217c9396d3adfda73167b6fc0607ea6 gcc/testsuite/gcc.target/powerpc/mmfpgpr.c
+e22a7266629ff9fe810fc66e708b11a6 gcc/testsuite/gcc.target/powerpc/no-r11-1.c
+0f3e464b60c769b9067c0b49078b50e5 gcc/testsuite/gcc.target/powerpc/no-r11-2.c
+302a3a348ae2f60a0b1366d1c9481f97 gcc/testsuite/gcc.target/powerpc/no-r11-3.c
a3a18f288ff9a907cedfa89231e2d3e8 gcc/testsuite/gcc.target/powerpc/non-lazy-ptr-test.c
cf32960cefb55f1995bd7e558f0b2e33 gcc/testsuite/gcc.target/powerpc/optimize-bswapdi-2.c
65f5354ef2fb6871117d743ca6035093 gcc/testsuite/gcc.target/powerpc/optimize-bswapdi-3.c
b93ff68fbb5b97fa870802acd635779c gcc/testsuite/gcc.target/powerpc/optimize-bswapsi-2.c
393e81a0796c89d8be9035b942a8da7d gcc/testsuite/gcc.target/powerpc/outofline_rnreg.c
+3be789d64b426759b9ae299c11163b55 gcc/testsuite/gcc.target/powerpc/p8vector-builtin-1.c
+f06659cef44df84ede4bddb44bfb17d4 gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
+eb03edcb039cff430b31747b041fded0 gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
+38d3c434ae7763f0f41c7d918f6f2859 gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
+bd9bef9187079b3bf9a9d7ce964fbd64 gcc/testsuite/gcc.target/powerpc/p8vector-builtin-5.c
+118afb93fdc1b6794509012a97613e66 gcc/testsuite/gcc.target/powerpc/p8vector-builtin-6.c
+04659bd50ed31ada8119f79b032b162c gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c
+229ce949a8fc1ccddc2cd4e0cd363e4a gcc/testsuite/gcc.target/powerpc/p8vector-fp.c
+627c1c5482997cf527f9e29f019d13ac gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c
+15dba6675834d283b98f55df624f6754 gcc/testsuite/gcc.target/powerpc/p8vector-int128-2.c
+5bb112ea5fdf267beade23e030294589 gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c
+59a38cab2acf16d40067e0da6b2a3e02 gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c
+608948a40e4a405bfefed521f673f14e gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-1.c
+83f59bd12d41e569871c94a9190600d3 gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-2.c
+005f166c1c0be618a16b56f1b6b4e83b gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-3.c
+4d64e7912cb11b75cbbaa5d97e00e895 gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-4.c
+666d1461e029285044563a45fd3146a2 gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-5.c
+5fd09506461138827bcc1a6e8e116021 gcc/testsuite/gcc.target/powerpc/pack01.c
+3df5b6b1151211b0a71dcb7de4fcd779 gcc/testsuite/gcc.target/powerpc/pack02.c
+fa72c1f9512bac14ea57ebf20c94c152 gcc/testsuite/gcc.target/powerpc/pack03.c
d0bd3df7fee3d73a0acc876ce20691e2 gcc/testsuite/gcc.target/powerpc/paired-1.c
0d7e5847184bc01c42a40dda9b07bda3 gcc/testsuite/gcc.target/powerpc/paired-10.c
2bdeefd1d55b55e6e9b8ace714c9b100 gcc/testsuite/gcc.target/powerpc/paired-2.c
@@ -34842,22 +35252,22 @@ a7985ec42357ffb9cc4e1651d5ad8828 gcc/testsuite/gcc.target/powerpc/ppc-round.c
01aaaef3cb8cee0f105c2e9489dc423d gcc/testsuite/gcc.target/powerpc/ppc-sdata-1.c
860fdd35425c1e9e3cd0af60d01d2ed4 gcc/testsuite/gcc.target/powerpc/ppc-sdata-2.c
74c8a87249145d84fb45eaaaee7aeddf gcc/testsuite/gcc.target/powerpc/ppc-spe.c
-2a83a8e04d88e2928783f0d1382fd50d gcc/testsuite/gcc.target/powerpc/ppc-spe64-1.c
+87e474f57be9adad2f6d0a89328b39c3 gcc/testsuite/gcc.target/powerpc/ppc-spe64-1.c
031e121f3288d78b35a626363fbb6306 gcc/testsuite/gcc.target/powerpc/ppc-stackalign-1.c
347db92de42c68a0e17367b289aaa20b gcc/testsuite/gcc.target/powerpc/ppc-stfiwx.c
81c1df8da4df683e063ca0743cfcfc1f gcc/testsuite/gcc.target/powerpc/ppc-switch-1.c
80ddd196c8c4b45fce295d81353874bb gcc/testsuite/gcc.target/powerpc/ppc-switch-2.c
-f347cd12cf2998712ad160ac98203cbf gcc/testsuite/gcc.target/powerpc/ppc-target-1.c
-4220f28d444c13c6c0b56bac36960f21 gcc/testsuite/gcc.target/powerpc/ppc-target-2.c
+96d8267c29fbbcea500ec303cbabecd1 gcc/testsuite/gcc.target/powerpc/ppc-target-1.c
+306c276fc328bd907baf2bf1b3ed3a00 gcc/testsuite/gcc.target/powerpc/ppc-target-2.c
741149be637de8fbf4f292952df16869 gcc/testsuite/gcc.target/powerpc/ppc-target-3.c
e5872c867ef1c828f9bd8ee28798f171 gcc/testsuite/gcc.target/powerpc/ppc-target-4.c
794d6ffba4bc46e9f1b8804afb79773a gcc/testsuite/gcc.target/powerpc/ppc-vector-memcpy.c
5db736e31fb1525a120292a2a003cbfc gcc/testsuite/gcc.target/powerpc/ppc-vector-memset.c
439d519fb615bf119d2ce3143879ac5a gcc/testsuite/gcc.target/powerpc/ppc32-abi-dfp-1.c
-d9f872ef53ae895ace7fe2b4b26a2c3e gcc/testsuite/gcc.target/powerpc/ppc64-abi-1.c
-2646b278fc96c8c2865ddb4637fbbd3f gcc/testsuite/gcc.target/powerpc/ppc64-abi-2.c
+ea928f82db66f8087c3b2bc5bf17493f gcc/testsuite/gcc.target/powerpc/ppc64-abi-1.c
+6110d18cdce0c7e9521e3f5d93353ab1 gcc/testsuite/gcc.target/powerpc/ppc64-abi-2.c
561207b57149870f661ea7f3995e39a1 gcc/testsuite/gcc.target/powerpc/ppc64-abi-3.c
-c463b17a551ecd2bd47f208c576e5463 gcc/testsuite/gcc.target/powerpc/ppc64-abi-dfp-1.c
+4e4f315f2cc11584508b792dc13300b7 gcc/testsuite/gcc.target/powerpc/ppc64-abi-dfp-1.c
e167b81f706a8ed097d5c823ebf01368 gcc/testsuite/gcc.target/powerpc/ppc64-double-1.c
322275a6e18c464401bb8e7d050b7539 gcc/testsuite/gcc.target/powerpc/ppc64-toc.c
73048daed2a572de6875d8c8bc13c736 gcc/testsuite/gcc.target/powerpc/ppu-intrinsics.c
@@ -34876,8 +35286,8 @@ e183225a8b1a53401796864308b33359 gcc/testsuite/gcc.target/powerpc/pr37168.c
10a4dfe7b6545ed5cd448dc9a60c7228 gcc/testsuite/gcc.target/powerpc/pr39457.c
e9d41c3323b6899f8203c67b2963ca5b gcc/testsuite/gcc.target/powerpc/pr39902-2.c
22e940b76d5cf6790c8617b43e339e66 gcc/testsuite/gcc.target/powerpc/pr41175.c
-aaf8936a4be766bdcb02ce0ef54da466 gcc/testsuite/gcc.target/powerpc/pr42747.c
-9770efc5bea33fe124132a7ebc0a140f gcc/testsuite/gcc.target/powerpc/pr43154.c
+dfd050f64f2d0f562b0fb663a019910b gcc/testsuite/gcc.target/powerpc/pr42747.c
+e3798dbaaa10f5be21cb75beeee6034b gcc/testsuite/gcc.target/powerpc/pr43154.c
6297b7fbdfb37ede83db8e801f0c1267 gcc/testsuite/gcc.target/powerpc/pr46728-1.c
bd6f936a54ce6b21c8b445e1e4078770 gcc/testsuite/gcc.target/powerpc/pr46728-10.c
06534652fd87b9b8b9322193f6215efb gcc/testsuite/gcc.target/powerpc/pr46728-11.c
@@ -34891,7 +35301,7 @@ a29766cc5f98866ea21c9ca1ebabc556 gcc/testsuite/gcc.target/powerpc/pr46728-3.c
6e48bb052ee0a9a3adfb65d0f4ceda2f gcc/testsuite/gcc.target/powerpc/pr46728-5.c
578c64c87b74b5b2f698747ecffd19c0 gcc/testsuite/gcc.target/powerpc/pr46728-7.c
d776e75164beada31b39ff00852a1668 gcc/testsuite/gcc.target/powerpc/pr46728-8.c
-1d5538e4ebad5939eb87802b598e86c7 gcc/testsuite/gcc.target/powerpc/pr47197.c
+09542fc0756c51e091818e0d1a7a05b5 gcc/testsuite/gcc.target/powerpc/pr47197.c
b89c69857fcc2ecbf3fe2ed9bc723472 gcc/testsuite/gcc.target/powerpc/pr47251.c
f0da9e2cf992d7b349c97998a9fb16ba gcc/testsuite/gcc.target/powerpc/pr47755-2.c
3252999c1817a292ef90139c498492a4 gcc/testsuite/gcc.target/powerpc/pr47755.c
@@ -34901,7 +35311,7 @@ d281613e1e3183970ca629642eac35c1 gcc/testsuite/gcc.target/powerpc/pr48053-2.c
67a6b7deb18c0cdc240eb1b34531c642 gcc/testsuite/gcc.target/powerpc/pr48053-3.c
b39bd7f66428e1d65fb822c595109da1 gcc/testsuite/gcc.target/powerpc/pr48192.c
1714902762f3a1e37643704e146d2438 gcc/testsuite/gcc.target/powerpc/pr48226.c
-c319edf68b724a2d7866e924e43caa35 gcc/testsuite/gcc.target/powerpc/pr48258-1.c
+5f9d9d325814b085fbb1904bb6a83301 gcc/testsuite/gcc.target/powerpc/pr48258-1.c
7112e0d05b31da216eac3bcea7958dab gcc/testsuite/gcc.target/powerpc/pr48258-2.c
b58c990aefcc9e7a51cc889c7dd3e52d gcc/testsuite/gcc.target/powerpc/pr48857.c
286494173697a5376e920b96a534ab98 gcc/testsuite/gcc.target/powerpc/pr51623.c
@@ -34915,11 +35325,22 @@ babf211c969ecb6f6cedf08f5ee9bae2 gcc/testsuite/gcc.target/powerpc/pr54240.c
e4531bd522b146b22bdbf991fc3d207e gcc/testsuite/gcc.target/powerpc/pr56256.c
0a433ea1fffe47d0b355ab58f5d7de35 gcc/testsuite/gcc.target/powerpc/pr56605.c
39b7cb95be459b75bf996ea98e8ffc39 gcc/testsuite/gcc.target/powerpc/pr57150.c
-f484e2a76013a8abf2f1634d33554af5 gcc/testsuite/gcc.target/powerpc/recip-1.c
+82767bd22c46af03e41c7caab2ab6e57 gcc/testsuite/gcc.target/powerpc/pr57744.c
+ee9854d572aa8624c99d5d37aa196fce gcc/testsuite/gcc.target/powerpc/pr57949-1.c
+a27ea092a6201b46e01e5d8c07d8b829 gcc/testsuite/gcc.target/powerpc/pr57949-2.c
+d58a248fbbaa40f8533b7dd68594b12c gcc/testsuite/gcc.target/powerpc/pr58330.c
+5efa595fd58e3d3244c4273f4e1dd611 gcc/testsuite/gcc.target/powerpc/pr58673-1.c
+f5f675be87d7c73915dffd6f9f37f269 gcc/testsuite/gcc.target/powerpc/pr58673-2.c
+b73d20864edfc4b905ca07a254140076 gcc/testsuite/gcc.target/powerpc/pr59054.c
+70e395f580930213d5cbd9e97ec91f7f gcc/testsuite/gcc.target/powerpc/pr60137.c
+18d594301e79cf9932c8ad49c33828ac gcc/testsuite/gcc.target/powerpc/pr60203.c
+73ae1ef8995476aa6b62eea67f6f58dd gcc/testsuite/gcc.target/powerpc/pr60735.c
+06c624c2b437fc5b9f805dc2231a75b6 gcc/testsuite/gcc.target/powerpc/quad-atomic.c
+6e15a41526f5cb59817b7a5541452615 gcc/testsuite/gcc.target/powerpc/recip-1.c
6f035f512a3f0d6917409f569174ccea gcc/testsuite/gcc.target/powerpc/recip-2.c
-19c27f9d2a9c26ded91356055b0cd01f gcc/testsuite/gcc.target/powerpc/recip-3.c
-4cca18921a89fc396a94b3fcdf703c90 gcc/testsuite/gcc.target/powerpc/recip-4.c
-e3d397db241f0cd66e18caac8c19510a gcc/testsuite/gcc.target/powerpc/recip-5.c
+daf2515f79b48e392104d691894d6afb gcc/testsuite/gcc.target/powerpc/recip-3.c
+34ce9a9fa67a3608bd18b8f7e41a3b59 gcc/testsuite/gcc.target/powerpc/recip-4.c
+ec4c79d74d863c5f2ccc84f93f94e0da gcc/testsuite/gcc.target/powerpc/recip-5.c
85ec65f103d49c82f47a67bfdfc7a344 gcc/testsuite/gcc.target/powerpc/recip-6.c
1ad6a5b35cebaf81c5ae1d7e83c7bfeb gcc/testsuite/gcc.target/powerpc/recip-7.c
3ecb9c6e95e064fa4035cf0ca24ef4f0 gcc/testsuite/gcc.target/powerpc/recip-test.h
@@ -34930,7 +35351,10 @@ bf385d7310a8dab90ee44f86832aa03b gcc/testsuite/gcc.target/powerpc/rs6000-fpint-
9d573583f65f14f71c9c7e9e2b9a3264 gcc/testsuite/gcc.target/powerpc/rs6000-fpint.c
afd35ba530c1198a75e9e1a79650add6 gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-1.c
7aacc521251d44cf2fa3a75a564c4270 gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-2.c
+b21c33d525f0c97602d4a2348994de36 gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c
2353f120f6dd3603babf8110a9b967a1 gcc/testsuite/gcc.target/powerpc/savres.c
+2539b092ad165fb25e4507b7c69eca37 gcc/testsuite/gcc.target/powerpc/sd-pwr6.c
+e344fdd9d6dfea3f3e501483f18d2b53 gcc/testsuite/gcc.target/powerpc/sd-vsx.c
89537cc7476c27c7c10b811da61def34 gcc/testsuite/gcc.target/powerpc/spe-small-data-1.c
9d04892083c467f0ebf1fc75e043d6d8 gcc/testsuite/gcc.target/powerpc/spe-small-data-2.c
5621f40c865fca710b0c765df76942f6 gcc/testsuite/gcc.target/powerpc/spe-unwind-1.c
@@ -34938,16 +35362,19 @@ caf83f2b272138041945d99cf818ff06 gcc/testsuite/gcc.target/powerpc/spe-vector-me
aefbc9c117b311a9394883e9c890efb9 gcc/testsuite/gcc.target/powerpc/spe-vector-memset.c
32bb5e201dd78c548aed0cdf044779ec gcc/testsuite/gcc.target/powerpc/spe1.c
c9be7e0cc9ba390460928b1de506fa70 gcc/testsuite/gcc.target/powerpc/stabs-attrib-vect-darwin.c
-5fcf96a91171b11ecf5a8a4678a2bb9e gcc/testsuite/gcc.target/powerpc/tfmode_off.c
-b45257a2f22a9bbacc52f0c33eefebac gcc/testsuite/gcc.target/powerpc/timode_off.c
+d032ed8cc3859ce1a17c9d90fc292f26 gcc/testsuite/gcc.target/powerpc/tfmode_off.c
+c2edbb1afba546ea3ac8a5efcaca9c38 gcc/testsuite/gcc.target/powerpc/ti_math1.c
+c3d0d51284479d220a6166a0f362536c gcc/testsuite/gcc.target/powerpc/ti_math2.c
+e8cdd476c18884428cf136ed2c4548b2 gcc/testsuite/gcc.target/powerpc/timode_off.c
2d7ba7687ab5e578e54145507a734e92 gcc/testsuite/gcc.target/powerpc/vsx-builtin-1.c
0126618c8adf18da2ca783d2a0e48645 gcc/testsuite/gcc.target/powerpc/vsx-builtin-2.c
-7f9cd6ac0ff7150376d19613607cd09f gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c
+e70c4bc36bee17a0de0fe201d678e9a2 gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c
57fc3e933434b1e92ca3fef15d343dc5 gcc/testsuite/gcc.target/powerpc/vsx-builtin-4.c
c8452f11fe0ec83344a4b66dd6233899 gcc/testsuite/gcc.target/powerpc/vsx-builtin-5.c
81e53b09bdc627407a08d999ca632e3d gcc/testsuite/gcc.target/powerpc/vsx-builtin-6.c
1d9ec8a5dc8e8e7e6408117fba81674a gcc/testsuite/gcc.target/powerpc/vsx-builtin-7.c
63e8203dc85e49fc45c96ef2004091b1 gcc/testsuite/gcc.target/powerpc/vsx-builtin-8.c
+ca87d293ba216a3e6da78db6ba1c2d3c gcc/testsuite/gcc.target/powerpc/vsx-float0.c
ffc08ae6d1b94448252a8f8ad0b83c21 gcc/testsuite/gcc.target/powerpc/vsx-mass-1.c
615f7fbdd9588002f8ad27098ed40b53 gcc/testsuite/gcc.target/powerpc/vsx-sfminmax.c
b0c1d7dea1b59b73016c5b62e9c82ff6 gcc/testsuite/gcc.target/powerpc/vsx-vector-1.c
@@ -34988,6 +35415,33 @@ c975117f4dad5f7d006165a64d22ff94 gcc/testsuite/gcc.target/s390/20050824-1.c
d69a98eeb9d370fcef146a6f7778c59d gcc/testsuite/gcc.target/s390/addr-constraints-1.c
9b770970bea6710409e92c9a84d3a5d3 gcc/testsuite/gcc.target/s390/frame-addr1.c
c7958dc9fa4da0d50fe09b45a6790ac0 gcc/testsuite/gcc.target/s390/frame-addr2.c
+0ee142767c93780f708bd0c14f04edc1 gcc/testsuite/gcc.target/s390/hotpatch-1.c
+340fdd6a0f9afd4bad921a3134a2532d gcc/testsuite/gcc.target/s390/hotpatch-10.c
+65db4e9f44d749aa516535ef9d7fc89a gcc/testsuite/gcc.target/s390/hotpatch-11.c
+a3abddd5fc720bccfb704b72bf7d41fb gcc/testsuite/gcc.target/s390/hotpatch-12.c
+6311263c8c0827fcb4896e85267ab4ef gcc/testsuite/gcc.target/s390/hotpatch-2.c
+34ba5e1ad14e5eb64e5383991e3def5d gcc/testsuite/gcc.target/s390/hotpatch-3.c
+58c69e9cb282ca92237917dd951dd63b gcc/testsuite/gcc.target/s390/hotpatch-4.c
+0f122511639a7c9b78f63958469d5b75 gcc/testsuite/gcc.target/s390/hotpatch-5.c
+f8237f714cbed436222589a20071e43a gcc/testsuite/gcc.target/s390/hotpatch-6.c
+4f822e9d463ff7c91e7c5a7cf8559289 gcc/testsuite/gcc.target/s390/hotpatch-7.c
+2f0b5dc42587a7cc2c71d0c109315389 gcc/testsuite/gcc.target/s390/hotpatch-8.c
+3a2b4ef525af58764ce8b4f8627682e0 gcc/testsuite/gcc.target/s390/hotpatch-9.c
+0ba19bb8f20ddf711e2bcabde826dd99 gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c
+bbde2dde58a101fdc1e729beb219bebb gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c
+13d5fa3aa355b1060951eaa54d0fed40 gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c
+d7413f00fcb5ac3bc5eed81afdf59493 gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c
+ea24f35cf195b9b92221acaeb87306ab gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c
+02eceadeb241a5918a6a25abd5a37bd4 gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c
+b2c42b3d45a991bfe88ec9cd99bf9631 gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c
+674df152ae9c3b91203b32189b562281 gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c
+5802a1b6bd3c0199af5a31afaf0f3769 gcc/testsuite/gcc.target/s390/htm-builtins-1.c
+f6e2124bdb58273a0f7f5295b25032c0 gcc/testsuite/gcc.target/s390/htm-builtins-2.c
+4178b3de1bcb9044aedd4c8ae7af272c gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c
+e66bccb215526105b9b8a2dc1d3a879b gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c
+ab0f83b02eabb2022df1ceee50ef4733 gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c
+b3dd05db76a00a764bd5968152b2ef72 gcc/testsuite/gcc.target/s390/htm-nofloat-1.c
+81eabdfd43ce0edc626c27f72b8cbfed gcc/testsuite/gcc.target/s390/htm-nofloat-compile-1.c
765307a040de72f2f4376b7068d68018 gcc/testsuite/gcc.target/s390/pr20927.c
85f31fb9b4b15529205376d3f6fa385c gcc/testsuite/gcc.target/s390/pr24624.c
7adacbd67601dc0845e556e5632cd718 gcc/testsuite/gcc.target/s390/pr27661.c
@@ -34996,7 +35450,7 @@ e9e2200b0b1b2ee975a929b593283ffc gcc/testsuite/gcc.target/s390/pr36822.c
4eacd924b86307098c69750577bcbec7 gcc/testsuite/gcc.target/s390/pr55718.c
f9de3c4e9d9e8c3a707e1f51e48901b6 gcc/testsuite/gcc.target/s390/return-addr1.c
5368e8759352b798ae1db6bc79919aa2 gcc/testsuite/gcc.target/s390/return-addr2.c
-f9c3fa4676b4078dc5fbb352f5d4e667 gcc/testsuite/gcc.target/s390/s390.exp
+5e59ba5062faec7a80957b3426c5d055 gcc/testsuite/gcc.target/s390/s390.exp
3a9ba61f8844739d1b5989c7c7e2b6c1 gcc/testsuite/gcc.target/s390/stackcheck1.c
201a36e4a6548d10d83352d305b4284a gcc/testsuite/gcc.target/s390/tf_to_di-1.c
c629dd4f025239ae6c8d4b84024b13aa gcc/testsuite/gcc.target/sh/20080410-1.c
@@ -35056,7 +35510,7 @@ fba2d2f922bbeae4a9fb1749ffd0e556 gcc/testsuite/gcc.target/sh/pr51244-15.c
1c3ebc57cc2600caecf5efa24b33d221 gcc/testsuite/gcc.target/sh/pr51244-16.c
e535de1cf3d49517b1ffec03714d9362 gcc/testsuite/gcc.target/sh/pr51244-17.c
d697aebf5736b749a8239659712ca472 gcc/testsuite/gcc.target/sh/pr51244-18.c
-a990965827a2c4dc3cbcc9d402955743 gcc/testsuite/gcc.target/sh/pr51244-19.c
+e223e03dfcce836819cf4f47fc59ea81 gcc/testsuite/gcc.target/sh/pr51244-19.c
ae263cd913f02671666d3925b6f14e39 gcc/testsuite/gcc.target/sh/pr51244-2.c
4fb0615ff64a85e357d80aa27072c33d gcc/testsuite/gcc.target/sh/pr51244-3.c
37136430373d445a7da5f987ebbdc4e9 gcc/testsuite/gcc.target/sh/pr51244-4.c
@@ -35076,7 +35530,7 @@ fc2ab140ac96ec4ebc768bf81f55145d gcc/testsuite/gcc.target/sh/pr53511-1.c
39b2d3869d04e9a8afae5e264fce8ea8 gcc/testsuite/gcc.target/sh/pr53988.c
ed9b4d4225d6045444f58e42732ac712 gcc/testsuite/gcc.target/sh/pr54089-1.c
23e4c144ff9596b881be75a380bf1b54 gcc/testsuite/gcc.target/sh/pr54089-2.c
-d5c748e5fca31b7a8b9fd94a5166a252 gcc/testsuite/gcc.target/sh/pr54089-3.c
+35305b239d414bdf419e4b26f5577ab5 gcc/testsuite/gcc.target/sh/pr54089-3.c
8fb7ce3ac2613350bad3fe4ceeb2fee6 gcc/testsuite/gcc.target/sh/pr54089-4.c
4ca1701c1c8d0a48eccbb2418322f77f gcc/testsuite/gcc.target/sh/pr54089-5.c
21eb80c8dc992a8fb54d047d23b9cf07 gcc/testsuite/gcc.target/sh/pr54089-6.c
@@ -35097,6 +35551,8 @@ e1788cb7aa47c342b2e1ed6ec73e74c5 gcc/testsuite/gcc.target/sh/pr54760-2.c
dc40fea68b996025d78b526785990191 gcc/testsuite/gcc.target/sh/pr54760-4.c
fa8694eca781a3a2f428af0684f2f761 gcc/testsuite/gcc.target/sh/pr55146.c
a5d4f7ecd45ee5d8031bebcf7653f0ef gcc/testsuite/gcc.target/sh/pr55160.c
+8f8600fe8379fd8b084dff634b8b031e gcc/testsuite/gcc.target/sh/pr56547-1.c
+f4720ab3966dfdcf8c1359c7654fb6bb gcc/testsuite/gcc.target/sh/pr56547-2.c
918a31e179bcdcb5da1ea39bacfe2e35 gcc/testsuite/gcc.target/sh/pr57108.c
200f195dec2d3ee29fa0f5e651489635 gcc/testsuite/gcc.target/sh/prefetch.c
4e2e0d723045d4e05e55616734e675f5 gcc/testsuite/gcc.target/sh/rte-delay-slot.c
@@ -35127,6 +35583,7 @@ ceda3c3fd00f2b2bbfd3c515f03ee15f gcc/testsuite/gcc.target/sh/sh4a-memmovua.c
e8e43b3795c01cddbff73881d71d90b4 gcc/testsuite/gcc.target/sh/sp-switch.c
9dd6b3da150e76dc3b24c73088608fef gcc/testsuite/gcc.target/sh/struct-arg-dw2.c
7d0b71bf88e98eb5d7bbc8cba1e04bcb gcc/testsuite/gcc.target/sh/torture/pr34777.c
+33d7712339109684dfd7a3d41a731f2d gcc/testsuite/gcc.target/sh/torture/pr58314.c
0b6d1226a0f1116b7502e3bb2cc07999 gcc/testsuite/gcc.target/sh/torture/sh-torture.exp
5d678d17dea97c03c156e8eac1cbdb05 gcc/testsuite/gcc.target/sparc/20001013-1.c
d0d646cfe216eb6e3c43fb56cb548ea0 gcc/testsuite/gcc.target/sparc/20001101-1.c
@@ -35317,22 +35774,22 @@ ff732b27c9bb0c5b99ccccb31d12d3ea gcc/testsuite/gcc.target/x86_64/abi/avx/test_p
d02989c16f0d1cd0951fe435483c550e gcc/testsuite/gcc.target/x86_64/abi/avx/test_passing_unions.c
20fc692838521190fafccf16cce89482 gcc/testsuite/gcc.target/x86_64/abi/callabi/callabi.exp
b52212e25b4fe43a1bda56b50d2cc914 gcc/testsuite/gcc.target/x86_64/abi/callabi/callabi.h
-bd08629b87a61bb1d8bfca958f60b18f gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c
-9096847b25b39389a2e9b676185d096f gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c
-f285001fd760bb0206c1906b50f73178 gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c
-3c0cb6f808f88c5bedc88d689c16a120 gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c
-239326402b381d1c35048c764b531a4c gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c
-d0150a0667dab730bd24380792e64840 gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c
-ce0be853686967c7cfa86c7155e12fbe gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c
-928dfb1915c1b87c30e1ca8885e056ad gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c
-96b2de6d77d0802911b32936e89f5656 gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c
-ba43d0510f74e20a8935d7dc1ff269bd gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c
-d2a6ba025a5971544a32ecf48e921154 gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c
-6b797d88a9192322f8780b880edf5b5a gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c
-665ff353fefb21061538fa0063ed2d79 gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c
-992babb3c5ead5b192c6529d76a4f77f gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c
-cf8e652f9c0236a84e35698b9331ad41 gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c
-605352aecb686bd56693ec26be1a96ca gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c
+fc248ef3133a3ca9a3703d90b71facc6 gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c
+14252515c7db45468bb0d595f7f35533 gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c
+bf9625ebc9705fa5db6ee3fe57f799f6 gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c
+4aaf2e837c6569916e1ab83e57ff11e4 gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c
+6cb133e3aec8323bc0956a7fac2745cb gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c
+2060f8f935b5f4a10cd993867a85d9e0 gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c
+75f54a7e57d8a432e50fa00e40618c72 gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c
+d677933510f88894b93f58ec1d236e1e gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c
+15359ba49666f1add69a62442dab54a1 gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c
+04bac5c7ace2dc11b20c2c70c15e5fe9 gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c
+2652f0914f434ad2331f20ba6e08d231 gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c
+0c5caae5837e1525283117ca10b73d7e gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c
+69481afdc0a980d40ebc1b3087aa82a0 gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c
+7ef12bd0c9db6964c32369d40d157d97 gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c
+123bfddf14aedf094df0e678132c644e gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c
+02bf17b367380380818fce71ffd67c59 gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c
002286d968abb2e5012ebb83dd44784d gcc/testsuite/gcc.target/x86_64/abi/defines.h
ced3e7fc25757fe027f4eacc904e6881 gcc/testsuite/gcc.target/x86_64/abi/macros.h
df350cc8fc42fcbfb44edc088765d60a gcc/testsuite/gcc.target/x86_64/abi/test_3_element_struct_and_unions.c
@@ -35756,6 +36213,7 @@ d2e2db611a120ae0c8ccc46d77f60b4f gcc/testsuite/gfortran.dg/allocate_alloc_opt_3
7ad72f1f76221dbdec0ab077ae3b8dd8 gcc/testsuite/gfortran.dg/allocate_char_star_scalar_1.f90
c8af6a632c789d3dc3fb0b76448852dd gcc/testsuite/gfortran.dg/allocate_class_1.f90
5d06d590dfc06d981d4fd70c9246eb64 gcc/testsuite/gfortran.dg/allocate_class_2.f90
+3d127290e55d43d0800d42e2b2c9dbae gcc/testsuite/gfortran.dg/allocate_class_3.f90
29eaba72c86bd46d593da70b40f81617 gcc/testsuite/gfortran.dg/allocate_deferred_char_scalar_1.f03
99eb73c31ab5aa2a657823367814f1c5 gcc/testsuite/gfortran.dg/allocate_deferred_char_scalar_2.f03
ff2e982bde22ac51a61fd6cb3b87bbf5 gcc/testsuite/gfortran.dg/allocate_derived_1.f90
@@ -35926,6 +36384,7 @@ e91eb75619ee2c34111f64e6f824abb3 gcc/testsuite/gfortran.dg/array_temporaries_3.
bab9a93e2fbce2377987fb7f67e82a7a gcc/testsuite/gfortran.dg/arrayio_10.f90
4d48a42bc964040c164c122d032b8664 gcc/testsuite/gfortran.dg/arrayio_11.f90
e101afd93c6605938c295b10be41823a gcc/testsuite/gfortran.dg/arrayio_12.f90
+8eeabeddf3eeabedb9644e95525e98f3 gcc/testsuite/gfortran.dg/arrayio_13.f90
46396e4a37a64cec9c047113bad6eadc gcc/testsuite/gfortran.dg/arrayio_2.f90
464fdf5b0f515ce504fe0f8e2ee07c6b gcc/testsuite/gfortran.dg/arrayio_3.f90
4042242806976787cc2719282ff81591 gcc/testsuite/gfortran.dg/arrayio_4.f90
@@ -36640,6 +37099,7 @@ fc2c9ce66c34cedb05c7fc4d41cb66ef gcc/testsuite/gfortran.dg/constant_substring.f
7e10a175b99ade82933e15c4963326de gcc/testsuite/gfortran.dg/constructor_6.f90
56b724accc20820757e0cf32dec06d6d gcc/testsuite/gfortran.dg/constructor_7.f90
8beaf054e69adb46d0eb3735e8ee9014 gcc/testsuite/gfortran.dg/constructor_8.f90
+22f819c932645c45520e6ca87cb08bd7 gcc/testsuite/gfortran.dg/constructor_9.f90
c726108aa1cbfbc0c1b801b6ba5ab484 gcc/testsuite/gfortran.dg/contained_1.f90
556af1b29302148741811577d3a8de25 gcc/testsuite/gfortran.dg/contained_3.f90
28bf1a74da5c8d8e9638411e2d180e30 gcc/testsuite/gfortran.dg/contained_equivalence_1.f90
@@ -36741,6 +37201,7 @@ ba730e52e3b48dd9a54bf3a8e2b06575 gcc/testsuite/gfortran.dg/default_initializati
e1561f7f059e5bb075e02a82ec852507 gcc/testsuite/gfortran.dg/default_initialization_4.f90
81adc289982ce79d4ea9126f11c26606 gcc/testsuite/gfortran.dg/default_initialization_5.f90
f7e099d81831ba1513789eae564fc258 gcc/testsuite/gfortran.dg/default_initialization_6.f90
+08911b04c850915fc3643836f57a0d11 gcc/testsuite/gfortran.dg/default_initialization_7.f90
bbef424c1a5a9f9e68f1fe7d83c65947 gcc/testsuite/gfortran.dg/default_numeric_type_1.f90
76039d665e1ef71cfe2721af0afa187b gcc/testsuite/gfortran.dg/deferred_type_param_1.f90
8c2b4ff96da50e855afb293e0f216c76 gcc/testsuite/gfortran.dg/deferred_type_param_2.f90
@@ -36752,10 +37213,16 @@ e189b6467dfc0f9dfe164cf2b5324f07 gcc/testsuite/gfortran.dg/deferred_type_param_
c36fd31b877966c80efb601cae605f16 gcc/testsuite/gfortran.dg/deferred_type_proc_pointer_1.f90
9a7f5816052bca62e6c6a9777872b7b0 gcc/testsuite/gfortran.dg/deferred_type_proc_pointer_2.f90
ba35c559ce8aa2c85326f745d0bf31d8 gcc/testsuite/gfortran.dg/defined_assignment_1.f90
+6a042915ff51b96280e122e12326eaa4 gcc/testsuite/gfortran.dg/defined_assignment_10.f90
+0ee43b837e0fe5d5783a1adc88172ac7 gcc/testsuite/gfortran.dg/defined_assignment_11.f90
7e1ecee5b2a91e4fec24b46b4c781369 gcc/testsuite/gfortran.dg/defined_assignment_2.f90
03d27ec6d8bbeb1c45e94ec025cdb446 gcc/testsuite/gfortran.dg/defined_assignment_3.f90
a12e8334fef336658cec44241ce5d959 gcc/testsuite/gfortran.dg/defined_assignment_4.f90
3d6b5b63a7ce69739060abcd8ba58827 gcc/testsuite/gfortran.dg/defined_assignment_5.f90
+b6d3fcdac45694e2e7c717b1f9afc657 gcc/testsuite/gfortran.dg/defined_assignment_6.f90
+f01ec9fce25aab90738c146ac0e5ab68 gcc/testsuite/gfortran.dg/defined_assignment_7.f90
+37c86f326c8695aba776bcd32f9d2d30 gcc/testsuite/gfortran.dg/defined_assignment_8.f90
+6bb99d80deb71a9c9ac1f00e4f613af6 gcc/testsuite/gfortran.dg/defined_assignment_9.f90
16d6d3eb6a74eeb6ca2f7fceb2fb2c93 gcc/testsuite/gfortran.dg/defined_operators_1.f90
2d5af451897a230f5c4e75f539402003 gcc/testsuite/gfortran.dg/deftype_1.f90
f1315c405d72b632bf1260f77c98f35b gcc/testsuite/gfortran.dg/dependency_1.f90
@@ -36829,6 +37296,7 @@ a465c845b83386e64f2aeccb48b86e62 gcc/testsuite/gfortran.dg/derived_constructor_
14becf7c5ac1f3826b69f362e23e2804 gcc/testsuite/gfortran.dg/derived_constructor_comps_2.f90
cb44893d94f03877d3d146a8c1da8bd8 gcc/testsuite/gfortran.dg/derived_constructor_comps_3.f90
4c9fd221f8c449b4ce8004984aea7749 gcc/testsuite/gfortran.dg/derived_constructor_comps_4.f90
+beea5da72f98be108939b606fa5f03b4 gcc/testsuite/gfortran.dg/derived_external_function_1.f90
e08a65ae23ffa55d956b33c09e1c4cb8 gcc/testsuite/gfortran.dg/derived_function_interface_1.f90
a466fd6c42d7959249200b6a5f8d0976 gcc/testsuite/gfortran.dg/derived_init_1.f90
50df0f0ca74b6d1ce1bf210729d0571f gcc/testsuite/gfortran.dg/derived_init_2.f90
@@ -36882,6 +37350,7 @@ e26c1f7f5f5bf58bc20b92b7f15df396 gcc/testsuite/gfortran.dg/dollar_edit_descript
bee33f45b2081d3f23f2f3b508893078 gcc/testsuite/gfortran.dg/dollar_sym_2.f90
81c02ab79001889d92651612f04f4029 gcc/testsuite/gfortran.dg/dos_eol.f
47318dcb4acfe6f2932913c638511078 gcc/testsuite/gfortran.dg/dot_product_1.f03
+b18ea280a91df3b2aefc263a51f2897e gcc/testsuite/gfortran.dg/dot_product_2.f90
28c9ee70843b7ef41ef74327bc08fb12 gcc/testsuite/gfortran.dg/double_complex_1.f90
9ce87f920f9f5536194a351e33dbbeb6 gcc/testsuite/gfortran.dg/dshift_1.F90
187310d2d84779c767a852f19eacaaad gcc/testsuite/gfortran.dg/dshift_2.F90
@@ -36907,6 +37376,7 @@ f840f866ed45ad34dfb9ad0c63e0ba6a gcc/testsuite/gfortran.dg/duplicate_type_3.f90
ae959c50bdd88ef37f7efc1db05cf1b7 gcc/testsuite/gfortran.dg/dynamic_dispatch_1.f03
964e888cbcf20e4e255bf6d97cf04045 gcc/testsuite/gfortran.dg/dynamic_dispatch_10.f03
ebe9e777390b8a381a0704e35db1889f gcc/testsuite/gfortran.dg/dynamic_dispatch_11.f03
+8303b52256c192f599ba7d662c2bd381 gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90
752283b60ddff5b798dae1c4aa15962d gcc/testsuite/gfortran.dg/dynamic_dispatch_2.f03
077e59854f8f5d4156924d398020136c gcc/testsuite/gfortran.dg/dynamic_dispatch_3.f03
de13be162f9bffc65445ddbfe2a4a19e gcc/testsuite/gfortran.dg/dynamic_dispatch_4.f03
@@ -36949,6 +37419,7 @@ ead98760a8d86055f509d45731be5048 gcc/testsuite/gfortran.dg/elemental_subroutine
09a12005831f85730627c01a6d1e9024 gcc/testsuite/gfortran.dg/elemental_subroutine_5.f90
c78a81914b4d147d96ed3ec46cd15a54 gcc/testsuite/gfortran.dg/elemental_subroutine_6.f90
ac19ee1e489c101e40d62d762c9465cc gcc/testsuite/gfortran.dg/elemental_subroutine_7.f90
+c468b3ffd72a4bd31e3ea0da9685d6e4 gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90
ef7a86fef107a422a6e67ac0cde11d12 gcc/testsuite/gfortran.dg/empty_derived_type.f90
f63076ef26944496b1c43542ea168c73 gcc/testsuite/gfortran.dg/empty_format_1.f90
f001da63348b64d8eb6a4bac1d826392 gcc/testsuite/gfortran.dg/empty_function_1.f90
@@ -37058,6 +37529,7 @@ a0b74fda00f9c5255be3c14e5cade4fb gcc/testsuite/gfortran.dg/exponent_2.f90
b7e2413270f6481d88fa6592dfc294f5 gcc/testsuite/gfortran.dg/extends_12.f03
d4e27af6507d9c4c9757a560f61cf4b0 gcc/testsuite/gfortran.dg/extends_13.f03
e08369be0f2ed04f385f7a380065fa7c gcc/testsuite/gfortran.dg/extends_14.f03
+f6c55ba9fac9976bcf395b70165dadb9 gcc/testsuite/gfortran.dg/extends_15.f90
503d76cdae7d0df9a8e89e1b079854ba gcc/testsuite/gfortran.dg/extends_2.f03
4e2e74ccab51adc96cc4338b49156069 gcc/testsuite/gfortran.dg/extends_3.f03
0ae9943aa572f1bffdc269081c0ebb26 gcc/testsuite/gfortran.dg/extends_4.f03
@@ -37113,6 +37585,7 @@ aa6b6379089423be764a395ed380bf21 gcc/testsuite/gfortran.dg/fmt_cache_1.f
e697f5c1b7f1072ed01fa9440c3ec58f gcc/testsuite/gfortran.dg/fmt_cache_2.f
fea289794657d0339a8bdd13d6de1827 gcc/testsuite/gfortran.dg/fmt_cache_3.f90
d03bfc790f803c45e2d4540b3b702989 gcc/testsuite/gfortran.dg/fmt_colon.f90
+ea64cee72baf08cf2857b164509d6b65 gcc/testsuite/gfortran.dg/fmt_en.f90
51f4c68b5c689084070ee71c915fb347 gcc/testsuite/gfortran.dg/fmt_error.f90
b404b82d240cb1d56b3fdbaced6ebf82 gcc/testsuite/gfortran.dg/fmt_error_10.f
4cc40888a17d146df1ece1cfbc9da885 gcc/testsuite/gfortran.dg/fmt_error_11.f03
@@ -37136,6 +37609,7 @@ d216b76ed81c95ec2cbca83beb2a093d gcc/testsuite/gfortran.dg/fmt_g0_3.f08
5f37b68a67573ed5b3b954e3a730f7aa gcc/testsuite/gfortran.dg/fmt_g0_4.f08
0b72a70e14402c124750e107566af599 gcc/testsuite/gfortran.dg/fmt_g0_5.f08
4cc20d4be04c2046885aac22f0d2cd9c gcc/testsuite/gfortran.dg/fmt_g0_6.f08
+86b4ecfeb8e8ca81eb695a0802f8087f gcc/testsuite/gfortran.dg/fmt_g_1.f90
1614a240091165ed607a20fdcc4af923 gcc/testsuite/gfortran.dg/fmt_huge.f90
ba8b04701489c6c9dd6281e160362171 gcc/testsuite/gfortran.dg/fmt_int_sign.f90
758a188cd6ce71e5740bef72cb68b26b gcc/testsuite/gfortran.dg/fmt_l.f90
@@ -37392,6 +37866,7 @@ c85923703b837982022aebc967285423 gcc/testsuite/gfortran.dg/generic_24.f90
85cb0fcdf57f151f8149dcce3ba18952 gcc/testsuite/gfortran.dg/generic_25.f90
5b2b787b527c6239b004c8d07910fe84 gcc/testsuite/gfortran.dg/generic_26.f90
aac30443117734b3e7052646be882d77 gcc/testsuite/gfortran.dg/generic_27.f90
+5df587bf68b379e222fd29da0a71c261 gcc/testsuite/gfortran.dg/generic_28.f90
8903ef8f818c080ee22a33c4093134b8 gcc/testsuite/gfortran.dg/generic_3.f90
d21248018105fd7ccacf9fa869f57e0a gcc/testsuite/gfortran.dg/generic_4.f90
6b638ae392f7e94c1592d0efbc053876 gcc/testsuite/gfortran.dg/generic_5.f90
@@ -37516,6 +37991,7 @@ e55a83728b52b20bf008159cae59e4b3 gcc/testsuite/gfortran.dg/gomp/pr47331.f90
f367132a9ea192e66f847909ff9856ed gcc/testsuite/gfortran.dg/gomp/pr48794.f90
f34c2982ae3dab5c27b1c82ed291a71e gcc/testsuite/gfortran.dg/gomp/pr51089.f90
e321ec3eb6a878488b42bdb5e70a1821 gcc/testsuite/gfortran.dg/gomp/pr56052.f90
+bcd9a8c5acf05494271659304f0f0a60 gcc/testsuite/gfortran.dg/gomp/pr59467.f90
4a9d10a348ccf5012c673f2637785ba6 gcc/testsuite/gfortran.dg/gomp/reduction1.f90
02484261b0434dbaf2709c34db58cd4d gcc/testsuite/gfortran.dg/gomp/reduction2.f90
8d18e99707613f2d648e3240f0ba1d76 gcc/testsuite/gfortran.dg/gomp/reduction3.f90
@@ -37605,6 +38081,7 @@ b3194ceb811f07a263b4b3018c8b7155 gcc/testsuite/gfortran.dg/graphite/pr42732.f
14ef0b0fb7468bddc8da80d525db505d gcc/testsuite/gfortran.dg/graphite/pr43349.f
cf66c78971cc0a0ccbbe06e8285499fb gcc/testsuite/gfortran.dg/graphite/pr45758.f90
c35834551693365c4a94cd2ef2b4bd6d gcc/testsuite/gfortran.dg/graphite/pr47019.f
+f993bc6aecd63bdc6b9e8b64e54b0800 gcc/testsuite/gfortran.dg/graphite/pr59817.f
daa53e999b30e1103a7ea6f3e62ecd91 gcc/testsuite/gfortran.dg/graphite/run-id-1.f
f284b8f4f2a5b32dc60a00731241ca8e gcc/testsuite/gfortran.dg/graphite/run-id-2.f90
a9d76d71bfd312f4638121eef4a5b755 gcc/testsuite/gfortran.dg/graphite/scop-1.f
@@ -37654,6 +38131,7 @@ e6c37a9def09433a6a2f8bc1d9220133 gcc/testsuite/gfortran.dg/ibits_1.f90
9f3ccb4943f5f4737bc99acb427e11b0 gcc/testsuite/gfortran.dg/ibset_1.f90
e75d952c59fd79d136d9f20ac5f9d493 gcc/testsuite/gfortran.dg/ichar_1.f90
9f00cdde2669030be42ca86f95884598 gcc/testsuite/gfortran.dg/ichar_2.f90
+b614ce421f97fb4ab6fa10f1f1c47ab0 gcc/testsuite/gfortran.dg/ichar_3.f90
d827b941652feab002a335b27a4dd9f2 gcc/testsuite/gfortran.dg/imag_1.f
ea74ac57d54861ae078dd5b164c4e692 gcc/testsuite/gfortran.dg/implicit_1.f90
b80c1e38c62d812b5a8a4f5a284dcab3 gcc/testsuite/gfortran.dg/implicit_10.f90
@@ -37673,6 +38151,7 @@ f91933b2213ae0e2eb08e9d25f71bae4 gcc/testsuite/gfortran.dg/implicit_3.f90
de6e16c026cfee9d026f5b2916db7e3e gcc/testsuite/gfortran.dg/implicit_pure_1.f90
93148e4c6a89c569a6e7498111515906 gcc/testsuite/gfortran.dg/implicit_pure_2.f90
0f9453d8638b4c0a374129226a999c57 gcc/testsuite/gfortran.dg/implicit_pure_3.f90
+ed9b46b80fba02ea5657d6ed2bf9073a gcc/testsuite/gfortran.dg/implicit_pure_4.f90
2348275de36b4052b5aaeb2ae73a6494 gcc/testsuite/gfortran.dg/implied_do_1.f90
42d282b943d10363c33bec69d3d4f846 gcc/testsuite/gfortran.dg/implied_shape_1.f08
f9528d7042bf84bf037d6e2b109272ec gcc/testsuite/gfortran.dg/implied_shape_2.f90
@@ -37713,6 +38192,7 @@ f0e645d1bc68bcf68e694c7e34810a59 gcc/testsuite/gfortran.dg/index_2.f90
279dd4fea235edaf4642b45c8b3db4b3 gcc/testsuite/gfortran.dg/init_flag_1.f90
1d1e21121359761815ffc4445de94a80 gcc/testsuite/gfortran.dg/init_flag_10.f90
5ee2bb3a5ed9a8ce90609828bcee8161 gcc/testsuite/gfortran.dg/init_flag_11.f90
+42dcb15f62f37f4b66d4674597adee68 gcc/testsuite/gfortran.dg/init_flag_12.f90
f3a235d09bce4c144233db13cafc71c2 gcc/testsuite/gfortran.dg/init_flag_2.f90
d6ec5bc83de3b5682a4df257dae96146 gcc/testsuite/gfortran.dg/init_flag_3.f90
8e49fde0fcd93481c7abf8e8b248041a gcc/testsuite/gfortran.dg/init_flag_4.f90
@@ -37755,6 +38235,7 @@ cfb8e50d4fa48db93c32f4551602f163 gcc/testsuite/gfortran.dg/inline_product_1.f90
f279c23f64da248a23ac4678746ff811 gcc/testsuite/gfortran.dg/inline_sum_2.f90
9ca8d5cd81ef49491a4220319297780e gcc/testsuite/gfortran.dg/inline_sum_3.f90
49d13efbffd28fc321f8e9af3bdc8c25 gcc/testsuite/gfortran.dg/inline_sum_4.f90
+6942e5979cd0329d46fe600174fb507a gcc/testsuite/gfortran.dg/inline_sum_5.f90
0324473511cbe15ef22bba21da72923d gcc/testsuite/gfortran.dg/inline_sum_bounds_check_1.f90
cd4289a23a1c1ceafe65b10e1489224f gcc/testsuite/gfortran.dg/inline_sum_bounds_check_2.f90
5fcb58ef448bf8ec2b277459092550bc gcc/testsuite/gfortran.dg/inline_transpose_1.f90
@@ -38014,6 +38495,7 @@ d57fac299b3332771a75171d9ddb0a97 gcc/testsuite/gfortran.dg/line_length_3.f
fc437ac99c80ded40e13df8066e49a91 gcc/testsuite/gfortran.dg/linked_list_1.f90
6b10115fba6bad4e5a0a58ba881f0ab8 gcc/testsuite/gfortran.dg/list_read_1.f90
16b03bca05a6acc43f24be44e1f2ff05 gcc/testsuite/gfortran.dg/list_read_10.f90
+20aebdb97e7740e2d38992e6981de05a gcc/testsuite/gfortran.dg/list_read_12.f90
67997f845ffceb239257b26970956c2d gcc/testsuite/gfortran.dg/list_read_2.f90
799ffeafd700d24bd3e365a8addcfa10 gcc/testsuite/gfortran.dg/list_read_3.f90
36e928b3a5b9a5d89ecebae1c130be22 gcc/testsuite/gfortran.dg/list_read_4.f90
@@ -38073,6 +38555,8 @@ e93fee21d60c4d93e4b8b8ee14b4cd29 gcc/testsuite/gfortran.dg/lto/pr45586_0.f90
b52bd2e8f8fcd514cbbe557a79033dcd gcc/testsuite/gfortran.dg/lto/pr46911_0.f
7b6783dd2b17f7588f5585ef30448552 gcc/testsuite/gfortran.dg/lto/pr47839_0.f90
f388840da10adfc224269f398590a10a gcc/testsuite/gfortran.dg/lto/pr47839_1.f90
+ccf2023ddc1b9008d1f69e1a056134bc gcc/testsuite/gfortran.dg/lto/pr60635_0.f90
+a8ba679c6307cb7e937915e91616c861 gcc/testsuite/gfortran.dg/lto/pr60635_1.c
b49070ec831f64c85f249772acd9a59f gcc/testsuite/gfortran.dg/malloc_free_1.f90
fac981decf60a31ee9a61ded4eff6076 gcc/testsuite/gfortran.dg/mapping_1.f90
47140f86bfe3a4024f59f60ac0ead444 gcc/testsuite/gfortran.dg/mapping_2.f90
@@ -38305,7 +38789,7 @@ e0d5d7f85bba8e168fd923e2a3baf213 gcc/testsuite/gfortran.dg/namelist_print_2.f
71e4cd480159723319c04bf80dfab0d2 gcc/testsuite/gfortran.dg/nan_4.f90
b4b0c78f22f11c6c53d8d59ba064c55c gcc/testsuite/gfortran.dg/nan_5.f90
005863302ec77ca9b1fb734b02887eb1 gcc/testsuite/gfortran.dg/nan_6.f90
-92b1aaf77e496c8d71531d1cdf1ce933 gcc/testsuite/gfortran.dg/nan_7.f90
+aac111856679c009c996d3b758d6a17d gcc/testsuite/gfortran.dg/nan_7.f90
867c1c3a51bff0f40bf7e40b4cc18b0f gcc/testsuite/gfortran.dg/nearest_1.f90
f1966e1c67c9ba2dfcdda16abd2ace94 gcc/testsuite/gfortran.dg/nearest_2.f90
38d9e1cb44baabfc1344cf1601a11bfd gcc/testsuite/gfortran.dg/nearest_3.f90
@@ -38356,8 +38840,8 @@ b2823ca785899e4525f0fc17a220141f gcc/testsuite/gfortran.dg/nosigned_zero_1.f90
395e8ab85b617da87692d07766c92d12 gcc/testsuite/gfortran.dg/null_2.f90
4a039c37a090768395179ad5abf300cc gcc/testsuite/gfortran.dg/null_3.f90
e5fa40276b7e0de18f35bf0ad1ffb8bc gcc/testsuite/gfortran.dg/null_4.f90
-0c444294547eb973cef8fe6e1f2a9e24 gcc/testsuite/gfortran.dg/null_5.f90
-e63bbaafb668a55aefabc30e8dc15288 gcc/testsuite/gfortran.dg/null_6.f90
+65ff08beb375c1acdb951386b5902413 gcc/testsuite/gfortran.dg/null_5.f90
+e67abf33c2578358a5d5bab3e11f00e9 gcc/testsuite/gfortran.dg/null_6.f90
4f1c65ac34bcf6b5e6d3fa579b4e5be7 gcc/testsuite/gfortran.dg/null_7.f90
fb9d6abbd9b9049c00ee6e992d1a8859 gcc/testsuite/gfortran.dg/null_actual.f90
eb6af590881f3e995fc6b2c78089f277 gcc/testsuite/gfortran.dg/nullify_1.f
@@ -38392,6 +38876,7 @@ ff989302c0eaa3dd486cbb3c28260163 gcc/testsuite/gfortran.dg/operator_7.f90
6f6725210595ae4ed04fab6690a29ead gcc/testsuite/gfortran.dg/optional_absent_1.f90
b38378f89611f4ae3fbc2816a1d98c91 gcc/testsuite/gfortran.dg/optional_absent_2.f90
ba5fab0a3379b1d0cdf3afb12ac1dd20 gcc/testsuite/gfortran.dg/optional_assumed_charlen_1.f90
+ed1f23fc4b66b1d18aca614bc2750900 gcc/testsuite/gfortran.dg/optional_class_1.f90
7fedb812261e488372bc4439b553156f gcc/testsuite/gfortran.dg/optional_dim.f90
93c5cc54a63cfe4d2742f118580c6eac gcc/testsuite/gfortran.dg/optional_dim_2.f90
9d32902c6d619726c8603ca062847f7e gcc/testsuite/gfortran.dg/optional_dim_3.f90
@@ -38661,6 +39146,7 @@ a7f1ac7ef80efe661e72cd8935b9d68f gcc/testsuite/gfortran.dg/pr49698.f90
71ab97a4b3546d48ac2035e76efb332d gcc/testsuite/gfortran.dg/pr49721-1.f
baba316baa03ee3527448735c40da508 gcc/testsuite/gfortran.dg/pr50769.f90
6d40b8b2b18fefbafaa1495c64dc7b65 gcc/testsuite/gfortran.dg/pr50875.f90
+bb7add9250612f62914277baa59b409c gcc/testsuite/gfortran.dg/pr52370.f90
d427f4eb6f044237726ce98aa1dc9754 gcc/testsuite/gfortran.dg/pr52608.f90
cc1f32e49ccc36b48a493abb17c42e3a gcc/testsuite/gfortran.dg/pr52621.f90
877bb3da514ce7c575d032c4f5a834b6 gcc/testsuite/gfortran.dg/pr52678.f
@@ -38673,6 +39159,7 @@ c8646ca00d10d23022de604a2af8bdf2 gcc/testsuite/gfortran.dg/pr54131.f
9f0f693907d6b2758b64855de54f98f1 gcc/testsuite/gfortran.dg/pr54967.f90
5fa89c66192aaec916b4bbd962f73af9 gcc/testsuite/gfortran.dg/pr55330.f90
d04c732857d272204c2f3b489519a1e2 gcc/testsuite/gfortran.dg/pr56015.f90
+4d2d4770d539b54391d7391e2ff84899 gcc/testsuite/gfortran.dg/pr59700.f90
6ff99f4b0021f30bee039a61db7cba9d gcc/testsuite/gfortran.dg/predcom-1.f
20a411a7e5a57891297c4c6a96d92009 gcc/testsuite/gfortran.dg/predcom-2.f
80cf60710448ac2378aecda5fc4a57b6 gcc/testsuite/gfortran.dg/present_1.f90
@@ -38766,6 +39253,9 @@ bc0f5bf4f379f171c2687a86fdae9b51 gcc/testsuite/gfortran.dg/proc_ptr_38.f90
8109d84f58f630a5d29c8b76a38b145c gcc/testsuite/gfortran.dg/proc_ptr_4.f90
b56e9f2b05e65e28487a8445ef02657c gcc/testsuite/gfortran.dg/proc_ptr_41.f90
046af16cbaa722a036eba3298fc5b451 gcc/testsuite/gfortran.dg/proc_ptr_42.f90
+2d9a92734dd60f1d0e1c02fba024a973 gcc/testsuite/gfortran.dg/proc_ptr_43.f90
+3112dbb40c03404d9c8244c53b09b776 gcc/testsuite/gfortran.dg/proc_ptr_45.f90
+fbfcfdd0751320bb90e2488052dfe7de gcc/testsuite/gfortran.dg/proc_ptr_46.f90
8315cc72db332168e57edf018a4b8f1f gcc/testsuite/gfortran.dg/proc_ptr_5.f90
2e1358865c3ec02c3c45568f5eebb128 gcc/testsuite/gfortran.dg/proc_ptr_6.f90
3648c097522ae5858550c7d7776afd28 gcc/testsuite/gfortran.dg/proc_ptr_7.c
@@ -38806,6 +39296,7 @@ a020edb99d6dd4ea336b0da9b9d7504f gcc/testsuite/gfortran.dg/proc_ptr_comp_32.f90
24fb57e3c5e8639d6e42b27b1c240d14 gcc/testsuite/gfortran.dg/proc_ptr_comp_35.f90
84c26cf594690d7b2f9bd5ce4cb0b3a5 gcc/testsuite/gfortran.dg/proc_ptr_comp_36.f90
442e3a279e0b663950c34b90c90e8ae2 gcc/testsuite/gfortran.dg/proc_ptr_comp_37.f90
+4b4ffbe5e962595c581a22914b8f137c gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90
516a19ccaf66dccab0666ab4b0b24aab gcc/testsuite/gfortran.dg/proc_ptr_comp_4.f90
9440b7a38d0f8e2941673b44554c91fe gcc/testsuite/gfortran.dg/proc_ptr_comp_5.f90
6347d321213f9347afa49d4354eb67f7 gcc/testsuite/gfortran.dg/proc_ptr_comp_6.f90
@@ -38985,6 +39476,7 @@ d088cd1dddd94a5cc78135c60659e17e gcc/testsuite/gfortran.dg/reshape.f90
a89f453dab80af696af0503df43a152e gcc/testsuite/gfortran.dg/reshape_2.f90
d3828a0469af571ee4a9715d5b69ba18 gcc/testsuite/gfortran.dg/reshape_3.f90
28e648e5d9b58d4e60affb7acc6a4a36 gcc/testsuite/gfortran.dg/reshape_4.f90
+7f3d8930925f93d0224885fccf19768f gcc/testsuite/gfortran.dg/reshape_6.f90
5ba059ede6b01fb6404ce683ad0bf19b gcc/testsuite/gfortran.dg/reshape_empty_1.f03
a427cc5a5e1ff29f34ae42c060001529 gcc/testsuite/gfortran.dg/reshape_order_1.f90
76cb0afc35b5327c7c7e5d8ddad735c6 gcc/testsuite/gfortran.dg/reshape_order_2.f90
@@ -39016,7 +39508,7 @@ ba4309199b6de8e3f6569168576b672d gcc/testsuite/gfortran.dg/ret_pointer_1.f90
197f641fc30975e9b70c4fb1703af678 gcc/testsuite/gfortran.dg/rewind_1.f90
7bdbcf6bda9a84f72f0ce9ff5baa35b3 gcc/testsuite/gfortran.dg/round_1.f03
8c6826e188281f4ba61e0e09942cb319 gcc/testsuite/gfortran.dg/round_2.f03
-09cce7a88c61e4fac5d40791fed2afcf gcc/testsuite/gfortran.dg/round_3.f08
+1e6dca49810e611218d8671ef4acade6 gcc/testsuite/gfortran.dg/round_3.f08
795c3a5486634878e59848252e62aa82 gcc/testsuite/gfortran.dg/rrspacing_1.f90
54535416585a8a8a084e4b2896243778 gcc/testsuite/gfortran.dg/runtime_warning_1.f90
cf312106ea57ecf768f6b24b13308511 gcc/testsuite/gfortran.dg/same_name_1.f90
@@ -39080,6 +39572,7 @@ bc6f4b8427180f3d7fe9596b5eb507d7 gcc/testsuite/gfortran.dg/select_type_30.f03
e4078fcf84bae622e034eda4e4a7bd1b gcc/testsuite/gfortran.dg/select_type_31.f03
0fa3636ab8c629eaf962c9d4116c05fb gcc/testsuite/gfortran.dg/select_type_32.f90
65d1bc4754dda94ab063cc52f230bad4 gcc/testsuite/gfortran.dg/select_type_33.f03
+8400e196604f257ef8d8e9269bae6945 gcc/testsuite/gfortran.dg/select_type_34.f90
402dd7c959e0269e964ee68c701dfb67 gcc/testsuite/gfortran.dg/select_type_4.f90
3ab901522e5a6c2930daa42a08c5a4c3 gcc/testsuite/gfortran.dg/select_type_5.f03
08871f191c3a23bf7de4d00e2c1959a3 gcc/testsuite/gfortran.dg/select_type_6.f03
@@ -39106,6 +39599,7 @@ aaa18907547c7140df6b3dd8f4bf4f59 gcc/testsuite/gfortran.dg/shape_4.f90
eed94040461dc3f4fa1bba34b2b82dca gcc/testsuite/gfortran.dg/shape_5.f90
311fedd0eb4347d62531750c8df6e3cd gcc/testsuite/gfortran.dg/shape_6.f90
5fd1f1121c14d548618bcaa2c19b5200 gcc/testsuite/gfortran.dg/shape_7.f90
+94da9e8d23575b4577fee9c086a66b54 gcc/testsuite/gfortran.dg/shape_8.f90
30fc9ad5840248ef596a1216e5c12bc9 gcc/testsuite/gfortran.dg/shift-alloc.f90
7b1184e923af066c99dfd04c9b054ebd gcc/testsuite/gfortran.dg/shift-kind.f90
bc8bd628ea9b26898618898ace33fc92 gcc/testsuite/gfortran.dg/shift-kind_2.f90
@@ -39160,6 +39654,7 @@ eda033d11dfa20d82831e890722e7b13 gcc/testsuite/gfortran.dg/stmt_func_1.f90
5bb6f5182d9384a0852023a67e8b00de gcc/testsuite/gfortran.dg/storage_size_1.f08
8a09c429b2f899cea2c3727d34502cbd gcc/testsuite/gfortran.dg/storage_size_2.f08
9f9a102c20bd7b1a65beb305a960abc4 gcc/testsuite/gfortran.dg/storage_size_3.f08
+187ed98bc6c4ad9278e3bfc17380d52c gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90
c493cc1dd6aabb50cb30ff4eace72dd8 gcc/testsuite/gfortran.dg/streamio_1.f90
c3098c4c77466c1349767e89676c5a9c gcc/testsuite/gfortran.dg/streamio_10.f90
5e203b3ef2b8d7a585bcb8a40951fcaf gcc/testsuite/gfortran.dg/streamio_11.f90
@@ -39252,6 +39747,7 @@ dc67674921059cc6c14a48ba9f6e8515 gcc/testsuite/gfortran.dg/transfer_hollerith_1
555fb529d24597e1674b14b43dd22a0a gcc/testsuite/gfortran.dg/transfer_intrinsic_3.f90
ea5b93d114291b99d509c890190b87e6 gcc/testsuite/gfortran.dg/transfer_intrinsic_4.f
1436414e1567857b5667b2b6403a5f18 gcc/testsuite/gfortran.dg/transfer_intrinsic_5.f90
+2548b0050cad7d0bdc2410b87807d30a gcc/testsuite/gfortran.dg/transfer_intrinsic_6.f90
d68fb0123f87274c2d884716d42b47b9 gcc/testsuite/gfortran.dg/transfer_null_1.f90
fb06cac22180b4daf49f140f6a9ad4c3 gcc/testsuite/gfortran.dg/transfer_resolve_1.f90
099850a87aba56ec7cc45b0bd6ddec3c gcc/testsuite/gfortran.dg/transfer_simplify_1.f90
@@ -39320,6 +39816,7 @@ c08a71ec9ef9f4d3efc7444f683bf3ba gcc/testsuite/gfortran.dg/typebound_call_7.f03
59f96819a94c93fafda6aa4255197b1d gcc/testsuite/gfortran.dg/typebound_generic_12.f03
de028226074140a718c3c0ee55049838 gcc/testsuite/gfortran.dg/typebound_generic_13.f03
b0231a94bd8f2884e93ab30ee111411e gcc/testsuite/gfortran.dg/typebound_generic_14.f03
+30c1827660f592dee082bfbdb76d283d gcc/testsuite/gfortran.dg/typebound_generic_15.f90
49f0c24b421711b8a488c34f84429c2f gcc/testsuite/gfortran.dg/typebound_generic_2.f03
f560313f9140682d0a4c82e816a75fa1 gcc/testsuite/gfortran.dg/typebound_generic_3.f03
930a825557bb70aab78950cd00bc351a gcc/testsuite/gfortran.dg/typebound_generic_4.f03
@@ -39350,6 +39847,7 @@ ac5c092dfb7ce6ee6fe91699bdf80f18 gcc/testsuite/gfortran.dg/typebound_operator_7
b21385a99a696d6b4f02a32ca30d912a gcc/testsuite/gfortran.dg/typebound_override_1.f90
effa091894b3e888f170c035d58686bb gcc/testsuite/gfortran.dg/typebound_override_2.f90
c9aeca1e7c268b3e0cbe5461cbf85bcd gcc/testsuite/gfortran.dg/typebound_override_3.f90
+86f54bff12342f95ba0b5682da57f82c gcc/testsuite/gfortran.dg/typebound_override_4.f90
b8f4745b35601a2d347854f6571f941c gcc/testsuite/gfortran.dg/typebound_proc_1.f08
2dc3ab48b20eb9f992bdb4c1579776d1 gcc/testsuite/gfortran.dg/typebound_proc_10.f03
832e1f61727ceca8dd5bde39eb1ca531 gcc/testsuite/gfortran.dg/typebound_proc_11.f03
@@ -39394,6 +39892,7 @@ c8e503b708a47987b118d4f0994bd0b4 gcc/testsuite/gfortran.dg/unformatted_subrecor
f4f968a71251bd464432e9b764c176e3 gcc/testsuite/gfortran.dg/unit_1.f90
7dfedaeac35864310c309a5338d8f8d0 gcc/testsuite/gfortran.dg/unlimited_fmt_1.f08
e37e8fa39cdb137d14534b658cdab2ca gcc/testsuite/gfortran.dg/unlimited_polymorphic_1.f03
+af10bdc4e75faf8960c8c02fcb1cf9ae gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90
317432e3f15ed0608227020c87731936 gcc/testsuite/gfortran.dg/unlimited_polymorphic_2.f03
a1930b128a7add0a89bb806192040714 gcc/testsuite/gfortran.dg/unlimited_polymorphic_3.f03
27f9d22da25fab9449a6d82ad7501184 gcc/testsuite/gfortran.dg/unlimited_polymorphic_4.f03
@@ -39408,6 +39907,8 @@ a38aec42f7e0058d56277b2bdbf39923 gcc/testsuite/gfortran.dg/unpack_bounds_3.f90
77425eab660cd99123828c97f2657ca9 gcc/testsuite/gfortran.dg/unpack_mask_1.f90
21ad1ac865ebfe7d633e040a09836574 gcc/testsuite/gfortran.dg/unpack_zerosize_1.f90
fbd9ec98233c6fecb3330e95ece01679 gcc/testsuite/gfortran.dg/unreferenced_use_assoc_1.f90
+7b43b740c1827893f88c955a8b8544ac gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90
+e129d02ece9c3131335abb4373cf1721 gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90
de05d2a4b7edcd1154264118b11a9a77 gcc/testsuite/gfortran.dg/unused_artificial_dummies_1.f90
af23489c25cf37ffd216eb038f4a82d8 gcc/testsuite/gfortran.dg/use_1.f90
c7e3f8f8a4fba4e7d49f3e4b94e8eab4 gcc/testsuite/gfortran.dg/use_10.f90
@@ -39430,6 +39931,7 @@ b7fee6814c91e8eabf3a9b812c60942a gcc/testsuite/gfortran.dg/use_24.f90
b901a88b454d7825c0db0571e62c9944 gcc/testsuite/gfortran.dg/use_26.f90
a1aea473d60b54462b6cf51bf868c93a gcc/testsuite/gfortran.dg/use_27.f90
5b57495125ee9306be1b2dd3b0ff762b gcc/testsuite/gfortran.dg/use_28.f90
+aa0dfadd71d3f03426fb0f846d07e63b gcc/testsuite/gfortran.dg/use_29.f90
9ca8384adf4fc331598e3bcd1cbb8ffe gcc/testsuite/gfortran.dg/use_3.f90
0c64a8a6f9a898ee90f8cccc71a7f782 gcc/testsuite/gfortran.dg/use_4.f90
c011e9a04d62e1471412a9cb947b4a99 gcc/testsuite/gfortran.dg/use_5.f90
@@ -39600,6 +40102,7 @@ e44325d824f7ecb21997c863292bde2c gcc/testsuite/gfortran.dg/wextra_1.f
44bae72b0d75677144f79e13875a55e1 gcc/testsuite/gfortran.dg/where_1.f90
e2dd8115622860575ce72139d603a847 gcc/testsuite/gfortran.dg/where_2.f90
3516e7a52673173d6551f02dca2c1f39 gcc/testsuite/gfortran.dg/where_3.f90
+4179a357d57c03402f3b139d65faa997 gcc/testsuite/gfortran.dg/where_4.f90
355f71857e4d70eec2b706ae1ab82a95 gcc/testsuite/gfortran.dg/where_nested_1.f90
9ed3fb7c28651e33f2d22957e7ad8da6 gcc/testsuite/gfortran.dg/where_operator_assign_1.f90
e065fb63b7634d2874e6ce1fb7f3c610 gcc/testsuite/gfortran.dg/where_operator_assign_2.f90
@@ -39766,6 +40269,7 @@ d8d04dd88f8e8ffbaa7fbdb631f898a0 gcc/testsuite/gfortran.fortran-torture/compile
cced6ef67c045f87b6961bdd6fa259a5 gcc/testsuite/gfortran.fortran-torture/compile/pr45634.f90
698812d3b6f7a7395ca3e67775177475 gcc/testsuite/gfortran.fortran-torture/compile/pr45738.f90
6eccce962f547a39c2081378826e5943 gcc/testsuite/gfortran.fortran-torture/compile/pr49721-1.f
+57501cf80740e5c44e0bb4e94dd1bab0 gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90
7602f8cc2d0ebd2bf0bb974069a764e0 gcc/testsuite/gfortran.fortran-torture/compile/shape_reshape.f90
d5ee9d72b3b02f47b393934ca0c89627 gcc/testsuite/gfortran.fortran-torture/compile/stoppause.f90
0be215e4a53f9370c44eaa153bf1ed6e gcc/testsuite/gfortran.fortran-torture/compile/strparm_1.f90
@@ -39944,6 +40448,7 @@ aa816d8f5ef5d24a6e170c281a0e6293 gcc/testsuite/gfortran.fortran-torture/execute
0277cb8618f5a94496d3d935dccfcba0 gcc/testsuite/gfortran.fortran-torture/execute/pr40021.f
18d76094e6dbeab187d55c32505d6af4 gcc/testsuite/gfortran.fortran-torture/execute/pr43390.f90
dd40d4b957380ba6ca3ab6addb8a5a14 gcc/testsuite/gfortran.fortran-torture/execute/pr54767.f90
+c617506fdfdc576d1ca5f17b049e5ce8 gcc/testsuite/gfortran.fortran-torture/execute/pr57396.f90
78df18b9400c1b2f401164418dc104c0 gcc/testsuite/gfortran.fortran-torture/execute/procarg.f90
54b26651618ba6afa7aae0c3b8994e66 gcc/testsuite/gfortran.fortran-torture/execute/ptr.f90
eae8dc541702830d5c63bf337333c15b gcc/testsuite/gfortran.fortran-torture/execute/random_1.f90
@@ -40129,6 +40634,7 @@ d3c3ea85a2d542a334f54886bc6d0e68 gcc/testsuite/gnat.dg/array7.ads
12c52f23c378fd6be0c22806a374e7ac gcc/testsuite/gnat.dg/array8.adb
9e79ec4077e627de01176e9d19ff0054 gcc/testsuite/gnat.dg/array9.adb
4e4a2cd2383fcedd1f7f9e094a9733f7 gcc/testsuite/gnat.dg/array_bounds_test.adb
+7d28bdf32624ddc6639c523e6b6ecf60 gcc/testsuite/gnat.dg/array_bounds_test2.adb
52657f6a50de3dd615f1839a7c6e5b3d gcc/testsuite/gnat.dg/assert.ads
80ad90db652eb7009d6b74cdc65a3059 gcc/testsuite/gnat.dg/assert1.adb
6f97895d623a26408408d6f56c73a050 gcc/testsuite/gnat.dg/assign_from_packed.adb
@@ -40422,6 +40928,7 @@ a166962c38d6c017c1d775431b13680f gcc/testsuite/gnat.dg/in_mod_conv.adb
f3890754644fddd9f8ca37a3bd1cc7ea gcc/testsuite/gnat.dg/in_out_parameter.adb
a2da4cb0a5f42827fe6f0e4f56d14218 gcc/testsuite/gnat.dg/in_out_parameter2.adb
ad89e1da831369fbad29c8ebf625be88 gcc/testsuite/gnat.dg/in_out_parameter3.adb
+aac11d5ba43ac52a20324f46ef1e2185 gcc/testsuite/gnat.dg/in_out_parameter4.adb
928de3a42da5c250f7a1c2e1ce568abb gcc/testsuite/gnat.dg/include.adb
94a108b336603d0d2ef666ceaea862ce gcc/testsuite/gnat.dg/incomplete1.ads
27d2aa8cce9d8a8fca96e6713148db79 gcc/testsuite/gnat.dg/incomplete2.adb
@@ -40486,6 +40993,9 @@ c803881a92a52cb2b85edbffe804583c gcc/testsuite/gnat.dg/loop_optimization13.ads
082ece5e26600cca596c46e760c7c38d gcc/testsuite/gnat.dg/loop_optimization14_pkg.ads
ee41fbb17306ac2dee477aa74b19ee28 gcc/testsuite/gnat.dg/loop_optimization15.adb
ead3ce9c1042fd0ba014ada4fdf10351 gcc/testsuite/gnat.dg/loop_optimization15.ads
+118360462b3fb60c35509947b10c1095 gcc/testsuite/gnat.dg/loop_optimization16.adb
+7e48f98b410bc84da4e2783deb3f19bf gcc/testsuite/gnat.dg/loop_optimization16_pkg.adb
+5b1702dd3857556efb2c3278e4b70357 gcc/testsuite/gnat.dg/loop_optimization16_pkg.ads
f541e6bfbb5ebc32c8c88b9475f024d2 gcc/testsuite/gnat.dg/loop_optimization2.adb
c127785f315390b699c7fa039c495c81 gcc/testsuite/gnat.dg/loop_optimization2.ads
5e481abfdb92dddf7569d6c4d76c865f gcc/testsuite/gnat.dg/loop_optimization3.adb
@@ -40655,7 +41165,11 @@ e5b4a3246c128a0f6e5b5b2bee28fec6 gcc/testsuite/gnat.dg/opt25_pkg1.ads
f5a7a2892a18bb3555cdd8dfcaac8feb gcc/testsuite/gnat.dg/opt25_pkg2.adb
44443bdff16278b913a0f3afbc217db6 gcc/testsuite/gnat.dg/opt25_pkg2.ads
95f3d67f9d9254303835cc8a3088a0bf gcc/testsuite/gnat.dg/opt26.adb
+777b73757e1b7106d78209dab2f1e669 gcc/testsuite/gnat.dg/opt28.adb
+f34c1ccc4215e16c24735299c32e5af3 gcc/testsuite/gnat.dg/opt28.ads
+58c81b3fda681cd5320a6f0ff30bc291 gcc/testsuite/gnat.dg/opt28_pkg.ads
98384ef07686507b4ed94c26f6a58813 gcc/testsuite/gnat.dg/opt3.adb
+20ad547be814ce4a0fc7d07e373934bf gcc/testsuite/gnat.dg/opt32.adb
65e20f998d483941d92a34b07b482d10 gcc/testsuite/gnat.dg/opt3_pkg.ads
e98c04ac385dbd0581c1f5fa108caf6b gcc/testsuite/gnat.dg/opt4.adb
3d44b5cac38d62a85266069665682f5d gcc/testsuite/gnat.dg/opt5.adb
@@ -41167,9 +41681,9 @@ f37d4791cfa22e9a20848922ea5de498 gcc/testsuite/go.go-torture/execute/struct-2.g
b760f8c4f0593565426879b84ab6787b gcc/testsuite/go.go-torture/execute/var-1.go
55c3fdb5eab9130c79b8548c994aa8d9 gcc/testsuite/go.go-torture/execute/var-2.go
ac0017eb534302ec5987291f615d13ca gcc/testsuite/go.go-torture/execute/var-3.go
-5a0252d8d69bc599903eac822e0419c0 gcc/testsuite/go.test/go-test.exp
+b84b438315918c2016e29eb0d991c62c gcc/testsuite/go.test/go-test.exp
88c59e0bc9f2a79ed3a3e8f1409ed1d8 gcc/testsuite/go.test/test/235.go
-0386003ab95c6a0b42bb3c7b13680401 gcc/testsuite/go.test/test/64bit.go
+1a94dd86d2262280f883261800a13104 gcc/testsuite/go.test/test/64bit.go
43e15a8d565d16ab908b7cf6db8e0bf9 gcc/testsuite/go.test/test/README.gcc
6e5009f7b50fce4ecadf649427d176c5 gcc/testsuite/go.test/test/alias.go
d5fd5eb00413f12256637dc5d2d1296c gcc/testsuite/go.test/test/alias1.go
@@ -41418,7 +41932,7 @@ dec49e75b2ceb9311df439ebb4804316 gcc/testsuite/go.test/test/fixedbugs/bug083.di
f48913a660384a038d00a42dcd34d033 gcc/testsuite/go.test/test/fixedbugs/bug083.go
eecf0c4fe5675a2853653c5d7284edd3 gcc/testsuite/go.test/test/fixedbugs/bug084.go
4f272e99638e31f83f7ec38c9144bfcb gcc/testsuite/go.test/test/fixedbugs/bug085.go
-599108fecc4a512af9689f7060c56f8f gcc/testsuite/go.test/test/fixedbugs/bug086.go
+ea74d75261cb8943fab1fd46b8fd3df3 gcc/testsuite/go.test/test/fixedbugs/bug086.go
5b69cdd1833fb3eadc5492f7ff6d8827 gcc/testsuite/go.test/test/fixedbugs/bug087.go
79684f66ca16fe863072e7d4978a5dfc gcc/testsuite/go.test/test/fixedbugs/bug088.dir/bug0.go
307976a0359c49b4d41adf4e20e13139 gcc/testsuite/go.test/test/fixedbugs/bug088.dir/bug1.go
@@ -41774,7 +42288,7 @@ bcda4b850a5c39c69d1759f32d4cec95 gcc/testsuite/go.test/test/fixedbugs/bug407.di
646b095520d80ac1fc6fa29a5b99e936 gcc/testsuite/go.test/test/fixedbugs/bug407.go
db53af9b24817672917a3acefbdae2e3 gcc/testsuite/go.test/test/fixedbugs/bug409.go
b2da4073238f992900af7d530a049044 gcc/testsuite/go.test/test/fixedbugs/bug409.out
-484dea7d900d5d266076be86f13d9f11 gcc/testsuite/go.test/test/fixedbugs/bug410.go
+33476b4a926fd252b27886588fe9af3d gcc/testsuite/go.test/test/fixedbugs/bug410.go
b3b9ea9f96eb142647f6a6cb403d2fb1 gcc/testsuite/go.test/test/fixedbugs/bug411.go
67a324bea569ff9e1f788988528c80fb gcc/testsuite/go.test/test/fixedbugs/bug412.go
0cc1d4050c8bcd14de8561803daabe36 gcc/testsuite/go.test/test/fixedbugs/bug413.go
@@ -41973,7 +42487,7 @@ f35a7d21fe1566cdf641a0787323d2da gcc/testsuite/go.test/test/rune.go
961966dfd1c9ebb158884a859982a6b9 gcc/testsuite/go.test/test/safe/nousesafe.go
654467ddeb26d10c3cffa5707ac4b405 gcc/testsuite/go.test/test/safe/pkg.go
efaf8b3f770d1b7481152bdf82cb0897 gcc/testsuite/go.test/test/safe/usesafe.go
-9db5bdca6a83562fad301d147b94b272 gcc/testsuite/go.test/test/shift1.go
+50c762c6035ec8c294af970e92eb8af6 gcc/testsuite/go.test/test/shift1.go
31f622d91578b5c2619da6573c037c53 gcc/testsuite/go.test/test/shift2.go
98eaa818a13192aad65a388f0fafa7ad gcc/testsuite/go.test/test/sieve.go
7522d45169c2dc45a787c8b7a9356db1 gcc/testsuite/go.test/test/sigchld.go
@@ -42062,7 +42576,7 @@ b29bc7608e3a71029ce68a6a33d59c04 gcc/testsuite/lib/scandump.exp
fc3e4cbf83ac4c267661b8ae01283c3c gcc/testsuite/lib/scantree.exp
3284d0f6eb20efe0d8e2129206fad002 gcc/testsuite/lib/target-libpath.exp
25844a0fb1201efd24b39533ea42e421 gcc/testsuite/lib/target-supports-dg.exp
-9326418c4504749000178c04c80499ee gcc/testsuite/lib/target-supports.exp
+66452751cb9a0784eb3ae1f726c1e9c2 gcc/testsuite/lib/target-supports.exp
a1a7d591231a449f2896de02d10dec83 gcc/testsuite/lib/timeout-dg.exp
ef2030c50518cc7e5161331beb011961 gcc/testsuite/lib/timeout.exp
ad0b439b89ca5db136ddaf49a15a6439 gcc/testsuite/lib/torture-options.exp
@@ -42121,7 +42635,7 @@ ac0b35dcfcf72480c040349b2b8a874b gcc/testsuite/obj-c++.dg/comp-types-7.mm
f6a135d669303e10360f4a9e17664aa7 gcc/testsuite/obj-c++.dg/cxx-class-1.mm
eaca42112d9683b4af93483c642c5b3d gcc/testsuite/obj-c++.dg/cxx-ivars-1.mm
2dd2f7dd6f655732fc606d8c85af825b gcc/testsuite/obj-c++.dg/cxx-ivars-2.mm
-0e74fdedad66d719f97674a41630017d gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm
+cca9a4ce8eba1acccfd6ad6cb92b40e7 gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm
0f4f03268c6b5629c2c23fe7fbc06966 gcc/testsuite/obj-c++.dg/cxx-scope-1.mm
74ea4974ad0f897a229d4bd99f47da95 gcc/testsuite/obj-c++.dg/cxx-scope-2.mm
4d63d224c8c642188a58882a0609e394 gcc/testsuite/obj-c++.dg/defs.mm
@@ -42193,7 +42707,7 @@ a18e5d5b1c772fda466670d9a820b3af gcc/testsuite/obj-c++.dg/lookup-2.mm
e5590a2a3f8b22c8f340429d19038365 gcc/testsuite/obj-c++.dg/method-1.mm
19f8317903ba8bee4bf9fa945f98478d gcc/testsuite/obj-c++.dg/method-10.mm
6eecfde212363a6364af0934a93626ab gcc/testsuite/obj-c++.dg/method-11.mm
-74240fb8891f61b92b8b5fbfe4b60c59 gcc/testsuite/obj-c++.dg/method-12.mm
+70bd4843da3e5fe528aabbba3c165225 gcc/testsuite/obj-c++.dg/method-12.mm
5db486c8dedadbd2dec6ab6ab50e4760 gcc/testsuite/obj-c++.dg/method-13.mm
172164daa5b2292983d23e0e5d5a94eb gcc/testsuite/obj-c++.dg/method-14.mm
4e53ceac34f8c331fb19afd677abd05d gcc/testsuite/obj-c++.dg/method-15.mm
@@ -42331,7 +42845,7 @@ e9acacfeddf9f5b3fcc7bd49ae2063e8 gcc/testsuite/obj-c++.dg/proto-lossage-3.mm
8c2650d88d078d9a00f1f3ef1029cbef gcc/testsuite/obj-c++.dg/proto-lossage-4.mm
40b981421154ac96e17299bce5569949 gcc/testsuite/obj-c++.dg/proto-lossage-5.mm
fd29bc4e26ebfbde2219d16bcd57ff44 gcc/testsuite/obj-c++.dg/proto-lossage-6.mm
-f1a8174a0d750e68abf26109030dadbb gcc/testsuite/obj-c++.dg/proto-lossage-7.mm
+6975286133171cd693b6f659097de913 gcc/testsuite/obj-c++.dg/proto-lossage-7.mm
4cd57b67eb48bda4d17d7be6cbbf3651 gcc/testsuite/obj-c++.dg/proto-qual-1.mm
cf4aa34add213bab910de4918a4bb01d gcc/testsuite/obj-c++.dg/protocol-forward-1.mm
30d24d440a6063d356f6a53af5141ba5 gcc/testsuite/obj-c++.dg/protocol-forward-2.mm
@@ -42350,9 +42864,9 @@ c7256230d1e3f8e9c93d3614935b69bc gcc/testsuite/obj-c++.dg/selector-6.mm
9359d93417f401fddd8bdbb1bd3bae20 gcc/testsuite/obj-c++.dg/selector-warn-1.mm
d2caa0c9e2ed2954ba9e33d87f726293 gcc/testsuite/obj-c++.dg/set-not-used-1.mm
4c5901302ebb869ad2843e5bd9b59f85 gcc/testsuite/obj-c++.dg/strings/const-cfstring-2.mm
-1dc90b8d5a711a3056e6158e886891a3 gcc/testsuite/obj-c++.dg/strings/const-cfstring-5.mm
+944b45f8bae04534787888f64340973c gcc/testsuite/obj-c++.dg/strings/const-cfstring-5.mm
21b76d31bad8ab2bce32ce3f5fceff78 gcc/testsuite/obj-c++.dg/strings/const-str-1.mm
-df65847cf73a8ffd54aeb213e0d72b63 gcc/testsuite/obj-c++.dg/strings/const-str-12.mm
+88a204f313d69410fede9a1fadead584 gcc/testsuite/obj-c++.dg/strings/const-str-12.mm
71d1ca70f87be11f4325a5b06987bb9b gcc/testsuite/obj-c++.dg/strings/const-str-2.mm
c2f326ebd57afc69cfee9d8f6b441323 gcc/testsuite/obj-c++.dg/strings/const-str-5.mm
a9aabe53382bdf1de0612f8bcf7ef0eb gcc/testsuite/obj-c++.dg/strings/const-str-6.mm
@@ -42367,7 +42881,7 @@ bc9aa7712b120aebc943581aa15c9c31 gcc/testsuite/obj-c++.dg/super-class-1.mm
43c780cbecdb5565a2bda8b0795d5cf8 gcc/testsuite/obj-c++.dg/super-dealloc-2.mm
6d77d7810e6a1711e9c3e10911fdf7f5 gcc/testsuite/obj-c++.dg/sync-2.mm
c1db611d2e6bb0f9226c7b773e41bec6 gcc/testsuite/obj-c++.dg/sync-3.mm
-93fca1bd756ffd9eb1cb9a28fb5bc2af gcc/testsuite/obj-c++.dg/syntax-error-1.mm
+748c7566fb8449a9c4cf464bde2a00c3 gcc/testsuite/obj-c++.dg/syntax-error-1.mm
76c552ffde73821d35ce37029bf52fb7 gcc/testsuite/obj-c++.dg/syntax-error-10.mm
fcc3247af976d648bb2eb1348d0828a8 gcc/testsuite/obj-c++.dg/syntax-error-2.mm
6090398b844ba0e695f8af2946ade6c8 gcc/testsuite/obj-c++.dg/syntax-error-3.mm
@@ -42402,13 +42916,13 @@ d951d115e8add5e2e78e8e2e56aebc7f gcc/testsuite/obj-c++.dg/tls/tls.exp
1f7b520d7df4159bcf567388c99dd690 gcc/testsuite/obj-c++.dg/torture/strings/const-cfstring-1.mm
e42495f1f3ad6ec8f920137751c3f8f7 gcc/testsuite/obj-c++.dg/torture/strings/const-cfstring-3.mm
d2c0463e1e05d168d9d004c74cec0610 gcc/testsuite/obj-c++.dg/torture/strings/const-cfstring-4.mm
-1b65b5e8c76ecd26a9db68d7f1675ece gcc/testsuite/obj-c++.dg/torture/strings/const-str-10.mm
-c623717c970c4e8cdab658095dd2fd1d gcc/testsuite/obj-c++.dg/torture/strings/const-str-11.mm
+3f540974a4f92e1b3375aa8bcbca7e8c gcc/testsuite/obj-c++.dg/torture/strings/const-str-10.mm
+bc7815bb9a08dccb57fe4e22b74eb729 gcc/testsuite/obj-c++.dg/torture/strings/const-str-11.mm
78b70f1aad125fecbbe161087e6dbc54 gcc/testsuite/obj-c++.dg/torture/strings/const-str-3.mm
3b2c597aefd84853b16f8cd8438ff907 gcc/testsuite/obj-c++.dg/torture/strings/const-str-4.mm
71862e2dfd32f32cc37bc2b6300c0cab gcc/testsuite/obj-c++.dg/torture/strings/const-str-7.mm
69c47926ef31db0bb79c5cd3cea4fa0b gcc/testsuite/obj-c++.dg/torture/strings/const-str-8.mm
-c8e0d7f2e9f51ed12a7fb3d2330da091 gcc/testsuite/obj-c++.dg/torture/strings/const-str-9.mm
+019ec55674cd5d821fa8a7357a379cfc gcc/testsuite/obj-c++.dg/torture/strings/const-str-9.mm
38bba22e495d1876db60c1ae29146fbe gcc/testsuite/obj-c++.dg/torture/strings/string1.mm
ac7df7c7b1d8ac191e74d84ad10b6c53 gcc/testsuite/obj-c++.dg/torture/strings/strings.exp
6f6356dbcb53d22602416e8919a2b428 gcc/testsuite/obj-c++.dg/torture/tls/diag-1.mm
@@ -42527,7 +43041,7 @@ d41bdbf8fd720cd2fb1c999d1e580ba5 gcc/testsuite/objc.dg/encode-10.m
e8f3db69a8847b70c8bc969edd78dbb2 gcc/testsuite/objc.dg/encode-5.m
1296445554abff012ff56b38392805d1 gcc/testsuite/objc.dg/encode-6-next.m
e53ead1c08985bdb0849e450194e9b99 gcc/testsuite/objc.dg/encode-6.m
-d42654d5f0004e95a94e24ba46f1b67a gcc/testsuite/objc.dg/encode-7-next-64bit.m
+6080da2594c39158f3f4b1344700903b gcc/testsuite/objc.dg/encode-7-next-64bit.m
ec0c203eb500e86f1c38d60a10728024 gcc/testsuite/objc.dg/encode-7-next.m
9ab782c949f890c6873d2669830a2e31 gcc/testsuite/objc.dg/encode-7.m
429d40f99aa6566cade774190e6fc983 gcc/testsuite/objc.dg/encode-8.m
@@ -42588,7 +43102,7 @@ a10c57561f5023d1bc5813fb62b15e8f gcc/testsuite/objc.dg/gnu-runtime-2.m
cf495a272fe911f953544354d7af49e2 gcc/testsuite/objc.dg/gnu-runtime-3.m
5af5796e26fc687bf55b3d9f3ed9238f gcc/testsuite/objc.dg/headers.m
f1920dcb3d447ac1425163a2d1e6c0d2 gcc/testsuite/objc.dg/id-1.m
-08c76a379738e6b0b0eb4537ca5d8885 gcc/testsuite/objc.dg/image-info.m
+c6f4519ae7cdde25ce603a24cab9f418 gcc/testsuite/objc.dg/image-info.m
f642d96cba4255caca5622eae71014c4 gcc/testsuite/objc.dg/incomplete-type-1.m
7965f2dab76d401f8398a30bcae85653 gcc/testsuite/objc.dg/invalid-method-1.m
172bebf6092a27228381556a110f96cb gcc/testsuite/objc.dg/invalid-method-2.m
@@ -42626,7 +43140,7 @@ f00cd88add91ecc5ecc2a311e5080729 gcc/testsuite/objc.dg/method-2.m
9153d82237cc99af905bfcb58426980b gcc/testsuite/objc.dg/method-3.m
1857e378233cbdb0ef09315d0ee04fc9 gcc/testsuite/objc.dg/method-4.m
1ad4b2a31a2fabfd021245ffcfa25817 gcc/testsuite/objc.dg/method-5.m
-87c6479c5012497b9060932a941a4377 gcc/testsuite/objc.dg/method-6.m
+820d2072288e0c5450c20ecf67e0cee7 gcc/testsuite/objc.dg/method-6.m
cf1647763aa007475503deb5e1e09f59 gcc/testsuite/objc.dg/method-7.m
172164daa5b2292983d23e0e5d5a94eb gcc/testsuite/objc.dg/method-8.m
0dfce97c95b1493edb33d7a1bb51e35a gcc/testsuite/objc.dg/method-9.m
@@ -42647,13 +43161,13 @@ ba9c85f123a269332f97289544f0c272 gcc/testsuite/objc.dg/naming-3.m
1e68654789c238dc1eaf9e923fe49822 gcc/testsuite/objc.dg/naming-6.m
ab539e16480243bccd13cb0ab5c05a26 gcc/testsuite/objc.dg/naming-7.m
dab2c64c5d57ebdc0ca4b496b1db48a2 gcc/testsuite/objc.dg/next-runtime-1.m
-7bd9c4e6799faaf21a263b5b57b1ba2c gcc/testsuite/objc.dg/no-extra-load.m
+7bdacce2d25fc27ed41077ddc1cb6a7e gcc/testsuite/objc.dg/no-extra-load.m
5aa0d8665f3838cd2d663fc71be4933d gcc/testsuite/objc.dg/objc-fast-4.m
6e3afeaf5baf2e68de83a0896e550b27 gcc/testsuite/objc.dg/objc-foreach-1.m
d7940785b72ab02856b58bf8b4c3d710 gcc/testsuite/objc.dg/objc-foreach-2.m
b0a4bc88be3fcbba334ad86617c9724e gcc/testsuite/objc.dg/objc-foreach-3.m
-59d4961cff3bb938af2ce6bafd43529e gcc/testsuite/objc.dg/objc-foreach-4.m
-7c23e37a96b638975904c678dfab3bd2 gcc/testsuite/objc.dg/objc-foreach-5.m
+12235d0aec67d729a9f040e360810e9c gcc/testsuite/objc.dg/objc-foreach-4.m
+3b7013081c6c015d989ef0bde95be007 gcc/testsuite/objc.dg/objc-foreach-5.m
f531c9a9d8f9e24e5d1b5e0d059e3392 gcc/testsuite/objc.dg/objc-gc-4.m
e2b871afc37f1772b337d989244b97c6 gcc/testsuite/objc.dg/objc-nofilename-1.m
6eed5537eae24ed6634c3706c12f2114 gcc/testsuite/objc.dg/param-1.m
@@ -42661,7 +43175,7 @@ e2b871afc37f1772b337d989244b97c6 gcc/testsuite/objc.dg/objc-nofilename-1.m
71da4e106e38b3671b4f4ae8a237e55f gcc/testsuite/objc.dg/pch/interface-1.m
aeeae2ba23272e1b1d0190c848346b68 gcc/testsuite/objc.dg/pch/pch.exp
4bde0ee2020d54cbaccb19eddeb1ff93 gcc/testsuite/objc.dg/pr18255.m
-512f75f9c158730eb4d679896680d2e4 gcc/testsuite/objc.dg/pr23214.m
+92850ceb26e638315f91054c730aacc8 gcc/testsuite/objc.dg/pr23214.m
e220e57343bac32bbc315171b87b1bba gcc/testsuite/objc.dg/pr23709.m
8480d22a4388c485c49d1c703c34f7f7 gcc/testsuite/objc.dg/pr24393.m
2e9567e68880e80a9fa203bba6e86d7f gcc/testsuite/objc.dg/pr28049.m
@@ -42767,7 +43281,7 @@ d165610dbbfad82f6af91eab9b66d300 gcc/testsuite/objc.dg/proto-lossage-2.m
f2414cf609997abfd57b517bafd39019 gcc/testsuite/objc.dg/proto-lossage-4.m
40b981421154ac96e17299bce5569949 gcc/testsuite/objc.dg/proto-lossage-5.m
d26b84bd4fece35e5ae1ec9a7c6d4f15 gcc/testsuite/objc.dg/proto-lossage-6.m
-f1a8174a0d750e68abf26109030dadbb gcc/testsuite/objc.dg/proto-lossage-7.m
+6975286133171cd693b6f659097de913 gcc/testsuite/objc.dg/proto-lossage-7.m
604faba6fd06b505d44d4837836124fa gcc/testsuite/objc.dg/proto-qual-1.m
4afd2785a0050e517e5c3818d2d5ea46 gcc/testsuite/objc.dg/protocol-forward-1.m
30d24d440a6063d356f6a53af5141ba5 gcc/testsuite/objc.dg/protocol-forward-2.m
@@ -42801,10 +43315,10 @@ fd73b19f16303df474ad98a05e01cd6a gcc/testsuite/objc.dg/special/unclaimed-catego
911d824641cc5460f0bb8428edcd155b gcc/testsuite/objc.dg/stret-1.m
581f8e860f7f1e705a6b0235823fa173 gcc/testsuite/objc.dg/stret-2.m
48dbd5e4f3a80cc5653bb873d59cd3b4 gcc/testsuite/objc.dg/strings/const-cfstring-2.m
-1dc90b8d5a711a3056e6158e886891a3 gcc/testsuite/objc.dg/strings/const-cfstring-5.m
+944b45f8bae04534787888f64340973c gcc/testsuite/objc.dg/strings/const-cfstring-5.m
21b76d31bad8ab2bce32ce3f5fceff78 gcc/testsuite/objc.dg/strings/const-str-1.m
24ad853ec86d75ab828e6fc36156ce31 gcc/testsuite/objc.dg/strings/const-str-12.m
-df65847cf73a8ffd54aeb213e0d72b63 gcc/testsuite/objc.dg/strings/const-str-12b.m
+88a204f313d69410fede9a1fadead584 gcc/testsuite/objc.dg/strings/const-str-12b.m
11e6b8b6d3e9f318be035ef31f291e33 gcc/testsuite/objc.dg/strings/const-str-2.m
2ea7be2c8319bbf91f203eb9e01c5520 gcc/testsuite/objc.dg/strings/const-str-5.m
1b52a4aa3cd0d5062e03b48964ddcb0b gcc/testsuite/objc.dg/strings/const-str-6.m
@@ -42819,7 +43333,7 @@ a1b0dd9c9fb200a066255256ef572225 gcc/testsuite/objc.dg/super-class-3.m
c71fc5d6430c26f90154d279a0e4420e gcc/testsuite/objc.dg/super-class-4.m
5f7cf7eb1290cd0ac7cc810aca461fcb gcc/testsuite/objc.dg/super-dealloc-1.m
43c780cbecdb5565a2bda8b0795d5cf8 gcc/testsuite/objc.dg/super-dealloc-2.m
-d3e8e95d2965e9632b94976c344b8386 gcc/testsuite/objc.dg/symtab-1.m
+e806ea4ccd7ce77b9958611b5c803146 gcc/testsuite/objc.dg/symtab-1.m
2a986a873850ef622badcc1eb9048d4a gcc/testsuite/objc.dg/sync-1.m
6d77d7810e6a1711e9c3e10911fdf7f5 gcc/testsuite/objc.dg/sync-2.m
a7c71308c349df3308ea10cfd5c4cfc2 gcc/testsuite/objc.dg/sync-3.m
@@ -42837,13 +43351,13 @@ be65f96db9eb7870d002772ea73b79da gcc/testsuite/objc.dg/torture/forward-1.m
eb414f8a7531ed8a420a1a6ee919602f gcc/testsuite/objc.dg/torture/strings/const-cfstring-1.m
e42495f1f3ad6ec8f920137751c3f8f7 gcc/testsuite/objc.dg/torture/strings/const-cfstring-3.m
d2c0463e1e05d168d9d004c74cec0610 gcc/testsuite/objc.dg/torture/strings/const-cfstring-4.m
-61e785b1dd58fe544047faf4bcf12ae5 gcc/testsuite/objc.dg/torture/strings/const-str-10.m
-7b857c4eb80fbc2510098381770e3e2b gcc/testsuite/objc.dg/torture/strings/const-str-11.m
+c00db2a33ee79619d0d18ec1bec143d2 gcc/testsuite/objc.dg/torture/strings/const-str-10.m
+870aba766852dd810f3d097bf57286e0 gcc/testsuite/objc.dg/torture/strings/const-str-11.m
11f5cd130f549cf602c1bb2004fba283 gcc/testsuite/objc.dg/torture/strings/const-str-3.m
95175d9f569f2455a67d3a042a9b49e5 gcc/testsuite/objc.dg/torture/strings/const-str-4.m
38dc4c1d8bffabc69a852320760c79a3 gcc/testsuite/objc.dg/torture/strings/const-str-7.m
3e0b925a0c58f41da0dff25baae98066 gcc/testsuite/objc.dg/torture/strings/const-str-8.m
-1563584c463f1f03e40f6137e805d4c3 gcc/testsuite/objc.dg/torture/strings/const-str-9.m
+c240b028053e462ac058c3f830ba0503 gcc/testsuite/objc.dg/torture/strings/const-str-9.m
a8a9f4264b042cb130bb43f35157c620 gcc/testsuite/objc.dg/torture/strings/string1.m
f559fec747b34a07335a33efaef1d635 gcc/testsuite/objc.dg/torture/strings/string2.m
8d3378c509e4ec126b88298049f5b787 gcc/testsuite/objc.dg/torture/strings/string3.m
@@ -42877,9 +43391,9 @@ d2d07c2ebcb90350a34d2a0a2a215530 gcc/testsuite/objc.dg/undeclared-selector.m
8c73a8da87197ef7c9627087e4a0abdc gcc/testsuite/objc.dg/va-meth-1.m
ad588be086756c7bce570ed5a28030b0 gcc/testsuite/objc.dg/volatile-1.m
5b030d8bcb22dedd984e8d8dae17cfb6 gcc/testsuite/objc.dg/weak-1.m
-80bc77ef95d07372714b27118e333076 gcc/testsuite/objc.dg/zero-link-1.m
-c28e3d0516d4a7c902150ee11a09aa9e gcc/testsuite/objc.dg/zero-link-2.m
-9a37ef4fef5bcfa3c169baa6e9a266db gcc/testsuite/objc.dg/zero-link-3.m
+c6f92ed8e0845d4f49274791f11f8632 gcc/testsuite/objc.dg/zero-link-1.m
+665cb537ffd18b494c34ac2bd13e3f52 gcc/testsuite/objc.dg/zero-link-2.m
+a86dde4579f2a917b3ba4488f0c82a58 gcc/testsuite/objc.dg/zero-link-3.m
0d71c48c831bf5882b80c4cd6ca9d9d8 gcc/testsuite/objc/compile/20011211-1.m
9b70591be7f91f15d0a53c89bdc94bf4 gcc/testsuite/objc/compile/20060406-1.m
d967a8655a62d35feb179a9994fd1997 gcc/testsuite/objc/compile/compile.exp
@@ -42992,103 +43506,103 @@ a57e521085412bbde60e78229ace4fd5 gcc/testsuite/objc/execute/trivial.m
de103c5aee763e42ee068bab52ae81e8 gcc/timevar.c
9ffac7207872c810c9ef84c6e4f8bbae gcc/timevar.def
b05bcc8660162d48a2e75f133cce2b79 gcc/timevar.h
-6e9ca03c0dd531cf4bc6469a2a40fe5e gcc/tlink.c
+c04d3d2b76e14cae33ccfbe084c75fdc gcc/tlink.c
a25018ae151c7c3204f534bedb9eaece gcc/toplev.c
35ce64bb0fea6c209fadfd69f7c7a768 gcc/toplev.h
2c1c7849b62e2bf62e8796d68a2e7381 gcc/tracer.c
b58dec5bbbdc9979bb90617277512ff0 gcc/trans-mem.c
7cf500646c715cc53eba83351c9b4b7a gcc/trans-mem.h
-bcde3eb71717783c7d2705f4bab58553 gcc/tree-affine.c
+a9874e4fe8492a1061773b8cdcae3e03 gcc/tree-affine.c
d8dd64d584ba26c0277022b34f0338b7 gcc/tree-affine.h
de7e1aef471e64fe9e070164d1f11dcf gcc/tree-browser.c
bedec07f7d7cbf81dac14846da39f828 gcc/tree-browser.def
-6e92824e12e90bc6331122d93d020102 gcc/tree-call-cdce.c
-af38fbb04a82deabff4d68d2bc2451dd gcc/tree-cfg.c
-7874da707addbf5e9eb78044d08e84af gcc/tree-cfgcleanup.c
+60ab405ffc7ae05fd582a869f9886f13 gcc/tree-call-cdce.c
+2c41bd11e9e66a6eae464eddaee19c3e gcc/tree-cfg.c
+6f68d79610b6bddd6639cb9c4371096e gcc/tree-cfgcleanup.c
68179679c594512a41d957a0d247cc6e gcc/tree-chrec.c
c43689db65fd001d4ba0d5a898801095 gcc/tree-chrec.h
f30bb998e3b38d9f6d7abb3b8de1986a gcc/tree-complex.c
81c85be57600ef7d293222aa61646733 gcc/tree-data-ref.c
1d200cc85b56e74ed182320c360b4383 gcc/tree-data-ref.h
-11a5e23569cdd431d48bf9bce64d3e94 gcc/tree-dfa.c
+56617e4e375ea892f75242bf22e37dbe gcc/tree-dfa.c
f1d71915226e246dca479ac7b04af380 gcc/tree-diagnostic.c
d6d4a3004f2ba333452b50700c69a1cd gcc/tree-diagnostic.h
3d20ab70a78bbdc7bdffd414de54da27 gcc/tree-dump.c
9d7225de57b377e8a428886916b6ddb7 gcc/tree-dump.h
-d8bbfdafa539a13f81016e4be83ef743 gcc/tree-eh.c
+ea67b56fb7cf3798b63efe883d15fbac gcc/tree-eh.c
de7bd2fc34a4358c9f61c6027a6b00ee gcc/tree-emutls.c
458ce453916436bfc3fbec01822924b7 gcc/tree-flow-inline.h
-95f88e8cdd576a07bd4be93aa71be9e9 gcc/tree-flow.h
-ecea3caa354fc77cd048ab491876ae41 gcc/tree-if-conv.c
-0c66fe97095630f83cdd02a6fa18499c gcc/tree-inline.c
+a0c6e59805991e565940fd225eadeb15 gcc/tree-flow.h
+acf1cd0cf9b8a47bb8740db5f79104a8 gcc/tree-if-conv.c
+93ab18350a0c42c01f417cdd8f662540 gcc/tree-inline.c
cf86d37557212f5c82d4d97019c10d5c gcc/tree-inline.h
5cdb1d6c7f40ef3be755755ed2e14690 gcc/tree-into-ssa.c
087061a54dad51be42e8b43f90beed7b gcc/tree-iterator.c
75d0dc05a3629f3b5871406f6d4f2c5c gcc/tree-iterator.h
-0ff5ec58191ea2e53a5b617e9de293fb gcc/tree-loop-distribution.c
+8660d13fd9360c98ba46195d113c39ba gcc/tree-loop-distribution.c
b48ba95cb168a8ea86996501285cf069 gcc/tree-mudflap.c
93e0f193efff098d3fe42ff38b49c69c gcc/tree-mudflap.h
dfa7692d33439e94364d634ec6be44bb gcc/tree-nested.c
f196dc26aec099f2db0c88c4a764ecbb gcc/tree-nomudflap.c
04aaee354b75f1449e2380f44ce6983d gcc/tree-nrv.c
-f022abac96ef0eb7e9c43e73793bc0cf gcc/tree-object-size.c
+6bc44450f8429cba6c5565ef9a132dbf gcc/tree-object-size.c
455978c94f31394ec28e886d0cfab05d gcc/tree-optimize.c
356e8f99c98122df8e188147ee88b405 gcc/tree-outof-ssa.c
-4e715a8bfc590eeabef3b41cb509d6cd gcc/tree-parloops.c
+8fd50142b0fa437a55185de9e002ad28 gcc/tree-parloops.c
47f1231c6cdfdb103d2ff831d2c27d41 gcc/tree-pass.h
bd460d2caaeb01469c672ef3221eef18 gcc/tree-phinodes.c
-898c8f01096591fe53ddd55b623c5e7d gcc/tree-predcom.c
+a6a817c77e16d9526bc3c14c5fcab641 gcc/tree-predcom.c
dddf038e7a240a18586c3fcb1683d30d gcc/tree-pretty-print.c
1f619536d0b2d8e9ff93c951fc7e88ab gcc/tree-pretty-print.h
91161ffd17ef85c8a099d7dd5fcdc659 gcc/tree-profile.c
03ac00b80fa4c73e9a1a24e495342a6b gcc/tree-scalar-evolution.c
7a423ea0669b0af23fb01196fec57dad gcc/tree-scalar-evolution.h
-72c745ef81c2b924b5b2db724b6bbdfd gcc/tree-sra.c
+3cc385de18c193cc7c18ed1571e4db07 gcc/tree-sra.c
ad49186a0a84fbac461b01b3030c1e44 gcc/tree-ssa-address.c
3826ea88f246b7013040944483a2e833 gcc/tree-ssa-alias.c
db1587e6eb45bf71279bd5efa5ee185f gcc/tree-ssa-alias.h
-7b4b4ff8bc51eb30e5e1daed5c4f4b9e gcc/tree-ssa-ccp.c
+4507eddd937b81e5c31e62e09f602fd2 gcc/tree-ssa-ccp.c
0cc25e5c4a46295466ae3777e26a2eb7 gcc/tree-ssa-coalesce.c
01714fd7d06fb47a3793320c131f1de5 gcc/tree-ssa-copy.c
a1e8e4e4d17284cb920e6d4f501aa878 gcc/tree-ssa-copyrename.c
-dd076069928034b154813e6f6f98aa54 gcc/tree-ssa-dce.c
+1148d8945feb1096313d4b3cab9664af gcc/tree-ssa-dce.c
13f57ae9386c27401a0430b1934d6d09 gcc/tree-ssa-dom.c
af90e7210ab95b65d71bf0ab467b0af7 gcc/tree-ssa-dse.c
0b2220d4c338a768afe6f65499c73090 gcc/tree-ssa-forwprop.c
6bc1158a50d792326ec651245d7fb670 gcc/tree-ssa-ifcombine.c
-0f7abc81bd12581dfc010b32ea87e1c4 gcc/tree-ssa-live.c
+0a28db73aa769268c464d19ad90ddf99 gcc/tree-ssa-live.c
729aad6e7ab4682ebfd90ed7c53a41b7 gcc/tree-ssa-live.h
ec668503d8bf24c2ccd961da9c5fc9e4 gcc/tree-ssa-loop-ch.c
-645298f688e973a3e1d7acfcffc05ebb gcc/tree-ssa-loop-im.c
+74951e076c5c3f11ba8ace4bdca67985 gcc/tree-ssa-loop-im.c
5b9f1da4873cf93a7e20c171fff2d941 gcc/tree-ssa-loop-ivcanon.c
-70ba279a855b2df414b092d106d56e1a gcc/tree-ssa-loop-ivopts.c
+67cb4740a81e4cea329782b29f418e12 gcc/tree-ssa-loop-ivopts.c
71426fb357e3bcef935be34c119a8ba9 gcc/tree-ssa-loop-manip.c
-e9f165fef7e3ddcc2eded855906e48f6 gcc/tree-ssa-loop-niter.c
+331339c4308f71330bf8008405c5b937 gcc/tree-ssa-loop-niter.c
5715b9e0230aab1c6070b689faa6d550 gcc/tree-ssa-loop-prefetch.c
48ff0fbf65a03c622450a93fa8aeb83f gcc/tree-ssa-loop-unswitch.c
4c10107ae48f35306617ea873661d70b gcc/tree-ssa-loop.c
-ace84307a5785c9babcc90d0d8f4c393 gcc/tree-ssa-math-opts.c
-7042507e8c000f1e57bf08465113eafd gcc/tree-ssa-operands.c
+765ab013f50305f9e4ce821d9716f789 gcc/tree-ssa-math-opts.c
+139041e9d962181f5293375043e94fd6 gcc/tree-ssa-operands.c
902946099d24a5650b7374cc9872a14d gcc/tree-ssa-operands.h
5c4544b5251212aa1c578f1db0565227 gcc/tree-ssa-phiopt.c
-61d7fa38457f05be01e92fc01aea304f gcc/tree-ssa-phiprop.c
-f5f75f3461f379689c19fda41c544231 gcc/tree-ssa-pre.c
-5d35d9bce1fa89bce495b78164ac8742 gcc/tree-ssa-propagate.c
+cfe089c64b8b38cc46382ba16ab9e0e1 gcc/tree-ssa-phiprop.c
+0d362020fc560a1d9f1a6aadd0677abd gcc/tree-ssa-pre.c
+965b31400bda5b77a2ecf747b4d02e93 gcc/tree-ssa-propagate.c
d689dae8bc71860440447aaa56d3ccb8 gcc/tree-ssa-propagate.h
-ccb418b5f513a043eb2365cd5e0ea0ba gcc/tree-ssa-reassoc.c
-9164fff972f032a49dc195d2024482ee gcc/tree-ssa-sccvn.c
+4ad881577b4f45d71720bcd4b2b9431e gcc/tree-ssa-reassoc.c
+6e3ed4492d7fdbc701319b3245a2b58a gcc/tree-ssa-sccvn.c
6fe27f9e3903a323a7a8520383288704 gcc/tree-ssa-sccvn.h
-f955ca98f3760640fdf592190d45e528 gcc/tree-ssa-sink.c
-aaa4a8f2996b73f5f673dc770da5b34b gcc/tree-ssa-strlen.c
-b1b8bf0889cf0194a3a4890fdc79edcb gcc/tree-ssa-structalias.c
-acd08e44ecd23aaeece83f93f57ebeb4 gcc/tree-ssa-tail-merge.c
-f4b8ce02e388c8d8e9e1f3b896222096 gcc/tree-ssa-ter.c
+3424d13639d5b60edfbcd708e03e2d88 gcc/tree-ssa-sink.c
+7c4959a99d6de6d114b4ed5d6e32fca6 gcc/tree-ssa-strlen.c
+5706a9b7950fee305480e62f55ca01b0 gcc/tree-ssa-structalias.c
+cf0417d0f050a08291a4a14db7a38bd6 gcc/tree-ssa-tail-merge.c
+0168f0066066856e9b7515bfd33c866b gcc/tree-ssa-ter.c
28d8b02aef8ef6946f8b7c29d61266b7 gcc/tree-ssa-threadedge.c
904ba6b826968d45fca050d5e867356e gcc/tree-ssa-threadupdate.c
4be7c600343b2310bb24330bc9b80a93 gcc/tree-ssa-uncprop.c
-4127c2f9c0d1a5c6783f4f6c77635771 gcc/tree-ssa-uninit.c
+77606e0fb4cc8109337dd7669c236d28 gcc/tree-ssa-uninit.c
37fd89c9f66107fc98f4aca2734301b3 gcc/tree-ssa.c
-974154544577f760468e3e725f3fba66 gcc/tree-ssanames.c
+3410fba52e59ba8837f42d6c4196fe77 gcc/tree-ssanames.c
51eabddd59bc78d4429087e45a56c937 gcc/tree-stdarg.c
ec19fbf599fd430b793997baef49ed67 gcc/tree-stdarg.h
b02d579419b07a18ffed08558d209934 gcc/tree-streamer-in.c
@@ -43096,20 +43610,20 @@ b02d579419b07a18ffed08558d209934 gcc/tree-streamer-in.c
7653bd266bb2a9e3627a09c78e26b03b gcc/tree-streamer.c
72da86c2c3239994df13f07eecd3ec00 gcc/tree-streamer.h
ae219e6773983a4088ee506dd8a48c20 gcc/tree-switch-conversion.c
-f3abaa64dd5a8c46f2fa73d3d3a92ce7 gcc/tree-tailcall.c
-35edb040b73680c98db01321d99ec192 gcc/tree-vect-data-refs.c
-af3c146a2c77a1ce7b8274fa674c1964 gcc/tree-vect-generic.c
+9e87e9dffb55317a4f8d1804fcfe797a gcc/tree-tailcall.c
+97112efd867ee55dea48c47a76a54fb2 gcc/tree-vect-data-refs.c
+02ea45f3ee100e2c79c0b4b93fba1843 gcc/tree-vect-generic.c
b2a892b4a6545df0a0f3b0f569d2f2a4 gcc/tree-vect-loop-manip.c
-b6159acae3ca76aa89b40171bc313311 gcc/tree-vect-loop.c
-009fe933b12db22a4ceee2d34e1a6a5f gcc/tree-vect-patterns.c
+11a741d03c394279b880e342109df047 gcc/tree-vect-loop.c
+7244555a083957490cee55bbf337148c gcc/tree-vect-patterns.c
ea261eecd956ae96972feab9c7b1b702 gcc/tree-vect-slp.c
-56139a9c7ad48c10fca0585a4928aa51 gcc/tree-vect-stmts.c
+f4ef66523fac316c726dc251c1919581 gcc/tree-vect-stmts.c
0f22eb73f3b6dd0a65712c22a41b5423 gcc/tree-vectorizer.c
-6bd1f962629a3368bdb0fa258ff8a873 gcc/tree-vectorizer.h
-a1fad0786150dad099eabb7c00f15d68 gcc/tree-vrp.c
-e18382b01cf6f875a0577db97ea6795b gcc/tree.c
+6770655d1cd2587d40470f28cf5da507 gcc/tree-vectorizer.h
+a72b8ab35cf93e04b104707f7fbd2889 gcc/tree-vrp.c
+11dad6689407c4cc1229d9b58a04d22f gcc/tree.c
ea4f261af9d9eb5624cb9c7d28b4c25c gcc/tree.def
-e48bfea13a1626e2c0034949bc6620b7 gcc/tree.h
+214dff0fa337a264a4b55771fcf17f26 gcc/tree.h
3675bacedaeb23c7edf0eed886458f1a gcc/treestruct.def
b9e611cf1b855be735ca59d511ca9c4f gcc/tsan.c
3923c56e74414c3c719a7f77f1463854 gcc/tsan.h
@@ -43117,7 +43631,7 @@ ae03ba4491a4f6faf6803cc227dbd68e gcc/tsystem.h
b19b6c77bca57869e5dac54e5361211d gcc/typeclass.h
aaa8eaf7d0bca1f6ea9cffe2450ec2d4 gcc/valtrack.c
149efa95c520fe592d05e745b7ffb517 gcc/valtrack.h
-7bdaec99f7325c7e2b37cdb094be29fe gcc/value-prof.c
+8c63a1fe99029874835f5388b72899c0 gcc/value-prof.c
0a307c6a0ce45ee465ce262230d3192c gcc/value-prof.h
9edce9cd38c81d65139cde9f7c1da14b gcc/var-tracking.c
0ee6e08d4fbed2dfbfe0e27395c9d1b3 gcc/varasm.c
@@ -43132,13 +43646,13 @@ aaa8eaf7d0bca1f6ea9cffe2450ec2d4 gcc/valtrack.c
39372cc3c49609bc5e0575a4a11a7de1 gcc/xcoff.h
97259effcb6b2de557d762808c0e8231 gcc/xcoffout.c
96596e234586faf6013b63f2e2046979 gcc/xcoffout.h
-f19f12402ff230ae3c1a5d77d858ac07 gnattools/ChangeLog
-cee94c5f34069420d5b60536299278c5 gnattools/Makefile.in
-72c9af35fea24756a96511605fe95c4b gnattools/configure
-2096eea599268b6437e99e27d1a585b5 gnattools/configure.ac
+6a5e4eb660cd1edf3a61d3fb626e5f30 gnattools/ChangeLog
+c7cddc92a9242f44a23f9ea8c48aef85 gnattools/Makefile.in
+3703306c0ae4df13700ce3864df918e1 gnattools/configure
+fabce173692a8f7f3687ec92e157c8ec gnattools/configure.ac
59530bdf33659b29e73d4adb9f9f6552 include/COPYING
d32239bcb673463ab874e80d47fae504 include/COPYING3
-3c33cc110ffc46286f78aa5aa7db38f4 include/ChangeLog
+90ab7f8082ba56f2581061aebf6ee445 include/ChangeLog
4263432a72ff47ed8bf420208ee7eea5 include/ChangeLog-9103
c10455e70062ca837a41a6f0da8f1afb include/ansidecl.h
e26b43ff0d807159894134d22e503555 include/demangle.h
@@ -43170,7 +43684,7 @@ e34d525d7faceda0dd5cb3eae49c1548 include/timeval-utils.h
0294cecbb1f66d640ccba3a5d862d05b include/xregex2.h
f648a66ed08e079e26a24c4346a3ba03 include/xtensa-config.h
0afce91a3daa1fdc32ee36370c1129dd install-sh
-8b55bc2f8e91337b904b150f34be0843 intl/ChangeLog
+7f5145f3947f65f7619f918ed28550ac intl/ChangeLog
cad1d6fab2274517783de7433c0faa74 intl/Makefile.in
6ec998bb4716c744bf8185e607f69301 intl/README
76ca170a525d5b84d90f0478fe788931 intl/VERSION
@@ -43212,18 +43726,18 @@ d50a8c6c5b41089930accbdce767d3c0 intl/plural.y
b4758a0194e3e41362b939911472ce62 intl/relocatable.c
bedade7bcfc3bc5eb09a2c6844f637f3 intl/relocatable.h
43f287d082528203fc85c1d2d81bf30d intl/textdomain.c
-d20ab12c515bbedaa3e197a49093cf94 libada/ChangeLog
+e348f9a381e35258746c3131578955d2 libada/ChangeLog
f2d2c3ff182f32f52aee7efced009cba libada/Makefile.in
1d3025570b3a47e06a8c08a1af035817 libada/configure
bb6690a32f61acae48558269e9aed430 libada/configure.ac
46d3fe6da7a771cc2d5420c4137a6861 libatomic/.gitignore
-118ca684111ef4b8aa0eee236ea9ef99 libatomic/ChangeLog
+62c5cd183c302781efaaaa5bcd63032f libatomic/ChangeLog
b59ffa866cb861ebba5fbe51d5064bb7 libatomic/Makefile.am
be6ba7ac41a48569bb10480827c68c24 libatomic/Makefile.in
f7853b06953072a9987a45a5b00782d6 libatomic/acinclude.m4
20bec9c79c213c128f8ad84891bdb792 libatomic/aclocal.m4
dd9be7a914a0283b9d9cee38fc81cdd5 libatomic/auto-config.h.in
-7c3b0f2eab4cced8586e2029396cdda3 libatomic/cas_n.c
+789a6d7b6d995078ffc97ea83ea902ff libatomic/cas_n.c
6d24b399d2e2a84bcaa1119400f7aed0 libatomic/config/arm/arm-config.h
ffbafc11a342b54ceb9c7fc93361200e libatomic/config/arm/exch_n.c
6b272347b6495b829ff036ddf4d65e93 libatomic/config/arm/host-config.h
@@ -43237,7 +43751,7 @@ bf86cc9416d50216f24439303acc544b libatomic/config/posix/host-config.h
d04f86e742ddfedb71fb4a3d0ceede39 libatomic/config/powerpc/host-config.h
725eedaa4941ab57d5bcb3df07b8c91a libatomic/config/x86/host-config.h
94e78d4e86dae45b0744900b5ce026c2 libatomic/config/x86/init.c
-a6402dfb0daf3acc074b5628d7cae2f4 libatomic/configure
+c955c2b4ce45c4d8cbb23677fe230929 libatomic/configure
0c4b53e5403066f745dcd20ae370b7b8 libatomic/configure.ac
817b261ffd1520d693de776f891ca8ff libatomic/configure.tgt
d810e5b50e2c81a5bb389901135959e2 libatomic/exch_n.c
@@ -43293,25 +43807,25 @@ d7602ad09d5eea3db942d4889dbbd78c libatomic/testsuite/libatomic.c/atomic-store-2
fe8909975b6ede03308685e9f19dddaa libatomic/testsuite/libatomic.c/atomic-store-5.c
cce610fe1b2413dc6f097cb40816e9e8 libatomic/testsuite/libatomic.c/c.exp
97b0c9cdfcb733664bdf4efe0f5dc449 libatomic/testsuite/libatomic.c/generic-2.c
-1ae46636573c1221815bccf793cc8d22 libbacktrace/ChangeLog
+eff23930c98dc10c2135c17505fb0577 libbacktrace/ChangeLog
055963ca0d14c116102ca5aae7974dc6 libbacktrace/Makefile.am
-e213a98a07f1e1abb9747b16293305ba libbacktrace/Makefile.in
+fe788b0c5094a467163db01545939883 libbacktrace/Makefile.in
1987c0495aeee1bc47709f399772173b libbacktrace/README
1767ef1a0fc748177c6fef016691c1ba libbacktrace/aclocal.m4
-cedf2d90e30ad3e9a6a4139ffbb66af2 libbacktrace/alloc.c
+ca0677015601b42ad203a73b3ac7656a libbacktrace/alloc.c
ea35b83ff2eb2bff286f2781693b0cc7 libbacktrace/backtrace-supported.h.in
2a00edb00d7c5e729c1e28590e62b7c9 libbacktrace/backtrace.c
e654d815ebe2047c91da719c00c64105 libbacktrace/backtrace.h
1c1c2473f17eea57d06599415d3ec9dd libbacktrace/btest.c
254dd781f1c0e9c6f2b5568fd5e014d1 libbacktrace/config.h.in
-b2a8f6f904c2850373e34fb91a6e8d5b libbacktrace/configure
-b63e157f6534966871b578f2959ef4b7 libbacktrace/configure.ac
-276841e73dacfee41c1e9619a6e20881 libbacktrace/dwarf.c
-6facc13890555c8f5313257178db7b32 libbacktrace/elf.c
+a800e0d2df4847140f4fde7bd31fab79 libbacktrace/configure
+09624c6af4323499401197b65d80bbc9 libbacktrace/configure.ac
+95752c7b6800f8efbc76077b9419313c libbacktrace/dwarf.c
+3966e88912aa511631fa8c99935e2e91 libbacktrace/elf.c
b38b15d4ea9a5fc91a635da131511b11 libbacktrace/fileline.c
4c73c8c2d1aba3b0c421e8b8e163b7ed libbacktrace/filetype.awk
-0c92470789a906c123a791d2cb15ebf5 libbacktrace/internal.h
-dd2084a53cc4f76fd9b72df91e9646a1 libbacktrace/mmap.c
+fcd2f2aa0465cf1df7e24c2f9ba5565b libbacktrace/internal.h
+5b9327d8e1e85febb63a5bb4d022bd9d libbacktrace/mmap.c
f8592ea399b1a0423dd9784e4d7ae1d1 libbacktrace/mmapio.c
50b784379aab86f1a3acf40d7d695778 libbacktrace/nounwind.c
e6a7d682b56a7656c07a21ed86d0794e libbacktrace/posix.c
@@ -43320,7 +43834,7 @@ e89d3578964d0d1a5d4b598dee4a43f5 libbacktrace/print.c
202326331fb5f3f5a431e0149aec7525 libbacktrace/simple.c
e88bff20263a0e56f81e1d76f984514b libbacktrace/state.c
92c58abbfc91efaa3db8b440780fd2f2 libbacktrace/unknown.c
-30bced26034a954c4d04a147d3708077 libcpp/ChangeLog
+e0db6d3fbf21b2d52af183a08523823f libcpp/ChangeLog
26ffb201e443bb679ed64a0329737f2d libcpp/Makefile.in
7307c791a8de641ef6dada9a179ece57 libcpp/aclocal.m4
958e637c9d5fd3c9b53d0fdc3607f896 libcpp/charset.c
@@ -43331,7 +43845,7 @@ e88bff20263a0e56f81e1d76f984514b libbacktrace/state.c
400bdbf133c01d42255ec6a5db9425f9 libcpp/directives.c
cff93fada1d4ca73770b650be530e7f4 libcpp/errors.c
5d994ccf1668139e3c229e05834374ac libcpp/expr.c
-3a384d4d3ccc9fb3a607443bb455870e libcpp/files.c
+ef1589eb25ac7e8c8a8999fe276bb0fd libcpp/files.c
1982171cdcd287ebe9f30f73917d6798 libcpp/identifiers.c
75f73f87b4f8614260b963af92781cc0 libcpp/include/cpp-id-data.h
21b7656e86977a66d2700b5ed0d810f0 libcpp/include/cpplib.h
@@ -43340,13 +43854,13 @@ ce0d10ebdc1e4a51fa318973c54896e7 libcpp/include/mkdeps.h
86772bf3a204261f1ecae634c74fc882 libcpp/include/symtab.h
28f79eba6ae7d1d6b0ad25333696251f libcpp/init.c
648148435903687221b7d93d7d4e6525 libcpp/internal.h
-18404597af0cd28b61d2082a9a0c7cb0 libcpp/lex.c
-bbfb8be489489aebc889907b156777ff libcpp/line-map.c
-b1b184d2ad5577b189dd6795e51191b6 libcpp/macro.c
+f1ae566ce9d15fd3df4eb95a09de0220 libcpp/lex.c
+01d39e74aaf7c1efb67bfa9c7973efa6 libcpp/line-map.c
+31e6619834df4201ca2cced1c4f73d1f libcpp/macro.c
611224973c1e6632c4ad849a0ac1b31d libcpp/makeucnid.c
634171cd32f244f676d7b06b32382989 libcpp/mkdeps.c
fa26d0b2c083921ac59df21f59b97b0f libcpp/pch.c
-6680150b2d5a76cbaf6f652b59a9c631 libcpp/po/ChangeLog
+b3beb212e67b60b7e6465b97b08df922 libcpp/po/ChangeLog
d4649bf51d8ae9e4289419795d18d32f libcpp/po/be.gmo
d9cabe81984e7eabac3d6fa1f7888b29 libcpp/po/be.po
2506ac634333a282db74796aede450bd libcpp/po/ca.gmo
@@ -43372,14 +43886,16 @@ edd978ede45df89f653adf97c34ac73f libcpp/po/ja.gmo
1a3f46598d9a590438e7e05739de65e5 libcpp/po/ja.po
561ec56815b29c9ba0e13a4650addd98 libcpp/po/nl.gmo
6583f81e550c253db628a9037e5f542d libcpp/po/nl.po
+95ae82a5df1422bbd9ec59209a8a39a7 libcpp/po/pt_BR.gmo
+ae4f2dd16105bb7a653d353e723f8104 libcpp/po/pt_BR.po
d1ea3e9c91a694f749b05677f4e6fc5c libcpp/po/ru.gmo
86373897da25e9d9a8fcd4144d7454bc libcpp/po/ru.po
-ab6f1b275060051b3622b4ce25b41b9e libcpp/po/sr.gmo
-439ae85eec58b156f479e5e7039c56d1 libcpp/po/sr.po
+ae43f19622a93fffa760d95a62c566a3 libcpp/po/sr.gmo
+815c0fc23bb586e702e1d33199e9fc78 libcpp/po/sr.po
a66170770253598cac1e80a989ec6951 libcpp/po/sv.gmo
b1b714d95a64e26e6a2941c1bd0e8a33 libcpp/po/sv.po
-c6364dd179bbe2cf22453e017a35ee7a libcpp/po/tr.gmo
-8e34f211a62e93dda327dd97497711fb libcpp/po/tr.po
+03544fc2333854edf9e28b17f50a78bc libcpp/po/tr.gmo
+a531aa044d0c9eea2944815ddf6ae950 libcpp/po/tr.po
194ed7422f4f6438f90acd0ecbc81909 libcpp/po/uk.gmo
97f1cc8dda6a65ff22f6fb272e9e3445 libcpp/po/uk.po
c08158cb889f765450dd839ad844dbef libcpp/po/vi.gmo
@@ -43394,7 +43910,7 @@ a9e135910542909365cd19b78530aafe libcpp/symtab.c
b623a60e3ea9edeb8cb36adca65cf47e libcpp/ucnid.h
ace1c093717ce9f7354fc083ea722589 libcpp/ucnid.tab
a6c2b3de06c7424706b16f4c206396a1 libdecnumber/.gitignore
-e2e77750ec0b4c8b51162c0a1c0d91ef libdecnumber/ChangeLog
+18ea4aa3b74f5db3ee9a9ab332a2444c libdecnumber/ChangeLog
f511cdc1e972856b3b009d7a000fd9e0 libdecnumber/Makefile.in
2746a1155d319a2cda823ee5b58921ce libdecnumber/aclocal.m4
c554da3dd320de9f364bb99511586e0a libdecnumber/bid/bid-dpd.h
@@ -43456,35 +43972,35 @@ a97c47969dfc92a7666dfe3c2e1e1448 libdecnumber/dpd/decimal32Symbols.h
7bff859e94ae843784d72e241ab2b5c7 libdecnumber/dpd/decimal64.c
15afb5cf507c63955aef09267fbaa571 libdecnumber/dpd/decimal64.h
0f6db29710e7075c2fd62bc4478b3b8d libdecnumber/dpd/decimal64Symbols.h
-c229686c75741f2e32fd055a7d42cb13 libffi/ChangeLog
+408161d48d0678ff50b24be6e7720df3 libffi/ChangeLog
ba66fc19311348d373ec271be939a659 libffi/ChangeLog.libffi
fbbc216bc25d759a72ea3e6d734af56b libffi/ChangeLog.libgcj
d946d2b97454ad50a1dbfbf48923c5be libffi/ChangeLog.v1
e54c573c49435ccbbd3f6dc9e49a065e libffi/LICENSE
-0896203920fd026dba859b6f8e979221 libffi/Makefile.am
-262f7bd944c5099e2e971f7833ee3c39 libffi/Makefile.in
+911e3796e41c5848841025a0f4a14a2e libffi/Makefile.am
+f4117ea175aa037ba6e6222ff187cd18 libffi/Makefile.in
6900b56e07e40605e41fa88c6ef8cde4 libffi/README
0ec3418e6c2e6b89c24cffd4322b6368 libffi/acinclude.m4
8a5a7cd754ba81ced932dd13b086f4cb libffi/aclocal.m4
c9faebdbe02f87b62c091d969dad5a0f libffi/build-ios.sh
-524bf51636ca2be6d5038f35f55c36cc libffi/configure
-04fd40064ce81f59d63fd77f42c0debd libffi/configure.ac
+57879ac0e3baf03623bea65c77a5aa22 libffi/configure
+ae845e087dc3d68e728ac8beb670fd3a libffi/configure.ac
bec544523f8f7f3d5136f67598cf609a libffi/configure.host
-108fed52798a5a816c646c5c42a3d35c libffi/doc/libffi.info
-f9918c442ad99f826302594afed89dc4 libffi/doc/libffi.texi
+9ecb914ab8e1b066bddff81795319511 libffi/doc/libffi.info
+65e5d8fbdfe04708a75ab5de0698e7a0 libffi/doc/libffi.texi
d9de4b04d3550cec2e8e18ebad6434fc libffi/doc/stamp-vti
d9de4b04d3550cec2e8e18ebad6434fc libffi/doc/version.texi
-6ae15d59b5e10f28782d3f9996cf362f libffi/fficonfig.h.in
+15aedea2a8249c99a60135f01f6d5409 libffi/fficonfig.h.in
a99550f29ba59f299e084e06dcbb10ae libffi/generate-ios-source-and-headers.py
0e16b0cbff2ea01ff37d3d4e6c5231ec libffi/generate-osx-source-and-headers.py
f165b6fb33a20fdd5f1eeffbafa83d78 libffi/include/Makefile.am
-ba1ca55cb592e707c539439aa0218ff1 libffi/include/Makefile.in
-2f3b74e8ef7fa20b4364bb357985205c libffi/include/ffi.h.in
+6d01ac3740ef135754c3fb84d291c8f2 libffi/include/Makefile.in
+77b5a024be24be8f616ecec798f2bcee libffi/include/ffi.h.in
71b409d892b5cf178ae60b8e68610c5c libffi/include/ffi_common.h
a27c9f3d7ee48e42bd4022a2e5d29c99 libffi/libffi.xcodeproj/project.pbxproj
fea69bf0c254aa8f860a0b0ed487546d libffi/libtool-version
ade48c43a4229988450151e8d3fd4ea2 libffi/man/Makefile.am
-1e9a801bff46496a636d422063fec952 libffi/man/Makefile.in
+51903dbfc60a7d227e18e8eddb55d9b5 libffi/man/Makefile.in
375a858985ec2096671f484b1fe9b14b libffi/man/ffi.3
dd7b61f56e75a1d052dd10dc02ac4940 libffi/man/ffi_call.3
6231c515f86b38f9993e2c327ae0b058 libffi/man/ffi_prep_cif.3
@@ -43541,14 +44057,17 @@ a0da8c57c7ff9de674c6728fe321f0be libffi/src/pa/linux.S
c1917bbd6c116317e71dbc2d92d7f163 libffi/src/powerpc/asm.h
cb116cc1ffaabda1a64689d60d0fb301 libffi/src/powerpc/darwin.S
6856b1cf44ef10b0c181b08cbe4773a5 libffi/src/powerpc/darwin_closure.S
-03995f6e40d76f66f81de8481ca26d5a libffi/src/powerpc/ffi.c
+05e889da64d12fddd5756f96e36295ff libffi/src/powerpc/ffi.c
8714142018b529d0475a927bb86ff421 libffi/src/powerpc/ffi_darwin.c
-c6308c0bafe2c30785a274e6972f38e8 libffi/src/powerpc/ffitarget.h
-c9faf1760be1745d8b2d0300174f2ce6 libffi/src/powerpc/linux64.S
-a863fb13ba74dbfd56bb87746c991b42 libffi/src/powerpc/linux64_closure.S
-13b8217e70b9771fe1c9a8cab93ed859 libffi/src/powerpc/ppc_closure.S
-ab24fdf5ea0e700b4d272d00c4099c95 libffi/src/powerpc/sysv.S
-50404dc78626d328fac6555a5a12ce01 libffi/src/prep_cif.c
+5558bda27f63adb886be51bbe9912c93 libffi/src/powerpc/ffi_linux64.c
+ad920fbd3d5ed968ae7c20ab20ee2c6e libffi/src/powerpc/ffi_powerpc.h
+06924a5f4f60beb56bc534f8e34bda8c libffi/src/powerpc/ffi_sysv.c
+d1ea775ccc994d02617b2f012a84b85a libffi/src/powerpc/ffitarget.h
+2f94c17f01e51c088a1fd6fc239840d3 libffi/src/powerpc/linux64.S
+0a9c4c3cfb518fce2d4ca489e20a1364 libffi/src/powerpc/linux64_closure.S
+a169003659a311d9f76d2f82675e19c3 libffi/src/powerpc/ppc_closure.S
+2f10ea26ef0d15b452fe3634204c903e libffi/src/powerpc/sysv.S
+808a18176c71e22533abde2084483fae libffi/src/prep_cif.c
a9086fc5c1b5440f02dcbc425f093ae5 libffi/src/raw_api.c
fa87da399314d3e2b36e8ada92b23789 libffi/src/s390/ffi.c
049799a1dddee21c8c83b044bed8bdc7 libffi/src/s390/ffitarget.h
@@ -43566,7 +44085,7 @@ bafcfb82eb59a68953d6ec8c4c56812b libffi/src/sh64/ffitarget.h
74934128ac3facd5eb561545bdbc5532 libffi/src/tile/ffi.c
cb2b6c2fe568c674b50f708613772da7 libffi/src/tile/ffitarget.h
5bcd714b3c17396de28e3b06eab0796d libffi/src/tile/tile.S
-50ac67d061e9312c64b3ed7662b64e13 libffi/src/types.c
+77fbd156e34978603f4a59f4fad2a629 libffi/src/types.c
e988aa92b714d72199c40b30edcaff89 libffi/src/x86/darwin.S
241e0adeeeba9eb067412930a0229857 libffi/src/x86/darwin64.S
3b72ad22370d7ed4c98214972468af9a libffi/src/x86/ffi.c
@@ -43579,7 +44098,7 @@ c42fa13c9a55b091cc9378a92683f19a libffi/src/x86/win32.S
49323328476b0b856f8d40e7debedfde libffi/src/x86/win64.S
1ded054093de910d9786c62bc4fe8cc6 libffi/stamp-h.in
e0c4f6254c2254003c3cbdb93a459043 libffi/testsuite/Makefile.am
-da3ec61ae3763ea1fb5dc8183cc1bb0a libffi/testsuite/Makefile.in
+bb1baf976efa67f3e6fa18c18c1b72ec libffi/testsuite/Makefile.in
dce80ba7e038ca18591aabc6d3d2582c libffi/testsuite/config/default.exp
28d7fc68407c4f9b22e3323e76e463bf libffi/testsuite/lib/libffi.exp
68b837f4196cfa6be7480142a5e5eacc libffi/testsuite/libffi.call/call.exp
@@ -43631,10 +44150,10 @@ dddb70c98e06d942bf8d51abe791492c libffi/testsuite/libffi.call/cls_align_uint32.
2557fa6d36b4ef065afbf0b13d802431 libffi/testsuite/libffi.call/cls_align_uint64.c
1a8dc4a7a5c36e3f5522d0c93fcfe23f libffi/testsuite/libffi.call/cls_dbls_struct.c
0bdb41c9d86c6676cf323baed9763580 libffi/testsuite/libffi.call/cls_double.c
-3690a29850d0f9983a277c6ec194581c libffi/testsuite/libffi.call/cls_double_va.c
+85af19de6f9aa3bc98869658b34fd21c libffi/testsuite/libffi.call/cls_double_va.c
6e1894c5c87c0ef2ea5672eedde623ae libffi/testsuite/libffi.call/cls_float.c
3d74801fc43c16410045f572c1bb9424 libffi/testsuite/libffi.call/cls_longdouble.c
-2bd8779f56bf4d48b421b03796cba0bc libffi/testsuite/libffi.call/cls_longdouble_va.c
+5b0d8dfbd840efe0b844f40f2343f90c libffi/testsuite/libffi.call/cls_longdouble_va.c
c710800140844efb82423cbf42ac7ae4 libffi/testsuite/libffi.call/cls_multi_schar.c
f70fd12d1acd41d2f47f4294d48106fe libffi/testsuite/libffi.call/cls_multi_sshort.c
3ee2f37ad319ffa1b8afb2298ab42c3e libffi/testsuite/libffi.call/cls_multi_sshortchar.c
@@ -43730,16 +44249,16 @@ d47c79b281339983862a8e52d8c73f0f libffi/testsuite/libffi.special/ffitestcxx.h
291be426192f460f6a07dfe1c96ab094 libffi/testsuite/libffi.special/special.exp
93fc3ea311b79f64004992807ce75d1e libffi/testsuite/libffi.special/unwindtest.cc
185d0795017fbbe253a13db8e34085f9 libffi/testsuite/libffi.special/unwindtest_ffi_call.cc
-6b527b7b1678b7ef76d0c49d014006a6 libgcc/ChangeLog
+2afd177cbb02182f07c181fd7c1b1636 libgcc/ChangeLog
bd31c7bbe6eb52bb7499c0f55df9c9e1 libgcc/Makefile.in
-30ea6c4f2676851924c57b989ee8ea8e libgcc/config.host
+f7928b6a3e9faa8fc1363dd07fce752e libgcc/config.host
25a291c353009228fc85e36e91e64c08 libgcc/config.in
8b68678683255713ab4f8c57104db60e libgcc/config/aarch64/crti.S
d3019e9c9b011f9f0b46b52674ce810a libgcc/config/aarch64/crtn.S
d3138f9ff10b7dc30d8089a1f4dd9f92 libgcc/config/aarch64/linux-unwind.h
88abe84ac0c33497b81192786cbd07cd libgcc/config/aarch64/sfp-exceptions.c
-6c55b901809db528a1dc952efd9db5c3 libgcc/config/aarch64/sfp-machine.h
-5f9ca5f940bea9f0773fabdab7cc9c4b libgcc/config/aarch64/sync-cache.c
+ecd26f0f24125873071b8253c0b8b4e3 libgcc/config/aarch64/sfp-machine.h
+1f0bf278cec4d19b79ce30f24f6828ec libgcc/config/aarch64/sync-cache.c
bb8cba7191f4f2b117a9c83fc4b71e04 libgcc/config/aarch64/t-aarch64
a0a46a9affff177d894176604c30c40d libgcc/config/aarch64/t-softfp
d2179910497848ac8cf34d0f815a13bc libgcc/config/alpha/crtfastmath.c
@@ -43769,7 +44288,7 @@ efec251d1cd31334d3e7618de4860aec libgcc/config/arm/libgcc-bpabi.ver
dcff0f03c1e791f1d82ca70642b2a820 libgcc/config/arm/linux-atomic-64bit.c
dc2bbc6bbd44fc722cdc19a63a7836cf libgcc/config/arm/linux-atomic.c
97ebbc98e2142e461c7f01cc4878bea2 libgcc/config/arm/pr-support.c
-8078e9354b41d7533e0502e2cd3bee2b libgcc/config/arm/sfp-machine.h
+2714719e1d8a6291619d2a302e329df4 libgcc/config/arm/sfp-machine.h
2b2a70ecad5ee3d0ce0969d8e0bbe581 libgcc/config/arm/symbian-lib.h
6f46bbbd9e7334a061e6dae05c1319b2 libgcc/config/arm/t-arm
95ccb8d9807e7229274f546d4664a038 libgcc/config/arm/t-bpabi
@@ -43786,7 +44305,7 @@ b2fe917cb56979809662a1958cd87c57 libgcc/config/arm/t-vxworks
0a814be9a668116ea231935f6847a439 libgcc/config/arm/unwind-arm.c
e5e2d6717d5b6c83e2363f96d46dc917 libgcc/config/arm/unwind-arm.h
394ecf57074f9c41c39b265fb95f9481 libgcc/config/avr/avr-lib.h
-c0822f135e9093219a81a5967fd5b9d8 libgcc/config/avr/lib1funcs-fixed.S
+41638e749f934038f296f19248afa151 libgcc/config/avr/lib1funcs-fixed.S
14c3ef9b5848b2286025774a1763e570 libgcc/config/avr/lib1funcs.S
622f81485f02d0eac2caaafa7d3a2fd1 libgcc/config/avr/lib2-object.mk
9c1facdf81ee7ea3c768ee0d2dedcbea libgcc/config/avr/lib2funcs.c
@@ -43916,12 +44435,12 @@ b2bcf8b944f937cb4f3799c02670dcee libgcc/config/i386/64/getf2.c
a92aa384cf96b81c0dbb642826200dd7 libgcc/config/i386/64/letf2.c
d1337b28acd8dbde9817492f9027dbc3 libgcc/config/i386/64/sfp-machine.h
498bbaf506a5bbdaa793f66399ece491 libgcc/config/i386/64/t-softfp-compat
-2151715d8170b937668106143375cc6f libgcc/config/i386/cpuinfo.c
+f07936802d5a0924b9c71c2550d9216e libgcc/config/i386/cpuinfo.c
d9783e3e70223c2e97cf70dadf00c055 libgcc/config/i386/crtfastmath.c
00b81fda8bb02f823f1fe59c9df884f2 libgcc/config/i386/crti.S
df0dc1dae9b4ea977f72c0c233acd40b libgcc/config/i386/crtn.S
d0641af4dd4149d04907ede12784b951 libgcc/config/i386/crtprec.c
-3cfcbfa04b23e97493410374a971fa95 libgcc/config/i386/cygming-crtbegin.c
+f5c43a3ba9dd3ace67f3b741239c74a7 libgcc/config/i386/cygming-crtbegin.c
6260bd13810ba62c277d8f2fa77ae5a6 libgcc/config/i386/cygming-crtend.c
bb5ea425cf18f73f1bb9c482ca5aacbc libgcc/config/i386/cygwin.S
4486a9d569211bdd64bddc18bc640d27 libgcc/config/i386/darwin-lib.h
@@ -43936,7 +44455,7 @@ bb5ea425cf18f73f1bb9c482ca5aacbc libgcc/config/i386/cygwin.S
a6e599d016eb293a1b9a973841673782 libgcc/config/i386/libgcc-sol2.ver
ddfdfb23c81fe10a52c65569f03a0144 libgcc/config/i386/linux-unwind.h
65090758430b0d15d4349d9ea8e53f50 libgcc/config/i386/morestack.S
-235e582eb23f58729386f1d24ea9dc29 libgcc/config/i386/sfp-exceptions.c
+5e597e1b6a33294e858aebdccbded04d libgcc/config/i386/sfp-exceptions.c
f577b72c9bafd2f511c183d75bad7726 libgcc/config/i386/sfp-machine.h
7dbebeca54f3f203d523f3e2fde649b0 libgcc/config/i386/sol2-c1.S
fc8d8cdac9297d6da931d162bd7bfa52 libgcc/config/i386/sol2-unwind.h
@@ -43996,12 +44515,12 @@ bb4c79dfdc7020c68212eae69b7526ae libgcc/config/ia64/t-softfp
552ede49162d3a4fb9e1e113de11e8b5 libgcc/config/ia64/t-vms
fb9e0402d7f976b597835a1c56842c6f libgcc/config/ia64/tf-signs.c
c1cdfb43b17ffe3ad6bf5a9e2538736f libgcc/config/ia64/unwind-ia64.c
-d3c6babcf8a35a846512dcca1e8129d0 libgcc/config/ia64/unwind-ia64.h
+9d6b258eee8b75c6710b1fc246c8be6a libgcc/config/ia64/unwind-ia64.h
46963207fd3365c766c4b1dd74b3ff64 libgcc/config/ia64/vms-crtinit.S
898656d15607bbf736ed8d48f0bed276 libgcc/config/ia64/vms-unwind.h
ec20ac1b60c3f204e84fbf20ac8b2a3b libgcc/config/iq2000/lib2funcs.c
102f7dad8ad6b54434a1b8313d1e42c4 libgcc/config/iq2000/t-iq2000
-7c1d6f2260e6490aba21c3f6f0b6ae5f libgcc/config/libbid/ChangeLog
+eed8a63a81f2cf3b3aa722a42ad892d5 libgcc/config/libbid/ChangeLog
b835dd462e5fd34b7198fa877faaba74 libgcc/config/libbid/_addsub_dd.c
9b5c5028d03c371b7b637fed046684e5 libgcc/config/libbid/_addsub_sd.c
aab1fbd92c8dfbaddbc821b25f242afa libgcc/config/libbid/_addsub_td.c
@@ -44227,7 +44746,7 @@ f75f4d18eb7ae2677787d98c39337a3d libgcc/config/mips/t-mips
6403b3d85f0ed6751174f1088d074f62 libgcc/config/mips/t-sdemtk
5c0de0b169d03e1fbd60d32ce75e4118 libgcc/config/mips/t-tpbit
532a76f856d3755b780a19a91bdd1654 libgcc/config/mips/t-vr
-33c78dbdce43ba967e3eb5d73dd91074 libgcc/config/mips/vr4120-div.S
+d49cb0e8a625e5deab570b0599831b5b libgcc/config/mips/vr4120-div.S
58381155f322343bb5e25b3b6b7bada7 libgcc/config/mmix/crti.S
1128a6133ece93166943e6daa2f0b533 libgcc/config/mmix/crtn.S
41478efd1b19b3c7c9426d8e843f3b39 libgcc/config/mmix/t-mmix
@@ -44329,13 +44848,13 @@ cc9dfb63fb2751f1b0d887283bef8993 libgcc/config/rs6000/eabi-cn.S
16353fc5c231e80f84b3b164bf71d511 libgcc/config/rs6000/freebsd-unwind.h
065bc63c96e4230986321a556beebd41 libgcc/config/rs6000/gthr-aix.h
887e251c6d58fb3a108e0aaf9d3f5944 libgcc/config/rs6000/ibm-ldouble-format
-91a11b75a1c27986f1229e4fff7c4f0a libgcc/config/rs6000/ibm-ldouble.c
+3740a1a72c5ef1d6ef723b995fd48ac0 libgcc/config/rs6000/ibm-ldouble.c
ced1d5aee32a5d37a55cdcab47689d83 libgcc/config/rs6000/libgcc-aix-cxa.ver
f0e66111fa0e721ac9111de5fa85186b libgcc/config/rs6000/libgcc-darwin.10.4.ver
ff237c405b951422888986afadc16f70 libgcc/config/rs6000/libgcc-darwin.10.5.ver
ff7fc7001ced0eb479d37951968dd827 libgcc/config/rs6000/libgcc-glibc.ver
7aa6f4e782960be3e2b43998ef395330 libgcc/config/rs6000/libgcc-ibm-ldouble.ver
-39bd1066ad61db0f00a27db43e62919c libgcc/config/rs6000/linux-unwind.h
+3e21f85379e2f625c76d09124cd36e07 libgcc/config/rs6000/linux-unwind.h
aab75a3b7f0f48d369b7a2c381927dac libgcc/config/rs6000/ppc64-fp.c
818c5a219421d17849682592640ce2e9 libgcc/config/rs6000/sfp-machine.h
d0cfa537c9fa180dfebd001b50d9296a libgcc/config/rs6000/sol-ci.S
@@ -44354,7 +44873,7 @@ ad6ae6684d4dec9ddd78efad67d1af4b libgcc/config/rs6000/t-netbsd
bd7ceb31787a37d9cb144c41d41acfb3 libgcc/config/rs6000/t-ppccomm
89dc5367808582c503f03a34193e467b libgcc/config/rs6000/t-savresfgpr
cd3569232b2eaa89f262a50aed021f08 libgcc/config/rs6000/t-slibgcc-aix
-e292b54eab822edd6f0664dfc09dd7cd libgcc/config/rs6000/tramp.S
+0c86ed70b003ed81d1cd818de4e9c32b libgcc/config/rs6000/tramp.S
e6d69b4623b7bf13cb1de6783bd5ab59 libgcc/config/rx/rx-abi-functions.c
d2da97a418899b7b6e5e8429ca25aea6 libgcc/config/rx/rx-abi.h
da7bc70013c60be91cf9f085fed52f1a libgcc/config/rx/rx-lib.h
@@ -44368,7 +44887,7 @@ b16489b7c37a63fa518d47ca1295a42b libgcc/config/s390/32/_fixunssfdi.c
6101649604e2b3fdd6179e1aa53066bf libgcc/config/s390/32/t-floattodi
35fb69e7d4dfef402ac37fda75e3ef89 libgcc/config/s390/gthr-tpf.h
ea5aec5752a59c6b4ee1a4d5afcb7021 libgcc/config/s390/libgcc-glibc.ver
-2d2824050531eb82f78b4aeec95510a2 libgcc/config/s390/linux-unwind.h
+392f15247291f349dd22c81e7aa3ae5f libgcc/config/s390/linux-unwind.h
c150e28c734710584eba8e77d2ff5105 libgcc/config/s390/t-crtstuff
35a77f8c50ecf16802e00e647ad94026 libgcc/config/s390/t-linux
f41123a30f51a8817eb486a434d6824c libgcc/config/s390/tpf-unwind.h
@@ -44476,8 +44995,8 @@ f5fb690a7006c3237a8adededc5944a9 libgcc/config/tilegx/sfp-machine32.h
16c22b80e53f817334a19c0b48ad554d libgcc/config/tilegx/t-crtstuff
5e2260f13769a960c8e1f24b0c9847e4 libgcc/config/tilegx/t-softfp
94fecaba2fa3fca31d038d5739e45e51 libgcc/config/tilegx/t-tilegx
-b8c77a6c19ac0a0422492d6e37274543 libgcc/config/tilepro/atomic.c
-c838682d3324d77e4d7cb3c5de804c18 libgcc/config/tilepro/atomic.h
+56424a30afe95252b9c4959d63ccb1f9 libgcc/config/tilepro/atomic.c
+6a1fdf7ebb19f9b5146c633d9cafcefc libgcc/config/tilepro/atomic.h
b2c55278318724fadc2286dd7751c435 libgcc/config/tilepro/linux-unwind.h
861e6fdc8a21cc807126682f8474a6e9 libgcc/config/tilepro/sfp-machine.h
408c526d0f23a7bc9292f0772b4a096a libgcc/config/tilepro/softdivide.c
@@ -44642,14 +45161,14 @@ c5e1488a025c3a81ee12116d7e02d356 libgcc/unwind-dw2-fde-compat.c
e55dca88aac1b014ab4d26d6f0450e78 libgcc/unwind-dw2-fde-dip.c
ce32603c06695e84543e60ba07081406 libgcc/unwind-dw2-fde.c
912fd64b341efee4aaf83cdf63e4d11c libgcc/unwind-dw2-fde.h
-349e235a01b871024e445edb4a985330 libgcc/unwind-dw2.c
+cb83711a4cc08d7f79ceeff970508e6d libgcc/unwind-dw2.c
08ab67dd6b1a9c4b56cdf819b49007d4 libgcc/unwind-dw2.h
4f690feb235646a0c59ce8190e1a2e24 libgcc/unwind-generic.h
47faab3e588ca633f6eaf0387b2d3594 libgcc/unwind-pe.h
-379d10f50b128a7d7895fbc2854200ee libgcc/unwind-seh.c
+c09f417958990737804fca53f269dc6c libgcc/unwind-seh.c
912c2613f0bf8838c9e1e783a32db47c libgcc/unwind-sjlj.c
ca48521404fe4bff32cf281a4f25ad68 libgcc/unwind.inc
-53df9f5d33b9fd8227e301e398059d8a libgfortran/ChangeLog
+b7a5e61c841d4993a601c0d187b1145b libgfortran/ChangeLog
9aca36338382e5b4b730e7779170b24d libgfortran/ChangeLog-2002
80d3edc880c2da0b7a2beec2e2c4f774 libgfortran/ChangeLog-2003
9f0239429993a5e64ed793eb6c55a5c1 libgfortran/ChangeLog-2004
@@ -44670,12 +45189,12 @@ fe57a422cebe3ffdc63e1df3d02ceda6 libgfortran/Makefile.am
ccffe82934121261cb06e69e66cdb40a libgfortran/caf/mpi.c
9735fe4cb9e26bb7624846d918aa9e19 libgfortran/caf/single.c
79481157d92cc3c427b7774260f1831d libgfortran/config.h.in
-63aa441fbda52ffb381de581850e4ab6 libgfortran/config/fpu-387.h
+15af6aa34932836b79f0e220438c09f2 libgfortran/config/fpu-387.h
5b3e573754dedfe20954a31cd75df165 libgfortran/config/fpu-aix.h
f197f1b7b06141bc282cf10f598e67fe libgfortran/config/fpu-generic.h
aa0312daec26dda031dc8d2192c89d49 libgfortran/config/fpu-glibc.h
c170f762ae366a61d6690749214ef942 libgfortran/config/fpu-sysv.h
-ac825072108eced0501028b3fd6baaea libgfortran/configure
+d1e0c0018623abc808d36520dc50b422 libgfortran/configure
90b63b1fc5ae5a609b9c26d34e0431ba libgfortran/configure.ac
7174f11b9fd3ba5f2571856987be1bd9 libgfortran/configure.host
79438548178ec610e4b0c5975d47f6cb libgfortran/fmain.c
@@ -45254,7 +45773,7 @@ b2882bb290734c72e81e2072ed14bd15 libgfortran/intrinsics/size.c
02f3920e07f1f273bd6a3300f87870a6 libgfortran/intrinsics/string_intrinsics_inc.c
dad0bb06174b89cb483c36b8ae4a9384 libgfortran/intrinsics/symlnk.c
428f47003cad46f5c03050736f2c3376 libgfortran/intrinsics/system.c
-c688738db77ba989eda63c697fa77d9f libgfortran/intrinsics/system_clock.c
+a44d2d0fcc09fec304f2a63f1e1ff2b1 libgfortran/intrinsics/system_clock.c
b29fccbd4b87501332a62725cd8741d2 libgfortran/intrinsics/time.c
7fe2808bf44559444c1ac68f49540e6e libgfortran/intrinsics/time_1.h
6d38d1cfc5dc52c5d9705263e0ee3342 libgfortran/intrinsics/transpose_generic.c
@@ -45269,19 +45788,19 @@ a47ea8ad7577af4224ab41dc2e43c49b libgfortran/io/format.c
36a1c001c036c78d746359593b9a9dc9 libgfortran/io/format.h
67fa480e13c20102d22c8cf36c9e3168 libgfortran/io/inquire.c
0eb95ab320c2c6bce8fb0d785e74117a libgfortran/io/intrinsics.c
-d9f53023a71893a4f3a259baa1904624 libgfortran/io/io.h
-52cb2d76b75433813ee31ff6ab968ee7 libgfortran/io/list_read.c
+6f91941637f20203c0571e317959ca27 libgfortran/io/io.h
+2825af598b92a60588a026d3d56f7a84 libgfortran/io/list_read.c
080ec66fd75715f5787fbed7db21f132 libgfortran/io/lock.c
71ebd874226546c911c7e0ea5160c997 libgfortran/io/open.c
-25b77f45f1fc999c0d804a78824ae767 libgfortran/io/read.c
+d3a8b728d0bf90aa8ff0cc1ac92e01ba libgfortran/io/read.c
ae0dc4d2fd16b37bf5423f5981e6a254 libgfortran/io/size_from_kind.c
3f746aa9e17c88aea5779662d5583d0d libgfortran/io/transfer.c
8e209cb175ae5efde6b3ea31da5c8c7e libgfortran/io/transfer128.c
-7d125f993cec4138a9c436d5539cb8c5 libgfortran/io/unit.c
+79eafaa8ae45195692a7e4ace2e6f5d7 libgfortran/io/unit.c
3b0dd9034d375c63091514a5cbf93a14 libgfortran/io/unix.c
4faa7e91bcbc2eeaa8ac6b18123f6cbd libgfortran/io/unix.h
2941323b2970cb242a557b2ce4ca524a libgfortran/io/write.c
-bf33a98d9740ec86c75f07520430023c libgfortran/io/write_float.def
+6a87478b594a6fb58e90ad6122288526 libgfortran/io/write_float.def
ee3ebdf20b4e1dbf39068aad8ee5e8fc libgfortran/kinds-override.h
ff10a3d9f677d9c332e58c38ac16b633 libgfortran/libgfortran.h
2527bb19b82f08b34038b07b172d029d libgfortran/libgfortran.spec.in
@@ -45354,43 +45873,45 @@ cedd8f6fec0fe8a4f0614b86088afff8 libgfortran/runtime/memory.c
cd71536bfea7fc61961f8383cdd10f4e libgfortran/runtime/stop.c
402ff567135026c48c2960be91da03a1 libgfortran/runtime/string.c
5d4950ecb7b26d2c5e4e7b4e0dd74707 libgo/LICENSE
-1c2aeb54729923e4f2b984f1da2a250f libgo/MERGE
-1b53eaadcc25e01d3985e797bac3b6e7 libgo/Makefile.am
-466173949b416a7e1a42bdd8fbde263f libgo/Makefile.in
+d9117b7588d5898e0c0821d6ae6a5300 libgo/MERGE
+df025749fa614e5e8d2e039ae4640a64 libgo/Makefile.am
+b9f7f56756e407d119a422b9cdc02e04 libgo/Makefile.in
3a55d95595a6f9e37dee53826b4daff2 libgo/PATENTS
0e3a2fb357762bdec163fe51ccb1e951 libgo/README
d46376034c1fd6df47c8ba2cd5de9d0a libgo/README.gcc
7281cb4b7a426e299beb22a3191d79c3 libgo/aclocal.m4
-e47893a96fae633ddde637cdfd4f8345 libgo/config.h.in
+b83a7afb4441cdc7472994739ed164db libgo/config.h.in
ad1ce707d70b18d5d14bdbcfef82a9bb libgo/config/README
9a6e33ac95f7d5857d34f53bde4cb610 libgo/config/go.m4
-a1fa746e7b6fc02162f6b2cfde2c8edd libgo/config/libtool.m4
+0dbf51539b4d117324c49e2410a7868e libgo/config/libtool.m4
91d3a98b846ea28ef7c9cb8d4f5ccc95 libgo/config/ltmain.sh
dee72a6a60e99528b0d17bf3ff9a1e15 libgo/config/ltoptions.m4
bc2f6032c98896249eadb56177c7d357 libgo/config/ltsugar.m4
c30cd33c496505f13d9fbdb6970c7c33 libgo/config/ltversion.m4
293853a13b7e218e3a4342cf85fbbf25 libgo/config/lt~obsolete.m4
-8bea103c2af5dbbb09ac4bebdf8cbde9 libgo/configure
-7d4df365317e0ba8ed585f7bb6df9105 libgo/configure.ac
-a146d177919111be1d2edda6f5c694ee libgo/go/archive/tar/common.go
-758e498fd7d7a48d8b27f6d90e25ebb4 libgo/go/archive/tar/reader.go
-c7b194e5175373edb2c048f55a966df9 libgo/go/archive/tar/reader_test.go
+ba749148e2233dc83010ac65be906c63 libgo/configure
+208333a50329020e7e5bc4d9d7993a03 libgo/configure.ac
+b03fdfd905fb7ca12cbeeb02c14f9a12 libgo/go/archive/tar/common.go
+49ff3ef2f67610e000a1eb29470f6fc0 libgo/go/archive/tar/reader.go
+1749e2537de78d29e8bb8b9222d6d45c libgo/go/archive/tar/reader_test.go
b88fa6f22d1ef21c1ceaccf495310678 libgo/go/archive/tar/stat_atim.go
f24d0e0a8444fa94e8cf245a1b0655b1 libgo/go/archive/tar/stat_atimespec.go
7009ffb1fa5c28b217902d239c67d9cf libgo/go/archive/tar/stat_unix.go
-6f481bb0fd26a3a618ba386158160f9d libgo/go/archive/tar/tar_test.go
+e7211251fccaa6c66dfa24b02e7329f3 libgo/go/archive/tar/tar_test.go
d36839a53022ca7143744431d9d5aa65 libgo/go/archive/tar/testdata/gnu.tar
+f578fe90dd8a45ac3618adf6c881211f libgo/go/archive/tar/testdata/pax.tar
e38b27eaccb4391bdec553a7f3ae6b2f libgo/go/archive/tar/testdata/small.txt
c65bd2e50a56a2138bf1716f2fd56fe9 libgo/go/archive/tar/testdata/small2.txt
2e308433b209b3af3be588c55838c217 libgo/go/archive/tar/testdata/star.tar
+2adf93d4ee327e554d256152b0bafc7e libgo/go/archive/tar/testdata/ustar.tar
9a4e79a89eb3490ff21b53303324301f libgo/go/archive/tar/testdata/v7.tar
ab1694ea9d7ccb2c70b435188acfa6e9 libgo/go/archive/tar/testdata/writer-big.tar
88712af2a004429d7101fd0c710baa8f libgo/go/archive/tar/testdata/writer.tar
-f0b2ed09291159d424c629aa4538a8fe libgo/go/archive/tar/writer.go
-c914e91fc6a8ef7e157e37e43f6c30cc libgo/go/archive/tar/writer_test.go
-7bd3adadd69cca5a97a4c4f67636d45c libgo/go/archive/zip/reader.go
-8d39bd482cd073423eaafe05713e0ab6 libgo/go/archive/zip/reader_test.go
-776601b0bf0dcf7cd1a5a83209019f6b libgo/go/archive/zip/struct.go
+0a5f1a796210eae79d35516252892bdd libgo/go/archive/tar/writer.go
+3d9853555234afba38708dbeb8b86fc2 libgo/go/archive/tar/writer_test.go
+861c2135b00956b60db97703594904e9 libgo/go/archive/zip/reader.go
+c6b240da635a58781e265a1b5ae7f0e6 libgo/go/archive/zip/reader_test.go
+8db124fa0620957ffb30c4e75fca438f libgo/go/archive/zip/struct.go
0e5c6061f34579a29cd9e706200e3fc5 libgo/go/archive/zip/testdata/crc32-not-streamed.zip
a0dc0660d6847cfdefd1e34811fa3e2a libgo/go/archive/zip/testdata/dd.zip
abb58ce61c08e3f2b2498ee654e13589 libgo/go/archive/zip/testdata/go-no-datadesc-sig.zip
@@ -45399,50 +45920,56 @@ fff846d4718fdf270982b47654219800 libgo/go/archive/zip/testdata/gophercolor16x16
3df2215c7ff8a7a4e892476ca076bec5 libgo/go/archive/zip/testdata/readme.notzip
0961cbf58a849bc5541cf7ca2609ba4e libgo/go/archive/zip/testdata/readme.zip
c405e9ec3c7566b1b42e5d52fd916619 libgo/go/archive/zip/testdata/symlink.zip
+f919ed2101b4fece8facfd3ccf238f95 libgo/go/archive/zip/testdata/test-trailing-junk.zip
d8df365fbb6fac417a9fbde8585a9270 libgo/go/archive/zip/testdata/test.zip
f1dcd13397f7e578380b3fa564156b46 libgo/go/archive/zip/testdata/unix.zip
384be2e5e01c2618a144579f16ba024b libgo/go/archive/zip/testdata/winxp.zip
8ae15e579d181b7b7837c197f02bbd5e libgo/go/archive/zip/testdata/zip64.zip
-de31996b797924a03360ae675651bc11 libgo/go/archive/zip/writer.go
+a3f70a363ba8f5c86eb97afa40922f9b libgo/go/archive/zip/writer.go
88925052041cbb7eca93f05ecc232bdd libgo/go/archive/zip/writer_test.go
8f474b73f84beb84bcc543a7a630fb06 libgo/go/archive/zip/zip_test.go
-4d652893b542f90e2fe0f81e17bb298c libgo/go/bufio/bufio.go
-173a36228caaed31e2d15922e478a9e5 libgo/go/bufio/bufio_test.go
-24a38a943d5c93316d7d5f7f7d29cd49 libgo/go/builtin/builtin.go
-b139ab230b02114ebc603db8a2cdbe3a libgo/go/bytes/buffer.go
-57181d53780bf947f5a0f2ed731710e8 libgo/go/bytes/buffer_test.go
-51b140d7b6451d89504ec85a1e9b5be6 libgo/go/bytes/bytes.go
-496261feab7f2a385b20d3be6fccc5c0 libgo/go/bytes/bytes_decl.go
-bf9b9de7368fd55d8e97408bf3c78866 libgo/go/bytes/bytes_test.go
-9b7ac28609bcd31da0973f87647a3d51 libgo/go/bytes/example_test.go
-412d6cc36b1ce545eb83e0a0fb9a59fd libgo/go/bytes/export_test.go
+5a4c97e48f27a5403c0ac37abb6f2c3c libgo/go/bufio/bufio.go
+f8bcf2fe9a4710f0619f120bee54ab24 libgo/go/bufio/bufio_test.go
+faf4eae455e733ff5c6d3ed43b15d352 libgo/go/bufio/example_test.go
+57dbb550ccddbac1f19975154c727f6c libgo/go/bufio/export_test.go
+70eeeeaa94f73d031b56806b8b722bcd libgo/go/bufio/scan.go
+eccfb6ab5502a50b8d293c2dc6dd1121 libgo/go/bufio/scan_test.go
+f53e3025a78767f07c8d0de1aca96cbe libgo/go/builtin/builtin.go
+bae2a3a34fb5c359c9f843aac557b255 libgo/go/bytes/buffer.go
+0b5dc7833f606dea06dc645f4604bee5 libgo/go/bytes/buffer_test.go
+2805c3d066cda6f1df0b4d4fb7f552cd libgo/go/bytes/bytes.go
+bf72fbe096bc2240eea88dc6c061c7be libgo/go/bytes/bytes_decl.go
+74657d8856fc994e29b7951113876548 libgo/go/bytes/bytes_test.go
+55675fcb9d01374cc117b8f723ecaf12 libgo/go/bytes/equal_test.go
+e05b6feb45dd2ab9faaae9113f64a8da libgo/go/bytes/example_test.go
+3cd3fec5806355606b10af163e824cfc libgo/go/bytes/export_test.go
399c50fbcd12a858418a0c5c0e2a1eae libgo/go/bytes/indexbyte.c
13a94d005858e80aa58c1b5c1c974a60 libgo/go/bytes/reader.go
7a852ffd5b8769b53a9ea2507cdd0307 libgo/go/bytes/reader_test.go
2751bc45c7c671452400b155c492052f libgo/go/compress/bzip2/bit_reader.go
3688e3495515d1cca56076e4c5a684b7 libgo/go/compress/bzip2/bzip2.go
09d3c116c445eb89fc274d66e4af34a4 libgo/go/compress/bzip2/bzip2_test.go
-915b7decd5e7f6f7e0fea3f553d50ae1 libgo/go/compress/bzip2/huffman.go
+0e25a00273b6948dc996d801c127d32b libgo/go/compress/bzip2/huffman.go
15542234791b1acbf25f1fd133ef66d9 libgo/go/compress/bzip2/move_to_front.go
b53414c34fff6bd8c6ee2bc33e404517 libgo/go/compress/flate/copy.go
ccbc225d42ea3c0f882a8d9eb0ec17ca libgo/go/compress/flate/copy_test.go
9b0bf3a90b8890e49867838307069868 libgo/go/compress/flate/deflate.go
-74346cec323620fa67f8ed8e0a4f50e8 libgo/go/compress/flate/deflate_test.go
+39b22219fe0e5bf359ee16aef7db7138 libgo/go/compress/flate/deflate_test.go
7eb6b756daff8062c36a93365a62c786 libgo/go/compress/flate/fixedhuff.go
42c4bbc6d3784fd378672fd470053a8b libgo/go/compress/flate/flate_test.go
b24bb3865aa9d5366675cd00e20ff041 libgo/go/compress/flate/gen.go
726a7ece97856afb66dc171a4b6fef32 libgo/go/compress/flate/huffman_bit_writer.go
8ff1b5b10134c8fefad9121939b2c23b libgo/go/compress/flate/huffman_code.go
-bf8fda0c831e2e621589166ff047403f libgo/go/compress/flate/inflate.go
+57b6f43aa3051221fe9c9fed1fa7f44d libgo/go/compress/flate/inflate.go
4b9d925d7c0cd7e4c41f3aa59941118b libgo/go/compress/flate/reader_test.go
d39f14ab060c114d2723e2ddb7ed73a2 libgo/go/compress/flate/reverse_bits.go
-ed76ef7a0a4ab40751ef344ae4958203 libgo/go/compress/flate/token.go
+db6eb547379d2108e7a4138a98d8296a libgo/go/compress/flate/token.go
1fa41c7f84fa9387bf717b45041c299e libgo/go/compress/flate/writer_test.go
-6cefc2c5e6b754afedafc0aecce89b63 libgo/go/compress/gzip/gunzip.go
+8bc45680e177970aed7eb79ca5833797 libgo/go/compress/gzip/gunzip.go
52eee4f473e4878ee74dd0c5fa07993f libgo/go/compress/gzip/gunzip_test.go
-0cb6ea6500736440804f3b33af5bd294 libgo/go/compress/gzip/gzip.go
-56a4b69727a1ca90b329de5614ed7544 libgo/go/compress/gzip/gzip_test.go
-9fd61579f096f79b727f11bc544d62f8 libgo/go/compress/lzw/reader.go
+01721bda45d224425deea6e3bcfe75ae libgo/go/compress/gzip/gzip.go
+fa03bd25d29fe134c747c1c99dc2c8cd libgo/go/compress/gzip/gzip_test.go
+889a207bea1237ba5cd026e93dbdc50b libgo/go/compress/lzw/reader.go
ca7db5ee4265f0e891389f4ecd11b6d6 libgo/go/compress/lzw/reader_test.go
d3cd18444a4e382df823575aecb95917 libgo/go/compress/lzw/writer.go
0ae4167fa8a55812c248d038baa8f36f libgo/go/compress/lzw/writer_test.go
@@ -45453,9 +45980,8 @@ e654f83f0131cd51b41eebac2949f005 libgo/go/compress/testdata/pi.txt
235d50874cd6203eff2007321a50e2b7 libgo/go/compress/zlib/reader_test.go
db2f5183dd51c9a690226873d14363d5 libgo/go/compress/zlib/writer.go
1e691b82b3a7dc5251ef72fd2eb3a647 libgo/go/compress/zlib/writer_test.go
-6b5d99a9358f7fc2bbfb92fb6e0fca10 libgo/go/container/heap/example_test.go
-04e60207d2e7babdb9fa78819775e650 libgo/go/container/heap/heap.go
-e3693ef2bb1ff44fd99d4aea3abe8fbf libgo/go/container/heap/heap_test.go
+e9f0ddb9ac9dc14cf19637df479935a3 libgo/go/container/heap/heap.go
+146c5e9013fac7775a644548a8a2c67d libgo/go/container/heap/heap_test.go
d928b9f320ec93b92776e02fd435774e libgo/go/container/list/list.go
74b536964f548bc55e22973c774095d0 libgo/go/container/list/list_test.go
04f808f97d2480ea07eb40b3a54bf51b libgo/go/container/ring/ring.go
@@ -45466,15 +45992,16 @@ bf64bc46062091ee1effe64592456eb3 libgo/go/crypto/aes/block.go
bee18c89bd6aa3180730ba72967df300 libgo/go/crypto/aes/cipher_asm.go
fa8ab5fd512c6cec979e31c6654f1740 libgo/go/crypto/aes/cipher_generic.go
fd4d79deafaf1daf19c34a5ecc330461 libgo/go/crypto/aes/const.go
-df5e37e0f7a103cf0e9cd82df2961ca1 libgo/go/crypto/cipher/cbc.go
+db7df6be72e9f6092261b052ca7f032e libgo/go/crypto/cipher/cbc.go
9bd5f5f1ced9eaf4fe19b85f1ef0a9da libgo/go/crypto/cipher/cbc_aes_test.go
32e53b98b64e4a97082def66f3e2f5dd libgo/go/crypto/cipher/cfb.go
cce3dc4be5b5b668999792b39693af08 libgo/go/crypto/cipher/cfb_test.go
c82e28f91efcb812d5e8c183c9fb6332 libgo/go/crypto/cipher/cipher.go
+109448d23199d305bb522dd90c805f9c libgo/go/crypto/cipher/cipher_test.go
81d8d687d1fabfecb21a90f9182cfe3e libgo/go/crypto/cipher/common_test.go
093a7fb92c3b0c10f1b15538941ab62f libgo/go/crypto/cipher/ctr.go
b271cef78c34fc4ea2859b963aff6149 libgo/go/crypto/cipher/ctr_aes_test.go
-bdbd36253c75c65e5b8997ed5207226f libgo/go/crypto/cipher/example_test.go
+f89ba01985a48286a8b9ae697bf400d6 libgo/go/crypto/cipher/example_test.go
a492c4ae6c6a72592a6ebf65e1a7f0b8 libgo/go/crypto/cipher/io.go
3f4d384189e20a4457e95346bf8e6600 libgo/go/crypto/cipher/ofb.go
4d22c5a31ed3d5a3827c3c74a203d991 libgo/go/crypto/cipher/ofb_test.go
@@ -45483,9 +46010,9 @@ a492c4ae6c6a72592a6ebf65e1a7f0b8 libgo/go/crypto/cipher/io.go
39423b1d39539aecac6d7fa8e83a8663 libgo/go/crypto/des/cipher.go
13fcc9e8fe8cf78d1ba089361c58a142 libgo/go/crypto/des/const.go
5eee02aa8d82428adb7928a7eabf8a65 libgo/go/crypto/des/des_test.go
-20091f20fe67c54556dc03db130fed56 libgo/go/crypto/dsa/dsa.go
-ffeccc09da06d78737c559dd71cd8367 libgo/go/crypto/dsa/dsa_test.go
-fc0527e4a5f83e3aff079c3e70f22f1b libgo/go/crypto/ecdsa/ecdsa.go
+e47411438be384c30d83eb67822f9177 libgo/go/crypto/dsa/dsa.go
+907a4b2c6ace44ae150d8d9b636f2939 libgo/go/crypto/dsa/dsa_test.go
+34f1c66a1d1c7cfda0c243b2465f3e82 libgo/go/crypto/ecdsa/ecdsa.go
bdaec212bc8739a13fbf67792f485e19 libgo/go/crypto/ecdsa/ecdsa_test.go
66d590a760ae86eb1a4d3c26107701d3 libgo/go/crypto/elliptic/elliptic.go
721b49034417040477a548d96308c61e libgo/go/crypto/elliptic/elliptic_test.go
@@ -45493,24 +46020,28 @@ d502498baefaaf1a4246dd93f1e64d3a libgo/go/crypto/elliptic/p224.go
6cd56b4bae7d15ebf6b1432983818b08 libgo/go/crypto/elliptic/p224_test.go
5c4474e0e50fed54e290a5a4ec55c93b libgo/go/crypto/hmac/hmac.go
8cf480a9ca64de509c6bb77196809065 libgo/go/crypto/hmac/hmac_test.go
-1ef80e2f7f6646693b5ac91eef3b1ab1 libgo/go/crypto/md5/gen.go
+c6fc4d98abde29266f32f60f3c4480d9 libgo/go/crypto/md5/gen.go
a41f92e2494efd9b33e843c1831d8429 libgo/go/crypto/md5/md5.go
-5c89789e726a7b67a74887247ad51016 libgo/go/crypto/md5/md5_test.go
-7b499aef10a4b2533079a8dd11d5a028 libgo/go/crypto/md5/md5block.go
+a2d8d00e7a0680198da7cc0f9db19179 libgo/go/crypto/md5/md5_test.go
+ea059ae5e3f8fc2e6debad90dc681664 libgo/go/crypto/md5/md5block.go
+a3dd1958c1f010bc491f2d9aefd08e29 libgo/go/crypto/md5/md5block_decl.go
1fe49cba29b18fb4add38ebd37e0d58a libgo/go/crypto/rand/rand.go
27122dad4c482d98577a690f144f5138 libgo/go/crypto/rand/rand_test.go
a5e73a59f76a4d067e20c8f575d57c32 libgo/go/crypto/rand/rand_unix.go
44251439cd63fdaa9005e8670c7d3fd1 libgo/go/crypto/rand/rand_windows.go
-3467703bff2b4b96b7966b1acbb40e45 libgo/go/crypto/rand/util.go
-7ebf4d13b32be6d8b4bf51972ce8a01a libgo/go/crypto/rc4/rc4.go
-15ce38569d44dafd3afa0572d11c629e libgo/go/crypto/rc4/rc4_test.go
+0ecdff43f6287e19543cbebceb744a56 libgo/go/crypto/rand/util.go
+56688237b39a2e82dabeacd9760762ce libgo/go/crypto/rc4/rc4.go
+3e5796b06e95da28b5950f4fcf1b8d01 libgo/go/crypto/rc4/rc4_asm.go
+d02df585b1f5b833a49abb2812737c02 libgo/go/crypto/rc4/rc4_ref.go
+95894606aaa16e8d3f48555c81538733 libgo/go/crypto/rc4/rc4_test.go
b65a73671946989eec985a725bae2577 libgo/go/crypto/rsa/pkcs1v15.go
ccb0081cbdb0b4c7ef4399d9b740fe0e libgo/go/crypto/rsa/pkcs1v15_test.go
-63c454b91fd2f432715a2e197cd22dad libgo/go/crypto/rsa/rsa.go
-2b6cc3a46c69dc3a651d9ff3680dc88c libgo/go/crypto/rsa/rsa_test.go
+477e2acbc2b25541ec803bf079c1fdbb libgo/go/crypto/rsa/rsa.go
+3f80230fcdd0e85fa2e1d8eba829999e libgo/go/crypto/rsa/rsa_test.go
122fe767fd4be71ffa0944f94df71c14 libgo/go/crypto/sha1/sha1.go
-c10ae945b288b3f60f27d104dfb2e244 libgo/go/crypto/sha1/sha1_test.go
-ed4a25df97983bf13a131e3cd3d85d83 libgo/go/crypto/sha1/sha1block.go
+c3d52deaef0e37bc67696f1b6dcad3ac libgo/go/crypto/sha1/sha1_test.go
+ffc6d79026a197ed12e3e5ee3749494c libgo/go/crypto/sha1/sha1block.go
+92650e90d7a28a33e86249b243733aed libgo/go/crypto/sha1/sha1block_decl.go
27814d746c081304e6031a36469a9c47 libgo/go/crypto/sha256/sha256.go
e082c164bde26468b2bafd71bfc5721b libgo/go/crypto/sha256/sha256_test.go
fe5a6d6f47620494029273e8d911b533 libgo/go/crypto/sha256/sha256block.go
@@ -45521,15 +46052,15 @@ ff0fd7b39d29af0bd5560bf305ab5179 libgo/go/crypto/sha512/sha512.go
33cff71f8c91be72bde01e3a50eb68cc libgo/go/crypto/subtle/constant_time_test.go
7afe7dd08272e10245d65cf6662d2669 libgo/go/crypto/tls/alert.go
1c63232cb1b9fb6d4d0b85f9d3832781 libgo/go/crypto/tls/cipher_suites.go
-51a45d8596946bb412d05c9f05a078d6 libgo/go/crypto/tls/common.go
+0c83a44b094bd1c702d1f39ab82f3759 libgo/go/crypto/tls/common.go
0eccacbf21fb168309a77cb44a5e0f05 libgo/go/crypto/tls/conn.go
eac0b0c03aadac53ec75d685be117e99 libgo/go/crypto/tls/conn_test.go
-6a82e8a7fedf7996e8ce4240e9973804 libgo/go/crypto/tls/generate_cert.go
+7348a9e4ab756ef9936cb3c0f943539a libgo/go/crypto/tls/generate_cert.go
601fd3fbbbb4cfcfce6e64472a4ded2d libgo/go/crypto/tls/handshake_client.go
23423b0514a6d4da3cea2a0f69a83aa2 libgo/go/crypto/tls/handshake_client_test.go
d870f4e66ce542d5ebfcd9a531ad4f6e libgo/go/crypto/tls/handshake_messages.go
2c9dbe47aad8da859404c5286779aeb6 libgo/go/crypto/tls/handshake_messages_test.go
-e4541bc303304eea18a9febdece63152 libgo/go/crypto/tls/handshake_server.go
+ab4a0626ad490a58c56a160996d3f9dd libgo/go/crypto/tls/handshake_server.go
782b0d167ee8754f349cf60dba2bb581 libgo/go/crypto/tls/handshake_server_test.go
36be24bd4d4635177adc2e675945e131 libgo/go/crypto/tls/key_agreement.go
c580ff6035e0dbfdbbd571862a2f8e28 libgo/go/crypto/tls/prf.go
@@ -45541,7 +46072,7 @@ aeda74932519e2cb7f35469438030cec libgo/go/crypto/tls/ticket.go
f9263bf6219068386c5a11c8288479a1 libgo/go/crypto/x509/pem_decrypt.go
7bb7b9f998cc397c91f88bcc173eff9b libgo/go/crypto/x509/pem_decrypt_test.go
720484a32f5352345c7a7786f171a83e libgo/go/crypto/x509/pkcs1.go
-4e572a44bede52b1accfc41fdbf7ba49 libgo/go/crypto/x509/pkcs8.go
+c5427ce435b4aa6a3b43726a48f0ebfa libgo/go/crypto/x509/pkcs8.go
c296b2c509a2a5e0322c789ed2dc5807 libgo/go/crypto/x509/pkcs8_test.go
3ea78cd097aaf3461bc234957ce965c0 libgo/go/crypto/x509/pkix/pkix.go
e62e93c0e1b83cd45b5518bcf24e00ab libgo/go/crypto/x509/root.go
@@ -45552,33 +46083,33 @@ b60caceda57e127b6b7e209d832684a7 libgo/go/crypto/x509/root_stub.go
72a9dfe18d95f1391c158e0d154cd797 libgo/go/crypto/x509/root_windows.go
e3712bb96a6aa59197593fe405e76293 libgo/go/crypto/x509/sec1.go
33cfc2e8f0113e9a63361ce8355f76f5 libgo/go/crypto/x509/sec1_test.go
-bc1493cb2dcc62a420b9fb183b9be9c4 libgo/go/crypto/x509/verify.go
-ec07fd64248a53599dad51caaf151e03 libgo/go/crypto/x509/verify_test.go
-bf9ab6acd8e58548563981783a9491f7 libgo/go/crypto/x509/x509.go
-ff45e4b00994fc3110c62393df64d9ed libgo/go/crypto/x509/x509_test.go
-e94bb676a4a707369dabc7dd16ba1d22 libgo/go/database/sql/convert.go
-98bda4a511de09e7ef809ea5174b7eb0 libgo/go/database/sql/convert_test.go
-a22f47e35c12b47880641dd8e335311b libgo/go/database/sql/driver/driver.go
+155cc07772511a33d5ea8366482607af libgo/go/crypto/x509/verify.go
+c06504d1cee46e140d33da14c61abef2 libgo/go/crypto/x509/verify_test.go
+4d1bdb40302052f978085eac1b646594 libgo/go/crypto/x509/x509.go
+2f343715eab5b785b1f3c58e0da6ba9f libgo/go/crypto/x509/x509_test.go
+0cbf8295201446f67098f529c0243ec0 libgo/go/database/sql/convert.go
+728a741fed9fa37bda599a755ff359e4 libgo/go/database/sql/convert_test.go
+3385d2219832899c02a7a1f1a6229402 libgo/go/database/sql/driver/driver.go
262788b1495dc9451ebbacea15200da5 libgo/go/database/sql/driver/types.go
7cf2017c63b7da8c06b022399b791b28 libgo/go/database/sql/driver/types_test.go
-fabbeda921cfe3bcadacbfa74a61ab4b libgo/go/database/sql/fakedb_test.go
-eac68257ae2ea0fdab71b5f3de79b52c libgo/go/database/sql/sql.go
-a2960d7b03ad1629feecbdd26243ed28 libgo/go/database/sql/sql_test.go
-39eb99c880544bc9c823bbb72204c34a libgo/go/debug/dwarf/buf.go
+c9c489bf9803301249173825b5502887 libgo/go/database/sql/fakedb_test.go
+6a82c2ea1dc57719e67c2a8c7a9dd902 libgo/go/database/sql/sql.go
+13d350b831728a34e279339adaf14cf4 libgo/go/database/sql/sql_test.go
+475fe5279c2c2bc5c069018ef45d33f0 libgo/go/debug/dwarf/buf.go
ac414fe376fda5cad9f02ecbe0673423 libgo/go/debug/dwarf/const.go
-95333e2c037c29b76d8cea16fcff77fa libgo/go/debug/dwarf/entry.go
-46639a7c98ef232bfdd9c803b8a39cfb libgo/go/debug/dwarf/line.go
+3a0972af8429d9bd1d78e3ce539918ba libgo/go/debug/dwarf/entry.go
+af7b699e30fc05dc19be141babd4d8af libgo/go/debug/dwarf/line.go
475d94d9fd82648c0d12c7b1b7a9db3e libgo/go/debug/dwarf/line_test.go
f0da958563f37dbbc84ce9708d80a6c6 libgo/go/debug/dwarf/open.go
201d1bb1c16362965c559ea8c059a351 libgo/go/debug/dwarf/testdata/typedef.c
8c7e4f38f77d12641dd655ac2bf2b1ce libgo/go/debug/dwarf/testdata/typedef.elf
64631e6b3ed893db85436dc8c1544486 libgo/go/debug/dwarf/testdata/typedef.macho
-7ff912cb5f8a0dd536a9a0662358817a libgo/go/debug/dwarf/type.go
+97d9e4c2b1cc338429c102ef830f588d libgo/go/debug/dwarf/type.go
4dd735786604fdada06b9d4988c55ea2 libgo/go/debug/dwarf/type_test.go
-7d8008af6b4040ce7591de60a234d3ea libgo/go/debug/dwarf/unit.go
+fd19a135314633f873bb441c3ee45b59 libgo/go/debug/dwarf/unit.go
9f6d810f4f8d38f86b29e54e2b068ab8 libgo/go/debug/elf/elf.go
2ce9136cffb642d4b1249abea9fe4a64 libgo/go/debug/elf/elf_test.go
-55630c92083bc4cc1fe0682ebd158d1e libgo/go/debug/elf/file.go
+3e1dc3e3ab5fdf1039ce51181dc8754e libgo/go/debug/elf/file.go
22be0582d9f47c29219484497e598979 libgo/go/debug/elf/file_test.go
6bc826fa60d18740a7844fae136536a3 libgo/go/debug/elf/testdata/gcc-386-freebsd-exec
28249f6bb3a2d1f8223ddadf73f9b059 libgo/go/debug/elf/testdata/gcc-amd64-linux-exec
@@ -45591,8 +46122,8 @@ f549e93bb4abecfa2f405787ace90ac7 libgo/go/debug/gosym/pclinetest.h
0c042c48ee46b12d9e396c15d9f5998e libgo/go/debug/gosym/pclinetest.s
543b546fe3c0da4023b57f1238febe79 libgo/go/debug/gosym/pclntab.go
7a167a75beb928f5e270d4a5098e284c libgo/go/debug/gosym/pclntab_test.go
-66834ea2bac2e5c42db5aa0990de2ea3 libgo/go/debug/gosym/symtab.go
-52a54b43a8ce3e13d000a85f21c47e40 libgo/go/debug/macho/file.go
+aa5b2e12ac3784a1f1a9136f96e17ccb libgo/go/debug/gosym/symtab.go
+5fd3256aafa472deca2079b82bfaf2a1 libgo/go/debug/macho/file.go
08d223ff722230858f1e9f1d0e5d5125 libgo/go/debug/macho/file_test.go
88e7499c19914bc99617779268273341 libgo/go/debug/macho/macho.go
cf6fb2d5a91704e510e0ddb613f19e94 libgo/go/debug/macho/testdata/gcc-386-darwin-exec
@@ -45605,28 +46136,28 @@ fdcfbe188ea9dce308cdb6c6c9649c71 libgo/go/debug/pe/file_test.go
e88b744b2c8799bfed6f3a8b13f20c44 libgo/go/debug/pe/testdata/gcc-386-mingw-exec
2a22cae57fa8c533424786def5e67393 libgo/go/debug/pe/testdata/gcc-386-mingw-obj
16ac886f4f5d825a30306e935bbeb5a4 libgo/go/debug/pe/testdata/hello.c
-51e6157aa6d4679f95608e23a2937b79 libgo/go/encoding/ascii85/ascii85.go
+1852b449590a9f8afd9ba5ab5aa46e5f libgo/go/encoding/ascii85/ascii85.go
ebd0c280429f146eda833c38f16acadb libgo/go/encoding/ascii85/ascii85_test.go
d177860e88689afce24e5db49d5f3647 libgo/go/encoding/asn1/asn1.go
aaa21320689b41cc503d8fd6466734b6 libgo/go/encoding/asn1/asn1_test.go
9ea3dc8623024eef02de3b8fae563d04 libgo/go/encoding/asn1/common.go
-cd2a718d740acc787c33adfb36e8950a libgo/go/encoding/asn1/marshal.go
+4e9fc5673ff4b44ed3c3e62b7b8ef3cf libgo/go/encoding/asn1/marshal.go
16043dc7aba6dfc6038cfa2ddbed9413 libgo/go/encoding/asn1/marshal_test.go
-288045b31f54ca575f3470ef71678b66 libgo/go/encoding/base32/base32.go
-614b33f22d34e29650bd06c98052b6a1 libgo/go/encoding/base32/base32_test.go
-f4afc6106130f6b37f2d53f999d9a764 libgo/go/encoding/base64/base64.go
-be44960e69900d8d115fc12ec4565747 libgo/go/encoding/base64/base64_test.go
-4dcd65433d89e4ffaacc53efb42ba7c0 libgo/go/encoding/binary/binary.go
-f601428df63ed2ebdd351fd4787773f7 libgo/go/encoding/binary/binary_test.go
-f55e87dcdee4d9b21272bb77ca9a6bcd libgo/go/encoding/binary/varint.go
+6a1646b5afdb751a005ae14ee2994096 libgo/go/encoding/base32/base32.go
+cf18d85068e0077e74714d31e9d21cb7 libgo/go/encoding/base32/base32_test.go
+24d04510ee0a09ede7d2584591569dec libgo/go/encoding/base64/base64.go
+650c7746b8be6a74a34c14afe88700c5 libgo/go/encoding/base64/base64_test.go
+7d0c6851238e000585fa29a6ddb48e27 libgo/go/encoding/binary/binary.go
+0e2f8220e27e3769f1aeae58f826816e libgo/go/encoding/binary/binary_test.go
+71169abd384cc4d3d1fbc2ac6ffa1ac7 libgo/go/encoding/binary/varint.go
b9519cf764acd171a8e0b72cefd45b34 libgo/go/encoding/binary/varint_test.go
-b7683df6b42a58a83195ec03cdf28ac3 libgo/go/encoding/csv/reader.go
+511e93bfd8de8e0df5dd46fde0664717 libgo/go/encoding/csv/reader.go
7efcea3dcc04052f919fecb64ab30167 libgo/go/encoding/csv/reader_test.go
40a16e17217560b70e3594d3ec13ecbd libgo/go/encoding/csv/writer.go
6cb686d65f3c14d9cee82278dc1892b1 libgo/go/encoding/csv/writer_test.go
-8c3476e18850f6073d0c8ebeecc01a8e libgo/go/encoding/gob/codec_test.go
+e16e34f60d737296db677d6e1cc33f2c libgo/go/encoding/gob/codec_test.go
11b5516ce187140dee82b6739d376625 libgo/go/encoding/gob/debug.go
-58d439cd4cc5231c128efc702c065efa libgo/go/encoding/gob/decode.go
+be9495b60a7bc62e8c9f663e94b3498e libgo/go/encoding/gob/decode.go
968adc91f33adc72c88a3cff78b3759d libgo/go/encoding/gob/decoder.go
e7e6002d017f13fd90ad75ba695baeec libgo/go/encoding/gob/doc.go
5a6d15243feedb1eca701318de31977a libgo/go/encoding/gob/dump.go
@@ -45634,20 +46165,20 @@ ba99a6617080d2c01b131fdf76dbfa3b libgo/go/encoding/gob/encode.go
1594991dcd75646a5bbab21d3597f332 libgo/go/encoding/gob/encoder.go
c635d418f45bf63a00407818b102d4aa libgo/go/encoding/gob/encoder_test.go
e67f01368492baca84a65bb2984a3e1f libgo/go/encoding/gob/error.go
-3ddc0188cda366e09d546e8812615eaf libgo/go/encoding/gob/gobencdec_test.go
-91beaf17f30f3422693ad20343ea13bb libgo/go/encoding/gob/timing_test.go
-3c18d2f7bb3bf732b97df5a671ea1bf9 libgo/go/encoding/gob/type.go
+c760bfff4f6aca8b24c2d597b11a2ee4 libgo/go/encoding/gob/gobencdec_test.go
+0885b351686aeab437390ec95d5d09ac libgo/go/encoding/gob/timing_test.go
+58372733cf751da20f4c9614891be6d3 libgo/go/encoding/gob/type.go
fcf5432af6d24f575bbb9b3173b769f8 libgo/go/encoding/gob/type_test.go
0d92ed3b59bf7155c953c1040ce01f55 libgo/go/encoding/hex/hex.go
883b60c4fcb6f0897c250077d418d73b libgo/go/encoding/hex/hex_test.go
aa374794ab3bc389fc556a4f58d07d70 libgo/go/encoding/json/bench_test.go
-971395004e54c88895545c16dccbcd2a libgo/go/encoding/json/decode.go
-4b5a5244816d86b0a1eb20f4c2336d41 libgo/go/encoding/json/decode_test.go
-1435b1d45d3a8218daa9dc1dd70e5f64 libgo/go/encoding/json/encode.go
-dd0cc75d4dffb72b0fd85758beb320a5 libgo/go/encoding/json/encode_test.go
+a40a2dd0befb77a9377928c474387d3a libgo/go/encoding/json/decode.go
+86063291efd471d4a462ff37bd40c874 libgo/go/encoding/json/decode_test.go
+191358a4a9c181b04c09b50eae4858c5 libgo/go/encoding/json/encode.go
+5ea94e560deffe68dfe85f6f660755bd libgo/go/encoding/json/encode_test.go
29a8b438eceff124e33cc7aad04e7dca libgo/go/encoding/json/indent.go
c259de9ed68ee160e5ec270a17d97f01 libgo/go/encoding/json/scanner.go
-2af1c70907935d3f2fb29d035c17c1b9 libgo/go/encoding/json/scanner_test.go
+b8b4b247490da6c20609fc00878b34f4 libgo/go/encoding/json/scanner_test.go
77e6d23d029754b7c8179fa748ee486a libgo/go/encoding/json/stream.go
181b31f9472a9e3035666a4b3706e75a libgo/go/encoding/json/stream_test.go
29878de51a58cf9296eb58665087622d libgo/go/encoding/json/tagkey_test.go
@@ -45657,183 +46188,38 @@ f47bac5e473480a974a2b43143dfee40 libgo/go/encoding/json/testdata/code.json.gz
608f1dc80db82fc5f5c0dcfaa0e3ddc7 libgo/go/encoding/pem/pem.go
ae7ae3934a519034b2412a0f1443ff53 libgo/go/encoding/pem/pem_test.go
659cbebb141452610ccfc7a0c5f2edfd libgo/go/encoding/xml/atom_test.go
-51c3157f882b56ad6e87affeba13d76a libgo/go/encoding/xml/marshal.go
-708be3ef8a6015f87e16f3b9691badf1 libgo/go/encoding/xml/marshal_test.go
-49dfc371f4bd5e1bb14d0c895de0a067 libgo/go/encoding/xml/read.go
-371b7db0671ea13d1e919877ce2a9545 libgo/go/encoding/xml/read_test.go
-82e001817c2ff9fc061415c0ba7578f6 libgo/go/encoding/xml/typeinfo.go
-dc128e5266317877841af3ebf061eb9d libgo/go/encoding/xml/xml.go
-e95e6ab7fdf5653cc2a626bae4a59f18 libgo/go/encoding/xml/xml_test.go
+fbc408f27f3bc2d089f756f791b08d4e libgo/go/encoding/xml/marshal.go
+b70008e7fed99a8b8deec21432e5d179 libgo/go/encoding/xml/marshal_test.go
+52528220dbd6b416b6a1edac0945ca86 libgo/go/encoding/xml/read.go
+f70e43203d4c8c7bbecdd840e5196a68 libgo/go/encoding/xml/read_test.go
+7af330ce1babe9b9f0fa9b8e0e51e157 libgo/go/encoding/xml/typeinfo.go
+b65df81e0321ad21ed6d8d79aa24153b libgo/go/encoding/xml/xml.go
+bb58958637d88d5c683af077fed24502 libgo/go/encoding/xml/xml_test.go
12c6fc81238b7cfa482f7548bd274890 libgo/go/errors/errors.go
bf2bfea5589d38767d5d145cf24a1410 libgo/go/errors/errors_test.go
9570c2fcbe5c635e0f2723d92060ae0f libgo/go/exp/README
-63c3636ad193193836fccd945e5239c5 libgo/go/exp/cookiejar/jar.go
-782a80193eeb7b0057df02616e7a236d libgo/go/exp/cookiejar/storage.go
-5560f20aec5bcfecfb08db5d1e512cb5 libgo/go/exp/cookiejar/storage_test.go
-e0fb2dd9fc2e4f25e4f26fafb5f364bc libgo/go/exp/ebnf/ebnf.go
-5bb23e5b0cfdd19a9af40bec83198bb3 libgo/go/exp/ebnf/ebnf_test.go
-391caf4fe72ac68f4129860f63652b56 libgo/go/exp/ebnf/parser.go
-074a6512662c3c8acf4941802dee747d libgo/go/exp/ebnflint/doc.go
-de7637563d9a296e9b95cf51c1f72fc4 libgo/go/exp/ebnflint/ebnflint.go
-3eaa1989a5983231ad589828c22fcb19 libgo/go/exp/ebnflint/ebnflint_test.go
-f0c61db011ae777fb55323a8744efb2c libgo/go/exp/gotype/doc.go
-6e2ad48ca59f58d11da4d830785e661d libgo/go/exp/gotype/gotype.go
-c7f761c0eec00d111034e3421b0cc978 libgo/go/exp/gotype/gotype_test.go
-5301b04799f0bde2f015ad1cbf312399 libgo/go/exp/gotype/testdata/test1.go
-81255d0bb2fcff75eadc2f328e20deaa libgo/go/exp/html/atom/atom.go
-01a4adae4b15dc7f11f21c0f50d7c099 libgo/go/exp/html/atom/atom_test.go
-891e1cef3ece668c3c605c7eaa34aea9 libgo/go/exp/html/atom/gen.go
-d0ec169eceda19d5c1bdedf2ecbfc230 libgo/go/exp/html/atom/table.go
-657310f91765c4b881d19fa400d0305b libgo/go/exp/html/atom/table_test.go
-d838fc499544d9b39a478c49eca85644 libgo/go/exp/html/const.go
-6b1dff43351e1829b586c7c1533036f4 libgo/go/exp/html/doc.go
-c4266ed1266597cc06a000b8cc31f148 libgo/go/exp/html/doctype.go
-0a11bd3b506218577aec8e26aa097e0d libgo/go/exp/html/entity.go
-9499982502f6fab9b4c5d4c8c4814feb libgo/go/exp/html/entity_test.go
-fde0ca2333ef768fd357c16d6d55049e libgo/go/exp/html/escape.go
-71eb665eee0d6dba2783c31053ab689a libgo/go/exp/html/foreign.go
-fd9f2258031d6dd7aacf5b3699124e40 libgo/go/exp/html/node.go
-769a2f3b1a228ca113da005f1a164319 libgo/go/exp/html/node_test.go
-6cbdce68194026457481a3001534d965 libgo/go/exp/html/parse.go
-2ceb5bf1cbb5340280d289ca2c826736 libgo/go/exp/html/parse_test.go
-4d290a1724db66b0d74d4d0cbf838765 libgo/go/exp/html/render.go
-88cc198b5f695f33e4860afadb95ccc0 libgo/go/exp/html/render_test.go
-a9f07da8b03a6c480b2b84dd005dad59 libgo/go/exp/html/testdata/go1.html
-9eeb0c73e0fcdcaa7858d4489e803f18 libgo/go/exp/html/testdata/webkit/README
-c674ddf94fec9d706018ef05dc910f7f libgo/go/exp/html/testdata/webkit/adoption01.dat
-37108efa6236b8086ab61ecfa6f4c7d4 libgo/go/exp/html/testdata/webkit/adoption02.dat
-6209a34099c6807628f1e8e3c0132527 libgo/go/exp/html/testdata/webkit/comments01.dat
-c039890fdb42422bafa168fbeab4c7e9 libgo/go/exp/html/testdata/webkit/doctype01.dat
-af1be43a68c932e7743a819e21b0d5c8 libgo/go/exp/html/testdata/webkit/entities01.dat
-2e5649adb77113a15483d53c9b40a90a libgo/go/exp/html/testdata/webkit/entities02.dat
-33106b86f5ea42c700b7741cd06c4d4f libgo/go/exp/html/testdata/webkit/html5test-com.dat
-7eb54cb896176235247b42222d0c008a libgo/go/exp/html/testdata/webkit/inbody01.dat
-6f0b929374695e754ac6d3b49e96a0f1 libgo/go/exp/html/testdata/webkit/isindex.dat
12c04a7036924c4fc4e8348a18820b1d libgo/go/exp/html/testdata/webkit/pending-spec-changes-plain-text-unsafe.dat
-08019dc4df428de1db8580f94990ddec libgo/go/exp/html/testdata/webkit/pending-spec-changes.dat
1255c947f22cc3b8f9618b655f18ec28 libgo/go/exp/html/testdata/webkit/plain-text-unsafe.dat
-8a60b5fbaccb4756df2d862d70162bd6 libgo/go/exp/html/testdata/webkit/scriptdata01.dat
-bfd8a34278a22a1495f8d7640c501452 libgo/go/exp/html/testdata/webkit/scripted/adoption01.dat
-084aae3e2d570fb2638e9e4583eb39d4 libgo/go/exp/html/testdata/webkit/scripted/webkit01.dat
-38618c25daab1cca72baa79f8330754f libgo/go/exp/html/testdata/webkit/tables01.dat
-7e16047b93dc2dd15aa371f871cd8b5b libgo/go/exp/html/testdata/webkit/tests1.dat
-a3652deef50ac48c0628ed00e547ca2b libgo/go/exp/html/testdata/webkit/tests10.dat
-a60bb51037bcbc91e404484dc38f5a50 libgo/go/exp/html/testdata/webkit/tests11.dat
-b1c48d4244e69630d51dd2dcb2fbcf15 libgo/go/exp/html/testdata/webkit/tests12.dat
-389eb02e94cde6c0a6d1f48f4c2f8f65 libgo/go/exp/html/testdata/webkit/tests14.dat
-22987f5228a8c5c6afb0954b3d3d57f5 libgo/go/exp/html/testdata/webkit/tests15.dat
-f69cac5e88b79df69e421f626957c30a libgo/go/exp/html/testdata/webkit/tests16.dat
-5e12546a1ded2504e0761717131668cb libgo/go/exp/html/testdata/webkit/tests17.dat
-9dbeda2b205dc4f0db8271de4baa61f6 libgo/go/exp/html/testdata/webkit/tests18.dat
-d25528cf52db539cda1cfa63bdf91c71 libgo/go/exp/html/testdata/webkit/tests19.dat
-7b7aa54cbc4bdcb56f4e216f567a59cd libgo/go/exp/html/testdata/webkit/tests2.dat
-3932cd3693879fd62be16016f6a04b61 libgo/go/exp/html/testdata/webkit/tests20.dat
-bac362931ff08ef6a4f674723b983f2b libgo/go/exp/html/testdata/webkit/tests21.dat
-8526d992d85d21771cf5f515acc3a3bd libgo/go/exp/html/testdata/webkit/tests22.dat
-de867ada8c68f51a22b80448c29f2022 libgo/go/exp/html/testdata/webkit/tests23.dat
-9b9e34bfc30a0c621550c738958fa1b7 libgo/go/exp/html/testdata/webkit/tests24.dat
-e97fe77d6d0da8e4432edc2d77a115c9 libgo/go/exp/html/testdata/webkit/tests25.dat
-db55ea2f968dc4e28989a07ce901d1e1 libgo/go/exp/html/testdata/webkit/tests26.dat
-a7c3d847b65983ed23c1dc9e18b8bf55 libgo/go/exp/html/testdata/webkit/tests3.dat
-ebaa4878bf619e24fe2d6107d34e5deb libgo/go/exp/html/testdata/webkit/tests4.dat
-ee1588dc24e363af67a13b42ffc5aace libgo/go/exp/html/testdata/webkit/tests5.dat
-60ec4d0ab544f3b1bd4ffe698af1e5f5 libgo/go/exp/html/testdata/webkit/tests6.dat
-a0ef7f8dbe8ff22f0e93e1714a5ef1ad libgo/go/exp/html/testdata/webkit/tests7.dat
-e120c2db4594e470c96f8e2042ed16ae libgo/go/exp/html/testdata/webkit/tests8.dat
-a1b3e6fc5c16dd22d7be2d96b465feb3 libgo/go/exp/html/testdata/webkit/tests9.dat
-9aa18474af8e112006795bb1dcee73c8 libgo/go/exp/html/testdata/webkit/tests_innerHTML_1.dat
-49f45c9fd7b9a29080068b8ed1ab622d libgo/go/exp/html/testdata/webkit/tricky01.dat
-b816e1aa1dd48626f15658f902c9e31b libgo/go/exp/html/testdata/webkit/webkit01.dat
-df5ecb1502d35c2887b0d33f87bf6154 libgo/go/exp/html/testdata/webkit/webkit02.dat
-4b9f2a0fefe0b81f6bfebeff50809b7d libgo/go/exp/html/token.go
-ee26e87d8b32ef6fdca2df71fc46d139 libgo/go/exp/html/token_test.go
-a36651542373595fbec49de19e9402a9 libgo/go/exp/inotify/inotify_linux.go
-1d6389b64784ea1c7859b36b24ebfdb6 libgo/go/exp/inotify/inotify_linux_test.go
-a592cc9178407bc3809b79870775e7a3 libgo/go/exp/locale/collate/build/builder.go
-b9cda0ce6686d03c4a489368c67311bd libgo/go/exp/locale/collate/build/builder_test.go
-ce416bcc79b9c481cff4f037616226c4 libgo/go/exp/locale/collate/build/colelem.go
-dd240c73bbd55933ef6224c0e3eb8b80 libgo/go/exp/locale/collate/build/colelem_test.go
-30ab5eabcfba45cdc0af621c5555eef2 libgo/go/exp/locale/collate/build/contract.go
-ba4a67f52a80e29da82050c3396f76b9 libgo/go/exp/locale/collate/build/contract_test.go
-18b4712904530e1d8a832f1ec3a0970c libgo/go/exp/locale/collate/build/order.go
-29fc5067ffa813c18832d1885a6c291c libgo/go/exp/locale/collate/build/order_test.go
-e9f0673e034738462357667914555e69 libgo/go/exp/locale/collate/build/table.go
-7d51dd374814194a02bdd667badb9450 libgo/go/exp/locale/collate/build/trie.go
-d83252a8109eb475cca1de32f19411a9 libgo/go/exp/locale/collate/build/trie_test.go
-53c08c6422ccb7d9d6e1b77de1de14d9 libgo/go/exp/locale/collate/colelem.go
-cd862d6049cfd2f91369934cac16c9ce libgo/go/exp/locale/collate/colelem_test.go
-992d965b5f326ba1d759360535cdee76 libgo/go/exp/locale/collate/collate.go
-c9565a70bd3b7d9ad461ca9a39359186 libgo/go/exp/locale/collate/colltab.go
-28bf9f15b0fbeeca83650d4e4138272b libgo/go/exp/locale/collate/contract.go
-8a6fbc08c8443e7344132c52f8cdf572 libgo/go/exp/locale/collate/contract_test.go
-ca7885a26d822a88cce90fc7e61012c8 libgo/go/exp/locale/collate/export.go
-dd8c0347201974c5b6c39cb66262db34 libgo/go/exp/locale/collate/export_test.go
-cb6e4af8f613ed4f40a42de4ae49ce81 libgo/go/exp/locale/collate/maketables.go
-be5448bcfec1126e8a24e0374e77af05 libgo/go/exp/locale/collate/regtest.go
-a175759745ff9f2f6d7c7df03c8e3dbe libgo/go/exp/locale/collate/sort.go
-4886e6f87ce69b999519dcf90e759512 libgo/go/exp/locale/collate/sort_test.go
-012d9e08a87d1bbb31e8287bf84d117f libgo/go/exp/locale/collate/table.go
-dae650a3cb32f722d20022e46008ea6a libgo/go/exp/locale/collate/tables.go
-c2d1fd8af02d520db829897381e83c2b libgo/go/exp/locale/collate/tools/colcmp/chars.go
-c7ab2b91f5398c0ed0f600665365a1a2 libgo/go/exp/locale/collate/tools/colcmp/col.go
-7a0601e6e0e3ab84409a46ac189464de libgo/go/exp/locale/collate/tools/colcmp/colcmp.go
-7a1486f9b2d224a940edfcc844afe6fa libgo/go/exp/locale/collate/tools/colcmp/darwin.go
-e7b6e8874b6051553a2d3e78c3f7bea7 libgo/go/exp/locale/collate/tools/colcmp/gen.go
-e477e594bea4c79947ad529f2d8d2a2e libgo/go/exp/locale/collate/tools/colcmp/icu.go
-fcd1d43511a2cf181b83cb4c63af822a libgo/go/exp/locale/collate/trie.go
-36ab6322e9a5b1004c2dae31e37a053d libgo/go/exp/locale/collate/trie_test.go
-df00066d7cbd684b7c4960eae20a6325 libgo/go/exp/norm/composition.go
-6927b03d287633db32f576fd492637b9 libgo/go/exp/norm/composition_test.go
-71635421884458c5f0f5e2b39e2c5937 libgo/go/exp/norm/example_iter_test.go
-27cd8837127a7ad340c21ce3e7e76d65 libgo/go/exp/norm/forminfo.go
-dfce5209998e4e3ff6304a6eb951ea7a libgo/go/exp/norm/input.go
-48550cd00b15330e59d4a2da033e560d libgo/go/exp/norm/iter.go
-58970805cbb70593d544509249765863 libgo/go/exp/norm/iter_test.go
-bf794630cb9e00d10c10f4e5023b247a libgo/go/exp/norm/maketables.go
-af6d46fbd4799fab47a3923f2ae89c18 libgo/go/exp/norm/maketesttables.go
-638a87b113f8e51ee2bf5da8d590332e libgo/go/exp/norm/norm_test.go
-cfbdb66a0bcf39042e4c4c19dd850279 libgo/go/exp/norm/normalize.go
-c3b8df5a03c7d58b8e1d60500ef3db33 libgo/go/exp/norm/normalize_test.go
-ec974ba62d92c0d54bb927479aab22c3 libgo/go/exp/norm/normregtest.go
-69aae0970473d3a410f50aace1fbff63 libgo/go/exp/norm/readwriter.go
-f2017297da9e588e6dd39047552f3f49 libgo/go/exp/norm/readwriter_test.go
-020bbebfb84666fc472e9166d081b61a libgo/go/exp/norm/tables.go
-745f82c13b745dbf92ff351dd675651d libgo/go/exp/norm/trie.go
-606ef6d65ce60d7235b798c6e4c1f101 libgo/go/exp/norm/trie_test.go
-882bc7b23a3e91bd7947c2c1d35e4802 libgo/go/exp/norm/triedata_test.go
-035b0961819220c8a99a2a12f44b96c0 libgo/go/exp/norm/triegen.go
a73827f69c118add0c8490dbdac4351e libgo/go/exp/proxy/direct.go
40c1d2d85e44e7d3011793c100f485aa libgo/go/exp/proxy/per_host.go
05442517b16d2cd688f125b14ad2a608 libgo/go/exp/proxy/per_host_test.go
86a193e35715b46fd7397606ce679a79 libgo/go/exp/proxy/proxy.go
78856ab853a4a79946362744f1d31691 libgo/go/exp/proxy/proxy_test.go
b131be6e3f6d7c94db74e920c464289c libgo/go/exp/proxy/socks5.go
-81e2f95c2ad27e1eef25d2f137b81dce libgo/go/exp/ssa/blockopt.go
-bd6fe346a3c2006f2b3ffe8755bd3182 libgo/go/exp/ssa/doc.go
-f27bcf83288ac88267ef52960faa0c03 libgo/go/exp/ssa/func.go
-fc24a65ff98f9a1df29510f426f3e3f4 libgo/go/exp/ssa/literal.go
-0ad36dbc27d4a270827e81d81c7be4c4 libgo/go/exp/ssa/print.go
-2c075274c9560bdeab29e880aadf4200 libgo/go/exp/ssa/sanity.go
-749944d692ff1088b9486c99106e078b libgo/go/exp/ssa/ssa.go
-64f13f0189ca7b0ac64f21df92041c8d libgo/go/exp/ssa/util.go
c47536c131dbfd1f39faaf4221370b64 libgo/go/exp/terminal/terminal.go
002f23e1d4a0aa4a32ba2d1e7720ac08 libgo/go/exp/terminal/terminal_test.go
6c205d5769af494f06e3313404ca2cd6 libgo/go/exp/terminal/util.go
-fa6be7f94f1aa7b5610102715a331ba0 libgo/go/exp/utf8string/string.go
-703e403569257c2d74907fe69e45be75 libgo/go/exp/utf8string/string_test.go
-63f86c4bde82e6776a7b22abd22557e5 libgo/go/exp/winfsnotify/winfsnotify.go
-f1f01892b7299d760b0cfdbd5ef150b0 libgo/go/exp/winfsnotify/winfsnotify_test.go
71cd6d8884ca0e5a46c17bbe4705c1f6 libgo/go/expvar/expvar.go
2ee2cfcf6df7a8e29a640f10d24769a6 libgo/go/expvar/expvar_test.go
97c2f30cebb7bb49677b5c6216b7e495 libgo/go/flag/example_test.go
96a00d236dc8445959bead977fbfd1f6 libgo/go/flag/export_test.go
aed5676f737e3d5010eaa83cd61eb929 libgo/go/flag/flag.go
1e09cd354af274b7356eaec009694bad libgo/go/flag/flag_test.go
-efa94cc56ac3352595b5cc98b03ed461 libgo/go/fmt/doc.go
+e0dce0944b8bb9de2af257e763324ceb libgo/go/fmt/doc.go
b11aa946c688e343c2c41f727f3c56b2 libgo/go/fmt/export_test.go
-8452a8b8b19e3ffc1f2aff6f0e8e6d38 libgo/go/fmt/fmt_test.go
+31c05c3a39de46582a78f24454f2bc5e libgo/go/fmt/fmt_test.go
f2c0a1926b7387a1652915a545456e66 libgo/go/fmt/format.go
-1efaf7451d3677564c6bbe20c5dbef9a libgo/go/fmt/print.go
+8af6399ab7311ca7abe4f5bb4c2dbec2 libgo/go/fmt/print.go
db1528159d27ce145963e5f31912111e libgo/go/fmt/scan.go
5bd44ed1964296c2dfd2596667e35758 libgo/go/fmt/scan_test.go
2369824f08c60e32daa40b736d182964 libgo/go/fmt/stringer_test.go
@@ -45841,39 +46227,41 @@ be3cc18c16b26a92672a6ca2dcdd8eb7 libgo/go/go/ast/ast.go
f8d3946f87220cd03b7c011174b0fd23 libgo/go/go/ast/ast_test.go
d7030acf81977114c69226cc5c1900df libgo/go/go/ast/commentmap.go
889bfab30af17cf18a71cf952b6a0740 libgo/go/go/ast/commentmap_test.go
-3f0ad1e9f918683ad0391a20b3c0242b libgo/go/go/ast/filter.go
+550baca40933658d1bbd86a0537f7e38 libgo/go/go/ast/filter.go
+bf2c3134657aed37c679064ac0654d88 libgo/go/go/ast/filter_test.go
9b57b26651e7f02a28305a178d72b6c5 libgo/go/go/ast/import.go
-4e04fcdfcaa85de18d7e1f471d0237b8 libgo/go/go/ast/print.go
+3b54e2fa25e32b8a1a0a9035b8d81be6 libgo/go/go/ast/print.go
37f0da8f9994ef23553dd3327895afa7 libgo/go/go/ast/print_test.go
4809f5e72ce6172b93859e9027185c59 libgo/go/go/ast/resolve.go
13f13f5f2b17c434403bcf5388c039cc libgo/go/go/ast/scope.go
82e54134a6bb53547c0252d262233225 libgo/go/go/ast/walk.go
-777467b63cacd4a8533b67930bc5bbd5 libgo/go/go/build/build.go
+c41697bac338dc3d309d072965f822cb libgo/go/go/build/build.go
5dc711b3673370d0650d3f050b7c9acf libgo/go/go/build/build_test.go
-22a7815f11654c4a4f149641d0013d2b libgo/go/go/build/deps_test.go
-1312e790e356bca683d3f4cb98dafe24 libgo/go/go/build/doc.go
+a7a601791d820f7c3908c2180a69f7b8 libgo/go/go/build/deps_test.go
+9ee5973d64ac0a991d496d322264bb34 libgo/go/go/build/doc.go
0a125f4b50a44436fc08a14a2d69a5e9 libgo/go/go/build/read.go
55bad531524fbfa1a2ff2af400b70447 libgo/go/go/build/read_test.go
+763526620316815aec7da5fa66f500cb libgo/go/go/build/syslist.go
39f113d9eb3addc6b532513c9828a075 libgo/go/go/build/syslist_test.go
de6991b3771170d6d3ce31fe2c89b5f1 libgo/go/go/build/testdata/other/file/file.go
0f6926e3a63df39bdeb382e093950776 libgo/go/go/build/testdata/other/main.go
76dbc78dbf0a8a2e7940988f18309d59 libgo/go/go/doc/comment.go
376ef0bf2dcd086576aac0b87e69867f libgo/go/go/doc/comment_test.go
-bb44c59d760e1bdeaddac1ef40e278aa libgo/go/go/doc/doc.go
+f8affaeb6e5777547f309f70478b4944 libgo/go/go/doc/doc.go
4e6e3d68caa91b56e6b1a7360ec1511d libgo/go/go/doc/doc_test.go
-6c070818451fb6349c39179bf68e4696 libgo/go/go/doc/example.go
-32875da5b77d4c642a4b170e9b0f40e4 libgo/go/go/doc/example_test.go
+42d43687e9cbd6fd131c296f35cf79b4 libgo/go/go/doc/example.go
+3c29e45e38a42d666ecb58a2e15160cf libgo/go/go/doc/example_test.go
1479f7e783f2d679f02e728ef12d86ad libgo/go/go/doc/exports.go
-d3e52eb848d1ea5cc479cf3ed007a83d libgo/go/go/doc/filter.go
+a8c394bea00b685d8d0c5c3e24018879 libgo/go/go/doc/filter.go
869a816db378209d1a9bdc7bafbdfd57 libgo/go/go/doc/headscan.go
-395a2d5c41b8ddefa2438d16e4a10c03 libgo/go/go/doc/reader.go
+263ecbac6e9afba71bd7e50ca2bbba5d libgo/go/go/doc/reader.go
868ac75fef94ceaaea6f0859b7c6ee66 libgo/go/go/doc/synopsis.go
88c41785eb57463ca3ca99e567ae23f9 libgo/go/go/doc/synopsis_test.go
-20698036889b7b79349fc2d70bb9d110 libgo/go/go/doc/testdata/a.0.golden
-20698036889b7b79349fc2d70bb9d110 libgo/go/go/doc/testdata/a.1.golden
-20698036889b7b79349fc2d70bb9d110 libgo/go/go/doc/testdata/a.2.golden
-af041897634c34ec3286e1f7d39b5711 libgo/go/go/doc/testdata/a0.go
-c8a151e5afdf82247c7ed070a3b7edb8 libgo/go/go/doc/testdata/a1.go
+88438313ef932839f4386760f15e13d1 libgo/go/go/doc/testdata/a.0.golden
+88438313ef932839f4386760f15e13d1 libgo/go/go/doc/testdata/a.1.golden
+88438313ef932839f4386760f15e13d1 libgo/go/go/doc/testdata/a.2.golden
+53211c711431e426a5015b7b8b45e503 libgo/go/go/doc/testdata/a0.go
+8c26c3ead4faa5df75ae374068e1c239 libgo/go/go/doc/testdata/a1.go
e55a6d247f12d1e0c63ec812281121f8 libgo/go/go/doc/testdata/b.0.golden
d2e1f55e788d6f5d6a2f81a1ab87be0f libgo/go/go/doc/testdata/b.1.golden
e55a6d247f12d1e0c63ec812281121f8 libgo/go/go/doc/testdata/b.2.golden
@@ -45905,32 +46293,32 @@ a485ccb6a5f4b4b61fa9cfcc83bf806f libgo/go/go/doc/testdata/error2.1.golden
bca48e5274500c7c89d16122908ac9a8 libgo/go/go/doc/testdata/f.1.golden
40794af971bc3b3ecbb38e9331833f54 libgo/go/go/doc/testdata/f.2.golden
e8f76e1ff0676842f419c7b3b67a7907 libgo/go/go/doc/testdata/f.go
-078307c80a8e9775ff0f25bf0bf20ad6 libgo/go/go/doc/testdata/template.txt
+bbb70d493df03e7c4221ea6b6f8c6573 libgo/go/go/doc/testdata/template.txt
754327124c9f0e4661805708b71b2e38 libgo/go/go/doc/testdata/testing.0.golden
565a6582292dbd98e5af75a9aac65336 libgo/go/go/doc/testdata/testing.1.golden
754327124c9f0e4661805708b71b2e38 libgo/go/go/doc/testdata/testing.2.golden
ba37c473c4f1338e09e471948a56919f libgo/go/go/doc/testdata/testing.go
-86cf7124c090dd13ff4ca16ac215f81e libgo/go/go/format/format.go
+0855d12b9693040f163a66eb488e9dbe libgo/go/go/format/format.go
2450a611e93fd367665024a0c849dd1b libgo/go/go/format/format_test.go
-23475733a965254f24c7143907137e02 libgo/go/go/parser/error_test.go
-176240524810a1a8cf93de7dcc8eed9d libgo/go/go/parser/interface.go
-aebcc9bd1be2c82afdca415b733c7cce libgo/go/go/parser/parser.go
-8f22b627acf0b3544e1f2914ef292b9c libgo/go/go/parser/parser_test.go
+1b47b46debf26d1d0875aec148e2ad25 libgo/go/go/parser/error_test.go
+057558dc4862106e1e9c96a83393631a libgo/go/go/parser/interface.go
+c3da42ca69732c40dbf634cd551ebf81 libgo/go/go/parser/parser.go
+afe8c9e51ef530fae2a30c8cff82bae5 libgo/go/go/parser/parser_test.go
785eea855ded220460b8f6bbc78a392a libgo/go/go/parser/performance_test.go
-be67880c8b294453148c08f1c3d36737 libgo/go/go/parser/short_test.go
+8a6608526a5b533c5a8ec728b641f3ee libgo/go/go/parser/short_test.go
b72b1f0432aed37d275e66b0169f39fb libgo/go/go/parser/testdata/commas.src
c70ad2a62c388725a380285de2dc2586 libgo/go/go/parser/testdata/issue3106.src
-5fb1f6c5c9684b917e4890208f443db9 libgo/go/go/printer/nodes.go
+dc5b8d0e5ca9ded6a698a693273e17bc libgo/go/go/printer/nodes.go
a3b1bc0d9114a1883a56f0adbb5d8d96 libgo/go/go/printer/performance_test.go
-6e557279488bd67f8cead14c6f2aa80a libgo/go/go/printer/printer.go
+38e4b2c45d4b412d2756cf31dbe18b04 libgo/go/go/printer/printer.go
3417129f06bd4104564c1f0a76e99f38 libgo/go/go/printer/printer_test.go
e94d1c844f69f099467f1452d2815508 libgo/go/go/printer/testdata/comments.golden
2c218f97e741b8526d07c88429b88c72 libgo/go/go/printer/testdata/comments.input
e6e08677739f80de2dfe4d48b9d3bb45 libgo/go/go/printer/testdata/comments.x
fe997148c24e2e84f133735e22b3fa08 libgo/go/go/printer/testdata/comments2.golden
d4bcd365a26db79db466b43934749b58 libgo/go/go/printer/testdata/comments2.input
-c489ec783824c36a95c9967b1cead870 libgo/go/go/printer/testdata/declarations.golden
-8efd2103a61939f33d51fc6e659cdc65 libgo/go/go/printer/testdata/declarations.input
+7883d0cb8376c2feb9b79841956b3ce9 libgo/go/go/printer/testdata/declarations.golden
+3a63267be381eae5dc8583a793772d95 libgo/go/go/printer/testdata/declarations.input
844f4638b6f2ac8ff51fb9b08ba912e2 libgo/go/go/printer/testdata/empty.golden
844f4638b6f2ac8ff51fb9b08ba912e2 libgo/go/go/printer/testdata/empty.input
c8b7d43c9824651ce2fd4ae4519ead7e libgo/go/go/printer/testdata/expressions.golden
@@ -45944,31 +46332,13 @@ a7bb8d47908112f568e617904eeb185a libgo/go/go/printer/testdata/parser.go
8658639274f42b42539cad779bba1c4f libgo/go/go/printer/testdata/statements.golden
d8d797d77d5977e661a771197109cc11 libgo/go/go/printer/testdata/statements.input
ed6d8f81a626e68919c6ca821880624e libgo/go/go/scanner/errors.go
-34a70b1fcb37eea0d1ea4f56b0302655 libgo/go/go/scanner/scanner.go
-f22d7d4c0cfbee93bcc5727966df2274 libgo/go/go/scanner/scanner_test.go
+f17f375152be940d44ebae2e8e87e57b libgo/go/go/scanner/scanner.go
+17bc2e9ee90d0be86189b5583f58b8e2 libgo/go/go/scanner/scanner_test.go
edcdea4c6d2203889c0d93bff733a6b0 libgo/go/go/token/position.go
73e6730aae0ea831a9c3dfaddf756ca5 libgo/go/go/token/position_test.go
1d64ffbe92654fda0192d364e0598dfb libgo/go/go/token/serialize.go
7f96cc16b25fcc0687a856f1bd33e74f libgo/go/go/token/serialize_test.go
-518a534e9176943c103dbc6bd7cf0927 libgo/go/go/token/token.go
-ef33157ef9257f296c85e432d395c8e0 libgo/go/go/types/api.go
-09e9f88629a1d94f9784545391b213cd libgo/go/go/types/builtins.go
-d74def31b95b10833ba1b790ef17b834 libgo/go/go/types/check.go
-6713c497dc898beb1ea46a8a77d29b1c libgo/go/go/types/check_test.go
-b374c89889ca305aff32d366410627cb libgo/go/go/types/const.go
-fda4bdcb2a55f1853b9a9c8b2c31ff37 libgo/go/go/types/conversions.go
-58b1c97fdf05f282fd1671c28bf09445 libgo/go/go/types/errors.go
-e8c42443c5619f1a147b84c36296f8c1 libgo/go/go/types/exportdata.go
-dac38ab90c37a726f1c8388439676433 libgo/go/go/types/expr.go
-cf66cbb33e4c6b480f180b29cf6587fb libgo/go/go/types/gcimporter.go
-ab75ce83653142d96073a535065b4402 libgo/go/go/types/gcimporter_test.go
-6f67227f11073cab775b44c1c10e9af4 libgo/go/go/types/objects.go
-c169408c156bf9ed761910d02877db65 libgo/go/go/types/operand.go
-66abe4036e4f17ae9f6044eec945353e libgo/go/go/types/predicates.go
-e2df56015e22e436594709a2dbbe3433 libgo/go/go/types/resolve.go
-91a0cb53d9c28fad60340a6787d550a2 libgo/go/go/types/resolver_test.go
-95134183b5e3c76bee98fac9a931a2cd libgo/go/go/types/scope.go
-d97720cd53703a775cb7304cf30c3ff1 libgo/go/go/types/stmt.go
+3db18ed197c48a309cfd489e718e0a69 libgo/go/go/token/token.go
4d0ca33167ee1273334875c348f31533 libgo/go/go/types/testdata/builtins.src
41b1ea102c5f8550d32c9bd6c50cdd97 libgo/go/go/types/testdata/const0.src
42ae4b6f41811f53d6a784998d23b294 libgo/go/go/types/testdata/conversions.src
@@ -45977,15 +46347,11 @@ dfa7e5a165f54449dd3bf1ceb7f66b42 libgo/go/go/types/testdata/decls1.src
dd58478d6fc063a4bf276b66908f22dd libgo/go/go/types/testdata/decls2a.src
a4602fb94ad947d3d171c9366d45db97 libgo/go/go/types/testdata/decls2b.src
52a63048131bb2a7fc2bd8f31524898f libgo/go/go/types/testdata/decls3.src
-3d3dc188ad73727d6fba9afff1634d2d libgo/go/go/types/testdata/exports.go
21ce81eed58c7d187ee50ba1ba2deaba libgo/go/go/types/testdata/expr0.src
5405c27b633e7ea6bdbd8c735c8f1414 libgo/go/go/types/testdata/expr1.src
6d053bed05db0448d088c5a1bd0af774 libgo/go/go/types/testdata/expr2.src
adf2bce26855e4c6cf91d421cc760050 libgo/go/go/types/testdata/expr3.src
3b344659c0b464d28c3d7c864111e013 libgo/go/go/types/testdata/stmt0.src
-27fc99df7b363b78a76feae674584c25 libgo/go/go/types/types.go
-4d9e81db739eca79501f71e3e772cd40 libgo/go/go/types/types_test.go
-7b129e1bde6b8d47c6cf93d4c3082a47 libgo/go/go/types/universe.go
44f2c9cff79c088c9ca682898d21b5b1 libgo/go/hash/adler32/adler32.go
38a8db647c3cf7d81f4c9356efdd7ba5 libgo/go/hash/adler32/adler32_test.go
8d7162bc08cdd965f1d4bebc05a30046 libgo/go/hash/crc32/crc32.go
@@ -46007,7 +46373,7 @@ db158c123d9fe7fccc8dfaaf61f65890 libgo/go/html/escape.go
302b2b14f96a6f7b5022d35deb5b6bde libgo/go/html/template/context.go
506e3b530bdd40373071c9e859b1912e libgo/go/html/template/css.go
55e9163874525f8c28e019f575a9ebba libgo/go/html/template/css_test.go
-337c65a83d6492ae3e67be264ef531e9 libgo/go/html/template/doc.go
+9799ec2d06e25c71d48d951082afd687 libgo/go/html/template/doc.go
c284267156f1b21cf233f742bdf31207 libgo/go/html/template/error.go
069ca481582f96a02d805f1efd842324 libgo/go/html/template/escape.go
bfdfcb2a850866a5651784af21258ad0 libgo/go/html/template/escape_test.go
@@ -46015,8 +46381,8 @@ bfdfcb2a850866a5651784af21258ad0 libgo/go/html/template/escape_test.go
8a90f9992b1507eee221abbf31a5a8b1 libgo/go/html/template/html_test.go
714e48f1a876c4b0960a95710f767ae3 libgo/go/html/template/js.go
4e672f8f9eedec591899270ea1a1fae2 libgo/go/html/template/js_test.go
-1c9dda3089f0d3ce4d393fce111d1cbf libgo/go/html/template/template.go
-662c46887ffebd6da072fc63eae58946 libgo/go/html/template/transition.go
+5e5eefc26e0f6286baccea773cf2f02b libgo/go/html/template/template.go
+7545c64ecdd5aaeb0b4a701fc3c2fc60 libgo/go/html/template/transition.go
bef0cd35c00098f75880ead9e458f22d libgo/go/html/template/url.go
acc5e4eff8396c29ef5a0b00631ccc85 libgo/go/html/template/url_test.go
b8e3e850bc2ef573b9c8357230fd22a8 libgo/go/image/color/color.go
@@ -46030,23 +46396,24 @@ bf6650b45f2f8f92510e1c9e7ac025b8 libgo/go/image/decode_test.go
02460115d1a897aee600ac628fb33a33 libgo/go/image/draw/draw_test.go
91f7e3b36da731f28e70ac5c62d0d597 libgo/go/image/format.go
9380d7454f4046f06fc2d5c208151f78 libgo/go/image/geom.go
-acc606e8da825cf4e34fb6e92f683436 libgo/go/image/gif/reader.go
+dafd9d5a7823abcc6dec60723ce922ae libgo/go/image/gif/reader.go
+bc55f594e5641f3f8db5f1e3bd5b3e73 libgo/go/image/gif/reader_test.go
440ee93ac77462bef4173cd97fae4bf4 libgo/go/image/image.go
6b2448f0fcaf5e41f57d433a0c5687c3 libgo/go/image/image_test.go
ee8a7ac38086663340a0d3cb021fe92c libgo/go/image/jpeg/dct_test.go
ba14c236db1bc45cc63d90ddf161877e libgo/go/image/jpeg/fdct.go
c7202c270b55cc3ce4c73f2fa531d7c3 libgo/go/image/jpeg/huffman.go
2f5a5cac3c1826aa5f4df8b8108ebeb6 libgo/go/image/jpeg/idct.go
-88d0db539332047957a9b8ad1d51b24e libgo/go/image/jpeg/reader.go
-06e46c89daa2754a2dd0f3942987c2df libgo/go/image/jpeg/reader_test.go
-3dbc09a42453fba0dd6c03777ebad4b5 libgo/go/image/jpeg/scan.go
+a8c884030d42c5fd0995b1216042d7d2 libgo/go/image/jpeg/reader.go
+208445d95af0dd2adf1f1e62da378819 libgo/go/image/jpeg/reader_test.go
+3d17051221e871f23ca71cb985a96c11 libgo/go/image/jpeg/scan.go
8575865f448d39beb28a6d593ee76082 libgo/go/image/jpeg/writer.go
-b2c98b8dfe427b41984d18d0d371c036 libgo/go/image/jpeg/writer_test.go
+c554f2493133e5b2125d5f214e3307fb libgo/go/image/jpeg/writer_test.go
1813b521ce4d162c7510499308c51b86 libgo/go/image/names.go
6c6c71a7fbf844a4b7e2c7e30b137070 libgo/go/image/png/paeth.go
b28ff874fcfdab0532ce47eb2684feff libgo/go/image/png/paeth_test.go
-9b96ed944779cba58f9f0e1ba0e18f57 libgo/go/image/png/reader.go
-ee127290bdd05c30b7bcf696db2aaa3e libgo/go/image/png/reader_test.go
+9dd07bb8dfcef56066fa317ff25b6c04 libgo/go/image/png/reader.go
+8fe076bdcb0c311e81a6836d490f7e2d libgo/go/image/png/reader_test.go
a17c493ff9606bdfb9f8ed3e71aa7043 libgo/go/image/png/testdata/invalid-crc32.png
324cdba273cb831902d87464f65b1551 libgo/go/image/png/testdata/invalid-noend.png
2b0ef2e6e70a1fc5ca3ee835aac93240 libgo/go/image/png/testdata/invalid-trunc.png
@@ -46091,7 +46458,7 @@ c87d2371dc6f02c473cf3e4d834a9919 libgo/go/image/png/testdata/pngsuite/basn4a16.
e573c18a6e0be2e8578a3a14f47eb072 libgo/go/image/png/testdata/pngsuite/basn6a08.sng
dd80078058a6e4b47966ab66d8a91f6e libgo/go/image/png/testdata/pngsuite/basn6a16.png
e83e8da292b780bb0c1e25f72774c780 libgo/go/image/png/testdata/pngsuite/basn6a16.sng
-6a0d29088eb5ea42456e82f1479490d7 libgo/go/image/png/writer.go
+a155de979af0a4c1ae497710d045654f libgo/go/image/png/writer.go
0b44efb9c61c661c48c17b87665a5b4e libgo/go/image/png/writer_test.go
4525d5eeca18697cbb6af6a1ed405666 libgo/go/image/testdata/video-001.5bpp.gif
0d1dcfe8299c392e3bb3c1a11a939706 libgo/go/image/testdata/video-001.gif
@@ -46118,25 +46485,25 @@ af5a9f0665487352d0b002299ff14722 libgo/go/image/ycbcr_test.go
466c92d784f128354149655cd726bb4d libgo/go/index/suffixarray/qsufsort.go
c18aefee1b7e8ebf602a98c849c4845b libgo/go/index/suffixarray/suffixarray.go
7d0ba82fe0d46991d857dffb8403c6f6 libgo/go/index/suffixarray/suffixarray_test.go
-9df28dbd695d0819edeff0c4cb46b78e libgo/go/io/io.go
-6d74e1b9b0b4367a8b994c51c7a29bf2 libgo/go/io/io_test.go
+c04d4deb4f1e1dfe2d9b8cc85236ce50 libgo/go/io/io.go
+cda25124da62f3858ce18dc4b3bb6309 libgo/go/io/io_test.go
39043cd316434f3b2bb9d850ca4162c2 libgo/go/io/ioutil/blackhole.go
-1bf90b0a99583432f55edab337b2e177 libgo/go/io/ioutil/ioutil.go
-ad740eb6026fe4d185470c2f0059a51f libgo/go/io/ioutil/ioutil_test.go
+6fd03a4c3ea6840b1e8da7b78e137b33 libgo/go/io/ioutil/ioutil.go
+63ed9cb1cba20f3251490e2140b79f0d libgo/go/io/ioutil/ioutil_test.go
812c05ca6dcce97f409cb5ed99d5be94 libgo/go/io/ioutil/tempfile.go
-585759c9af7741dc86427105d1725044 libgo/go/io/ioutil/tempfile_test.go
+a8aa7a8af68bdeda2bf5959f816c4b11 libgo/go/io/ioutil/tempfile_test.go
fd73854b88109e799217b8ccaaa5c79a libgo/go/io/multi.go
11c6dbc25beb014bd988519c28564e85 libgo/go/io/multi_test.go
fb7dce31ce7b4f8173df507ca663a91f libgo/go/io/pipe.go
b75b7e96196456b7d80c7ea307d19ee1 libgo/go/io/pipe_test.go
3ce5c0b9e4f6c7d14276a4dfb202206e libgo/go/log/log.go
32a5f59cb1aa5fe7ea8a60016571564f libgo/go/log/log_test.go
-14c92fa3afb8c0d0aa339ceb3b6a47e3 libgo/go/log/syslog/syslog.go
+9f855eff29c15aef1f1c2ad4f3203f9f libgo/go/log/syslog/syslog.go
539acc0320961711b88dbcc4b9cb3e49 libgo/go/log/syslog/syslog_c.c
-ec57e379db2ab018db3fd5d8fa001be9 libgo/go/log/syslog/syslog_libc.go
+698968d133a7919feeff9b0d93009b84 libgo/go/log/syslog/syslog_libc.go
66e268293325840fb3a57f3d6d614a72 libgo/go/log/syslog/syslog_plan9.go
-c7590df4e9a6ac66c1550679b9647d18 libgo/go/log/syslog/syslog_test.go
-a372cbdde7f0c56febf963a2eabc9b08 libgo/go/log/syslog/syslog_unix.go
+374dae5a130e470ff3e8ecc1a06b0c3f libgo/go/log/syslog/syslog_test.go
+0c99261202d00062e9c2049166832a88 libgo/go/log/syslog/syslog_unix.go
c2d1b18fade6d1d57fb11dd2ca8ad37f libgo/go/log/syslog/syslog_windows.go
70df85639bee856fbbeeea8cce5cd98c libgo/go/math/abs.go
c6ab241c7424e1181f13469dbd95555b libgo/go/math/acosh.go
@@ -46152,12 +46519,12 @@ a38c5d81ae7b5fa0749743a1f6d19480 libgo/go/math/atan2.go
a53d4ed46d3182e690f0adb196af3fd3 libgo/go/math/big/calibrate_test.go
765d334931ed789796732be1ba73ac91 libgo/go/math/big/gcd_test.go
fb40193bf8426b322ecf298d83723925 libgo/go/math/big/hilbert_test.go
-ff1a8b8fb02b6ceb1d1984a919f05035 libgo/go/math/big/int.go
+2d38208eef8ecbb58bd9654c61c1a066 libgo/go/math/big/int.go
2442fd7e312a1bb61c8debd879502ca0 libgo/go/math/big/int_test.go
-cbc6da77fa75e32803bd272004a67361 libgo/go/math/big/nat.go
+6d64795cde88247d9f7a3e349475783b libgo/go/math/big/nat.go
042e79f43b30ac8075baa4f4dbef8e0c libgo/go/math/big/nat_test.go
-1ddc01f4ba202d73e6c72e2c506538f4 libgo/go/math/big/rat.go
-b277233aa1bf405a55e3b024ed410580 libgo/go/math/big/rat_test.go
+e651dbb85ce20b458e42cad033f118ef libgo/go/math/big/rat.go
+bc8ceb1065ed346e24b779a1cddd8b4c libgo/go/math/big/rat_test.go
b8f8d551d454105eccf779d82f4d7021 libgo/go/math/bits.go
e753134baf49d1948892ff5afc379346 libgo/go/math/cbrt.go
400bac022849ee5bc5e3e03de5e2d076 libgo/go/math/cmplx/abs.go
@@ -46185,7 +46552,7 @@ d9c695137b161c02243586e4033c50ed libgo/go/math/export_test.go
bbefd764c349866598d34f7fd55ea82f libgo/go/math/floor.go
4822cff972ca61cb955c6f6a36c2cc62 libgo/go/math/frexp.go
e55cda522bae63719e41b30bfc9bf4d2 libgo/go/math/gamma.go
-00a4840d67b096ea52ac17c8c36ed0dc libgo/go/math/hypot.go
+99b6843725de4108099d5616fe1e1a33 libgo/go/math/hypot.go
3c26065f9ab149e5b4ac85c73345b81f libgo/go/math/j0.go
996f7a09e4911e9bfde8e409d21eb941 libgo/go/math/j1.go
5207d294e2575bf317b39496857f11a5 libgo/go/math/jn.go
@@ -46200,30 +46567,30 @@ f775349b41104ab1d9a5796356f75fd6 libgo/go/math/mod.go
6d416862337dd783e5fe560d1bd25322 libgo/go/math/nextafter.go
5c3b8630645320c3a5fc598aafe8cc09 libgo/go/math/pow.go
2cf31073c2b9d9b72520fe905306e01a libgo/go/math/pow10.go
-d70271f80ee53872eab2d1cb3fccd16d libgo/go/math/rand/exp.go
-4ceb375bcec25f3e93eb163737922ce7 libgo/go/math/rand/normal.go
+df6b820f38f3fc266144d16294666cad libgo/go/math/rand/exp.go
+f494cbe6b2548dae6f26cf4fb4a03b3a libgo/go/math/rand/normal.go
2cb1bd55876053c07cc54d8813cf0f03 libgo/go/math/rand/rand.go
6e5b1e595cf6f3f3804540f049d6f7f3 libgo/go/math/rand/rand_test.go
b4f4533d25b4cd45e295b792a74b6cfd libgo/go/math/rand/rng.go
-1fb7d541ce47fef81f679febdb8eae97 libgo/go/math/rand/zipf.go
+d7c428be7b9ff40cc8f775cc2c3faa95 libgo/go/math/rand/zipf.go
3cea1b096bfc0ae8e50c71e452de8781 libgo/go/math/remainder.go
be95fcee6784fe2c493051d6ca0c6dab libgo/go/math/signbit.go
22e5f10716c58937384715d063c84876 libgo/go/math/sin.go
d2805fa534e69599e42a65a62211a791 libgo/go/math/sincos.go
6c193bb2ec61202105f16f3e7937855b libgo/go/math/sinh.go
-e16db6155203df6ead837102952aa750 libgo/go/math/sqrt.go
+b2bad273c2c631885de3f597d5ad0920 libgo/go/math/sqrt.go
f105380c8b2240aa9e113eee1d360ac2 libgo/go/math/tan.go
-8f23084519cce184a99f851204948a3c libgo/go/math/tanh.go
+e3e199dca9ef50f00e69d686f499c2a1 libgo/go/math/tanh.go
4103ff95b1987b7619ca55fad881ed7f libgo/go/math/unsafe.go
c0dba3f73fc42783c1ebeceb96d7f7d3 libgo/go/mime/grammar.go
7ed03e1f91d8a0846f74902002cef0ac libgo/go/mime/mediatype.go
3401cf15d704a1d71138552bdc88e284 libgo/go/mime/mediatype_test.go
853bb2a637cc10fcf9f220516279a63b libgo/go/mime/multipart/formdata.go
517c3e018d5a285925a0b5a0dd58db0c libgo/go/mime/multipart/formdata_test.go
-7929e55b1c0656b7ff5a49858dbb18e3 libgo/go/mime/multipart/multipart.go
+7d16da40a97bdc7a6906b38ecb871948 libgo/go/mime/multipart/multipart.go
d4b9c7c160c8571e6ad8a2da1fc4f211 libgo/go/mime/multipart/multipart_test.go
-136d564ccfe3e0f0ea5005ae5f49d4cc libgo/go/mime/multipart/quotedprintable.go
-42bf713a72e87b3f9b5e538b5730479f libgo/go/mime/multipart/quotedprintable_test.go
+5952f52304e66b1488865f5d76cd2fec libgo/go/mime/multipart/quotedprintable.go
+b603bd24dc1127464a51cb6a041b9382 libgo/go/mime/multipart/quotedprintable_test.go
ea13f3c87e9a921a7368f85cd6ae67d3 libgo/go/mime/multipart/testdata/nested-mime
a871fe0e86933fceee9528b92ee91e70 libgo/go/mime/multipart/writer.go
f5f35288335bbf460ecea13d214d7461 libgo/go/mime/multipart/writer_test.go
@@ -46231,17 +46598,18 @@ d7c2d693b83d74f542553f24afe3d013 libgo/go/mime/test.types
d7c2d693b83d74f542553f24afe3d013 libgo/go/mime/testdata/test.types
3d321dd07ed1f050dc6b5d369dbf6cbb libgo/go/mime/type.go
e3df6cfc265614b31497785ff24ccf18 libgo/go/mime/type_test.go
-2f99d9170e2df11835c0400ccc4abde5 libgo/go/mime/type_unix.go
-69abca603b910cbbf1991f4fe240e85c libgo/go/mime/type_windows.go
+71cdc56313a74021be855c9ab12ce11f libgo/go/mime/type_unix.go
+126df331f5154c877617198be163dc79 libgo/go/mime/type_windows.go
496554648ab29c59b41b58e50f93b548 libgo/go/net/cgo_bsd.go
b6395bdea68e046bf9dd254af52bf07a libgo/go/net/cgo_linux.go
1be35ee90ee1d78a6b0f799de20637bd libgo/go/net/cgo_netbsd.go
b4ed7a0f94cf6dd1e6880945cf815013 libgo/go/net/cgo_openbsd.go
b2eecf9f58beeebac876f9f7cf9e736f libgo/go/net/cgo_stub.go
-efbbcc9216074f66560958bb4598ad76 libgo/go/net/cgo_unix.go
-a32a9fa5015dffd36ed8afbefef9c757 libgo/go/net/conn_test.go
-256d13e9f65af3d5270ae4c50ed1b2bb libgo/go/net/dial.go
-d4e1258514d747a8d7909b78d90be0ce libgo/go/net/dial_test.go
+5922b9c03cb7a9ae369ae14ce58bafbc libgo/go/net/cgo_unix.go
+67bed6c6b4c147ae3272c5ff618df231 libgo/go/net/conn_test.go
+766f30518c7c38deb05f01fa2ef6cdad libgo/go/net/dial.go
+d885d0cf482b1d9c1a8fc9dbce53df55 libgo/go/net/dial_gen.go
+f2eceb6302458d0237d727252c31b873 libgo/go/net/dial_test.go
e11a07c03a09039262cbbd096cc0ed3a libgo/go/net/dialgoogle_test.go
e0814a75ac8373858c1a78957e9ab259 libgo/go/net/dnsclient.go
6fd6e0cb4a0bb3a9722bdec1246f33a9 libgo/go/net/dnsclient_unix.go
@@ -46249,184 +46617,189 @@ e0814a75ac8373858c1a78957e9ab259 libgo/go/net/dnsclient.go
756757ea37b305f2cb85b33813eb6c53 libgo/go/net/dnsmsg.go
978c04416e1c16d816259d7e1f4990d5 libgo/go/net/dnsmsg_test.go
149a1c254b62a74ae730ffb20a2cf763 libgo/go/net/dnsname_test.go
-f04d99eb1e511e4d0ee0200f5242e83e libgo/go/net/fd_bsd.go
-dd4e3097056357b6d512b0e32fbb2b47 libgo/go/net/fd_linux.go
-f2145f676a42d5c1f19fcec5ca8d1fd6 libgo/go/net/fd_plan9.go
+13ea04fdd29fa39a5d319757ed3ea7de libgo/go/net/fd_bsd.go
+845b513a8b4b7df06f219a1c1b7b2845 libgo/go/net/fd_plan9.go
+5cc6c58a2bb6b732e37d9580d27d592f libgo/go/net/fd_poll_runtime.go
+45ddf432d806270398b3d0136f2a735c libgo/go/net/fd_poll_unix.go
2291a3c081b075e8519795e5d1aa8e09 libgo/go/net/fd_posix_test.go
243f24ac2a87c14fa0c539725022068b libgo/go/net/fd_select.go
-dbcda3f5b1cd66d11d0c163101e3816c libgo/go/net/fd_unix.go
-2800d916f139babc1d047f12acd44ac7 libgo/go/net/fd_unix_test.go
-928f6f8e768356755058995291f3f977 libgo/go/net/fd_windows.go
-26e2d02fe9259784c9a8dcfa1e73b2c5 libgo/go/net/file_plan9.go
-8f3e185e60ff729f6fa00059bfe75d3d libgo/go/net/file_test.go
+bb4357c2c3460d62dfbde034461a7bae libgo/go/net/fd_unix.go
+b8ab16260ae58511b97a69561541cf9e libgo/go/net/fd_unix_test.go
+18eb3f4b649f51d82d71193237d61ce2 libgo/go/net/fd_windows.go
+7fdcbfcfa2e3daaf8c4f24b6a873cf5b libgo/go/net/file_plan9.go
+3c6033a1af7b9eaf4a55c29fe3181843 libgo/go/net/file_test.go
fda43a58593624d1adc039d4da63e3a9 libgo/go/net/file_unix.go
-11543a50d361433a59490967733e1525 libgo/go/net/file_windows.go
+d6c8049bece451d461a9a91f248e1773 libgo/go/net/file_windows.go
7c2cfdb5bb78affbf11aad3590499503 libgo/go/net/hosts.go
66d618dc9acb461080a44ea79da230b0 libgo/go/net/hosts_test.go
77e1fec0f3af1cf49701683f11039637 libgo/go/net/hosts_testdata
a85420107020d629d16974bb2c56f078 libgo/go/net/http/cgi/child.go
b7c1c46fef07cc8145e99cca3ecc6e52 libgo/go/net/http/cgi/child_test.go
b29019bb8ac585422325eb11fcb16b27 libgo/go/net/http/cgi/host.go
-ba67d2d6dd5afdb9bb1b83fac73c75b1 libgo/go/net/http/cgi/host_test.go
+2808668afe532885429b35f2d83940c9 libgo/go/net/http/cgi/host_test.go
3f687a6ca8d76fff8bef0354ff830099 libgo/go/net/http/cgi/matryoshka_test.go
-b0e5bb57d5b859463b21031f85b2fb1a libgo/go/net/http/cgi/testdata/test.cgi
+15916237881c26dbdd88c6464608d191 libgo/go/net/http/cgi/posix_test.go
+d06f3c03c91097f03e646f5c29fa2bf2 libgo/go/net/http/cgi/testdata/test.cgi
cc2bf8ae55726b96eeb3c7a0c502b6bf libgo/go/net/http/chunked.go
fc94c54a8e160a8d9f4ad9d746b8127f libgo/go/net/http/chunked_test.go
-1dd3f8a4a384beffc130c3d8ea109c08 libgo/go/net/http/client.go
-997b9e0abaa622262c410ea16793279f libgo/go/net/http/client_test.go
+3d2e81be77379d3321bd4ef30445739d libgo/go/net/http/client.go
+9c5fd300d659064236ff22eb3850edac libgo/go/net/http/client_test.go
6a09f3137e3eba83323a2ad92bafb317 libgo/go/net/http/cookie.go
f7505a1b6228b8731ef2cd5abbbfa001 libgo/go/net/http/cookie_test.go
+09a9481a5441006bf3472b29504acf17 libgo/go/net/http/cookiejar/jar.go
+297bc6c05c9ff31981119a605bfec77d libgo/go/net/http/cookiejar/jar_test.go
+c4f5243d0fadf992024b5c7bc6adde2f libgo/go/net/http/cookiejar/punycode.go
+fabfb997332db4db285c4a3beaa6d742 libgo/go/net/http/cookiejar/punycode_test.go
406e6a0ccd19be89e69d3291b6f96a75 libgo/go/net/http/doc.go
-778d41cd8dca3f3df405132185e07480 libgo/go/net/http/example_test.go
-6fbbeda23fab82b0cb53feed7903d530 libgo/go/net/http/export_test.go
-09c23dda363bea5710dba899797d2500 libgo/go/net/http/fcgi/child.go
+7d19946ecfe66533411d8c9afcf28069 libgo/go/net/http/example_test.go
+67baaf356bdd0308a459d1bd43f0c734 libgo/go/net/http/export_test.go
+366b5e5d70903613b9ce9fd1755c5b83 libgo/go/net/http/fcgi/child.go
d2dd73ca9dff93f07ddcf480c17d4608 libgo/go/net/http/fcgi/fcgi.go
cfdf9f6b03cfb8bc5067889e8328c84a libgo/go/net/http/fcgi/fcgi_test.go
c8f8c881b2b45eb49806f8d2598ab02c libgo/go/net/http/filetransport.go
-c977abea8a6b03d9f790d2f3b90b744f libgo/go/net/http/filetransport_test.go
+2bf97b4fbbfe4b8828ad513902192c85 libgo/go/net/http/filetransport_test.go
0f81a968e4ea0ceaeb66738a406325e5 libgo/go/net/http/fs.go
-f2c88c6bc563ca84cdd8d533e16354bd libgo/go/net/http/fs_test.go
-ac9465f619cf564fe829c1ec8ba65754 libgo/go/net/http/header.go
-3336adf775e139e484f64c63cc87fd30 libgo/go/net/http/header_test.go
+94b7a388ecac8bbd3e64aa5e717f9797 libgo/go/net/http/fs_test.go
+d081fc6184adfa3cd58ae7926240407b libgo/go/net/http/header.go
+106a86acfa4be754368da8a30940cf91 libgo/go/net/http/header_test.go
25a0928250edebf147e2cdd7656a63d7 libgo/go/net/http/httptest/recorder.go
157624fe94f7a3aa51a1e41b9aecbcc5 libgo/go/net/http/httptest/recorder_test.go
-113a0ae2af0c5f0ed672ed39aee9b53e libgo/go/net/http/httptest/server.go
+dcc3551260dbaa32f16ccc8af1545796 libgo/go/net/http/httptest/server.go
5ad12e068971bc75db8d4ba7db389296 libgo/go/net/http/httptest/server_test.go
14e4dcc7cf6db23e5f55d61d10b49271 libgo/go/net/http/httputil/chunked.go
76996baf8c192cf6345de6cb14123862 libgo/go/net/http/httputil/chunked_test.go
415df8dd0077e50b5a4b8c57c12c79be libgo/go/net/http/httputil/dump.go
-0683536b4ea0dfeff31744617ea0af04 libgo/go/net/http/httputil/dump_test.go
+7b4faef4dccbb21acbec453c59e44125 libgo/go/net/http/httputil/dump_test.go
ae7a48bacf762048c72a70d62cf25805 libgo/go/net/http/httputil/persist.go
-953c9b1c9ba7f7b12caad7a3d1ffbb52 libgo/go/net/http/httputil/reverseproxy.go
-47ee0e5a776a1f15014994a440371b1f libgo/go/net/http/httputil/reverseproxy_test.go
-91dc2cfc0b29ee561c085e851eb34a9b libgo/go/net/http/jar.go
+c3fe7f010bcea63ef6e6d9899d121631 libgo/go/net/http/httputil/reverseproxy.go
+25ec04ff578e6a665d9efd2d13f7b4c6 libgo/go/net/http/httputil/reverseproxy_test.go
+0f1b2ae9b087721dc8d532479b919c2e libgo/go/net/http/jar.go
efca29558454c70aec3ffdb1a40312b9 libgo/go/net/http/lex.go
60842caf5b062524ccf8bbf2fea18d84 libgo/go/net/http/lex_test.go
-be8cd5b05eaa7f9eb6ffaa010c134edf libgo/go/net/http/pprof/pprof.go
+8dbdb3a4284f75baff2b3d1493826481 libgo/go/net/http/npn_test.go
+4faa593d40710e166d940442bacd78c4 libgo/go/net/http/pprof/pprof.go
c37ac60c86f5111cf53983311368cf03 libgo/go/net/http/proxy_test.go
e79bfc5725423d1946ef557edc738faa libgo/go/net/http/range_test.go
0701600740fc8f8d502410b8e4aca7a3 libgo/go/net/http/readrequest_test.go
-8fc3efb993dca258e7b035ceafc3c982 libgo/go/net/http/request.go
-f0c18eb5b99925b9e6a60043b35b7b78 libgo/go/net/http/request_test.go
-999d0839d672106fec8bfc2ca80e69e3 libgo/go/net/http/requestwrite_test.go
-198498daf89e314f703692c5e065e84f libgo/go/net/http/response.go
-4a1e868017d582ad1b82580b0b31fa82 libgo/go/net/http/response_test.go
+ee9630c2621fd45ea33e67b8cdacdc13 libgo/go/net/http/request.go
+6c33affe2831d872e909f81043aebb6d libgo/go/net/http/request_test.go
+1c6276a25161953821a6dc7ea8750354 libgo/go/net/http/requestwrite_test.go
+7bc24508742656a33ce1354987ef0c44 libgo/go/net/http/response.go
+aac90a00eb1d9cedbd7a4af23df66089 libgo/go/net/http/response_test.go
83d0a74c47454c41f9cb4cdc5587b8ee libgo/go/net/http/responsewrite_test.go
-0e581d96533d0bd7a0a1e98fe1478a3d libgo/go/net/http/serve_test.go
-9a2df522212ba18d9f5ecf85731a8897 libgo/go/net/http/server.go
-38ff71ae4b684a82b624b738c4f7b5d7 libgo/go/net/http/server_test.go
+ea26214b913b132baf61fdfcbe15ae4d libgo/go/net/http/serve_test.go
+2503481b317006ede3182e7e5c44ac62 libgo/go/net/http/server.go
+0a4e44dc4ddffd44df16f337fd6ac2d6 libgo/go/net/http/server_test.go
305fbe2c3e9d6bd7cd71b0de1f482fe0 libgo/go/net/http/sniff.go
-bde83bcd44e8d81f429a06d91f1b9f29 libgo/go/net/http/sniff_test.go
-db3e9a59c89e51fb018c8cac6787d939 libgo/go/net/http/status.go
+4e24d1590fafbed9f9e9a1ea26972aa1 libgo/go/net/http/sniff_test.go
+a689808b134c81d79172149abca0eb69 libgo/go/net/http/status.go
3749f52bb326ae96782b42dc0a97b4c1 libgo/go/net/http/testdata/file
39bf3a5cbcd978e0d9a9bab0f27787b4 libgo/go/net/http/testdata/index.html
746f7bd76da133c7035108d0053a7e79 libgo/go/net/http/testdata/style.css
-4fa62b11db397ce1384e195e2d933c9b libgo/go/net/http/transfer.go
+0899581683533bdf93339c99d1e09f80 libgo/go/net/http/transfer.go
a74a79a79e580c944a3fd41ce77c0335 libgo/go/net/http/transfer_test.go
-5b24e4eb98fdab46acafd20c84f623e1 libgo/go/net/http/transport.go
-2ff79aeebb3876562cf7425d0bc8670a libgo/go/net/http/transport_test.go
+f9d3c35f9054abc93ce3a1d0ce0e0a13 libgo/go/net/http/transport.go
+5e36f54598196b637d27749dee36340b libgo/go/net/http/transport_test.go
3e2d83926f658967180e34ebd76e9de5 libgo/go/net/http/triv.go
-a2209175cb7b0d91717df706b1efdb7b libgo/go/net/interface.go
-0b7d185e7c3d9b9cbe8e649157fa0098 libgo/go/net/interface_bsd.go
-c5b43dfe35a43fee6c2b25600d178c26 libgo/go/net/interface_darwin.go
-41682fb9695d34dba2a8f8743fd61b70 libgo/go/net/interface_freebsd.go
-79212e1856e369f128ccce0a039bb054 libgo/go/net/interface_linux.go
-722fbf6d83dd0c9d48e224adcb9e04a4 libgo/go/net/interface_netbsd.go
-71ca95bb3c70392640a56baa034d1876 libgo/go/net/interface_openbsd.go
-8e2517d72e724ac03c70701e0ea007a4 libgo/go/net/interface_stub.go
-4083437c0bbfeded2892c92ae4a8725e libgo/go/net/interface_test.go
-bf1a753a1d0ab10a5d25628019181d62 libgo/go/net/interface_windows.go
-3fee57038a8e127a238885cbd2ed2ba6 libgo/go/net/ip.go
-d15d9d97f02c2c43f2e4c7d8b825babc libgo/go/net/ip_test.go
-0988bdc00ec9e10e96550eb3103aac83 libgo/go/net/ipraw_test.go
-175d6bb8ba2b0e1eb71a410cdf980e42 libgo/go/net/iprawsock.go
-6d178db814854009587657a7210edb8c libgo/go/net/iprawsock_plan9.go
-29dd7dbc5ad4a7e1eb4cfe7bd5ee6964 libgo/go/net/iprawsock_posix.go
-34ff44412c3d4523371fae30e138f3d7 libgo/go/net/ipsock.go
-81e65a7fb6572a8d5691f705f3f3bffe libgo/go/net/ipsock_plan9.go
+8cb3407690a974e54d51a77c45ab12fe libgo/go/net/http/z_last_test.go
+efabef0179db561bc170c5eb18b98579 libgo/go/net/interface.go
+ba25c3761cdd3f2c5021cc1652ce5338 libgo/go/net/interface_bsd.go
+2c3b7883c5b04d3feecb7d4df95f053b libgo/go/net/interface_darwin.go
+9b4be8a58495585a44e5ac4344f87e80 libgo/go/net/interface_freebsd.go
+ce94fdf18502cb66f636e28301af8d75 libgo/go/net/interface_linux.go
+3e38b81345aec4e4a1de552ab08c01f5 libgo/go/net/interface_netbsd.go
+3e38b81345aec4e4a1de552ab08c01f5 libgo/go/net/interface_openbsd.go
+17e42c31189dd5f7ae40c06b80f05c87 libgo/go/net/interface_stub.go
+2df71b735c9534cccc4e5faa4d32fc75 libgo/go/net/interface_test.go
+bfb1a4e423cb4451ab8f60667afda923 libgo/go/net/interface_windows.go
+ec179d07ef0e80b9c2b9bffb44e5606e libgo/go/net/ip.go
+28b1fa77d079c3fd2408c37eab2a2e5b libgo/go/net/ip_test.go
+0748046001e14691c00396e80c19d0d9 libgo/go/net/ipraw_test.go
+20a7287430ea787e45f4ca700fa35ec0 libgo/go/net/iprawsock.go
+fd1dacaf0f9896fbc9a70bbd7e1519c5 libgo/go/net/iprawsock_plan9.go
+39baaec1e59a9c1dafe9ca4f2658ed9f libgo/go/net/iprawsock_posix.go
+bbd3b4acaf0a3f72df21fd2bcd6ca9b6 libgo/go/net/ipsock.go
+7df6717b54fa269b9bbeb5a7b76ebfe1 libgo/go/net/ipsock_plan9.go
55bebb48f2b5fec1e1f2cc916210a435 libgo/go/net/ipsock_posix.go
9da659ff957275145d58cba329712c02 libgo/go/net/lookup.go
-9e095af4aab67ceef275f09d5a9381d6 libgo/go/net/lookup_plan9.go
+b976e19e4763794dac7115b4e5d0c6e5 libgo/go/net/lookup_plan9.go
a64eb8cc11e3df5771cd4712f13effd0 libgo/go/net/lookup_test.go
76e72610f90a060445f751b5966cdcec libgo/go/net/lookup_unix.go
-f188b65acedef96a0bb7a3fab219547b libgo/go/net/lookup_windows.go
+e5541f69bd01aa8a1e78a0d414624f5a libgo/go/net/lookup_windows.go
a6e3a6266c3dfdb3d9df1babe1dd921e libgo/go/net/mac.go
59f014c6c4c19e49807c77369c842fd5 libgo/go/net/mac_test.go
6b1e781b26939ed4746aa1f0061b4a43 libgo/go/net/mail/message.go
227289f49c0e0fe9929f659aa9d37838 libgo/go/net/mail/message_test.go
-3cc78f50fefa7744edcb195f4bd89d0a libgo/go/net/multicast_posix_test.go
-ee874b1d9d587d61c5a00173b7063f88 libgo/go/net/net.go
-e065e9131348ab978c76ed3520859e83 libgo/go/net/net_test.go
+b4da8348d8d6a476841930f686e12f8f libgo/go/net/multicast_test.go
+81492b4635490b168e57aae270d954fd libgo/go/net/net.go
+acd2caf017e50d805ec2a4d067251cb1 libgo/go/net/net_test.go
e0d88f0e247dd2e2f739414f8c061e7a libgo/go/net/newpollserver_rtems.go
-9213c4ffbde22507f59959268967a608 libgo/go/net/newpollserver_unix.go
-ef82d4c3dc54f8bd7589cc6f4a6f2ef4 libgo/go/net/packetconn_test.go
+99534de5dca1e0ee98ef601f84e011f1 libgo/go/net/packetconn_test.go
99c6c0c634f841cfa8a42435ae62a596 libgo/go/net/parse.go
bfa8d742381ad62ddc680e65e4398f35 libgo/go/net/parse_test.go
fa468a061a49a449d89780ffbcd1eb2d libgo/go/net/pipe.go
bd551efce9ea7bb3c69f43483201285f libgo/go/net/pipe_test.go
26ed1a0b748dcf192327d05f8cbb9ecb libgo/go/net/port.go
-8f501eabcc3f3f7615cd7a37bf22c01b libgo/go/net/port_test.go
+ab0aaaf92ff580933dde8c746976a493 libgo/go/net/port_test.go
6966b583a0fb7eae5e112bb9f9896abd libgo/go/net/port_unix.go
-50dec00c0435dc56866cb367e6422cf0 libgo/go/net/protoconn_test.go
-22f9c993486a959b1862fe2d887acdb8 libgo/go/net/rpc/client.go
+3634d5dfb0b34b0059ae591842cce2fb libgo/go/net/protoconn_test.go
+ae96a37fe4be8a09438740c550021c6d libgo/go/net/rpc/client.go
e9a72102a30228998957257c4b098ce3 libgo/go/net/rpc/debug.go
-5744f64b3a367482d19bd91bd0dedc32 libgo/go/net/rpc/jsonrpc/all_test.go
-de453f7f22d1dc711db99323e40b93a6 libgo/go/net/rpc/jsonrpc/client.go
+19ec8e99f22edf2e024da6ad1031a68a libgo/go/net/rpc/jsonrpc/all_test.go
+8158fae2d374b0fdc2ef914bc6cb3233 libgo/go/net/rpc/jsonrpc/client.go
c0a47ec1a9c44e6b17e0672b590bbcc6 libgo/go/net/rpc/jsonrpc/server.go
fc304c3a041d67993a6b83e4bcee0acc libgo/go/net/rpc/server.go
-7042336f8ad64ac0c71b09737f4dbec2 libgo/go/net/rpc/server_test.go
-b4984eee541188e5ace94df78cd6d728 libgo/go/net/sendfile_freebsd.go
-73f51cb8a8c223584887ffb702866a69 libgo/go/net/sendfile_linux.go
+65cad83291c3fd29a18a409b7df88458 libgo/go/net/rpc/server_test.go
+cb6ab719a1d6b9f08d27140eadb6b9c3 libgo/go/net/sendfile_freebsd.go
+42008277ecd1853f171945f2948e35de libgo/go/net/sendfile_linux.go
fdf6f04d0ebfc6f5c4744538fdcd6907 libgo/go/net/sendfile_stub.go
d156fbdb63b445c5b828d651d3b0c707 libgo/go/net/sendfile_windows.go
-55793ed654dcdf08cba3cdde61592fe3 libgo/go/net/server_test.go
-6b6ea9bdf38621a73c1de3707c9f07b4 libgo/go/net/smtp/auth.go
+cef4264a47cefa004f5e175cd61a71f7 libgo/go/net/server_test.go
+c5f1bf7407965a76d59082fa2afcc9d5 libgo/go/net/smtp/auth.go
03e376da342331b8f0775b076d51aa8b libgo/go/net/smtp/smtp.go
-72fd2d31d26c49fe4530940b962ccd1d libgo/go/net/smtp/smtp_test.go
-589ee93df0de60981a88ef49e53e84b5 libgo/go/net/sock_bsd.go
-59a9c7c206334c89df9e394e2331c529 libgo/go/net/sock_cloexec.go
-7b66581bf39c642d3abee4ba2223501b libgo/go/net/sock_linux.go
-39d945a7010a35daa3bfce5db5ee2d03 libgo/go/net/sock_posix.go
-561b4fdfc56ecfb4f7314eb308d777e7 libgo/go/net/sock_solaris.go
-9611161978e177e3c5b9013861a9dd35 libgo/go/net/sock_windows.go
+17bbf3c29dc421949de1e1c2503d14c9 libgo/go/net/smtp/smtp_test.go
+6f28d255d393731343a6e251c7ea9381 libgo/go/net/sock_bsd.go
+b7809a49bb42bbff0df0467d1699c599 libgo/go/net/sock_cloexec.go
+45082421d718d334c470c16af2b3fcff libgo/go/net/sock_linux.go
+5fbeb3c9bc0380420527fe4afb8ef18b libgo/go/net/sock_posix.go
+f8f5a9e88f9443ec8596967848736326 libgo/go/net/sock_solaris.go
+4170a1aaada6a8afd452088f636295bb libgo/go/net/sock_unix.go
+a8409ec83a58f09218e5c7c293eaca30 libgo/go/net/sock_windows.go
4fc7c4a3bc67a6b33218911c3572f137 libgo/go/net/sockopt_bsd.go
74d0ff74997ec52005cff1428069c956 libgo/go/net/sockopt_linux.go
-7358be15ddb495de31378c445c85bb03 libgo/go/net/sockopt_posix.go
-9c4186293ed1a28e06b0677598e4eee4 libgo/go/net/sockopt_windows.go
+386ddb9b5facc69b8bd08333255278c1 libgo/go/net/sockopt_posix.go
+33fb48601d717c50a5ff25183e79638c libgo/go/net/sockopt_windows.go
86207d6a4883e9d0abfb29e5fe858e1f libgo/go/net/sockoptip_bsd.go
c57f2ca3a916675122d8a6bf1e47d3e9 libgo/go/net/sockoptip_linux.go
5e4309101269b9db639e219027177d69 libgo/go/net/sockoptip_posix.go
25859711682b50feb790555ee5338c4c libgo/go/net/sockoptip_windows.go
-81b770c9efc1d6eced4881e50fdd5f58 libgo/go/net/sys_cloexec.go
-f8c08ac7e71659cfceb26189ca015c0c libgo/go/net/tcp_test.go
-3079eff13c172325d35c501aa1400d98 libgo/go/net/tcpsock.go
-e74fe0f7aa33cd58665bac0fff1bd005 libgo/go/net/tcpsock_plan9.go
-5a9f71f6a3af92c41aaf10772396c057 libgo/go/net/tcpsock_posix.go
+0d24741c8c28778e4ae5543dabce746c libgo/go/net/sys_cloexec.go
+923fc9d7e94eaac60bc38d8d69adae5e libgo/go/net/tcp_test.go
+e8790dabc6cf899164185f327b4c78c1 libgo/go/net/tcpsock.go
+49e77bd5deaa45c1df2b0c3a6a46c10e libgo/go/net/tcpsock_plan9.go
+b847d661d9b5a94ea5a8b31f14d0b3e4 libgo/go/net/tcpsock_posix.go
77e1fec0f3af1cf49701683f11039637 libgo/go/net/testdata/hosts
2ed3fc440e799eb489bd3308adff0e57 libgo/go/net/testdata/igmp
4ffe1a59695f13c8a17af741b859aa19 libgo/go/net/testdata/igmp6
f6c31a5377b60103bcffa338a3a383b0 libgo/go/net/textproto/header.go
71eb9da4b09fd32732ea13103fb0a83e libgo/go/net/textproto/pipeline.go
-684a2ae293cff6792b271543ace82a00 libgo/go/net/textproto/reader.go
-de406dfdaf91bf0ed3f219cf35dec1a8 libgo/go/net/textproto/reader_test.go
-300f4de23f56ed17085200311f0961c9 libgo/go/net/textproto/textproto.go
+01248de7e0917b63ef2ae6df6b4cc123 libgo/go/net/textproto/reader.go
+a5efcd3567269b6b712f6fe02fe92466 libgo/go/net/textproto/reader_test.go
+b7530ab701f1e80c6238b1183b429d57 libgo/go/net/textproto/textproto.go
7d349e55162c24d7987cf4a349aa117f libgo/go/net/textproto/writer.go
3abbd1cc26c974b1cc48fc5feb96c014 libgo/go/net/textproto/writer_test.go
-be16e8f8f25598387fa560b87232a7e1 libgo/go/net/timeout_test.go
-4d01b737c446f3b0b96ca5d04310d251 libgo/go/net/udp_test.go
-67f98686dcc1a75754022688ef09bf45 libgo/go/net/udpsock.go
-da7aab23e39789b91bc71bca78282835 libgo/go/net/udpsock_plan9.go
-52e8a5ade0f35868bafe9949b78d040f libgo/go/net/udpsock_posix.go
-6a3b3046b96391129a129255dca18045 libgo/go/net/unicast_posix_test.go
-a9851dd8bf3d853131939b53e42c51a1 libgo/go/net/unixsock.go
-7612a9f879f844bd4b9c481711b7c2e8 libgo/go/net/unixsock_plan9.go
-ea6ae39891a060fbc42c8d88d378efa4 libgo/go/net/unixsock_posix.go
-919f5ce29d0acd7e58911b6b49fea910 libgo/go/net/url/url.go
-fd0085b40c1b0fbade2a8131d7c38911 libgo/go/net/url/url_test.go
-d8e50193613456ffcc3b6cf18104614d libgo/go/old/netchan/common.go
-ce4e7b4df8943a8e4e0e8f47046b51dc libgo/go/old/netchan/export.go
-e06b97c57c35cb381429277d5219b19c libgo/go/old/netchan/import.go
-a8d71f94558b709d8b450e6a736e5305 libgo/go/old/netchan/netchan_test.go
+5049983b430e910eb7971392fe2a00ce libgo/go/net/timeout_test.go
+c26152b57d875b83dee6ae2a557baa3b libgo/go/net/udp_test.go
+387556bfb5bef14885f310f89c661dd8 libgo/go/net/udpsock.go
+cd0ba7099b3b75b67b476f036b597f35 libgo/go/net/udpsock_plan9.go
+d190429e78181db7bb18740edb4b24cb libgo/go/net/udpsock_posix.go
+4669c828243ac8fcc25343d7316b4671 libgo/go/net/unicast_posix_test.go
+45c5da227f07d993b60f4a5785e44fa7 libgo/go/net/unix_test.go
+9ae171a6754e253e554a0eaaf94e99c1 libgo/go/net/unixsock.go
+83dfafaa0b9e022564598b3759089ca1 libgo/go/net/unixsock_plan9.go
+ac28b21ed6582e7989c815d4acfd246d libgo/go/net/unixsock_posix.go
+1160e8ded2f129ed1107ff66c77b9d4d libgo/go/net/url/url.go
+e51347001fab6bd47cb354a7b0405d86 libgo/go/net/url/url_test.go
9cfadd1d128099cb7a8f837bdcacb8b3 libgo/go/old/regexp/all_test.go
15dab3e6f2a006513f8410404c1b7322 libgo/go/old/regexp/find_test.go
3dc6bd0bc3717c1fd4807ff1de9f45a2 libgo/go/old/regexp/regexp.go
@@ -46440,32 +46813,34 @@ d53a8079cb71aaa953526fd13f2ffc32 libgo/go/old/template/execute.go
d3cfe6799a6a88601cd99a34802996f0 libgo/go/os/dir_plan9.go
b47df6ca79c22ddb073dbc1929d03c3d libgo/go/os/dir_regfile.go
d4495adc13f84cdd9d94d94bcf750627 libgo/go/os/dir_unix.go
-b94c14345b963743e6450feb9be1f79f libgo/go/os/doc.go
+17e47dddb6878509e3b963e0a7713561 libgo/go/os/doc.go
88dc00dc418fbb6312ef00f24ccfff64 libgo/go/os/env.go
c7045ec245a7cd258a7fe3bee3463898 libgo/go/os/env_test.go
+907ae02cc8e98243da700d5314656bfb libgo/go/os/env_unix_test.go
55932fed2b5947891a67de79968dcce4 libgo/go/os/error.go
35726928fd2fe3a155ce6f500441c301 libgo/go/os/error_plan9.go
a73e30615101d187e6e9422fff8885ff libgo/go/os/error_posix.go
5c16c64c93f2e09570889476ebedbffa libgo/go/os/error_test.go
55169cfdfd3549152c02af2a128ee7d8 libgo/go/os/error_windows.go
164c49701a8d3c084783aa8f19209f3c libgo/go/os/exec.go
-d62b6ed5d21da46a9fa801cb7935abf6 libgo/go/os/exec/exec.go
-e1ccfea95574057500d41a28a7c3397d libgo/go/os/exec/exec_test.go
-931716bd9105ad8d0c166d61b4eed28e libgo/go/os/exec/lp_plan9.go
+9031f5edbdab614b6f449b8ebfbf2ea3 libgo/go/os/exec/exec.go
+797224628a2a34dc6a857de806cd7ad8 libgo/go/os/exec/exec_test.go
+0812d10dd09260508f703c1be192af4c libgo/go/os/exec/lp_plan9.go
41619b7d87d5ecc522bc2eafadf2f303 libgo/go/os/exec/lp_test.go
-43a2264f4f38ee9a91b2b0fbdff917e7 libgo/go/os/exec/lp_unix.go
-5b068237af521405f44c3293db8368f5 libgo/go/os/exec/lp_windows.go
+5c94270336efaa243dd2218b8b4e2db4 libgo/go/os/exec/lp_unix.go
+60551dbe93b0ba3f75e0bad401d5a73f libgo/go/os/exec/lp_unix_test.go
+f835b6974deb35cf0c711529dad4bbf3 libgo/go/os/exec/lp_windows.go
ce0c864511363631511bba8868bc7e50 libgo/go/os/exec_plan9.go
-58ba43c4c3556a7c030985b122030590 libgo/go/os/exec_posix.go
+455b1106eaf4de8894a92ce9ca14c681 libgo/go/os/exec_posix.go
dcdfa389da32f8c701e7d6e62666aca3 libgo/go/os/exec_unix.go
02ff68c1af8f3975143e5aff7aad834d libgo/go/os/exec_windows.go
8ecdb9cc8d9e1eab60d58b404a56b8af libgo/go/os/export_test.go
bc4ce817a921e59720ac4701f0abd986 libgo/go/os/file.go
-c73dcaf2ea3517edc629cf94aaf64f3f libgo/go/os/file_plan9.go
-8b2f609d8dc3e4803edee9d85e85365b libgo/go/os/file_posix.go
-cae3f4f6fedcba5c13c166686b4d06ff libgo/go/os/file_unix.go
-da0d2d254396b18e806b5b975b03dca9 libgo/go/os/getwd.go
-b41c958dfec0ecba400cc07da3a6de9d libgo/go/os/os_test.go
+ccaac58f417b10941b80b0a6405051f5 libgo/go/os/file_plan9.go
+f2bfa772fc528615475aef83d80f3f8e libgo/go/os/file_posix.go
+557bd8cbda53442d1826c4332cee8ea9 libgo/go/os/file_unix.go
+7e4cfbbfb6bce7045803f9369ff7d586 libgo/go/os/getwd.go
+2114609c30808b2c3e3e552755c8148c libgo/go/os/os_test.go
5d5a079650c8eba17c214d242b513f43 libgo/go/os/os_unix_test.go
34b27033c046dfe443248a5909079e8c libgo/go/os/path.go
9b0b6a889ba031f93daacf0ba65cd5e3 libgo/go/os/path_plan9.go
@@ -46475,21 +46850,23 @@ e51071aa9651571b2bdfc40398322e88 libgo/go/os/path_windows.go
e4ea3dd1291113adf3964ef6a05ed381 libgo/go/os/pipe_bsd.go
203760c2f9bdd038dcef96f85a91ce33 libgo/go/os/pipe_linux.go
c0dd1a60a6489d9dd955553409eb39ba libgo/go/os/proc.go
-4f7ca2811ba7a177ddad8e736628506f libgo/go/os/signal/signal.go
-f47358ca3019033b02bfb8ffdc5f4328 libgo/go/os/signal/signal_stub.go
-1cb6de57484b7700774d385230419c1e libgo/go/os/signal/signal_test.go
-78b6cd69de85e9595d46dcee7370c268 libgo/go/os/signal/signal_unix.go
-4aec448a43893509b078be5723a21607 libgo/go/os/stat.go
-294b2a99943da85bd78489f1d935c33e libgo/go/os/stat_atim.go
-69291e1a15bf6719f2fd7efa820c9209 libgo/go/os/stat_atimespec.go
-c27013fad383590909ffac5af8d14c32 libgo/go/os/stat_plan9.go
-b832a1c4e7e472f52b43f755a1a6fdb3 libgo/go/os/stat_solaris.go
+afc79bf9c8f01fd757a85c3020eb2f4d libgo/go/os/signal/signal.go
+b37dad28fc575ce562a4dcfa6abd4e4a libgo/go/os/signal/signal_stub.go
+7b11db9ff69f87d97fbc8652cade084a libgo/go/os/signal/signal_test.go
+003bf69bdbe3213079ee3928575d999d libgo/go/os/signal/signal_unix.go
+f211e42998bec3b1f2baa3ce330e3127 libgo/go/os/stat.go
+a57f209191526a307dbdaa07fa40228e libgo/go/os/stat_atim.go
+6a164dafc74926adff43d1d924a079b7 libgo/go/os/stat_atimespec.go
+3ee0472ca354e3382548c0e9fa8d1fad libgo/go/os/stat_plan9.go
+01a83df87d89120c07c9f8b5363cf632 libgo/go/os/stat_solaris.go
c30c409cc856527ee480915cec43f7a6 libgo/go/os/str.go
c4f9d4533ade955f43aff1a1984bc7a3 libgo/go/os/sys_bsd.go
ce9d201edac3356b112501276aa1c207 libgo/go/os/sys_linux.go
48f91a4fd8049ea550cd900cf26f7ac7 libgo/go/os/sys_plan9.go
5194f71f4857c5fa33c16697535e5a8b libgo/go/os/sys_uname.go
-d7c9b98a6e7e0e853fd8ccdef2fbfc8e libgo/go/os/types.go
+0a841f2ce9240ad927b733a840638608 libgo/go/os/types.go
+39bc59500c2bd7a918eafb9ee2322c70 libgo/go/os/types_notwin.go
+1877a110aba03c54d5dd1e2e2051d970 libgo/go/os/types_windows.go
db3053584bf91d6884adf98b27ee6863 libgo/go/os/user/lookup.go
064450b3e9758745b95ef0db481ab985 libgo/go/os/user/lookup_stubs.go
fec0f268168f34645576d8aed234ad82 libgo/go/os/user/lookup_unix.go
@@ -46497,35 +46874,41 @@ b0f66bc2784096265986651077811fe0 libgo/go/os/user/lookup_windows.go
7a204eaa296233e925699f02af5f1903 libgo/go/os/user/user.go
3cf855d00a40873236f2d3c13ec2e416 libgo/go/os/user/user_test.go
d2fa63df751f87329213c36aef50f90d libgo/go/path/example_test.go
+0808ef2134f2917282fac11db7eb0a8f libgo/go/path/filepath/example_unix_test.go
ca197b7907e5ce9820272cb74f16d429 libgo/go/path/filepath/match.go
-6fd91aec2c49f04a5c52958071f0927d libgo/go/path/filepath/match_test.go
-7a0e6af0c5dfe70993f6dc7e0275783e libgo/go/path/filepath/path.go
-ff4fa0df86610d02bc0a61bd16b42a55 libgo/go/path/filepath/path_plan9.go
-04be5bf857f43aaa67770935db04e708 libgo/go/path/filepath/path_test.go
-72b33d6c5265de73fdca2a874f47813d libgo/go/path/filepath/path_unix.go
-9f87cd3ea027b77a2a276e219b697fc5 libgo/go/path/filepath/path_windows.go
+5760a48874454dba18dcd0b17dc03895 libgo/go/path/filepath/match_test.go
+fe16342b8a912e49c713e15ce89addae libgo/go/path/filepath/path.go
+c1dfa705b62ada8ff1ea0643711ad4fa libgo/go/path/filepath/path_plan9.go
+90d8369b2360246a3f6cd29326074e83 libgo/go/path/filepath/path_test.go
+b8c7b579291fb7f7f1ecc6cae311c864 libgo/go/path/filepath/path_unix.go
+47a6881cbc359ff622883c13823fc4ff libgo/go/path/filepath/path_windows.go
877f3ac323aedd517e2049890b1a00aa libgo/go/path/filepath/symlink.go
41842a7f124d575b37df4804ccbeb572 libgo/go/path/filepath/symlink_windows.go
76f93ef3da69ffde8dbf661475937b69 libgo/go/path/match.go
2df00fe0b0ce14eeec25c553bc575dd1 libgo/go/path/match_test.go
a9b0cd8b61d812401781bba857a20dd3 libgo/go/path/path.go
-a35b564b8c4aabeb54d59080191a0e8b libgo/go/path/path_test.go
-46d955ac3d60a6f92d5416f1fb23cd9f libgo/go/reflect/all_test.go
-05188d0b215380d68b5634ef30683a56 libgo/go/reflect/deepequal.go
+657b7bf3fe5388d2add9f527ba86219b libgo/go/path/path_test.go
+b3f0af7fca66c2d589e2f14ac187f30c libgo/go/reflect/all_test.go
+8f251348669dda7527e857426accc42e libgo/go/reflect/deepequal.go
29d842f2d2bdfc6c2ae4bc9be9c0329f libgo/go/reflect/example_test.go
e2da4c8efb5a26f55d39dc5657793561 libgo/go/reflect/export_test.go
-eebfec2a9ec463a98e8a287024d29084 libgo/go/reflect/makefunc.go
-96d3eb07c1986fab1ebc691464baea4f libgo/go/reflect/set_test.go
-de660137001e38eb0a5ee8a1ead4b25d libgo/go/reflect/tostring_test.go
-af11b539fa54bd0bc17fb0b7fd8bd02b libgo/go/reflect/type.go
-2d6586333c132dcb23496033153ee125 libgo/go/reflect/value.go
+d002ccd096df6db0bf2ad0d6d214fc6f libgo/go/reflect/makefunc.go
+ed4bf375b933840395423dc25dc914e0 libgo/go/reflect/makefunc_386.S
+ec455c5015b203b911144abc4bb87499 libgo/go/reflect/makefunc_amd64.S
+468cb0579689ce7cfc8740c481052d25 libgo/go/reflect/makefunc_dummy.c
+392f778fc306f32abe4aa6cf69ea84b6 libgo/go/reflect/makefuncgo_386.go
+592936accd654c49995671acbd73081b libgo/go/reflect/makefuncgo_amd64.go
+d4f1adf34ef0a150a021f310b4cc8c92 libgo/go/reflect/set_test.go
+f85e1c21045db9a41164cb7c72373e9b libgo/go/reflect/tostring_test.go
+e0938bd2b8a658d0467e6e050934860b libgo/go/reflect/type.go
+9883ce77d3dd3f0d8bc9e17815bfb3e9 libgo/go/reflect/value.go
5565b63ddbc5a3f6323d343d63483390 libgo/go/regexp/all_test.go
7d33bb173a6f906a2d9c6c5346b23683 libgo/go/regexp/exec.go
-70b7f08c1ca83c27df33f9543d3382db libgo/go/regexp/exec_test.go
+a7fb608c3c20d79213293490ae4253d3 libgo/go/regexp/exec_test.go
15459c9a0c3bf5eb4f80172319b21e12 libgo/go/regexp/find_test.go
-905fad731429e6125f96c8571eee88e6 libgo/go/regexp/regexp.go
+e4b612ec1b57b8177a966bd94b5577f0 libgo/go/regexp/regexp.go
572ae5301696f04429d984e2966ef0c5 libgo/go/regexp/syntax/compile.go
-b0b6d5f1f19a5b504f4f5fe6209c052c libgo/go/regexp/syntax/doc.go
+3fcf9cf3708f823bb528ef57e1a260be libgo/go/regexp/syntax/doc.go
73581ebcbe4156a5f0014ad0dcc70dc8 libgo/go/regexp/syntax/parse.go
8aa481873483ba48609619bddc11f214 libgo/go/regexp/syntax/parse_test.go
9fdb72aefafddb8ca71de6e947ef6e8e libgo/go/regexp/syntax/perl_groups.go
@@ -46541,58 +46924,63 @@ ce4d01bc256482203dedba6c2e6827df libgo/go/regexp/testdata/re2-exhaustive.txt.bz
7da76dd405a8ea563d9ea6b9d80003e0 libgo/go/regexp/testdata/re2-search.txt
f99f99715745fe92f8a824f11d936a06 libgo/go/regexp/testdata/repetition.dat
454e3934d6cbf6640a547548f78e70b9 libgo/go/regexp/testdata/testregex.c
-4d5cb6e025bf9dee015e29913c4ba1b2 libgo/go/runtime/append_test.go
+c7cd029802a06332c6e80cbf7952c65c libgo/go/runtime/append_test.go
258d2033b321dac71d448b673cca0aaf libgo/go/runtime/chan_test.go
fb78502ca8f0a4bfc5b6b5dbb4ff54d5 libgo/go/runtime/closure_test.go
da7bab610889763f7b61bf82534caf57 libgo/go/runtime/compiler.go
e0c63ad8382340442573a02a97aebcda libgo/go/runtime/complex_test.go
-789c2dfcf6cee4495cb888d156da2b95 libgo/go/runtime/crash_cgo_test.go
-100bdecf99cb1f06d3275a7e8d84d10c libgo/go/runtime/crash_test.go
+0d39e1736264d922891e898fcac9ac8a libgo/go/runtime/crash_cgo_test.go
+2f7bff9e075aac85229ff081c33e5920 libgo/go/runtime/crash_test.go
a1901ae49125bd8264e25e14a9d76aa8 libgo/go/runtime/debug.go
+7546f5064a61db313dedb478621a5c5f libgo/go/runtime/debug/garbage.go
+bebb9eb523331f82fdae4e5d10350359 libgo/go/runtime/debug/garbage_test.go
3d76ef9fab05ad0eaaa98db968f76049 libgo/go/runtime/debug/stack.go
ae77c568043ad52dae3d531b34a96caa libgo/go/runtime/debug/stack_test.go
13b4f536494ddae0292120bee502ca23 libgo/go/runtime/error.go
-b554a012a1b4dd8324690dfd9e1f551f libgo/go/runtime/export_test.go
-ca9867e3a833c5c3117237e623fd18d4 libgo/go/runtime/extern.go
-2867da8c9d7d90008666cfe05ac17e66 libgo/go/runtime/gc_test.go
+2155a42923b103952d891c9855dbd1ff libgo/go/runtime/export_test.go
+d3625d01d2368fb672dc3931557d14e1 libgo/go/runtime/extern.go
+a6a8150be8ccaf87772c943772aca949 libgo/go/runtime/gc_test.go
501f9027848bff1c755372f98af1e9ed libgo/go/runtime/iface_test.go
b3ea4a5592a01d0c6cca3b72d68ec4c8 libgo/go/runtime/lfstack_test.go
810aa2ca13b8b004fa4d35dfc4e51c3c libgo/go/runtime/malloc1.go
41e279f8888c9d4470ecd41b7b5553a5 libgo/go/runtime/mallocrand.go
40163a0051bc58647384ce2e58682a1b libgo/go/runtime/mallocrep.go
b6e92d42a15431c55b35d0a4c4019b38 libgo/go/runtime/mallocrep1.go
+e3084662a4050399ebfe2efaa2bb6d62 libgo/go/runtime/map_test.go
+863d2cea46c2b450a159b320d255e797 libgo/go/runtime/mapspeed_test.go
ead0f729d6142a1849faf82abd4282a4 libgo/go/runtime/mem.go
46598e7be74751741e95b59244e86b31 libgo/go/runtime/mfinal_test.go
f54a70faf4b2eb3411c3a395e8c38500 libgo/go/runtime/mgc0.go
-3f5782356fdc3e75c62bc2e18b16f369 libgo/go/runtime/parfor_test.go
-f72eb1b353cdfed2e44e54e4abe628a7 libgo/go/runtime/pprof/pprof.go
+4e2614a1dd68e5aa4ba3c8ba92cace19 libgo/go/runtime/parfor_test.go
+7f9d4eeb1072a35498debce1746a2736 libgo/go/runtime/pprof/pprof.go
bd0d8e7629f676719d73fa11fe71409c libgo/go/runtime/pprof/pprof_test.go
-832634050b6ceee471f82c7db0c2dd3e libgo/go/runtime/proc_test.go
+3c64bdc386285bb2e447daa6986a8cf4 libgo/go/runtime/proc_test.go
7470d7c4510c97a7f1201bb4d239e1b5 libgo/go/runtime/runtime_test.go
a386a3ce47acd70d63ec21b4810ec675 libgo/go/runtime/softfloat64.go
4578a5b629ec39d7a3769315aa733931 libgo/go/runtime/softfloat64_test.go
-aab38e6e3a6ec3ee85dcc73e5736245e libgo/go/runtime/string_test.go
+f93f07ffe476214c1bd963adbbaa8fb2 libgo/go/runtime/string_test.go
a3286e14a424325d853fdc6f144a98bb libgo/go/runtime/symtab_test.go
222652ebabf3e0db806ba8e1f0524799 libgo/go/runtime/type.go
f7e6de8954fe597f6d66fd2cad07f37d libgo/go/runtime/vlop_arm_test.go
b63664404cdfbcf94ae20bba6edb2b07 libgo/go/sort/example_interface_test.go
-0f0cbe9bdc170ce2ab8543f2f4ff772a libgo/go/sort/example_reverse_test.go
-1c787ee5f653758dbe940daae4ecc907 libgo/go/sort/example_test.go
+3f3252dbe4111789cb78e675ffe83e6d libgo/go/sort/example_keys_test.go
+8492c9d8c16eadff053b4fc460847936 libgo/go/sort/example_multi_test.go
+017c4dbd4912cf2f5c8f3e4fd800c529 libgo/go/sort/example_test.go
5ec468d74053964b118cc04effd2611c libgo/go/sort/export_test.go
4694a81e5924029379c8cc588feda521 libgo/go/sort/search.go
-24c69747b638dc971ecc37e456a66a95 libgo/go/sort/search_test.go
-baecedb6071576ca4776b41fd7683a7f libgo/go/sort/sort.go
-a72e52cff37c206b8e4010bb3b621cde libgo/go/sort/sort_test.go
+d8c30dc3414d4afb2a3f75dbfee2fead libgo/go/sort/search_test.go
+f0ad9a3cdd60e9e58c48890f4d669588 libgo/go/sort/sort.go
+07c31dfaac4d06deb74893a59e88aa73 libgo/go/sort/sort_test.go
3b6e5d583f1330de5b9e9a23151ef238 libgo/go/strconv/atob.go
8dc26af38a1817db03375830b042803d libgo/go/strconv/atob_test.go
e1b53cc22ad42b6be5bd60507f05807f libgo/go/strconv/atof.go
-15d43e542b04cfc7f7e1c9de10ccd2a1 libgo/go/strconv/atof_test.go
-97531b9adc90b17c8f2e4497913c3722 libgo/go/strconv/atoi.go
-cfd427658b3cac23e28759dcfaada942 libgo/go/strconv/atoi_test.go
+4d184ca03b093fb2b5aa63cf579a2cba libgo/go/strconv/atof_test.go
+3d15788b13d2f635dab8d5154e31e7c6 libgo/go/strconv/atoi.go
+db55a405ae04cd9975d2d24545fb99a6 libgo/go/strconv/atoi_test.go
a805bba7252a377d78aa640c4aeae151 libgo/go/strconv/decimal.go
c8fbcf5ed89480898c8ad5a5f7e91a2f libgo/go/strconv/decimal_test.go
-6b6b5290210f1c4cb6b020a5cca0f456 libgo/go/strconv/extfloat.go
-d08cba2773beb79fdb7701e8bb56c33f libgo/go/strconv/fp_test.go
+a2575c136cb6078022818c5cf2361bca libgo/go/strconv/extfloat.go
+3ab6b7c459db754b33232605939abf2f libgo/go/strconv/fp_test.go
ac5cccac6c947a3067fe3a046dfc1f04 libgo/go/strconv/ftoa.go
cbf3af6df021ff9783f6ac943eba8bd1 libgo/go/strconv/ftoa_test.go
c85e39623b22d1a4ea56bf05e1010929 libgo/go/strconv/internal_test.go
@@ -46600,12 +46988,12 @@ bd305373915aa569436bc22b3ffea17b libgo/go/strconv/isprint.go
d1f0a64a15007acef8415a4d0327a6b8 libgo/go/strconv/itoa.go
e77614c3a3c467d127a839d3dc4d7635 libgo/go/strconv/itoa_test.go
ac05cc1ef92b8edf4ab9f2a880a63444 libgo/go/strconv/makeisprint.go
-477cafa1bf39b1c44cb92fd513a57bbe libgo/go/strconv/quote.go
+0107caee096b39e89cd951ccb4fccded libgo/go/strconv/quote.go
e3ffd6f808a323338092da27a96622d0 libgo/go/strconv/quote_test.go
-3c4709de62037b55c63a34250aeca295 libgo/go/strconv/strconv_test.go
+083a4d5d85246f8d8f9ae6fe6e1e837d libgo/go/strconv/strconv_test.go
dc1ca447fa01cae0bb5de6427d6aa4ae libgo/go/strconv/testdata/testfp.txt
dc1ca447fa01cae0bb5de6427d6aa4ae libgo/go/strconv/testfp.txt
-8b957128805d0c719a7093a9806042fe libgo/go/strings/example_test.go
+0ff0f567a26406697642b37e2aea936d libgo/go/strings/example_test.go
71dc96ee07707f51b3e212e395920640 libgo/go/strings/export_test.go
ee3c9dff6000295e7604fecf25ad2e0e libgo/go/strings/reader.go
aaa59aae12504bf0c5822802fa06b02a libgo/go/strings/reader_test.go
@@ -46613,19 +47001,19 @@ c1bf897fe0c784f12c5e8a20ca7f5235 libgo/go/strings/replace.go
5bee27c65304c026e8ab6428080e22f5 libgo/go/strings/replace_test.go
97b6e2b538f36a21a939616a937151b0 libgo/go/strings/search.go
a05591c865981302f636deae83006dc9 libgo/go/strings/search_test.go
-3e35de1957a9bb057954df0d39095089 libgo/go/strings/strings.go
-44d9d201039b958fcadecf99ae43b83d libgo/go/strings/strings_test.go
+51501e2826f6cdf941275d89e962357a libgo/go/strings/strings.go
+e966c0fbb3124b46506846e340aeb07e libgo/go/strings/strings_test.go
35f930378e1e27db8321b813d28ff16b libgo/go/sync/atomic/64bit_arm.go
ded39cbb5ad02e138d61f832145dd927 libgo/go/sync/atomic/atomic.c
-c9ccee72dd58bb624ccd179b4f125102 libgo/go/sync/atomic/atomic_test.go
+e572ee435da947ad79ce120a7af92b57 libgo/go/sync/atomic/atomic_test.go
fb9ea3500df6fb5525edcc6f00eaefb4 libgo/go/sync/atomic/doc.go
-b74b93d6b2428da1157ab546e8506290 libgo/go/sync/atomic/race.go
+b5fcebbe1e7a4ca39c8883bc858722cf libgo/go/sync/atomic/race.go
06ece0ce3f835256b09c76b569f08853 libgo/go/sync/cas.c
-82f9c23a1f96d9d95b4b6332fc36484e libgo/go/sync/cond.go
+5b9094481393d913b267e57015ce8c2f libgo/go/sync/cond.go
dbf2a0d8bb38eda85dd1805590ddfd95 libgo/go/sync/cond_test.go
-0a69deb22d0d50543a575406337747aa libgo/go/sync/example_test.go
+065fef4bbad61d7238e6d4b0d07b5e97 libgo/go/sync/example_test.go
474e69c733b0a73c606742fbb0dd6a02 libgo/go/sync/export_test.go
-f53417d684f22dc3f0aa9566ce828c17 libgo/go/sync/mutex.go
+daaa3fa146bcac361522ec827feaa12c libgo/go/sync/mutex.go
d4bb70e35da223bccf407bf86e67f0eb libgo/go/sync/mutex_test.go
780f2e4f06c05135f7d159604d797049 libgo/go/sync/once.go
e977328386ba4eb914492b9a1f1c75a6 libgo/go/sync/once_test.go
@@ -46633,32 +47021,32 @@ e977328386ba4eb914492b9a1f1c75a6 libgo/go/sync/once_test.go
0c3c413bef1f9afe145d67f681aee933 libgo/go/sync/race0.go
85bdccf4b3092c1026ddf668f93fbafc libgo/go/sync/runtime.go
679687f0398a357c14fcb34400142d90 libgo/go/sync/runtime_sema_test.go
-293a6b1dae7835ce3332d916b56ae87e libgo/go/sync/rwmutex.go
+53170cf332687c41a35696e60aa77b3e libgo/go/sync/rwmutex.go
ee2dd034170d9454905559770571bfd7 libgo/go/sync/rwmutex_test.go
-7974c75cdd1a4df69fb88d3c5be61407 libgo/go/sync/waitgroup.go
+de5edde3bb8098bc5104733e8abd6ae7 libgo/go/sync/waitgroup.go
8eeb4a8ec99b5ff6e419aa822b8ca17d libgo/go/sync/waitgroup_test.go
39bff060d57eb54a33c551a4ebaf81f6 libgo/go/syscall/bpf_bsd.go
c0e7388cc2a06f7beb3c69526eb655fb libgo/go/syscall/creds_test.go
-4e2ade9f4c0d0c2504e14d13d2cb5784 libgo/go/syscall/dir_plan9.go
-f69be3d8276538325d7f665345afeed9 libgo/go/syscall/env_plan9.go
-24e833b0064aa277aca854f3ed4c5ab3 libgo/go/syscall/env_unix.go
+e01a7dbdbdd24399ddb82f3cb74738bc libgo/go/syscall/dir_plan9.go
+87cf7ef62df6bd161f050169236367a6 libgo/go/syscall/env_plan9.go
+d61e1ec72027eae2f50994fd0a2ba14c libgo/go/syscall/env_unix.go
78aaedd54f74a5d1ff7942dd39222bb3 libgo/go/syscall/env_windows.go
76cf89ba805c0ab5b30db29ee4904f3c libgo/go/syscall/errno.c
ad1a8f2195caa5e7291251f65bf077cb libgo/go/syscall/errstr.go
40a11bc10500191f67601f12ca570819 libgo/go/syscall/errstr_linux.go
19670d6bf680f7f085887703e6a0ecd4 libgo/go/syscall/errstr_nor.go
-4619236e20074bcba0401d12a99e8cd5 libgo/go/syscall/exec_bsd.go
-5cb421778458f9b1fd030db77ee8d89a libgo/go/syscall/exec_linux.go
+70b1ba72969039528fcd7456c078dd75 libgo/go/syscall/exec_bsd.go
+05d36df452101752257a014a3e89394f libgo/go/syscall/exec_linux.go
e22586efc37ba708def40a04ba637604 libgo/go/syscall/exec_stubs.go
a0065d7ef4f7572b858b7e3821f6d421 libgo/go/syscall/exec_unix.go
dd24802d634b914579f941c1d3bed730 libgo/go/syscall/exec_windows.go
9b6c3ba061ae00628e2837722268295e libgo/go/syscall/libcall_irix.go
-b5307dd811beb3cc80c571b7f0e70f69 libgo/go/syscall/libcall_linux.go
+7b0c68cf2ab6e15b5dcf39b8dbdb1989 libgo/go/syscall/libcall_linux.go
08d02e9ba31a2f132b6670d56e5f9a91 libgo/go/syscall/libcall_linux_386.go
d0dfa8e45cee5defb536480f056ed447 libgo/go/syscall/libcall_linux_alpha.go
0f110f6b4b28d847963c11d0307ebbfb libgo/go/syscall/libcall_linux_amd64.go
b5f13f78bdec181d93be33d7c9e6e761 libgo/go/syscall/libcall_linux_utimesnano.go
-dfc247ae13131ef70fe11f8ae3c677e1 libgo/go/syscall/libcall_posix.go
+5f5a3329369d07b398bdb2f7dfd802f8 libgo/go/syscall/libcall_posix.go
d398b8da285b94318a31ec90ee3cfe84 libgo/go/syscall/libcall_posix_largefile.go
0fe31f8ce9a0e1c225b62a1d47c9deef libgo/go/syscall/libcall_posix_regfile.go
7b60ff1771ddd0b2e4ba56d3a8c74a0c libgo/go/syscall/libcall_posix_utimesnano.go
@@ -46671,27 +47059,27 @@ b2ae1a8555ca595b887f02a318c8b142 libgo/go/syscall/libcall_uname.go
b1d5fe6eea4796e7a26540ead689af5b libgo/go/syscall/libcall_wait4.go
a3eb12b2f5976509be2c924a82dbad99 libgo/go/syscall/libcall_waitpid.go
147ea20768a2904fac737cdadc28322b libgo/go/syscall/lsf_linux.go
-5a8296d47872c668ed302c995130ccee libgo/go/syscall/mksyscall.awk
+914974cc893e8474c6fdfad9e9c4afef libgo/go/syscall/mksyscall.awk
bc2830a2d47cb87b26cd2ad0bad11196 libgo/go/syscall/netlink_linux.go
-71e59a85c8e71d297bb3575df149ce77 libgo/go/syscall/passfd_test.go
+9c27c1584d355eb8c408d25a652c740c libgo/go/syscall/passfd_test.go
e8b14ec31f0f875a8f305a8c32d26c91 libgo/go/syscall/race0.go
-df37c942560e145e089c86665d737cc6 libgo/go/syscall/route_bsd.go
-4c62ca09e3ee28094e3ea2781d3ed0bf libgo/go/syscall/route_darwin.go
-653e3817658d7bba4fed3cb1689f0db9 libgo/go/syscall/route_freebsd.go
-52dddbc1bb030423655f597258b9da23 libgo/go/syscall/route_netbsd.go
-1aa652aca7220e1b6c3ba261440c31b0 libgo/go/syscall/route_openbsd.go
-9e5b1e693e8a0cdf4cccaa347c7d2405 libgo/go/syscall/security_windows.go
+f5494adc725db58ef2ea298a3ab2a920 libgo/go/syscall/route_bsd.go
+aced66e6302f0ca20137dd331b8209d5 libgo/go/syscall/route_darwin.go
+dad97d933ed6bf9184bcec662e8eed08 libgo/go/syscall/route_freebsd.go
+fe887fefd2ebc43fa40a8401cccc2440 libgo/go/syscall/route_netbsd.go
+6dcc6739eaf95c9aba0a5ef40aa7ffe5 libgo/go/syscall/route_openbsd.go
+76fcd108b180f72e17f71d73e3cfd840 libgo/go/syscall/security_windows.go
08b954522aa753891da0dc09d42dbf76 libgo/go/syscall/signame.c
01b7cc2dd39fe7a210ec6159c07f5528 libgo/go/syscall/sleep_rtems.go
331d0bf0f22836e09d209810027bd981 libgo/go/syscall/sleep_select.go
5e31eec253c769fe32ff9aab5732e340 libgo/go/syscall/sockcmsg_linux.go
-26e114c891cc39d09126503434d51d94 libgo/go/syscall/sockcmsg_unix.go
-8326079204df98ca54d0ccc1047bba1f libgo/go/syscall/socket.go
-a29bbd049844248dd2c925d4f1862a9a libgo/go/syscall/socket_bsd.go
-1aa8697081ad1e12125b7495c5e49188 libgo/go/syscall/socket_irix.go
-3e95264696501e4a5fa2e24abe597754 libgo/go/syscall/socket_linux.go
+72bec8936b298824d9bd0740c41f5dc2 libgo/go/syscall/sockcmsg_unix.go
+40b45ef0e4cacb30552ab363ba39cf28 libgo/go/syscall/socket.go
+3feb4e2dcba738ec5d2b0877ee354390 libgo/go/syscall/socket_bsd.go
+e0d78aff4e500dfa932ce25cd9c338c5 libgo/go/syscall/socket_irix.go
+b9d115304b73ec19d714427a0afcec35 libgo/go/syscall/socket_linux.go
e636122b0c5d7dbf94baf659e2869a9a libgo/go/syscall/socket_posix.go
-53678cced01f1bfef17a0d71847310e5 libgo/go/syscall/socket_solaris.go
+57ed75694a025e8553fe2ba1de10d658 libgo/go/syscall/socket_solaris.go
683dbd7cd1b765a6a1e09f47d528a856 libgo/go/syscall/socket_xnet.go
6d600e77d7a955ca5bfb733925e3b90e libgo/go/syscall/str.go
b86ec073499e24636b469ffa868aa5ec libgo/go/syscall/syscall.go
@@ -46703,51 +47091,52 @@ d482603cb69e8cf915d7e424d5639437 libgo/go/syscall/syscall_linux_386.go
aa19419240f5a247f0338eb695ceac57 libgo/go/syscall/syscall_stubs.go
05c3a2cd7c63dce506bfce629df07968 libgo/go/syscall/syscall_unix.go
e4a4eeef4eae11289d3cf770b277e46e libgo/go/syscall/wait.c
+4dc02b0be1f70b259d08ed007de0f64f libgo/go/testing/allocs.go
1aa0363e693b86015258ea9b28d98b4f libgo/go/testing/benchmark.go
5bda2645ea24939b9551ba26338fc6b3 libgo/go/testing/example.go
32a55523580128d103482f0a9cb7dd6c libgo/go/testing/iotest/logger.go
-19135e3fc2e5d03e8c347a0c6d6d943c libgo/go/testing/iotest/reader.go
+9c32c7a7dc0d00c0a5a680c83a6dbd8d libgo/go/testing/iotest/reader.go
9217f1912a8069ffc6136a02aeeb2f4b libgo/go/testing/iotest/writer.go
-0f590d23d6983fd13ad722675a2ed84e libgo/go/testing/quick/quick.go
+e44f96007fa84b3a5e0fa025efa19d85 libgo/go/testing/quick/quick.go
32739fe6ece2e8674f9224b97628356d libgo/go/testing/quick/quick_test.go
-b6cd3a839888e72485e8b6eeb0ac0b44 libgo/go/testing/testing.go
+6793b3f2444575c3edb2cf59a8f5b882 libgo/go/testing/testing.go
81a61cf718f5d36b72795b1da52759bd libgo/go/text/scanner/scanner.go
f8bfc071fed5322a9b73ed27bf756282 libgo/go/text/scanner/scanner_test.go
188eb974f5da9662ce110c0bc2411100 libgo/go/text/tabwriter/example_test.go
0dd8bfcbfd0a46b93e876fa89f0b6df2 libgo/go/text/tabwriter/tabwriter.go
afc792a236e76fe33245191523f77760 libgo/go/text/tabwriter/tabwriter_test.go
9d48e57beb903716a59db434329d59cd libgo/go/text/template/doc.go
-8969e9020270870875d444535fabe053 libgo/go/text/template/exec.go
-d84337d696000bacf370f8d20a662ba1 libgo/go/text/template/exec_test.go
-93cb925ae313c2d300011a7d9e069830 libgo/go/text/template/funcs.go
+a54ba28924b9323a9d0b1becf8c307b8 libgo/go/text/template/exec.go
+51bbca1986b88b5deac732e1dee8db04 libgo/go/text/template/exec_test.go
+0616761b22e83c6b04b5515c2abcb5cb libgo/go/text/template/funcs.go
13e16d5aee6bcb3d63c300b5cbce6777 libgo/go/text/template/helper.go
32062cf31bd07475dd2a1762f8bb85ae libgo/go/text/template/multi_test.go
1abb2d3220ac1df5d39941f257964118 libgo/go/text/template/parse/lex.go
a2b81c9588063af63d7af84573af2054 libgo/go/text/template/parse/lex_test.go
74b59a978e21ff04b3a5fc41b6cb26c9 libgo/go/text/template/parse/node.go
-9de999cb73dedb7f427eb8f70df6bf2e libgo/go/text/template/parse/parse.go
+a99e84a2101d40862bb4f69ba07bf472 libgo/go/text/template/parse/parse.go
edd6ba9153565995497e2e7f6eb85482 libgo/go/text/template/parse/parse_test.go
62911d0dd6d4520dc4e96d1b7b1a833b libgo/go/text/template/template.go
d6b6ff8eb45b5d3c6559c70664f2f9f3 libgo/go/text/template/testdata/file1.tmpl
30ae547a79cfdc1dc838a5a0d9ed8198 libgo/go/text/template/testdata/file2.tmpl
3bb3b4e20658955000386362214b8246 libgo/go/text/template/testdata/tmpl1.tmpl
1fd8ef440f5fd08e0117c3c00500294b libgo/go/text/template/testdata/tmpl2.tmpl
-e683faaf6d9c504449dec57ea0f12d08 libgo/go/time/example_test.go
+71c5753972587706b9fbd2623249ef36 libgo/go/time/example_test.go
827b46426d2d46ab94b0ca0e99d2504a libgo/go/time/export_test.go
-92d71d07fcad9f2ec21df487d88e4703 libgo/go/time/format.go
+500c4dff89fb97172832d85b318cac90 libgo/go/time/format.go
64b3d18c2f3f33e87c5d22442ef28760 libgo/go/time/internal_test.go
-f237a0378577ea1c5fcca2d817710474 libgo/go/time/sleep.go
-f0057c551d06bf0899e6b4d2fb19d822 libgo/go/time/sleep_test.go
+b8a54644319d0b8503ac9a0bfded26df libgo/go/time/sleep.go
+0d213f1ada2ce3dca75e6b1d48f4336e libgo/go/time/sleep_test.go
a42fcd0a904b2aa1f3a4f1f732c9b80c libgo/go/time/sys_plan9.go
4ddd54f063aa3f87dc206d8e1538dd5c libgo/go/time/sys_unix.go
9ab47f84ec5443abd2d26eb0aaf0988b libgo/go/time/sys_windows.go
855ebcb6c96d25cd62599e8d6f565cf4 libgo/go/time/tick.go
1732e1ffaef3c1df384d55b614ef532d libgo/go/time/tick_test.go
e9c176b594ff16dd893564444f5095af libgo/go/time/time.go
-712ad80f9ede1c13d35d9119ab467dcc libgo/go/time/time_test.go
-60ec24b5b21ae244fb7f1976b6528124 libgo/go/time/zoneinfo.go
+2cc502a97f54ee4f7551d80e46b47f11 libgo/go/time/time_test.go
+d3a7f36ab100c6f36993da9e449d773c libgo/go/time/zoneinfo.go
b95eef5d4afde3e9f478859c59a50995 libgo/go/time/zoneinfo_plan9.go
-1f93540ff42f42c33e97500cc36b0d05 libgo/go/time/zoneinfo_read.go
+4eaa088a6d3b04896a67bf69247d4b7f libgo/go/time/zoneinfo_read.go
a8792747f9fa47db3288da4cde66c900 libgo/go/time/zoneinfo_unix.go
56638b78cf3c1aeb52192559b0581b78 libgo/go/time/zoneinfo_windows.go
20462663527bbc31aa3bdf3fba3f978a libgo/go/unicode/casetables.go
@@ -46755,23 +47144,23 @@ a8792747f9fa47db3288da4cde66c900 libgo/go/time/zoneinfo_unix.go
52e66b5dde148ddf6d9b349d93601cfe libgo/go/unicode/digit_test.go
a454a0ba713d77ab234462a490eb9822 libgo/go/unicode/graphic.go
329df455c4a64191a108e40228e0a975 libgo/go/unicode/graphic_test.go
-d2e6deb7b6e76dbce6c90ea80cec71a4 libgo/go/unicode/letter.go
+2b29c3a2bb576b322782da5f24a43bb1 libgo/go/unicode/letter.go
d45efeb3f81b833ccbdaf45a2aed7d6e libgo/go/unicode/letter_test.go
70bc3d8abc81dda4da66aefc71c20f9d libgo/go/unicode/script_test.go
-22a49676ab95083db41a87ab36568c4d libgo/go/unicode/tables.go
+e30759d232312549885e96556be24f4e libgo/go/unicode/tables.go
6fd68c975fa19dc6fb31c13282e47bc5 libgo/go/unicode/utf16/export_test.go
db7661e38c760ca659720193cea7deaf libgo/go/unicode/utf16/utf16.go
bd8fc56eab9b633e58128083caf5df5f libgo/go/unicode/utf16/utf16_test.go
6359c3b05f9df1c6a4878205a3b23207 libgo/go/unicode/utf8/example_test.go
7aedcc4e62d8452a0e4e84dcd4325c45 libgo/go/unicode/utf8/utf8.go
-5fb90fa8b74a1190ca7f369f587a3630 libgo/go/unicode/utf8/utf8_test.go
+d2c0f0166aa2cc63cec3270b5fa1d3e2 libgo/go/unicode/utf8/utf8_test.go
8e700e99e52bad7f8289006b7bd149d4 libgo/godeps.sh
-5c124fee918e998c838de29c901aca9c libgo/merge.sh
-3e00bc8af83e5c0efe99761094484569 libgo/mksysinfo.sh
+8bc70efd6d9c1c8ba1e6df79a2241516 libgo/merge.sh
+ed079a4abcdca78facaa50545c2afd70 libgo/mksysinfo.sh
06b0ddfbd036dbdfdf8c4c7efb8b746f libgo/runtime/arch.h
0d727dcfb3816731f56f174e8cbd29eb libgo/runtime/array.h
-30f0db7c6198512f51de3395261887be libgo/runtime/chan.c
-fbf1f9e4d53c81942cfb397abbb63489 libgo/runtime/cpuprof.c
+c758cd534b2eef0cdb403f98ab4d78a0 libgo/runtime/chan.c
+ed5a86c55b2608b55a806fb404ee46ad libgo/runtime/cpuprof.c
8fc341c18fc3cdc557312f0483aceb2b libgo/runtime/defs.h
a5bda04fcc4feeee03af42f105300e43 libgo/runtime/env_posix.c
0bd75fb7a863be3c7dc871e77fa22575 libgo/runtime/getncpu-bsd.c
@@ -46780,36 +47169,37 @@ a5bda04fcc4feeee03af42f105300e43 libgo/runtime/env_posix.c
0195e66b8372eda820605a9e5e6a7b23 libgo/runtime/getncpu-none.c
9ee34ac99a92a81dd6760a6252e458f6 libgo/runtime/getncpu-solaris.c
7f7d156860cf43a15110636eb461e8a0 libgo/runtime/go-alloc.h
-d4e607e09b17de3fa0bf171adb8d3502 libgo/runtime/go-append.c
+ff92bd508b56c09bd3a84a56afebd9c2 libgo/runtime/go-append.c
ffce11dc5416c0c1bfb5a74207a4d20d libgo/runtime/go-assert-interface.c
6fb6a5d0012113bed4ea45325d64a0ae libgo/runtime/go-assert.c
15f566278d64ff0b58823d3875194e29 libgo/runtime/go-assert.h
f8c17aeb5ad771890f2f006bae6aeee5 libgo/runtime/go-breakpoint.c
87ef5cf31bb3c0f898596ded0a0ab483 libgo/runtime/go-byte-array-to-string.c
8fd9413864341f477401dd254942a620 libgo/runtime/go-caller.c
-67ac9909e89f36531bd1f0f3d64ca8a5 libgo/runtime/go-callers.c
+f3a1455c547e0ad22b2876c5efff9301 libgo/runtime/go-callers.c
990d7c40634767a4d4639fb580b5be29 libgo/runtime/go-can-convert-interface.c
-645bfea549317d730385424e4ae0c3be libgo/runtime/go-cgo.c
+276475517c9099e859ef106e0d7f7bbc libgo/runtime/go-cdiv.c
+137b038b1cdfb6a762b679ca2c16e887 libgo/runtime/go-cgo.c
8de75cab8bdf53b9ea1890f50d87917d libgo/runtime/go-check-interface.c
39368ef3345811d8544e2447df1e4fb5 libgo/runtime/go-construct-map.c
939a5d4ac93334f0623a3480d86881aa libgo/runtime/go-convert-interface.c
10315a5422f17793f93cdddce100a380 libgo/runtime/go-copy.c
-312b9e591bf58c23a0bbc21965015879 libgo/runtime/go-defer.c
-3623144938495dd6a89fd8d5cdfd504a libgo/runtime/go-defer.h
+e77a27f074a1bcc9016b6b5cf11ec999 libgo/runtime/go-defer.c
+bb62fcade2ef6c7aa04fafbab0b934de libgo/runtime/go-defer.h
f6c1aee78d18be635982d5a888839202 libgo/runtime/go-deferred-recover.c
21bfd7a1a325df3865579a56214ff506 libgo/runtime/go-eface-compare.c
c607af85df241f35dfeca3085649de87 libgo/runtime/go-eface-val-compare.c
91822981fadc7d8f4e8a10bce1933c8c libgo/runtime/go-fieldtrack.c
5537345a3ea70dcb8a5fa3529bd8c4cf libgo/runtime/go-getgoroot.c
-0e38d9f9e9655adc2188028dc42f312e libgo/runtime/go-int-array-to-string.c
+b59a8bd26ea1331b20b95b45dd31daa0 libgo/runtime/go-int-array-to-string.c
bc83b27606a3673316c31352a6d12bae libgo/runtime/go-int-to-string.c
585b3c103bde3505300d9397357d242f libgo/runtime/go-interface-compare.c
2ffba97f9cdfed2c2f24b70d172332e6 libgo/runtime/go-interface-eface-compare.c
cd2c9daae85c953b537ee88d4b9d50bd libgo/runtime/go-interface-val-compare.c
-e892f88d126c3168d54f0735f8f66c4e libgo/runtime/go-main.c
-db8755ef65ee115b4e1ad0d72e0ba70c libgo/runtime/go-make-slice.c
+d5ad7678bf747d3ce48a70325e4d3192 libgo/runtime/go-main.c
+15956f3dc0dc88050d75ebb85b09ff57 libgo/runtime/go-make-slice.c
f30ef89145499b930050f1a487615b30 libgo/runtime/go-map-delete.c
-ed08c58e876940dde5f75b27ff078d08 libgo/runtime/go-map-index.c
+bc72473dfaaf58ad95fccea57faf2880 libgo/runtime/go-map-index.c
818adba56865a569fbd076f701116339 libgo/runtime/go-map-len.c
0efe21ade3aaf43f37289f39b86603e2 libgo/runtime/go-map-range.c
bc8121acb97ddc7bf2ce153b0918ca35 libgo/runtime/go-matherr.c
@@ -46817,18 +47207,18 @@ bc8121acb97ddc7bf2ce153b0918ca35 libgo/runtime/go-matherr.c
5ae0eb45ee173becacc56fd32794280f libgo/runtime/go-nanotime.c
a87c961e21c1e9bc987fe32541a16340 libgo/runtime/go-new-map.c
d61f47247176afc7541b14fc6adb9cab libgo/runtime/go-new.c
-20b3fc0996900fd7c60cb7e23b3678a3 libgo/runtime/go-nosys.c
+a4e4921294d744f1ec7e6233399fa3f3 libgo/runtime/go-nosys.c
e1fa479f8014aecc8147bf50f856fb91 libgo/runtime/go-now.c
-d358b4168faba7bdeb94bddc8c8cec96 libgo/runtime/go-panic.c
+bf5df615d80e7f1a95a9f9cb7bfbdcf6 libgo/runtime/go-panic.c
ee0b030a1b0a13cd1aa6596a1c86e6e2 libgo/runtime/go-panic.h
76a1e655e98d13a2cc5e5cb9c8471c9e libgo/runtime/go-print.c
-813d13218c6940b1935cfb8ffbc1d135 libgo/runtime/go-recover.c
-711d9fec345010156729e2249330b4fe libgo/runtime/go-reflect-call.c
-45a9e987d3ff70ea29e0c396c633599c libgo/runtime/go-reflect-map.c
+f378a91a3cc223ad81b4a843515a5ef7 libgo/runtime/go-recover.c
+55bcbd3aab61e222dca4f14c7005eca3 libgo/runtime/go-reflect-call.c
+102d2b88e578efa0edcbe9e0f641d34e libgo/runtime/go-reflect-map.c
ed6b937d9f770f14a5fcc0135a01804e libgo/runtime/go-rune.c
cc3e963ebf93b5da88c77c07557e6d45 libgo/runtime/go-runtime-error.c
cafba2949a50a6d9b0d2c351019da3ec libgo/runtime/go-setenv.c
-6ab7ee156117d4152d13f93d784357e1 libgo/runtime/go-signal.c
+51069d086927aeb8f38485c87ab7ec9d libgo/runtime/go-signal.c
a2cdac8f98b5543f8f54f39580008be1 libgo/runtime/go-strcmp.c
70523c2c9f12b01b4eda16c2efb6fd61 libgo/runtime/go-string-to-byte-array.c
a6ba8dbf9e0ec85c2c832ac6cd837e2b libgo/runtime/go-string-to-int-array.c
@@ -46847,57 +47237,62 @@ a0dedb2348d29e859f372aedc81babf1 libgo/runtime/go-type-string.c
ebe1ee7084c3f5a9dce96ba46c84bf90 libgo/runtime/go-type.h
3bda671d3b556cf1dc7b987d08c7d5d1 libgo/runtime/go-typedesc-equal.c
3e2ff5347b6683cf4c89cf9a0da30dc4 libgo/runtime/go-typestring.c
-09921d509779574f2b814755f86ad411 libgo/runtime/go-unsafe-new.c
-f2cbdbcfe5264cb8f467f6ada1233f0c libgo/runtime/go-unsafe-newarray.c
+af5de48480273b6c892b00fc4277850a libgo/runtime/go-unsafe-new.c
+c4204400dda158eedfe16fcf9ddb2c71 libgo/runtime/go-unsafe-newarray.c
c80605ee0a71267b38dbc5c9d2633ecf libgo/runtime/go-unsafe-pointer.c
630cd384e4eff0e703a9e03770bc72ca libgo/runtime/go-unwind.c
b54905bea79a5b11a61c030808063069 libgo/runtime/goc2c.c
947461bef3c8b10a15d2b639141c6dfb libgo/runtime/iface.goc
c41f429a920306b2b57f3b7f83b8a442 libgo/runtime/interface.h
241d192b6f5936ebbfcbb9c708d9473d libgo/runtime/lfstack.c
-0642cebf3fb28e302ab38f76ea491ddd libgo/runtime/lock_futex.c
-7c0102e80704663803b6d6c5677caaa4 libgo/runtime/lock_sema.c
-9480ac957e4eb89ca706498012a03f0c libgo/runtime/malloc.goc
-657491b56701a30b0875b6b4046d0c7a libgo/runtime/malloc.h
+a4a6bee0a7ce7e40fd8c3b91e4ce7a2e libgo/runtime/lock_futex.c
+078f220fa7aaf10c769da0d13af43587 libgo/runtime/lock_sema.c
+bec281093cfa14f233fc2c99543fed89 libgo/runtime/malloc.goc
+c2ffac4084e294bc4382b6643e7ece82 libgo/runtime/malloc.h
653771fbf9991e866465454a04fe9fc5 libgo/runtime/map.goc
c968f0acf76d47dafa1eb98e90f01d11 libgo/runtime/map.h
-be3a2874eadf40b0182bdcf54db2404e libgo/runtime/mcache.c
-0fb7547aa3d2501052c433822cab1c67 libgo/runtime/mcentral.c
-1fcaea9a1be26995345470212d55e06f libgo/runtime/mem.c
+d8f8d62827d00c5d0231bfa3d1116fd7 libgo/runtime/mcache.c
+ee4df41796404971bd265e733fec3864 libgo/runtime/mcentral.c
+c78518b10d0284dda0e87d0d662ae1df libgo/runtime/mem.c
6b11f53a4b7d331ecd6351fcca3ffe55 libgo/runtime/mem_posix_memalign.c
-479ec37fc14b48f3599dc582b4e49ede libgo/runtime/mfinal.c
-535bbdcce7df35be3df928175963dbb6 libgo/runtime/mfixalloc.c
-0c5e32027df6f460f4e56f250c68cbb2 libgo/runtime/mgc0.c
-35f4cfd9828701508fc4c187f83c3543 libgo/runtime/mgc0.h
-b885a67c4e14fe3881dde1c84d452317 libgo/runtime/mheap.c
-ed964eee32507b353d58063e2ee5ae0e libgo/runtime/mprof.goc
+d51432dd3f3d9ae9493d40c6620a2929 libgo/runtime/mfinal.c
+af1e943ac58130847638ff131d377a64 libgo/runtime/mfixalloc.c
+13c313fa5376bb40f45f61251da4b2fe libgo/runtime/mgc0.c
+b9636ab59fa641d3a35cb0ae34848955 libgo/runtime/mgc0.h
+9e61aa27853e40322b2f1507fe36c23f libgo/runtime/mheap.c
+6f477b5492644b6171147834c86877ed libgo/runtime/mprof.goc
5c4ff8bc9d08419f41ef4178f1419e93 libgo/runtime/msize.c
-707254ed3a524231dec3f824cc08b787 libgo/runtime/panic.c
-d6f23d6dbae0899fd004cca02b6637e5 libgo/runtime/parfor.c
-d82adfbd59f7efc8c9cbd23ab58aa4e5 libgo/runtime/print.c
-5366becba3d9fd045f2421b8648b4c8e libgo/runtime/proc.c
-37f77c934b6dd91878630d73683d53ff libgo/runtime/race.h
+3e2ffe112c365665e39728bf88d0a5aa libgo/runtime/netpoll.goc
+5464264a03d4a509269298e84ada4acb libgo/runtime/netpoll_epoll.c
+74d5d0788b593ea333107681624b41fd libgo/runtime/netpoll_kqueue.c
+ae362deb9de41678893ec0be3751a4f8 libgo/runtime/netpoll_stub.c
+fb5c83a2325f79c2161797c9d9c34447 libgo/runtime/panic.c
+c0922a2aec78975b25d4b3d8e77a19c6 libgo/runtime/parfor.c
+6e44f09d4b9a5fd2c7072d40f35b8493 libgo/runtime/print.c
+f6a82e32a9e8071a34b1011c8a465e35 libgo/runtime/proc.c
+178f690729024a599b91d3a7dc03345f libgo/runtime/race.h
f3043edb6d3f3dec7c3d18064c9a2f46 libgo/runtime/reflect.goc
88236bd9baaae0e22c2fe3c097d9cfbf libgo/runtime/rtems-task-variable-add.c
-398ca70deb334faf80ee8246705e53e7 libgo/runtime/runtime.c
-294e568f63ad46bc8a5117bc8dbbd707 libgo/runtime/runtime.h
+5ff2fb55d0ff02f19c06ecc0bcc976ef libgo/runtime/runtime.c
+a538de3a6e8fea206569af3b11bbdf94 libgo/runtime/runtime.h
6786f18d437cda638da71171188c7f24 libgo/runtime/runtime1.goc
-e7adcb33a16bdff454f833d323e1b74b libgo/runtime/sema.goc
-0c6abfe14a73c262c5bde18a7fef9da9 libgo/runtime/signal_unix.c
-fc763561e90a0829c863f013b75e1d42 libgo/runtime/sigqueue.goc
-111d2089f3c6fa7f9447297b5c256029 libgo/runtime/string.goc
+9ed6bc258affb1493ac6153a7306fabf libgo/runtime/sema.goc
+fb2fae6fb8486bd4921c8319c992af6e libgo/runtime/signal_unix.c
+c3f6016bcf563a2e372e351424ac9d24 libgo/runtime/signal_unix.h
+d492da3448c75dbaac78036ec535cd99 libgo/runtime/sigqueue.goc
+5960da905a36a3bf3b2ab0b979fcb9d0 libgo/runtime/string.goc
9a487e9a751117c187a9546b2fcc241e libgo/runtime/thread-linux.c
d10e9f302c0928972dd112b3a251da43 libgo/runtime/thread-sema.c
-609d672200bed549073bff12670260de libgo/runtime/thread.c
-0a6a9910fcb6e01596f49204a89a73a2 libgo/runtime/time.goc
+a27782f03d1a06d6c45554841b18cdfd libgo/runtime/thread.c
+e4aff56e1b7c89d62f2ce75676087183 libgo/runtime/time.goc
5eba9c31299a555c2228fac2b113f713 libgo/runtime/yield.c
3a8ddeaf36a9f143f9124fe1aada456a libgo/testsuite/Makefile.am
c95a6cc35511a2183eb5b480fa8ae836 libgo/testsuite/Makefile.in
180c96a619276205ec9fc8e8217b67bd libgo/testsuite/config/default.exp
-348568e62149aec5405f886cbfb28504 libgo/testsuite/gotest
+207f334413c982763e10e994230fefbf libgo/testsuite/gotest
578a4705035f5cbb8425f2e2eb75a433 libgo/testsuite/lib/libgo.exp
6df485581d2f02246f41b5ca46f5bb5d libgo/testsuite/libgo.testmain/testmain.exp
-14d97901c0a7a057bee668afef5aadef libgomp/ChangeLog
+44088c7ee289859da56938fb294d6f1e libgomp/ChangeLog
0d55aa862aee66efdc5f8d62c94ff8fb libgomp/ChangeLog.graphite
79e407d8620e08863da6142c9eed25be libgomp/Makefile.am
e6e03766255f9acec1eaca053c845d7a libgomp/Makefile.in
@@ -46911,7 +47306,7 @@ ad254be66c98a8c36e4a6a0a7614e38d libgomp/config.h.in
86ec6ec0ec90ed927b70f32be3b8f293 libgomp/config/linux/alpha/futex.h
dbb46d79004a5ffa1ec34092e4ac16d9 libgomp/config/linux/bar.c
a40258141cdc85f9d0d3c6094281bda5 libgomp/config/linux/bar.h
-0960386a9b51688c3f154a96e9558742 libgomp/config/linux/futex.h
+38f442bd56477334e19437fa53d71dbc libgomp/config/linux/futex.h
38f6491b7497e424f6459b7508b8b515 libgomp/config/linux/ia64/futex.h
cecb50ab77921a241b4a8d038eae66d8 libgomp/config/linux/lock.c
63c33691df41204ce74f2c613e082f8d libgomp/config/linux/mips/futex.h
@@ -46945,7 +47340,7 @@ efc434763cbe71b67359f1858f6c9480 libgomp/config/posix/ptrlock.c
1015832844f1bdb536340a1080367d3c libgomp/config/posix/sem.c
9232788045f4637fb63c600b45353642 libgomp/config/posix/sem.h
bd5cb86b4c93d8cf028a8473244d3e33 libgomp/config/posix/time.c
-49da571f28fe34104f261ef8d9c801b4 libgomp/configure
+90909cf176228bb4d3b027f5b241589b libgomp/configure
4279da7c7af99af238f3ad0b0a68099b libgomp/configure.ac
580f7ef6e8afa94e5fed066a1d5aba5e libgomp/configure.tgt
5672d7a118e8b78980d16e1f60da68ca libgomp/critical.c
@@ -46955,7 +47350,7 @@ bd5cb86b4c93d8cf028a8473244d3e33 libgomp/config/posix/time.c
b2d2bd391b88c0947b2eb6f35b5fa007 libgomp/iter.c
d802f31bf81987e6dade50d2518a683a libgomp/iter_ull.c
55008a953b0a49e5f465c8d5417f551b libgomp/libgomp.h
-7fc80ca80e0d7777957c2f7423304e4a libgomp/libgomp.info
+c57e82579687766aa404592f346feef3 libgomp/libgomp.info
fde0d3b4fa91f0570fbc897a8cf8341d libgomp/libgomp.map
591ff20dfd2b81e3c919249b5db8a967 libgomp/libgomp.spec.in
9b9824c99610e8fa83582bd245a1534a libgomp/libgomp.texi
@@ -46967,7 +47362,7 @@ dcd3477742913bd7e0518e9471bb7437 libgomp/omp.h.in
0089e68eb509e9632e879b0f3fc8575a libgomp/omp_lib.f90.in
30b9f69f6ae7980ebb3b49099b75061e libgomp/omp_lib.h.in
012c97371be7ac1575f6e5165bab6a94 libgomp/ordered.c
-beffe68c782ab45c5827faf4b294b48a libgomp/parallel.c
+fb4acb200103dda5c54e7f746151c7ae libgomp/parallel.c
cbb1d172c25afe665990d0828ee35b7c libgomp/sections.c
bfbaa1e1af33dc16738a861f70d0756f libgomp/single.c
731bfd755896dc04eb8f2fbbfac306ce libgomp/task.c
@@ -47199,6 +47594,7 @@ e6be7ac480ea1328785bc17e9c2ecc9a libgomp/testsuite/libgomp.c/reduction-3.c
9126ac9782df114930590ae42eef14dc libgomp/testsuite/libgomp.c/reduction-5.c
bec2e246a29d581f6ebc16d2674347cb libgomp/testsuite/libgomp.c/reduction-6.c
054ece1e6f3474062b5a01399c9e8af2 libgomp/testsuite/libgomp.c/sections-1.c
+aed7e36c7c93e3badbbf11beaf753207 libgomp/testsuite/libgomp.c/sections-2.c
5d45a2da7670f7b3feaa70f2caa0d69b libgomp/testsuite/libgomp.c/shared-1.c
6059443919441f3c8acfe62439b65044 libgomp/testsuite/libgomp.c/shared-2.c
7b472060fcdfa5aa072be093a71d8d41 libgomp/testsuite/libgomp.c/shared-3.c
@@ -47210,6 +47606,7 @@ b07f3ce8ad8f8edece7624d18f5d154d libgomp/testsuite/libgomp.c/task-2.c
f7ff00e5f2a30832f7f427c91fa1f61b libgomp/testsuite/libgomp.c/task-3.c
d3e7c403248ba696f161f0c29c1f87a6 libgomp/testsuite/libgomp.c/task-4.c
1632e928ba733271be6ddd0108e94f71 libgomp/testsuite/libgomp.c/task-5.c
+d2c0d431148453f28f8abd6fe5503dcf libgomp/testsuite/libgomp.c/thread-limit-1.c
35c4904668124586d73a652acb4ed703 libgomp/testsuite/libgomp.c/vla-1.c
56a24835fa9d124fad3d523ffafe3b21 libgomp/testsuite/libgomp.fortran/allocatable1.f90
927bc460f431a751bec399f6f3f1eae7 libgomp/testsuite/libgomp.fortran/allocatable2.f90
@@ -47255,7 +47652,7 @@ abc34e96ba72c420750e91c4b0ecabd8 libgomp/testsuite/libgomp.fortran/condinc1.f
c4ac0f05c4dc83a45fe9be076ad84959 libgomp/testsuite/libgomp.fortran/condinc3.f90
830c32b3e02911ba8619b6e823f94108 libgomp/testsuite/libgomp.fortran/condinc4.f90
4935884f21e6712b4f39b275079f0979 libgomp/testsuite/libgomp.fortran/crayptr1.f90
-a672a50bd461e80cc1c20da64819aabe libgomp/testsuite/libgomp.fortran/crayptr2.f90
+2fd37c1401303ca48058d885c14bbc9f libgomp/testsuite/libgomp.fortran/crayptr2.f90
a80ce4249b45880d8fb3896d2804747e libgomp/testsuite/libgomp.fortran/crayptr3.f90
ed11df4baf7b08723fe3d9e881036bed libgomp/testsuite/libgomp.fortran/do1.f90
3e9f4c16fbcd55d7ad1c66acde8a2a71 libgomp/testsuite/libgomp.fortran/do2.f90
@@ -47363,7 +47760,7 @@ e1362c83d5ba73eb8768fbabff951667 libgomp/testsuite/libgomp.graphite/force-paral
10c955b1a244a0c3499fca8b6b4c4278 libgomp/work.c
99c2e5e712b990ee07be10f53e41f3fb libiberty/.gitignore
a916467b91076e631dd8edb7424769c7 libiberty/COPYING.LIB
-1538a7c8ce10c07f79375b54bb20b2fc libiberty/ChangeLog
+0cf7e1ee8f59830c7248e31a8e2c8c92 libiberty/ChangeLog
fe777f81e2cb81a26e83f7d120c6ff2d libiberty/Makefile.in
c68dbf7834af4281ebd84caa3fd54680 libiberty/README
8797cb1a6faa84f3c7fe3d12164a4b13 libiberty/_doprnt.c
@@ -47514,22 +47911,22 @@ cdc140ce93944c5bb2ac62cd3dfd86d6 libiberty/xmalloc.c
4746095b1b67693ab6e78ed72ead1235 libiberty/xstrdup.c
6f774a92661ca4a067f1691a7925524b libiberty/xstrerror.c
c6e7ef53b4ff115a136d917511222656 libiberty/xstrndup.c
-741a385775b18832354f94204fbcd37b libitm/ChangeLog
+53ad96597ec13034b062a118b7220c07 libitm/ChangeLog
babf0aa268f489737739f16533cc22de libitm/Makefile.am
86266ae1bc0838d04162c98147dac3e0 libitm/Makefile.in
0968d21ef457674d9a549e5462859831 libitm/aatree.cc
9a9f2a00b72d067d9c712c2fc0c1b5da libitm/aatree.h
-4bb4920436685582f2c114b38e96a81f libitm/acinclude.m4
+e8aeef34cd8d010bfc2c331a5cb137e5 libitm/acinclude.m4
94efa0c0176ffe7ccddefedbc7bf422c libitm/aclocal.m4
323c150bcbc6e2c2ba3eb7b2d140cda2 libitm/alloc.cc
df1c3272076b45bb55dd9ef7cd4e5cb1 libitm/alloc_c.cc
a511d9af4d1acb77a00168838986dd0c libitm/alloc_cpp.cc
edc507dc04eda7bb9b6c400b69298114 libitm/barrier.cc
-bb12e592fd938b3c3fe625bb277afda9 libitm/beginend.cc
+ab7a00f37cfcbd3c5d792ea25a183be0 libitm/beginend.cc
13c1205a3cbd2d6cd8d6531983c3b639 libitm/clearcap.map
feebbb752005ac4f4ede7ce79414dc7f libitm/clone.cc
3149aa41dab3ee3db3f64f68dd00ddd3 libitm/common.h
-b1518d02c12bf62ad42adb6a4715293b libitm/config.h.in
+05ea82fd12c7b4a030b6310b862ff47d libitm/config.h.in
2fa21aa55341fa035da87b3020b0faa0 libitm/config/alpha/cacheline.h
40a4cf70dd9ab6908da44f4e3122575b libitm/config/alpha/sjlj.S
ecdcfae51592fb8e00c563afd5e5c167 libitm/config/alpha/target.h
@@ -47537,14 +47934,14 @@ c67f39f5de2bece4a21e68a3d05eeb2c libitm/config/arm/hwcap.cc
dc91872470d22f2302e47cc696a9a064 libitm/config/arm/hwcap.h
3d6b76834bb25cb797cf162492aac04a libitm/config/arm/sjlj.S
4574b3881f32c8c13a9d9c4b64576923 libitm/config/arm/target.h
-5c989ef2fe962834bac085d7d12ed18c libitm/config/generic/asmcfi.h
+3bdcd7113e840e4e00b7a3c70ca05ac9 libitm/config/generic/asmcfi.h
a37b938a2ef0b6f752872efff6cc7836 libitm/config/generic/cacheline.h
5155421719e0ce820f3c63f1a8a4276b libitm/config/generic/tls.cc
948585202452559c118448e50415db78 libitm/config/generic/tls.h
fbf286cafe3d247aae189aa77c5c1356 libitm/config/linux/alpha/futex_bits.h
4108521d512c593e768bdcbd84dba6ee libitm/config/linux/futex.cc
4e4b101959c68e450bfb9f6feef6a942 libitm/config/linux/futex.h
-f95b48c1bb6d402e76bf8757baccdf2c libitm/config/linux/futex_bits.h
+bdeb1dd47e2bb849aaf58ce0a16498d5 libitm/config/linux/futex_bits.h
b898779b047f4b0bb01d2bd242eaf414 libitm/config/linux/powerpc/futex_bits.h
c40368740cb1a8dcd86b03100a30b6e3 libitm/config/linux/rwlock.cc
cb92c1d269d36751cbc28f91806065dc libitm/config/linux/rwlock.h
@@ -47555,8 +47952,10 @@ def8d2d51bd475ff9c39a02e0077bc49 libitm/config/linux/x86/tls.h
47fee8b63638e29454ec008c0278fa18 libitm/config/posix/rwlock.cc
c510164a13b482a2d2bb7ec238993e05 libitm/config/posix/rwlock.h
243e22fe1f89c5310f5995ee3b5b2054 libitm/config/powerpc/cacheline.h
-baa7795c4f6d303012d4b53515d12634 libitm/config/powerpc/sjlj.S
-88edd806f727549ffbc72530b89deecf libitm/config/powerpc/target.h
+c07284f2eafb413682cc90b45d6509c8 libitm/config/powerpc/sjlj.S
+638f3dea9624f6160441dbebe5d90d6c libitm/config/powerpc/target.h
+9c125deeb15e1a8a2ce1273c89071cff libitm/config/s390/sjlj.S
+06d484253bf164212229f79546393fd5 libitm/config/s390/target.h
68dd967a90830ad3afaf6fce0546e3c7 libitm/config/sh/sjlj.S
fe8ac2fa35c2f95326d125a9daddda58 libitm/config/sh/target.h
d9bce7b0a454ead6868a049ed3561f88 libitm/config/sparc/cacheline.h
@@ -47564,17 +47963,17 @@ d9bce7b0a454ead6868a049ed3561f88 libitm/config/sparc/cacheline.h
d5b45ac72482441bc4547b031122e511 libitm/config/sparc/target.h
84fc5d6f06bbb2cde795627f18aea25e libitm/config/x86/cacheline.h
6409cd9ed7b4e98fa82a87aa7b8e280a libitm/config/x86/sjlj.S
-a509a318638a892b6d8f23ba4600e992 libitm/config/x86/target.h
+0f1cd9383dee9c455fba2ef8d14bdd7b libitm/config/x86/target.h
26b3faeed41593e7d8ed02a4a590952f libitm/config/x86/x86_avx.cc
774f166eaa649652ba84ecac94ccec3b libitm/config/x86/x86_sse.cc
-1dfe57b82d8bc77a7767be65eba771c6 libitm/configure
-5259e91c2214841f24977ec3a6741d92 libitm/configure.ac
-aca901b689a77bfa7a14d2c4a3e81bc8 libitm/configure.tgt
+0045541ad9f5ae3f0fac08bd0e31c7ce libitm/configure
+38b35fe4a8b607c7901e2b4e7cb964aa libitm/configure.ac
+53c85bda2fc45eb26da0bde0be2f63aa libitm/configure.tgt
a880f7bf4ba2b802683664aabaa370d3 libitm/containers.h
58d6b7f4d71af18a1539d55fbbbd2b8c libitm/dispatch.h
37862447ce14b3005bb3d856f0c66a7d libitm/eh_cpp.cc
0d5244d9b6aab6059545ed7dac590f2b libitm/libitm.h
-1bf1b3284049c70b87298c5a63b89099 libitm/libitm.info
+1c7ebc05726bafa070154ad00a70bf2d libitm/libitm.info
8d44f8cc119e5c7cbc20c558b551475b libitm/libitm.map
ea467d7117853d139bb288ab75261139 libitm/libitm.spec.in
de3297853fbdb2b8abca6b43897355c8 libitm/libitm.texi
@@ -47585,7 +47984,7 @@ eda296c3856342b2164abf00fb180065 libitm/libitm_i.h
d3d9f1b9b7568570b92598ba255b641e libitm/method-gl.cc
57082e1a583dacb98031e514acafa733 libitm/method-ml.cc
4bb1e406616198c371f71e95ae65b620 libitm/method-serial.cc
-66b4721979d1a29b04762d927bc16921 libitm/query.cc
+f0aa2fc803cf7a7fb18786769b80dab1 libitm/query.cc
8dcf40e2022d3249a3a72dd107b756f3 libitm/retry.cc
2942b8640dc166a0e5db91052e9c3dbd libitm/stmlock.h
7bd10c68f4acfc2f5062ce2cb81abe9c libitm/testsuite/Makefile.am
@@ -47614,7 +48013,7 @@ ef24198422c19f99b0c41be6a16f7081 libitm/testsuite/libitm.c/txrelease.c
a461c2022ca3b6af6e76e149ebac1141 libitm/useraction.cc
51cac9d6e5e4d1681f3a49c39f85010f libitm/util.cc
94d55d512a9ba36caa9b7df079bae19f libjava/COPYING
-a8091915ba0bd4be2f6d1b3f207e0bf0 libjava/ChangeLog
+51c01e30255ea48255b12934ce0dff61 libjava/ChangeLog
03e1f38b916604fdf1470238201325f3 libjava/ChangeLog-1998
691acb61fbd6a2235826ff55db5578be libjava/ChangeLog-1999
b58c6701706771a02bf00a77666941ef libjava/ChangeLog-2000
@@ -47654,14 +48053,14 @@ de54f80484e640306e109e785e4611c8 libjava/classpath/.settings/org.eclipse.jdt.co
880a25226e4e4e4c241663041d24f8dd libjava/classpath/AUTHORS
efd97e0bb913655e0c8b16fa78bdded4 libjava/classpath/BUGS
af0004801732bc4b20d90f351cf80510 libjava/classpath/COPYING
-d52e846c7b77f3c1482772c1166af678 libjava/classpath/ChangeLog
+e36ab95183194b1891ae90c4403fd78f libjava/classpath/ChangeLog
3418fae58de967afe26d915a4b18d82c libjava/classpath/ChangeLog-2003
a5b72adb94a3c362738b0f52e57a82af libjava/classpath/ChangeLog-2004
61159c6e0802d0d2a92b3051003db5c5 libjava/classpath/ChangeLog-2005
0dba21f6ba7fe678d161f970a31cd505 libjava/classpath/ChangeLog-2006
50f13c3f8b33d5343320e6831fdd27df libjava/classpath/ChangeLog-2007
258dbd419342131b894f799a8090f76f libjava/classpath/ChangeLog-2008
-d4e15cc0c083ca22637dc4c876fcb886 libjava/classpath/ChangeLog.gcj
+1e8949dd0bb0b89fd50e52615e9505ef libjava/classpath/ChangeLog.gcj
a09dff495a9043fcf7b463f0b5c4fdd6 libjava/classpath/ChangeLog.gnujaxp.1
3353fabfae7cca9e6c4f821919e4275c libjava/classpath/ChangeLog.gnujaxp.2
b35964059a02f01f39b05a95b401f586 libjava/classpath/ChangeLog.libxmlj
@@ -47681,7 +48080,7 @@ b2a35e98453194ca837c363ee9c0d379 libjava/classpath/compile
8385976ed3a37f278f07c10341d53876 libjava/classpath/config.guess
6ba186363745a3fe81716c8c67bd370c libjava/classpath/config.rpath
b65469e74491b977b8babd8f98f3c1e5 libjava/classpath/config.sub
-aa2f2f9f7a8435f7eba8a1ec4a90d101 libjava/classpath/configure
+982e758b69111ac8753a6bbdcdba6166 libjava/classpath/configure
8317b38730f7b67a3e606bfc2811127f libjava/classpath/configure.ac
21504de31981a67b5b93b265029d1865 libjava/classpath/depcomp
a6cedb4991503f803e9f0870daf59c13 libjava/classpath/doc/.cvsignore
@@ -47692,21 +48091,21 @@ a6cedb4991503f803e9f0870daf59c13 libjava/classpath/doc/.cvsignore
b343eec566430e85d1f95c21438aa4ee libjava/classpath/doc/api/Makefile.am
5fcdae5b1c0be2a1d42d9d919e2a9d10 libjava/classpath/doc/api/Makefile.in
5ddd829b35fc94b0cdb119084089edb8 libjava/classpath/doc/cp-hacking.texinfo
-f24186a042d3d9b3269ecdad93c26f22 libjava/classpath/doc/cp-tools.info
+b4644d4832b38826885739e77c3ef641 libjava/classpath/doc/cp-tools.info
0349e5c38c548584225423ef4bafd20b libjava/classpath/doc/cp-tools.texinfo
3155d9bd9a7bf4aff2ff0dfe4a2cb878 libjava/classpath/doc/cp-vmintegration.texinfo
-818b1eb6ebb8e4b4f5335332b8982138 libjava/classpath/doc/gappletviewer.1
-d47e00b54e364bfe1de8d619350e0246 libjava/classpath/doc/gjar.1
-18053bd9f19217cd88ceba26fea5a362 libjava/classpath/doc/gjarsigner.1
-bd8b5cd9b92c7c9bc3ec1cbbe7240613 libjava/classpath/doc/gjavah.1
-49c98b3dabf586cd978a3e468703a929 libjava/classpath/doc/gjdoc.1
-d20ab6911a1009716dc0858e43180e69 libjava/classpath/doc/gkeytool.1
-b3a03609ee274b6e3d65f40e7b783845 libjava/classpath/doc/gnative2ascii.1
-a9bdbbee8a2330f898fdc0f36561490b libjava/classpath/doc/gorbd.1
-74cdb6ca4de32661fb7224467a43bc27 libjava/classpath/doc/grmid.1
-51388702abe7d5c6cadef6267fe5d154 libjava/classpath/doc/grmiregistry.1
-0f7d139260642dcc6a3b6f7344e9898c libjava/classpath/doc/gserialver.1
-118fca8e4058f5dac0c59033fb9c9d0f libjava/classpath/doc/gtnameserv.1
+748c304830e4724ec59bd760db80c1d3 libjava/classpath/doc/gappletviewer.1
+fef7134a226f9a48f716bdbd62148c42 libjava/classpath/doc/gjar.1
+2470074a40ff4f173a66c075510d20c7 libjava/classpath/doc/gjarsigner.1
+8f0ba03f9daf0c401537147aab1e9c54 libjava/classpath/doc/gjavah.1
+cb615be75257c169b7204f5ae8924411 libjava/classpath/doc/gjdoc.1
+c2f48e403f12f3c873c35723d0bb3bb4 libjava/classpath/doc/gkeytool.1
+628606b32c923220e9acf474a2682ee1 libjava/classpath/doc/gnative2ascii.1
+fd4aa1a3087c6547898adfdd92041599 libjava/classpath/doc/gorbd.1
+a512fdb495fb957c9ba27b89a5be0af9 libjava/classpath/doc/grmid.1
+d36ab30647af19049a53d7e28843afc1 libjava/classpath/doc/grmiregistry.1
+e3fa6a99dc49327a17168fc33d462811 libjava/classpath/doc/gserialver.1
+835bd9223dff65e40d8ac50691066451 libjava/classpath/doc/gtnameserv.1
7e4e31659df1c7e815f9151958dceef2 libjava/classpath/doc/texi2pod.pl
01b23c87dcf82048a5958c8224653305 libjava/classpath/doc/texinfo.tex
b1e0c0c30547d57d7a09b04d47c70b06 libjava/classpath/examples/.cvsignore
@@ -60400,7 +60799,7 @@ b2e1169c44e6959b0a89c191eed11d93 libjava/classpath/m4/gcc_attribute.m4
ccb88af68838277a679d9d358f18c86d libjava/classpath/m4/lib-ld.m4
ae7b83f9e10586d558f81855a211b5b1 libjava/classpath/m4/lib-link.m4
d305e70dd3440147ae6beb0ced42636d libjava/classpath/m4/lib-prefix.m4
-8bc9c6be20df8421c1a687421fbfde85 libjava/classpath/m4/pkg.m4
+631036b57d165731f86054af6a44290f libjava/classpath/m4/pkg.m4
41a1f90974d52d40bcd4784b81bb462b libjava/classpath/mauve-classpath
9d9668fb32d0542b712be2c34ca79bd7 libjava/classpath/missing
ce1fb6b579015b49d94f3b093f4cb332 libjava/classpath/mkinstalldirs
@@ -60508,8 +60907,8 @@ d8d10c74e172ff2ef40b21e10914e3f6 libjava/classpath/native/jni/gtk-peer/gnu_java
341ccadaf9bba9d9bc446635326950e2 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c
edd205834ab06400a9abb0f31c087136 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
153ada61ce28bb6b67e559b4bb516ea1 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphicsCopy.c
-8053d243f8004897483b5f3f3d8e68bc libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
-cc956e04da7867961040bf8fb7c90183 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
+0a631ed21b7df9a4e52fa9e8a51a705c libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
+7d61b44744429bc7f3c6e5c2bcb15e36 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
376fa165f19fb26e5e249f6c52b9887e libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c
9370bc1eafb2adb549905ebcd241aa56 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
e61731a76a2f19349b591c9f1614e162 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c
@@ -62953,7 +63352,7 @@ eb41bc24fe11de48910454ad60b1d450 libjava/classpath/vm/reference/java/nio/VMDire
7667fd55916077a20c6c1606c282c71e libjava/classpath/vm/reference/sun/misc/Unsafe.java
51797ad56585c18d465096c545896968 libjava/classpath/vm/reference/sun/reflect/Reflection.java
ee8b97b4210bc58ca056b570a7b0a1a2 libjava/classpath/vm/reference/sun/reflect/misc/ReflectUtil.java
-5b5d0352df09223f4ea1a3004c397233 libjava/configure
+459d6bc55e86b0e63458f1f24ce5819f libjava/configure
60fa9969d9ea31d2539cca081bab0b45 libjava/configure.ac
ab92b7fe8250b2cd4831120b90535fef libjava/configure.host
c87469b826abd90aa96813dbb712963b libjava/contrib/aot-compile-rpm.in
@@ -66801,7 +67200,7 @@ dd217172da39237791f66e9ea4b205a2 libjava/java/lang/management/VMManagementFacto
c41a894f10211ffd449acc8e308a717c libjava/java/lang/natClassLoader.cc
0428600f80b2d42232efa351faaad7ef libjava/java/lang/natEcosProcess.cc
38f692d64cb2de9c49202f41d4392825 libjava/java/lang/natMath.cc
-cd3a737f2db795fb827d767120fffa58 libjava/java/lang/natObject.cc
+cfc03ddb152cd90794400aa413541878 libjava/java/lang/natObject.cc
b87604ae8576b8ce497e9dc051cd764e libjava/java/lang/natPosixProcess.cc
f2c7421369552f1330283fe3ade709b0 libjava/java/lang/natRuntime.cc
c0c7593d282ebd23f5deabd3a6843225 libjava/java/lang/natString.cc
@@ -69923,16 +70322,16 @@ a40a8f1527e2703fe2f08bf7276d8591 libjava/libgcj.spec.in
697ca1de35069bd86456a5a19b9c4f11 libjava/libgcj.ver
184718636f014ef2ca46d62ba8d6c3bf libjava/libgcj_bc.c
e3eda01d9815f8d24aae2dbd89b68b06 libjava/libltdl/COPYING.LIB
-f25ec9617857cd456f05f16dd73e7245 libjava/libltdl/ChangeLog
+60e377311ddfbe4a25f1355bc972a1dd libjava/libltdl/ChangeLog
349267319e3d55dcf180a20f85394144 libjava/libltdl/Makefile.am
930c6383a37e6cc8e0625c9a281eda95 libjava/libltdl/Makefile.in
36da24f9facf00b349ea10dba3789d92 libjava/libltdl/README
-7144a40c9d234f46c29e1b66c01b5caa libjava/libltdl/acinclude.m4
+84471ff9aa5a4417557a1687c4032e0c libjava/libltdl/acinclude.m4
fe9987a8fd9c2baf732baaa6fec093ea libjava/libltdl/aclocal.m4
15ef4a3083ad2eff9daeb8c04d21ea05 libjava/libltdl/config-h.in
953749bade5256db32886b5353f73cab libjava/libltdl/config.guess
953749bade5256db32886b5353f73cab libjava/libltdl/config.sub
-272c5f8a3c8bbf0c5a5f339694299d28 libjava/libltdl/configure
+1619fe0d79af20871a904b5eae48abee libjava/libltdl/configure
e22c220615396fba3a31e08d51e07d9c libjava/libltdl/configure.ac
6b5362c8cc3aeec08dd77f5c6a6a4413 libjava/libltdl/install-sh
176a06373e6b281a5695641efa8724d7 libjava/libltdl/ltdl.c
@@ -70693,7 +71092,7 @@ efa3c5db8112696291d98ab0b195e083 libjava/org/xml/sax/helpers/ParserFactory.h
2f21b717a19d42ea904d19ee7b6a39b1 libjava/org/xml/sax/helpers/XMLReaderAdapter$AttributesAdapter.h
59d1d8acc4bee54bd001d76c45abb268 libjava/org/xml/sax/helpers/XMLReaderAdapter.h
1ac85ce766f7c0195f78ea0156116e9a libjava/org/xml/sax/helpers/XMLReaderFactory.h
-8bc9c6be20df8421c1a687421fbfde85 libjava/pkg.m4
+631036b57d165731f86054af6a44290f libjava/pkg.m4
bcecf5b2507e5f3693f16c96acd82a17 libjava/posix-threads.cc
988741ff03c71aa76b896742aaffe296 libjava/posix.cc
de6f44effe53248a36da4ddcf8c4d91e libjava/prims.cc
@@ -71558,6 +71957,7 @@ fecf99eb6bb5a9e0e6993836121abc20 libjava/testsuite/libjava.lang/shatest.jar
28ec5b8d3f6fc1ab5841991cc7b69aad libjava/testsuite/libjava.lang/sourcelocation.jar
ffce284e4e73f4280ea91ffd84237a21 libjava/testsuite/libjava.lang/sourcelocation.java
098f5d185503da563c4eca616bd1add0 libjava/testsuite/libjava.lang/sourcelocation.out
+398766a9a2806e50083741929abaa0eb libjava/testsuite/libjava.lang/sourcelocation.xfail
9c38707c94262c69a4612dc8fc82c4b5 libjava/testsuite/libjava.lang/stacktrace.jar
2a1879c35814dff9c33246ecc30adc5f libjava/testsuite/libjava.lang/stacktrace.java
0685a601278cb2db8dc2380595741208 libjava/testsuite/libjava.lang/stacktrace.out
@@ -71619,13 +72019,13 @@ d41d8cd98f00b204e9800998ecf8427e libjava/testsuite/libjava.special/pr21115.out
434ac04eb066f5075299583492846410 libjava/verify.cc
355440a0c2fb5e16259d7ae381b37ed5 libjava/win32-threads.cc
434d5e5e91727dec004f0d1d1fab47ec libjava/win32.cc
-c173f39a63818b5c562235bf8a493294 libmudflap/ChangeLog
+76520af7270beb9a0b5a8bbb469a2d58 libmudflap/ChangeLog
d17c97a25d15628f9814330350c9f68c libmudflap/Makefile.am
799a9b84a86476bbeff50297b7468483 libmudflap/Makefile.in
9883ed42b491d8aea83fdde90561cf2a libmudflap/acinclude.m4
1fe9a8fe50d9162be2df46582321a64b libmudflap/aclocal.m4
237ef3003d2f124931f143190e792f96 libmudflap/config.h.in
-ca293e03d4f998b2f15982849aefd922 libmudflap/configure
+50d33ec231507cebfab0a07fc8c96a7e libmudflap/configure
5b4e4bba2813b3ef5405f9f9e2520970 libmudflap/configure.ac
5b95ad6add3888b3ac1fd4fc7b3704ca libmudflap/libtool-version
89ee2b88bcd3f145bc8e97741ee99985 libmudflap/mf-heuristics.c
@@ -71763,7 +72163,7 @@ a413e4b774854ae9e990ae6d41d97941 libmudflap/testsuite/libmudflap.cth/cthfrags.e
86b705472b17ac803b1be2e9048982f1 libmudflap/testsuite/libmudflap.cth/pass40-frag.c
725a94441658e42a6adf2add0a0a419d libmudflap/testsuite/libmudflap.cth/pass59-frag.c
60168171460c9277504005955b1ea1b8 libmudflap/testsuite/mfconfig.exp.in
-7e5ac0101905e2e4bf5f29972fe9b2d4 libobjc/ChangeLog
+e228fdd88a6759dff2545aa688d75382 libobjc/ChangeLog
e68e4faf07897a32896c6ea00a6dd769 libobjc/Makefile.in
56746171b8870cf9098f90c3562cec71 libobjc/NXConstStr.m
af8fcd9da32497be695cde3725912fd9 libobjc/Object.m
@@ -71775,11 +72175,11 @@ d5edaeee0d84e4305368367019952ba7 libobjc/README
06fa306af411d0f6c26a7ee34b2f4237 libobjc/aclocal.m4
eab852a4ac56b06667828b5de04ab598 libobjc/class.c
c617bfed00b6e442d87cb98cf9da7c02 libobjc/config.h.in
-f247118d9a54957685ebfc41c827a9f3 libobjc/configure
+b9e869e80d9df15abbcf3f4450f1ea6e libobjc/configure
e5fcf35570b8103f9b00638e12708cc0 libobjc/configure.ac
16203e5ea5e964e825ecc2cf2f4f2ee1 libobjc/encoding.c
16e0dc14f4d43c8ae7033c198518b4cf libobjc/error.c
-5d290c260f4bd767361e0c43fc815151 libobjc/exception.c
+2a65a9e4fdaf97fc6599a8373a4fa7a9 libobjc/exception.c
edb57f642d391c0438ad5cd2c9ad3d33 libobjc/gc.c
a530ed85d7f1bb39160020ee8d9725b6 libobjc/hash.c
ff48f55afaeb1c5477eea95a54c551c1 libobjc/init.c
@@ -71821,15 +72221,15 @@ df34ec75bbe88331b52cb1e690032c80 libobjc/selector.c
13f4a173a94f3c5139c3d6827f8c49fa libobjc/sendmsg.c
8bae79345f1be0f341a14f9006b4fff1 libobjc/thr.c
a916467b91076e631dd8edb7424769c7 libquadmath/COPYING.LIB
-eb6842c27381586c69897db71e581d34 libquadmath/ChangeLog
+50463891bdc54c6347a3d198342f8ca3 libquadmath/ChangeLog
23c7bbe18a2fd46fd6d7090e03b3f561 libquadmath/Makefile.am
d7cf19f3f2f3edcb6f903996e5d97087 libquadmath/Makefile.in
4c8b4478a1031d129e7cc6b341876b99 libquadmath/acinclude.m4
aece970dd74d47d051257c4d4d1e91fa libquadmath/aclocal.m4
bf09ede5c6d78e3d132bde0f933590d8 libquadmath/config.h.in
-62b6103080109c32d8cd943eccd32e38 libquadmath/configure
+c07d51701c0992c05cc87da166fe9a8e libquadmath/configure
70f1bb2cf17ed14a22bd7f52ebf2593e libquadmath/configure.ac
-0a1726d360865676ca42776e65f230e1 libquadmath/libquadmath.info
+99e044790c0b7ae0cb4ce611eefb60b3 libquadmath/libquadmath.info
839b93777d307acba83159b15f3d9824 libquadmath/libquadmath.texi
77280bb7ee423875e03d9c0d34527df6 libquadmath/libtool-version
f44065462735b4699d44588271a5f09a libquadmath/math/acoshq.c
@@ -71952,7 +72352,7 @@ e766022f8615b72cbc38335d262e9d3d libquadmath/strtod/grouping.h
a81cc82679e80c86cfbd5575867450d0 libquadmath/strtod/strtod_l.c
da808e110fc09ebd41ebd405790a70df libquadmath/strtod/strtoflt128.c
d15a18f7c46ba2add6148edc5b7563c0 libquadmath/strtod/tens_in_limb.c
-90d1a723b20eddb15fb87f6efb6467d3 libsanitizer/ChangeLog
+13aaea5e01770c7f160c205b05481c83 libsanitizer/ChangeLog
0249c37748936faf5b1efd5789587909 libsanitizer/LICENSE.TXT
d684e511ea80e2cc442a652a42156e81 libsanitizer/MERGE
beb6222f9a25db3ea8121457aca5d299 libsanitizer/Makefile.am
@@ -71998,9 +72398,9 @@ e24b9287362b944e760bb83f1f42e6f0 libsanitizer/asan/asan_thread.h
6cb070345e67ea6dfa4ad94f87fafe80 libsanitizer/asan/asan_thread_registry.h
2b32e1105f3156f63560a3f0b82452d3 libsanitizer/asan/asan_win.cc
5b95ad6add3888b3ac1fd4fc7b3704ca libsanitizer/asan/libtool-version
-995d24710d352a3914b36896c7cec624 libsanitizer/configure
+9ecf7597f509f5b1db8f094116d2a5c2 libsanitizer/configure
cd7328a90c63e903104ae25429a406b9 libsanitizer/configure.ac
-05bbbd89448a04d4fd48c7f975241597 libsanitizer/configure.tgt
+fede8d3577658b22ff3b9cadeca8a798 libsanitizer/configure.tgt
3122c4745e0256d22bb39ee681b77779 libsanitizer/include/sanitizer/asan_interface.h
3ff19ded555cf70c415606fb37399e74 libsanitizer/include/sanitizer/common_interface_defs.h
74c6b73fadf5cd0825664bb4623e10b7 libsanitizer/interception/Makefile.am
@@ -72107,12 +72507,12 @@ be2c84b52568ecfd1a780b1f03ef0427 libsanitizer/tsan/tsan_symbolize.h
b64cdedde58be4c1c3afd082ccfcd890 libsanitizer/tsan/tsan_trace.h
1ecb5346ab82bca2a8c49f55663a2d55 libsanitizer/tsan/tsan_update_shadow_word_inl.h
602903a9e6505ac239fac5079d8cc141 libsanitizer/tsan/tsan_vector.h
-633a7f746dea984bdb0d90455f58a749 libssp/ChangeLog
+e2638b7111069df51f0d8e47443d24e0 libssp/ChangeLog
01d9954c400db04da1b8705029e6d9d9 libssp/Makefile.am
6f9651cc4e77f9e7629b0142b05a90e0 libssp/Makefile.in
8b0dd0c2a8b446bf5577a8562ad19885 libssp/aclocal.m4
f4886e6dd0590caba717fd1bc96a6f50 libssp/config.h.in
-ab361b13c31c9d2b6f2f8aed8676eba5 libssp/configure
+b725c0d4085527a75aa32d8d27ab3914 libssp/configure
a7931ca48743d3365f9053aff7ae2a9b libssp/configure.ac
8068f3e391d39bf2201dfa1ed2a2efc6 libssp/gets-chk.c
0ac32b60459d1fdec670990324d7bdc6 libssp/libtool-version
@@ -72136,7 +72536,7 @@ aeb2f84c5e8ba3215469d507bd2efe57 libssp/ssp/string.h
e9ab923d2562bf5f5be6883dfb9f0184 libssp/strncpy-chk.c
5e0d8b8a766c31b12354baec1b7a159c libssp/vsnprintf-chk.c
f56ab1f8922a16f7e9e4f5270ae1e34e libssp/vsprintf-chk.c
-f1ec3b9cd2501457cd0797c24f3fc65a libstdc++-v3/ChangeLog
+a0d97aa94e91c11dab4dec16244ee139 libstdc++-v3/ChangeLog
7aa6c40440a44fcf5ec94c066160c2f8 libstdc++-v3/ChangeLog-1998
7aff86600b6a1ed3fa87305075a92db0 libstdc++-v3/ChangeLog-1999
a6f28e8fc9bb07696a9e068b439a3a87 libstdc++-v3/ChangeLog-2000
@@ -72155,11 +72555,11 @@ f35941c59a16039a2da7e3bf66528e69 libstdc++-v3/ChangeLog-2012
d552bb4180df989dfd9dc5408f2b9bd3 libstdc++-v3/Makefile.am
d6bb24b9cc129b994fb03c2b1d1e74e0 libstdc++-v3/Makefile.in
f372af73db4ac0ad88e43199e1f29e08 libstdc++-v3/README
-2a93096f29c88ff82e319ded43de9873 libstdc++-v3/acinclude.m4
+5b7ddbb97c33cd1635778f6ccbfb4323 libstdc++-v3/acinclude.m4
8740082679d696cb8e212b6106b77cff libstdc++-v3/aclocal.m4
cca4dc44503a59433bd3421b09a53f77 libstdc++-v3/config.h.in
7b87f8a3b611dab377987f5929c1b4c0 libstdc++-v3/config/abi/compatibility.h
-95673cb90f78418a516eb75c8fee9460 libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt
+4aef090e961ba1e43b6333c1429e1e36 libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt
4f606e847ef6533868096efdee25a693 libstdc++-v3/config/abi/post/hppa-linux-gnu/baseline_symbols.txt
37fa29fff6d5209c5e4fc0191af0c1b4 libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt
37fa29fff6d5209c5e4fc0191af0c1b4 libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt
@@ -72180,8 +72580,8 @@ e9c31ff5465aa90be6b8a48c04b7e87e libstdc++-v3/config/abi/post/solaris2.10/amd64
cc65678819ec7ff06eaeed8b1a5455eb libstdc++-v3/config/abi/post/sparc-linux-gnu/baseline_symbols.txt
37fa29fff6d5209c5e4fc0191af0c1b4 libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt
132aee89d5dcfaf2ffaa5097110e5b22 libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt
-46f1f52521e0883553a3ae00ed8e5f78 libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
-401df36115d78648e1e70de3ef17d638 libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
+11a3b68dfe947ecc52140631c5fac79c libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
+baafbaf642a49bf7b84ceb79f1d4ff66 libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
79f832e03e56d22538b642d6c3894b09 libstdc++-v3/config/abi/pre/gnu.ver
6f099054f1d75e3e178e42c4d8e4c6e1 libstdc++-v3/config/abi/pre/none.ver
d21b0d4887ef90d1eb43c96a77bf553f libstdc++-v3/config/allocator/bitmap_allocator_base.h
@@ -72327,9 +72727,9 @@ af4dde35437cbf5e9b1083dec1615f81 libstdc++-v3/config/os/vxworks/ctype_base.h
9aee61db9727d88af04bc3fa1bf82ec0 libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
929164888bde163c94549599d83e7df0 libstdc++-v3/config/os/vxworks/ctype_inline.h
83eeaef7204d701bfb631124068ac3cd libstdc++-v3/config/os/vxworks/os_defines.h
-b5942cfe4e2f3ccf9f2a247e4f785037 libstdc++-v3/configure
+505ba07f8e0dec69ce3d16adaa2f1cab libstdc++-v3/configure
0eb63e40125a3d6980e5e5f9071ab191 libstdc++-v3/configure.ac
-8a2407e5af5e80263e649b1434da16b4 libstdc++-v3/configure.host
+723bbf19544344eaf9c9bea88cfd3e59 libstdc++-v3/configure.host
f42849589da50c9c3b93457ae975aeab libstdc++-v3/crossconfig.m4
dbd33ef93b6276c19b2ebbb8a26223af libstdc++-v3/doc/Makefile.am
7de1e27bc9ed8894d96beb8432bee129 libstdc++-v3/doc/Makefile.in
@@ -72340,13 +72740,13 @@ e251a24b50ce1416afef4e2c7026da28 libstdc++-v3/doc/doxygen/doxygroups.cc
1273764cd133c402d2d3f22cf2913af5 libstdc++-v3/doc/doxygen/tables.html
97a42dc67b2b05ae274ef607aa1b9f7f libstdc++-v3/doc/doxygen/user.cfg.in
66e139590a163a3e9d632f33fbe1d1b3 libstdc++-v3/doc/html/README
-62018943bb10c498e92b73de19f4a36a libstdc++-v3/doc/html/api.html
-94c43a7b257a87aeb5eb8e51b2a92b3b libstdc++-v3/doc/html/bk02.html
-c3ee01fc70a633aabf49ef9f11f1f7fb libstdc++-v3/doc/html/bk03.html
+70029f4725ca32c7252cb45136c99361 libstdc++-v3/doc/html/api.html
+e24504647642dbafa49db140acc95c21 libstdc++-v3/doc/html/bk02.html
+58ad49058a87b197aaddb99f389eacfa libstdc++-v3/doc/html/bk03.html
1d3eb837e8c17cf0d0ad6d151e8d1777 libstdc++-v3/doc/html/ext/lwg-active.html
68372fa89a0decb4aa5f941df5484129 libstdc++-v3/doc/html/ext/lwg-closed.html
2defa75c6dc8ce9a6f6b775439df3b7c libstdc++-v3/doc/html/ext/lwg-defects.html
-86c299c46cfe8d5bc0d86469ade28a7d libstdc++-v3/doc/html/faq.html
+c484cca0028dc734f8f221f783ab2b12 libstdc++-v3/doc/html/faq.html
1ae70f0bf94464b036515d333fff8ab2 libstdc++-v3/doc/html/images/confdeps.png
d7f63b43e9f4c39cf71de7585de522ee libstdc++-v3/doc/html/images/pbds_balls_and_bins.png
22eedc841676a98f8ae8b95131ac4d7e libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.png
@@ -72426,115 +72826,115 @@ d7249eb4d31bd107d0b09ea3c80cb723 libstdc++-v3/doc/html/images/pbds_tree_text_in
1d86b338a316806c80b250eb132ac6dd libstdc++-v3/doc/html/images/pbds_tree_text_lor_find.png
33bc39e8f2d47f3d490d7ca7d4832b43 libstdc++-v3/doc/html/images/pbds_trie_node_updator_policy_cd.png
df705f3839120dcb896e9839cf3404d0 libstdc++-v3/doc/html/images/pbds_update_seq_diagram.png
-b1aa35df83c86e153df8535cdaefbc90 libstdc++-v3/doc/html/index.html
-eb819784e2b54a527c89d05418b6015a libstdc++-v3/doc/html/manual/abi.html
-66295c06ae7bf2746c2040d5d99bee92 libstdc++-v3/doc/html/manual/algorithms.html
-26709e64088260c79407ac7c0673a904 libstdc++-v3/doc/html/manual/api.html
-9caef62a958f2c63295fe8fca22728c5 libstdc++-v3/doc/html/manual/appendix.html
-3cf8cec7f8cab67fafc20deab8a15f0f libstdc++-v3/doc/html/manual/appendix_contributing.html
-4a181d38eed3688e53e6d9f957487150 libstdc++-v3/doc/html/manual/appendix_free.html
-23e81cebd9389702d4cd2013b6d3d92b libstdc++-v3/doc/html/manual/appendix_gfdl.html
-80771b507038390db934f375d9464f00 libstdc++-v3/doc/html/manual/appendix_gpl.html
-bb4b0eec0e0fdc3e680979639938cda8 libstdc++-v3/doc/html/manual/appendix_porting.html
-ade171780f524ea5764711f120534332 libstdc++-v3/doc/html/manual/associative.html
-d5070de7257d1d81426a1ad2606c0ed7 libstdc++-v3/doc/html/manual/atomics.html
-7a550f278e38586c09d6262fba23fd76 libstdc++-v3/doc/html/manual/backwards.html
-5f2244fbd12fb5831c63ad9a3cdc0a2a libstdc++-v3/doc/html/manual/bitmap_allocator.html
-92d3e0ab62794007f7e478db6cc68b95 libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
-e765c1ede07847ca3efcdba5ad30f7e9 libstdc++-v3/doc/html/manual/bugs.html
-4c2a99882c2faa18008830a4f3c356d2 libstdc++-v3/doc/html/manual/concept_checking.html
-8aaafb89f69e2df921d9ac1178c870d9 libstdc++-v3/doc/html/manual/concurrency.html
-e6ef972f02d1c4150392c033d12865f6 libstdc++-v3/doc/html/manual/configure.html
-801606c202073b50a0d5477a29f4b8f0 libstdc++-v3/doc/html/manual/containers.html
-dc2c128d939abdb184d8a08d6cb92d99 libstdc++-v3/doc/html/manual/containers_and_c.html
-e647d576adc1da7aab5741630092ecdf libstdc++-v3/doc/html/manual/debug.html
-5a19b0719bf24ed43883e7f84d12d988 libstdc++-v3/doc/html/manual/debug_mode.html
-26eddc68cc5c8489b09588aad3e2b067 libstdc++-v3/doc/html/manual/debug_mode_design.html
-597303e453c234637b73efdce86d8a95 libstdc++-v3/doc/html/manual/debug_mode_semantics.html
-f44b4cc19645d7e2cb895d274b7c3b46 libstdc++-v3/doc/html/manual/debug_mode_using.html
-282dc9890c4b088167c3492a7ab18576 libstdc++-v3/doc/html/manual/diagnostics.html
-7b3db0eadc1641ff0a86ea164189c74a libstdc++-v3/doc/html/manual/documentation_hacking.html
-5406fd2217d7bc4fb3a3cb8806dadf61 libstdc++-v3/doc/html/manual/dynamic_memory.html
-954e1574b7268b1dcb50a88654b8cf37 libstdc++-v3/doc/html/manual/ext_algorithms.html
-8a8ef208887c2b5ff13dcb676dc02df1 libstdc++-v3/doc/html/manual/ext_compile_checks.html
-7cf5c1b152a0dbf5578b989ec97493bf libstdc++-v3/doc/html/manual/ext_concurrency.html
-bdd443310acfc708ae62e8588151b07c libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
-f92e9fcf8fa40db28eccad44a099ee92 libstdc++-v3/doc/html/manual/ext_concurrency_use.html
-33eb109df324753a3ffd0e6d262850e4 libstdc++-v3/doc/html/manual/ext_containers.html
-660d1d935453fbd715f80008d5069030 libstdc++-v3/doc/html/manual/ext_demangling.html
-9e28c4dbdccab79f5b11685c81a39a1d libstdc++-v3/doc/html/manual/ext_io.html
-220ac023980bc9bfc4ab24f6c01949e7 libstdc++-v3/doc/html/manual/ext_iterators.html
-fd830747be23c3a708fe6cbeef01bf26 libstdc++-v3/doc/html/manual/ext_numerics.html
-db89fabab66a1bb73df11dd6a57c7342 libstdc++-v3/doc/html/manual/ext_preface.html
-37ca03c0106025081160c82aefa50903 libstdc++-v3/doc/html/manual/ext_sgi.html
-fa097b83e9d86dbeb3f56ecc83cefc80 libstdc++-v3/doc/html/manual/ext_utilities.html
-e5057bd265433b339c4b3dd378eca050 libstdc++-v3/doc/html/manual/extensions.html
-8d6bba902d4a7541c284afba97819c13 libstdc++-v3/doc/html/manual/facets.html
-6bf1b21b2113374e0a0735479ede5a80 libstdc++-v3/doc/html/manual/fstreams.html
-4c46b247bf5cc6d4cde4e25cb850d4b6 libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
-c19bf24b726eb350af31277dfb3e264d libstdc++-v3/doc/html/manual/index.html
-381dc5b2f44ac21dc9ea97f0cac4e175 libstdc++-v3/doc/html/manual/internals.html
-9c6d34d34daa2fe4ef6996a0277d069a libstdc++-v3/doc/html/manual/intro.html
-4c1b499f18658dc396c9a7e85ae88072 libstdc++-v3/doc/html/manual/io.html
-859cf407f2bece413e894f79d9b444d6 libstdc++-v3/doc/html/manual/io_and_c.html
-dcde621384aaa789ecc9a33e1675d545 libstdc++-v3/doc/html/manual/iterators.html
-44d31c8f94b57a86d6f730d4c7aed8b1 libstdc++-v3/doc/html/manual/license.html
-8b33c408a49a75b119d014a1c45c8633 libstdc++-v3/doc/html/manual/localization.html
-bd18a7ea6d928eba2359654f02b68a98 libstdc++-v3/doc/html/manual/make.html
-c552e44ce4c47f840d551f75ad65af4a libstdc++-v3/doc/html/manual/memory.html
-6956bfaab3a8deefd13e86eb533d507d libstdc++-v3/doc/html/manual/mt_allocator.html
-634535f59507a81d576703dfe5eb6aed libstdc++-v3/doc/html/manual/mt_allocator_design.html
-c5b32766c05aa63cd3816dd79af70992 libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
-e7ef1e094eafc7554d06f8471e9f5324 libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
-fb70ff9243d7b66830176bfec760a51d libstdc++-v3/doc/html/manual/mt_allocator_impl.html
-f6c21a02a8da978cf3257d00a0407d7c libstdc++-v3/doc/html/manual/numerics.html
-a260b24af4b1ed156580de6a3033d3b2 libstdc++-v3/doc/html/manual/numerics_and_c.html
-a14ee6c097432b7931e8cd8a533ec606 libstdc++-v3/doc/html/manual/pairs.html
-0bd14bb0b3640420adb84975850fa61e libstdc++-v3/doc/html/manual/parallel_mode.html
-0a16f4e38ed3763bb5fccc5e36b83203 libstdc++-v3/doc/html/manual/parallel_mode_design.html
-29500a458a077a4765636098bb561987 libstdc++-v3/doc/html/manual/parallel_mode_semantics.html
-ac886d321f662e6e6d6408b8066e1abd libstdc++-v3/doc/html/manual/parallel_mode_test.html
-e3f73af67f965e8560926a2599747f6f libstdc++-v3/doc/html/manual/parallel_mode_using.html
-681363c1e8fb9992b48fb0f5cbe97e08 libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
-e24a5a7357f81686b8a95cd2a7afc087 libstdc++-v3/doc/html/manual/policy_data_structures.html
-d3e325e186faf4aec9714d8d785ac57d libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
-b3b5b1a128c8127196b0b7e68d08817b libstdc++-v3/doc/html/manual/policy_data_structures_design.html
-1adc443812acff86516205b347c1d92a libstdc++-v3/doc/html/manual/policy_data_structures_using.html
-3254792ed716f6452d30ca57c2e1f3ac libstdc++-v3/doc/html/manual/profile_mode.html
-16b09ab805bbcb94189a8461ff080aeb libstdc++-v3/doc/html/manual/profile_mode_api.html
-b894b3196405af0b03ca0de22f1ce143 libstdc++-v3/doc/html/manual/profile_mode_cost_model.html
-079050c94d9f858929abbbeea09e9d44 libstdc++-v3/doc/html/manual/profile_mode_design.html
-cf6fd23914cc721fe443255ea45e389f libstdc++-v3/doc/html/manual/profile_mode_devel.html
-8c50807470eac72942069737764e459e libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
-8e0fb967465bc3d3c2a6d3feae1ea8dc libstdc++-v3/doc/html/manual/profile_mode_impl.html
-c7045e0489f19929232a2fa7fff3fbf6 libstdc++-v3/doc/html/manual/setup.html
-aeaaeb52e954969b745e3bb3937faf91 libstdc++-v3/doc/html/manual/source_code_style.html
-f7b11a1a709b687f15fa60f277f48a34 libstdc++-v3/doc/html/manual/source_design_notes.html
-bf4d850866e88a12dc9ae55b36ced5cd libstdc++-v3/doc/html/manual/source_organization.html
-194901d26c4f98f3697a72cb0ea38358 libstdc++-v3/doc/html/manual/status.html
-ae315dbeff968dfcc1d1c9776f4a4beb libstdc++-v3/doc/html/manual/std_contents.html
-c1dc7554b43427ab116135699a9c9bc5 libstdc++-v3/doc/html/manual/streambufs.html
-46a2663f1c59add3ae5b3ddaa0d5acb4 libstdc++-v3/doc/html/manual/strings.html
-e29dacc378d35a2bc4da2c3b488a229c libstdc++-v3/doc/html/manual/stringstreams.html
-abda693642021ea955705b0c09bdac18 libstdc++-v3/doc/html/manual/support.html
-7e451de476f8b3a72ca9fe1d17614f1e libstdc++-v3/doc/html/manual/termination.html
-7cefb7a1eeb60ee60d70051acc6931de libstdc++-v3/doc/html/manual/test.html
-aa7b811263bad6cbb4e723c2cea8dbe9 libstdc++-v3/doc/html/manual/traits.html
-c79b130ce850cd01bf103c20321e316e libstdc++-v3/doc/html/manual/unordered_associative.html
-150e979d0d72c6c9a8989a17bc2e0e5b libstdc++-v3/doc/html/manual/using.html
-e475a34b26edc920964d38c9cef7b3ba libstdc++-v3/doc/html/manual/using_concurrency.html
-3cf799a97e3a59a1126a7afcbc8da872 libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
-ab4083b575586876b4ea6801135a1eb7 libstdc++-v3/doc/html/manual/using_exceptions.html
-6a210ad77310563f97c31d118692692a libstdc++-v3/doc/html/manual/using_headers.html
-24db6b3ba2fa61eb0a1ddc40b7cc7af2 libstdc++-v3/doc/html/manual/using_macros.html
-97110c3e366338d7aa1de224e0f77f90 libstdc++-v3/doc/html/manual/using_namespaces.html
-009672c7d3432b1b7b471b6ea8d9429f libstdc++-v3/doc/html/manual/utilities.html
+99a06ace846b78590f436a2b955af7d5 libstdc++-v3/doc/html/index.html
+f36ea99bcef03cebc3ae74030df71909 libstdc++-v3/doc/html/manual/abi.html
+f6f9dcfce9de20a554b1c652455d682e libstdc++-v3/doc/html/manual/algorithms.html
+8fa7eba5fbea966b9e2017873984f638 libstdc++-v3/doc/html/manual/api.html
+fbbfaa76d7a42a72c5dad6b242cadc20 libstdc++-v3/doc/html/manual/appendix.html
+dd32dacbc37a2611ee1899e76730ff47 libstdc++-v3/doc/html/manual/appendix_contributing.html
+b29cf17edc9dd298c7d10905ee1c955e libstdc++-v3/doc/html/manual/appendix_free.html
+1ba38c64d73796a214334f2dab820328 libstdc++-v3/doc/html/manual/appendix_gfdl.html
+d1630ce355fcf2cb056a63b6eec57180 libstdc++-v3/doc/html/manual/appendix_gpl.html
+ea723415abe18ff4eb6aa578d9ab58d4 libstdc++-v3/doc/html/manual/appendix_porting.html
+e3107c7c09d1d662a5482b6f76d2f57e libstdc++-v3/doc/html/manual/associative.html
+680a1c1d2400b4c67feced3235fd44d4 libstdc++-v3/doc/html/manual/atomics.html
+0086840485c0637f9ef9b4b86d55acd0 libstdc++-v3/doc/html/manual/backwards.html
+4bc46b36e9636b2f61911bec8741819b libstdc++-v3/doc/html/manual/bitmap_allocator.html
+30d8c30900a37402674ac20c0a4b5698 libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
+911fa618a09e8e693c50f0281e5019c4 libstdc++-v3/doc/html/manual/bugs.html
+e121b9ed2494e3ae68df9b847d0fe1ba libstdc++-v3/doc/html/manual/concept_checking.html
+2324639e6cec032220e683fdd166236f libstdc++-v3/doc/html/manual/concurrency.html
+765481d7897ee8f5cae2d104ff1982cf libstdc++-v3/doc/html/manual/configure.html
+094c3d696f4620d2b9f8b3e064de62ae libstdc++-v3/doc/html/manual/containers.html
+a039be9cc637470d3f8d3ed9648ca5d2 libstdc++-v3/doc/html/manual/containers_and_c.html
+c40426fb2ed990ec6d9dda41db794f2f libstdc++-v3/doc/html/manual/debug.html
+819dbf166a9b7d51462c83b311309a08 libstdc++-v3/doc/html/manual/debug_mode.html
+183a5a6d1e59c76631c53e33288d08bd libstdc++-v3/doc/html/manual/debug_mode_design.html
+6a97f7f04b5b1a36575aa5e0f80f1ee5 libstdc++-v3/doc/html/manual/debug_mode_semantics.html
+e9a1ff1a0121fc08882d9ea9e9324fcb libstdc++-v3/doc/html/manual/debug_mode_using.html
+f9741c9bf61576622bb72b4575864fd7 libstdc++-v3/doc/html/manual/diagnostics.html
+4495c5ab8dece9a850ed86a0cb1db1c1 libstdc++-v3/doc/html/manual/documentation_hacking.html
+346c6ec0ca78dc31c3c1564d613e95d4 libstdc++-v3/doc/html/manual/dynamic_memory.html
+6754ad07708c36820e08e04e1aeb02bb libstdc++-v3/doc/html/manual/ext_algorithms.html
+bf5fa0cbcb30cc1ff7908bf699a045ba libstdc++-v3/doc/html/manual/ext_compile_checks.html
+00e24e54a02492bb10d94c60d3d4e8d5 libstdc++-v3/doc/html/manual/ext_concurrency.html
+c1cd1c10016c4ea26446c337b5b1610e libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
+2b9b33938584e17f401bf21c285af30a libstdc++-v3/doc/html/manual/ext_concurrency_use.html
+8fc51fc67d0794cfe349294f28d8e187 libstdc++-v3/doc/html/manual/ext_containers.html
+b83e2280a694b73feedb098666fdcd42 libstdc++-v3/doc/html/manual/ext_demangling.html
+7969471d93a397921bf15645722db9d4 libstdc++-v3/doc/html/manual/ext_io.html
+24abb74f520b2cc64329af7b0eabedd6 libstdc++-v3/doc/html/manual/ext_iterators.html
+549d43cb9c55ed8abf3eb93c27ed9716 libstdc++-v3/doc/html/manual/ext_numerics.html
+bb8ec3ffd1a30e28b2a3940d8b158072 libstdc++-v3/doc/html/manual/ext_preface.html
+2e9ae95a3ae1a6c6ec52c0b778656ffc libstdc++-v3/doc/html/manual/ext_sgi.html
+3232979348ed4e031d790cc79ff62b54 libstdc++-v3/doc/html/manual/ext_utilities.html
+afa05dfb1a7534deec7dfd9b05b98e69 libstdc++-v3/doc/html/manual/extensions.html
+5b39fd7e4b3dbe3e96f04f25afbf1965 libstdc++-v3/doc/html/manual/facets.html
+ef06389b7c29304656c0e450029bb8d4 libstdc++-v3/doc/html/manual/fstreams.html
+614a60a2c1b9d8c7304e1d19215f76d5 libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
+29d60f58ace1833ba8e65c6a87430f54 libstdc++-v3/doc/html/manual/index.html
+7ec577626226bdd896bef777ac0710ec libstdc++-v3/doc/html/manual/internals.html
+312c0a71853d29d1020356a475747764 libstdc++-v3/doc/html/manual/intro.html
+7a1f08382bbb33e54cf4ed7961534f88 libstdc++-v3/doc/html/manual/io.html
+0cad2f91c3cee7b67e72e2580b2bd99b libstdc++-v3/doc/html/manual/io_and_c.html
+f305da12931f4e2b0de057dda373cf68 libstdc++-v3/doc/html/manual/iterators.html
+f2cbe7a16c1459eb9d661c4f59148c85 libstdc++-v3/doc/html/manual/license.html
+d0f09ab77c9c8a312876777be95023b4 libstdc++-v3/doc/html/manual/localization.html
+518c609918662df90ec372996b1cee25 libstdc++-v3/doc/html/manual/make.html
+2db6ced39ea31460757b82f619070117 libstdc++-v3/doc/html/manual/memory.html
+2f0038d7682f075686ddeb6eb5700181 libstdc++-v3/doc/html/manual/mt_allocator.html
+90aab30425d9f81569fd7f122545388f libstdc++-v3/doc/html/manual/mt_allocator_design.html
+769263e7fac4c4320ed9890622a2691d libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
+b477b181b88903e87cafffc02f82c26f libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
+18a4f55ae43a71769f8b57d6318fe429 libstdc++-v3/doc/html/manual/mt_allocator_impl.html
+ae84c32dfcdcb87d8a862bf07793942c libstdc++-v3/doc/html/manual/numerics.html
+1e7bda9b7468a80644d426c5ec6d9956 libstdc++-v3/doc/html/manual/numerics_and_c.html
+73a67e9f3ea3de4053702d5d42bc5dd5 libstdc++-v3/doc/html/manual/pairs.html
+7d1e088f311a1b3a178d698b81d35123 libstdc++-v3/doc/html/manual/parallel_mode.html
+85a125ec0706e197a5e833d1a6c3eff6 libstdc++-v3/doc/html/manual/parallel_mode_design.html
+9fa3374f8d90cea52be068b1a43becf3 libstdc++-v3/doc/html/manual/parallel_mode_semantics.html
+eb0de4015a06cfc5b0946dea8967d9c3 libstdc++-v3/doc/html/manual/parallel_mode_test.html
+5a894df3ceea3ba1bec835683314a147 libstdc++-v3/doc/html/manual/parallel_mode_using.html
+0276102f2848d23d2fc92a5eaf1e5997 libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
+781436fe8b34dfafac9eb8f48d2252a0 libstdc++-v3/doc/html/manual/policy_data_structures.html
+880eaee18fe507e3f4488db646a9d0f5 libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
+6ef4642777ca2860555857b07637c179 libstdc++-v3/doc/html/manual/policy_data_structures_design.html
+3b6c1638a8dc1d2c64ee076c1dbfa26d libstdc++-v3/doc/html/manual/policy_data_structures_using.html
+d72c1578ed04aa35f82db0a1d5bf5725 libstdc++-v3/doc/html/manual/profile_mode.html
+55b08f450898f4f72f786affcbc8ad90 libstdc++-v3/doc/html/manual/profile_mode_api.html
+a4da9233e97dfbc6975e64682370e552 libstdc++-v3/doc/html/manual/profile_mode_cost_model.html
+7f12a1e11d95e7e31b84bc1e25c1c114 libstdc++-v3/doc/html/manual/profile_mode_design.html
+948f1fd836cb398e618422bcb4864aaa libstdc++-v3/doc/html/manual/profile_mode_devel.html
+7e374061e597a0f456118711ce2f99f2 libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
+959142a01bcfe51b5975541a3f0b6dc6 libstdc++-v3/doc/html/manual/profile_mode_impl.html
+fed3045c62d581cfbe7a2baec7820bbe libstdc++-v3/doc/html/manual/setup.html
+6797250ede211d0c027dd4803fb15940 libstdc++-v3/doc/html/manual/source_code_style.html
+96e94b4327d03cbe1d5a8f34f8556bb6 libstdc++-v3/doc/html/manual/source_design_notes.html
+658403718395ded5ff484457bf844421 libstdc++-v3/doc/html/manual/source_organization.html
+d8836b19899ca94753bd630b694bc140 libstdc++-v3/doc/html/manual/status.html
+bf50066a5355dbcb4be72ebe0ac5d026 libstdc++-v3/doc/html/manual/std_contents.html
+5f42b0e97d81b02894609ea50ed652c8 libstdc++-v3/doc/html/manual/streambufs.html
+e4f615cda79f7d178baf4e1556d3f94e libstdc++-v3/doc/html/manual/strings.html
+aae3d417ab9227eca84f286d98536f8e libstdc++-v3/doc/html/manual/stringstreams.html
+e03d6e37ea5d088975f2efb73182b92f libstdc++-v3/doc/html/manual/support.html
+14770764db98d494ac0b13348a17ed0d libstdc++-v3/doc/html/manual/termination.html
+5fe5ad74aedef3c6ea95b92ff961d3f1 libstdc++-v3/doc/html/manual/test.html
+1921311e51f16604162cc2e27b35d38b libstdc++-v3/doc/html/manual/traits.html
+2681c8c99b0031d59d569bcd522e304f libstdc++-v3/doc/html/manual/unordered_associative.html
+5b9f3e5b3ac5b95feca266410902da65 libstdc++-v3/doc/html/manual/using.html
+50cc01aa824b1049c27e1bb701a33844 libstdc++-v3/doc/html/manual/using_concurrency.html
+cc708c5415f2595cd0a892139ddc1306 libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
+e1adb9e4e9e74bcb07d17ec154eda483 libstdc++-v3/doc/html/manual/using_exceptions.html
+9dbee99c3864af58cea53d8f19dc4cae libstdc++-v3/doc/html/manual/using_headers.html
+01bdf62e57ff0fa7248d6994ea849540 libstdc++-v3/doc/html/manual/using_macros.html
+d21cdef4a1734b9605c5c6a534a39749 libstdc++-v3/doc/html/manual/using_namespaces.html
+88df6b7d7e4a218fba69b9d9ad8d334b libstdc++-v3/doc/html/manual/utilities.html
02efc67c40519a69579fd7146ff1bbd2 libstdc++-v3/doc/xml/api.xml
0b177c199fb448ad3630d15bdc3cbb19 libstdc++-v3/doc/xml/authors.xml
f5a41d4f7585b850b3182fc5f4888f93 libstdc++-v3/doc/xml/book.txml
95d1335e76860d53246f3e400231ec38 libstdc++-v3/doc/xml/chapter.txml
7f8c520dc83013026c671c5c342f73e2 libstdc++-v3/doc/xml/class.txml
-6895dbf50309ba67c6e4606c28f5a7d9 libstdc++-v3/doc/xml/faq.xml
+0519a25d8935bf0251a6f89f44ee05ec libstdc++-v3/doc/xml/faq.xml
0408e04957d20fcb2a1048c482230ec0 libstdc++-v3/doc/xml/gnu/fdl-1.3.xml
df4574d04d7f029398ab0183832017b6 libstdc++-v3/doc/xml/gnu/gpl-3.0.xml
18a6390297702ec8fd75cbcc525d2005 libstdc++-v3/doc/xml/images/confdeps.dot
@@ -72714,7 +73114,7 @@ cc132f90a00a3ca05f64b578f9e332aa libstdc++-v3/doc/xml/images/pbds_tree_text_lor
f63bfdc03ba2b82c74864f02206d7c52 libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.svg
33bc39e8f2d47f3d490d7ca7d4832b43 libstdc++-v3/doc/xml/images/pbds_trie_node_updator_policy_cd.png
df705f3839120dcb896e9839cf3404d0 libstdc++-v3/doc/xml/images/pbds_update_seq_diagram.png
-a66e5c2e303aee828213a44b32203e05 libstdc++-v3/doc/xml/manual/abi.xml
+6c4d8513ce4ba9e823b5fb801142313a libstdc++-v3/doc/xml/manual/abi.xml
6a68f07a8b8abd9e65846432ed52d646 libstdc++-v3/doc/xml/manual/algorithms.xml
c1ac27983cd545d0b32d6941d0de496d libstdc++-v3/doc/xml/manual/allocator.xml
9b885a0fe5ae4be4da41747077756db9 libstdc++-v3/doc/xml/manual/appendix_contributing.xml
@@ -72752,9 +73152,9 @@ cd9d0070a54f5180beb42829c255932e libstdc++-v3/doc/xml/manual/policy_data_struct
4e49a8e041ae187579c7683d4b840fc4 libstdc++-v3/doc/xml/manual/prerequisites.xml
21dec51c2c76bafe8934821e96fe59c3 libstdc++-v3/doc/xml/manual/profile_mode.xml
4db8cd4a6b8623d3d9114b2c6387503d libstdc++-v3/doc/xml/manual/shared_ptr.xml
-571f1b40ca0091ca5d8e0480d249a9f0 libstdc++-v3/doc/xml/manual/spine.xml
+7f888aed3944ce22ffca8a1bc0c93b93 libstdc++-v3/doc/xml/manual/spine.xml
881a8c0676488b4185dda9647788980d libstdc++-v3/doc/xml/manual/status_cxx1998.xml
-5f117dbe670d05f4aa31b2693ba16892 libstdc++-v3/doc/xml/manual/status_cxx2011.xml
+b4e97f6fea8777f744d67efe440276fc libstdc++-v3/doc/xml/manual/status_cxx2011.xml
ebeadf036e95339193d2a51e2d9efd78 libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
e33d05128ea4a110ede63ff27e1a79ce libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml
4c13d66a7d616f2cd8b30dce68ec8cea libstdc++-v3/doc/xml/manual/strings.xml
@@ -72767,8 +73167,8 @@ d42dacf57cbf8644fc8b7217c7e8893a libstdc++-v3/doc/xml/manual/utilities.xml
81101633486578b85f0457b4b1b10424 libstdc++-v3/doc/xml/spine.xml
bd966b4a0df6f2a84f9770525581d45c libstdc++-v3/doc/xsl/customization.xsl.in
216bae5f7d13e4004761f08c0dade9db libstdc++-v3/fragment.am
-b569e4202f814a07ff8526039e7c5284 libstdc++-v3/include/Makefile.am
-56811151df394483a100bb433df1492d libstdc++-v3/include/Makefile.in
+2de1c38c53b14a487e6022c3489bab24 libstdc++-v3/include/Makefile.am
+f8ae8cc4b1c74c12552a2c485288104f libstdc++-v3/include/Makefile.in
7b22a0fef9e41b675c99be921657962e libstdc++-v3/include/backward/auto_ptr.h
1c9368be16078b87c84c42d77e12fe63 libstdc++-v3/include/backward/backward_warning.h
a141de41381daf22f2f7aff44d47fc84 libstdc++-v3/include/backward/binders.h
@@ -72780,14 +73180,14 @@ fd5cb43e52ea5e6ec2e4838d61505779 libstdc++-v3/include/backward/strstream
cc2bc6f9b35cc7bab16c4fdc29c78c56 libstdc++-v3/include/bits/algorithmfwd.h
808e8801947ccf444bea2a3afb57dacd libstdc++-v3/include/bits/alloc_traits.h
057f879dfefd2e81af658d01304e803e libstdc++-v3/include/bits/allocator.h
-c68ef0f8d5676b24735a7c0ea25eccf2 libstdc++-v3/include/bits/atomic_base.h
+9bdcbb951bcf94b9d461253157c1a8ce libstdc++-v3/include/bits/atomic_base.h
ec19d1a620f9e7906e545d4e16860e43 libstdc++-v3/include/bits/basic_ios.h
b15dde277c878b464b1c72810c9da508 libstdc++-v3/include/bits/basic_ios.tcc
004b4648b80675dc4eefa4d12be985ff libstdc++-v3/include/bits/basic_string.h
a97811d392e87c0cd33892e178aa5752 libstdc++-v3/include/bits/basic_string.tcc
240d723edf58a90d26025e42213bab32 libstdc++-v3/include/bits/boost_concept_check.h
0a0e37f5b66a26da7ee6fc3e90e32b35 libstdc++-v3/include/bits/c++0x_warning.h
-8c7e44e4c4a446595c64c0043d693e4a libstdc++-v3/include/bits/c++config
+106f50ece7e2528b7f340c9a01f099ed libstdc++-v3/include/bits/c++config
9a209a6fc7da5fd30ea7c3f939b6ad3d libstdc++-v3/include/bits/char_traits.h
83f824afb806ca318e6cce9f814836d4 libstdc++-v3/include/bits/codecvt.h
0d3ad3a7f61303742f8b02601b702744 libstdc++-v3/include/bits/concept_check.h
@@ -72820,8 +73220,8 @@ adb9d0b7d50e2f0b484f81f5aacee930 libstdc++-v3/include/bits/localefwd.h
8921ee8c6ebb149267f73c422866b51c libstdc++-v3/include/bits/ostream_insert.h
533becd00d6ace73ae1c776f2dafadca libstdc++-v3/include/bits/postypes.h
4a3f1323e741e71b77bf3993407516df libstdc++-v3/include/bits/ptr_traits.h
-128338bd832e9001dafda4b36daab4c0 libstdc++-v3/include/bits/random.h
-50f2eb99530090c21a30eebe98bc3a77 libstdc++-v3/include/bits/random.tcc
+96ed900d32b31ed58c934ce1c333754d libstdc++-v3/include/bits/random.h
+9ddddc5b70e2f6675190798e4636b2de libstdc++-v3/include/bits/random.tcc
26d7002e1985723d240003bfc299346f libstdc++-v3/include/bits/range_access.h
0c32ccc04a3eb5d5161f590c851ee854 libstdc++-v3/include/bits/regex.h
4eeae659d0314bc205ab91cc892764f2 libstdc++-v3/include/bits/regex_compiler.h
@@ -72833,12 +73233,12 @@ fa122b0d450458b7cc31dab936718d3e libstdc++-v3/include/bits/regex_cursor.h
9c2da0aae4a4af584e09769625e673c9 libstdc++-v3/include/bits/regex_nfa.h
1aab141c373ca92a04225f56532a14b9 libstdc++-v3/include/bits/regex_nfa.tcc
87994345535cdf3b8c985a0a016453b5 libstdc++-v3/include/bits/shared_ptr.h
-ebcee0a35f388684d96ed120b27ae994 libstdc++-v3/include/bits/shared_ptr_base.h
+01918ee39d97b95824bd68ea44a4b4ce libstdc++-v3/include/bits/shared_ptr_base.h
59d02d9f5070d3603f1e223dd7f8014a libstdc++-v3/include/bits/slice_array.h
323e24e40e9fa392e721d04d4431768e libstdc++-v3/include/bits/sstream.tcc
-fc33f4ecc9fa306ad7ca99473233dc8c libstdc++-v3/include/bits/stl_algo.h
-65a3f13f64ef6e5a2b44e7426f0a5db2 libstdc++-v3/include/bits/stl_algobase.h
-2050e2e137147693a4c9574d6a9aec8a libstdc++-v3/include/bits/stl_bvector.h
+34af5cb424e2e0a13777bbab522f5d82 libstdc++-v3/include/bits/stl_algo.h
+6969df87c5a67dc4e50a33c793db05a0 libstdc++-v3/include/bits/stl_algobase.h
+38cdfc89e6ee845ee6d598963b8497cf libstdc++-v3/include/bits/stl_bvector.h
e8ba3e4c10b7b0f7ce71a0d624e57681 libstdc++-v3/include/bits/stl_construct.h
2b8e94748ab0343478568845ed19d544 libstdc++-v3/include/bits/stl_deque.h
ec18a5afdc73e1222b62b54545e31e99 libstdc++-v3/include/bits/stl_function.h
@@ -72847,26 +73247,26 @@ a8705ee339f879bc9bfc333ae77c554f libstdc++-v3/include/bits/stl_heap.h
6ae0e1f41b872997386a0d70b9239247 libstdc++-v3/include/bits/stl_iterator_base_funcs.h
89344ff5aeffaeb01926d555a07da13c libstdc++-v3/include/bits/stl_iterator_base_types.h
fbf0470230f747012d5ff1d2ca12b138 libstdc++-v3/include/bits/stl_list.h
-9c367a09ac6373a8d69c5fab7efea73f libstdc++-v3/include/bits/stl_map.h
-b56d35a09afe326a1b9c62677ed77df6 libstdc++-v3/include/bits/stl_multimap.h
-681504f6b8d73aa6f7e38db81d82ac3b libstdc++-v3/include/bits/stl_multiset.h
+0533d9e5a0996192adad6800cf753a43 libstdc++-v3/include/bits/stl_map.h
+5b45f9dfb9c74e8332862f5d0b4f9d25 libstdc++-v3/include/bits/stl_multimap.h
+c0b419476622d2d11eb4c32844de7a82 libstdc++-v3/include/bits/stl_multiset.h
89a1f3dcb04b443b6ba3764dff2b0f5a libstdc++-v3/include/bits/stl_numeric.h
96ee8f52de52edde9124b9a35d842ceb libstdc++-v3/include/bits/stl_pair.h
f091b27cab7b96690dccd8d568e4a7b6 libstdc++-v3/include/bits/stl_queue.h
50edffd5abb8695fab94be9c57bd6f7f libstdc++-v3/include/bits/stl_raw_storage_iter.h
df33513bdd7a8c5b25f866ba68c434e8 libstdc++-v3/include/bits/stl_relops.h
-5c82c3d777e8462540494fd73b5349f1 libstdc++-v3/include/bits/stl_set.h
+a1fde6d07a3e7127041ac50752eaf68d libstdc++-v3/include/bits/stl_set.h
15975ea849a272880d15fa7ba2292628 libstdc++-v3/include/bits/stl_stack.h
7c836c5c89990d969dc7197299eb71fc libstdc++-v3/include/bits/stl_tempbuf.h
-3026b1385c38a1e1ce6b8703841af82e libstdc++-v3/include/bits/stl_tree.h
+271e5da1a72e24718f9cbbea05f821a2 libstdc++-v3/include/bits/stl_tree.h
51bd11e25be3ada8b15df8714f8b5288 libstdc++-v3/include/bits/stl_uninitialized.h
-a25b5f29edd471bd3b02a8b84c8f7774 libstdc++-v3/include/bits/stl_vector.h
+0c456673e862caf8dcb4ec4cc57652da libstdc++-v3/include/bits/stl_vector.h
e997c07543cbb5b707a22cf5f14307d2 libstdc++-v3/include/bits/stream_iterator.h
d53ae1f75b7d4aabf00ea62fb66e85a6 libstdc++-v3/include/bits/streambuf.tcc
4dfbb11eaecf9f7b1a4714c9340987f3 libstdc++-v3/include/bits/streambuf_iterator.h
b40f1ea7b6e7f1a78cf6502af2c9c333 libstdc++-v3/include/bits/stringfwd.h
80c513ee57655ca175c8d5c5e4e3dff1 libstdc++-v3/include/bits/unique_ptr.h
-b716aba4a3cf3c202acf19a5afdb68b7 libstdc++-v3/include/bits/unordered_map.h
+6448b42d126b02e020eed347d13a33eb libstdc++-v3/include/bits/unordered_map.h
6089282a602a26a8df9cf1b005d58da7 libstdc++-v3/include/bits/unordered_set.h
ce330de082025907951797315fe41ddf libstdc++-v3/include/bits/uses_allocator.h
f3485681aeae45e197bf2f8ffb4c6786 libstdc++-v3/include/bits/valarray_after.h
@@ -72934,7 +73334,7 @@ f27d21762bfd143a401d8e9a1757ea98 libstdc++-v3/include/c_global/cstdarg
04fd201c5658bacff60f473fe9735663 libstdc++-v3/include/c_global/cstdbool
3e697d090737f7a084d2e7f0411a444e libstdc++-v3/include/c_global/cstddef
727fda306d86db4f752006c604425e8c libstdc++-v3/include/c_global/cstdint
-eb6ea3aa5eb4a169bcb5c917349f312a libstdc++-v3/include/c_global/cstdio
+efa24e3fde76ac0ed4305e9c77c7a5c6 libstdc++-v3/include/c_global/cstdio
03dd325f4e4b53421b9e9c487d897269 libstdc++-v3/include/c_global/cstdlib
44828c88b31e5e489cb3ee3b5a8049bf libstdc++-v3/include/c_global/cstring
bcc482b1ce7e5e7313cd7579ded28a73 libstdc++-v3/include/c_global/ctgmath
@@ -72965,9 +73365,9 @@ f67c31559d3f223746cf8dd8c3b93ae6 libstdc++-v3/include/debug/bitset
610d7df0ccf619e0c850778fbe3ffec9 libstdc++-v3/include/debug/deque
292196fd0106f57f0751621fa6b22772 libstdc++-v3/include/debug/formatter.h
e805dfa8988253e5ddfa291f7774f4d9 libstdc++-v3/include/debug/forward_list
-94c2b5b5d6769eaf2042c019a52f82f3 libstdc++-v3/include/debug/functions.h
+3284cc44bd69b5943266dcd059beeefb libstdc++-v3/include/debug/functions.h
c63e830154c2a44a651d84c9ec8b9c89 libstdc++-v3/include/debug/list
-ac9e4503cb2c6e1524209f47d8f5a42b libstdc++-v3/include/debug/macros.h
+090ff54a8ef6a284f5f936fd19395e08 libstdc++-v3/include/debug/macros.h
e3c37e790ddc7bae4c57629c261867d1 libstdc++-v3/include/debug/map
7b0f43cdd91f7263d2006a39248387a0 libstdc++-v3/include/debug/map.h
2d234c35b58d989241d41ddcb0ee369b libstdc++-v3/include/debug/multimap.h
@@ -72979,7 +73379,7 @@ d8e339b325e7f35ec62f8781288fe3e2 libstdc++-v3/include/debug/safe_base.h
2c6fd441393e0967de94ed864b0f75f8 libstdc++-v3/include/debug/safe_local_iterator.tcc
6284ca44250e4338709bdc676c3af40c libstdc++-v3/include/debug/safe_sequence.h
b63d5f40c9ae8abe9d6c9738249abd7b libstdc++-v3/include/debug/safe_sequence.tcc
-8beb1952f02d4c1b4fffb6725044622b libstdc++-v3/include/debug/safe_unordered_base.h
+6b7e1d9465a77b3e6d0e4a377a0d6ea0 libstdc++-v3/include/debug/safe_unordered_base.h
ef75588db5c3d55a608b1342009fdbe8 libstdc++-v3/include/debug/safe_unordered_container.h
ae874e215ccddcd5be10962011427c08 libstdc++-v3/include/debug/safe_unordered_container.tcc
226e8975dcf8117ef004528a0b4096bb libstdc++-v3/include/debug/set
@@ -72993,7 +73393,7 @@ ff469135432a9ef56fe2f2f4f892c03c libstdc++-v3/include/decimal/decimal.h
65213aa8e4207abfcee2b59462e12fc6 libstdc++-v3/include/ext/algorithm
c3cb7f6cb93ee5e623f0d73e1b8ba37b libstdc++-v3/include/ext/alloc_traits.h
8fcd49182b940e15723963b1f267e270 libstdc++-v3/include/ext/array_allocator.h
-75d15595170f449afd7720b8a80ce7d3 libstdc++-v3/include/ext/atomicity.h
+1cf1c170630a2a78b46ee9a0ef92b77e libstdc++-v3/include/ext/atomicity.h
708c8ec2a9733c59fa24193d3ba631f8 libstdc++-v3/include/ext/bitmap_allocator.h
13a22e3090bce7f2afe102f6d1d05615 libstdc++-v3/include/ext/cast.h
8bf471f57fcdb380d4c771f5c8d49fcb libstdc++-v3/include/ext/cmath
@@ -73256,14 +73656,14 @@ a70e7c5fc2b95825b76484ee6cb64352 libstdc++-v3/include/ext/pb_ds/tag_and_trait.h
140a8fb145ec3880f0cedb5032bfe996 libstdc++-v3/include/ext/pod_char_traits.h
0f96a0fbb7b5551cd1d2c3baff8ecb7b libstdc++-v3/include/ext/pointer.h
ab2373d24f99d4320608175237fdde8d libstdc++-v3/include/ext/pool_allocator.h
-510423d2fb7570dc27cb07a9f4e32775 libstdc++-v3/include/ext/random
+197184918dd80e9c6597578cacc5279b libstdc++-v3/include/ext/random
2510c7047c2cee86eeeb6200ad5789f4 libstdc++-v3/include/ext/random.tcc
b5b945d3a4ba05855521679a242c4ec0 libstdc++-v3/include/ext/rb_tree
bee2f52df7edff78522722a63203cf44 libstdc++-v3/include/ext/rc_string_base.h
7715fa53cccee129569cf7c7bc1e936f libstdc++-v3/include/ext/rope
46439fd1f94d246cbbbc59de6a47d273 libstdc++-v3/include/ext/ropeimpl.h
6072aa98cd553bd6107b5c2570b398b3 libstdc++-v3/include/ext/slist
-fbf29ab0cf18d4aedcedc01efa460eec libstdc++-v3/include/ext/sso_string_base.h
+ac1677d2e780d7037834fee0a0f16a4d libstdc++-v3/include/ext/sso_string_base.h
a7f505f99a687e19c99aae7747f91d78 libstdc++-v3/include/ext/stdio_filebuf.h
e1f2d4ca30e6ecc46ef6819634bd093c libstdc++-v3/include/ext/stdio_sync_filebuf.h
2a7155770b2e009a347b71f4a8acba64 libstdc++-v3/include/ext/string_conversions.h
@@ -73325,7 +73725,7 @@ a68703597f9d9803390810a55da657b7 libstdc++-v3/include/profile/array
c2199262063740d76b61fff5d2538a88 libstdc++-v3/include/profile/bitset
99dbb851784f37adf54b38383e559b9c libstdc++-v3/include/profile/deque
55be4fc177b00856e36ca34793874500 libstdc++-v3/include/profile/forward_list
-9f8b517f6bca5f67a2b2e8416f4fb61a libstdc++-v3/include/profile/impl/profiler.h
+243afa3d23f584ce5e72ec8cb5c071aa libstdc++-v3/include/profile/impl/profiler.h
4073502c33c36b2054c5b508849e041e libstdc++-v3/include/profile/impl/profiler_algos.h
eb86d58ced07f7fb71f5ce7cf9cc98cc libstdc++-v3/include/profile/impl/profiler_container_size.h
d7e9d05e35c9210805e834fba0c6e397 libstdc++-v3/include/profile/impl/profiler_hash_func.h
@@ -73346,25 +73746,26 @@ f45622c3162d872d9bd0d0b6f100d3cd libstdc++-v3/include/profile/map
75158c1995994ab22b4c4505c43c85c1 libstdc++-v3/include/profile/multiset.h
3f2749e208c02834e4caac4c0d943abc libstdc++-v3/include/profile/set
2b2d7b8ccba5906275314e7728178696 libstdc++-v3/include/profile/set.h
-70a57f15bfccb6ab91cac4a4138e5b11 libstdc++-v3/include/profile/unordered_map
-4a4304c0c00aee1b9b6361d8be1c829f libstdc++-v3/include/profile/unordered_set
-dac83e250e987f1d3bea0f79e6abd7bf libstdc++-v3/include/profile/vector
+f28302dc58e0d2e55f580556747b1195 libstdc++-v3/include/profile/unordered_base.h
+6f3148960689dc95b370e14ec7828588 libstdc++-v3/include/profile/unordered_map
+070bb0145348bbd192a14f24317dbd54 libstdc++-v3/include/profile/unordered_set
+de96fe490d145cf41c4cc610bfc0c243 libstdc++-v3/include/profile/vector
3f5f9137b924683b8cdbec6bd818e09e libstdc++-v3/include/std/algorithm
29121e588d25509666e0170a62bb3b4a libstdc++-v3/include/std/array
db55c8576c523add77de26f8e6a5f203 libstdc++-v3/include/std/atomic
-7126d9054cc73f48a78480b33425074c libstdc++-v3/include/std/bitset
+1aa00b720618c0253accec53d64520d7 libstdc++-v3/include/std/bitset
261d696dada0ac13c22043593897f7a0 libstdc++-v3/include/std/chrono
-95d030725d6babacd62f69b55ca45850 libstdc++-v3/include/std/complex
+feb944c45d4ddb4d0f8a9afc3b28125b libstdc++-v3/include/std/complex
9d1a2e0279e1f3e63e33c0b6b85a325e libstdc++-v3/include/std/condition_variable
b7270928c058d9549c111f7e367ffb7c libstdc++-v3/include/std/deque
85427296f8cb88bd14e002b4fabb2f4a libstdc++-v3/include/std/forward_list
be282d17c5f8ba5dc2e5fc0b147aa441 libstdc++-v3/include/std/fstream
-89252a5ba99d63cbf54162447eda722a libstdc++-v3/include/std/functional
-41124c823fa25a9a65e2e4af870a639c libstdc++-v3/include/std/future
+c9da08afabf04fab8366b9d3ed939b32 libstdc++-v3/include/std/functional
+8c3fe8474ef4f4b32882b2bb92e799c7 libstdc++-v3/include/std/future
168cef671aa9099c19b1819faf3aa7de libstdc++-v3/include/std/iomanip
8c0ede8a5724470e17694a22159fa0ea libstdc++-v3/include/std/ios
e03f0e44bf7ea52445d78cbe4d135958 libstdc++-v3/include/std/iosfwd
-a3e2a4ce51f1cd46cb6ac8af147a1553 libstdc++-v3/include/std/iostream
+748aa5f5178b623f623463d675e5b9b1 libstdc++-v3/include/std/iostream
9cae89298110e27d2cc4e19356767f13 libstdc++-v3/include/std/istream
197cef5901101bcf949942ca3ab58ed8 libstdc++-v3/include/std/iterator
f69ae5e9d0d2a5c697b8b6c543b088da libstdc++-v3/include/std/limits
@@ -73372,7 +73773,7 @@ a48b857a18ba6643406cd72b9b4ba9ca libstdc++-v3/include/std/list
7413932f2a048559e70f7fed0da1104e libstdc++-v3/include/std/locale
ef73fdf7b15a7fbe753f80ed0c51fc73 libstdc++-v3/include/std/map
653b4195cf8fb1319e1aa4dff30ace17 libstdc++-v3/include/std/memory
-b0429aa2cc53763d8dab48a7c03ae11e libstdc++-v3/include/std/mutex
+0f7b7caffc9423f70697c6ffb2ce2ae5 libstdc++-v3/include/std/mutex
b8fdc22341a3ff10f1433454dc71fe50 libstdc++-v3/include/std/numeric
900bc0d9960a0b25a5b55c447ce291d9 libstdc++-v3/include/std/ostream
6c63a9921e3ea9443e509acbbbf0bd49 libstdc++-v3/include/std/queue
@@ -73388,13 +73789,13 @@ b8fdc22341a3ff10f1433454dc71fe50 libstdc++-v3/include/std/numeric
f598cf18c6cc0eb5d31b48179c198d0a libstdc++-v3/include/std/string
5b88b3342eaa2309ecad05fa5fa2563a libstdc++-v3/include/std/system_error
544206abbed618c20a4540a2944f264a libstdc++-v3/include/std/thread
-510547ba80e09659978ab9c17fcf4a48 libstdc++-v3/include/std/tuple
+eba62dda5be7d2b3a80488403c9b05eb libstdc++-v3/include/std/tuple
ac4d8c834880801cacfc4dbd3368b8c7 libstdc++-v3/include/std/type_traits
0d1d909a169636260362932c8300c1c9 libstdc++-v3/include/std/typeindex
a0fd640042fab6c581c4d62814c79401 libstdc++-v3/include/std/unordered_map
71561de97a4411b3e56baa3ae438f2f1 libstdc++-v3/include/std/unordered_set
2d1641778d07df1d91c23801d97a0eca libstdc++-v3/include/std/utility
-c8ae8ae46554ce0c2e1f1da30a95057d libstdc++-v3/include/std/valarray
+d0cc0df1d41f21e4e450f7362b549616 libstdc++-v3/include/std/valarray
990fd530ecfa5236f5a2a5b070509b65 libstdc++-v3/include/std/vector
67439425d66c66fed341a499ec0e45d8 libstdc++-v3/include/tr1/array
6e0a62a3aa4e5cb36f6dd42d92b77220 libstdc++-v3/include/tr1/bessel_function.tcc
@@ -73467,7 +73868,7 @@ f5846f12a77c7873bcd4719c2a895afa libstdc++-v3/libsupc++/Makefile.am
9de51e05bd29d687dda117ca4f701a88 libstdc++-v3/libsupc++/Makefile.in
4f7a159a593c84f5ec3b4fa404a8386c libstdc++-v3/libsupc++/array_type_info.cc
34375ed5dd05e95a48c2f8d3a2a228f5 libstdc++-v3/libsupc++/atexit_arm.cc
-1a63d25b59e1312889053749eac0b5e3 libstdc++-v3/libsupc++/atexit_thread.cc
+cfd35a707ef78369f82950c9599a82d8 libstdc++-v3/libsupc++/atexit_thread.cc
7a9ebc806e7b4d8ba8b5478ebd12cd7b libstdc++-v3/libsupc++/atomic_lockfree_defines.h
c7b0566356876a729b39d12a9f3393c5 libstdc++-v3/libsupc++/bad_alloc.cc
47302e6c9e927957c23a78f05af4f3f6 libstdc++-v3/libsupc++/bad_cast.cc
@@ -73480,10 +73881,10 @@ b012cb581351e555c8f1d0b1569117fa libstdc++-v3/libsupc++/del_opnt.cc
89cb735a491951a4116cf64e3d30cbcf libstdc++-v3/libsupc++/del_opv.cc
2e21fd351c1d3b72c4b899edbcbc2bf4 libstdc++-v3/libsupc++/del_opvnt.cc
7599fb238f7f36b31115a7b45ac9d1a4 libstdc++-v3/libsupc++/dyncast.cc
-a9cb4e5881a95312a79c79f6a0d57e67 libstdc++-v3/libsupc++/eh_alloc.cc
+71d76731b93ee7ad84e9d4be5897a98f libstdc++-v3/libsupc++/eh_alloc.cc
634f10161113e843f6aa05b77f97c1c6 libstdc++-v3/libsupc++/eh_arm.cc
8b2e24bfce4002387c73b08997cf418f libstdc++-v3/libsupc++/eh_aux_runtime.cc
-75d4823296b6cca632dc570fc9a7759b libstdc++-v3/libsupc++/eh_call.cc
+bfd709a53c9181852c5036b37330d8ca libstdc++-v3/libsupc++/eh_call.cc
a7f80af7a1648cc386ce9a88f49d408f libstdc++-v3/libsupc++/eh_catch.cc
feccd4e5a9fed54f1a8693fd933de1ac libstdc++-v3/libsupc++/eh_exception.cc
88a092ae8c2a0b8dd8b4d0c94f90ae77 libstdc++-v3/libsupc++/eh_globals.cc
@@ -73491,7 +73892,7 @@ feccd4e5a9fed54f1a8693fd933de1ac libstdc++-v3/libsupc++/eh_exception.cc
ae5a21e6a95340e4c2067aa2d669f92e libstdc++-v3/libsupc++/eh_ptr.cc
fd1cadfe5a9c654377d63edb82d3ab9e libstdc++-v3/libsupc++/eh_term_handler.cc
c68aba7a777f414f493d9de28c651694 libstdc++-v3/libsupc++/eh_terminate.cc
-299993147deabff6514744f01664b60a libstdc++-v3/libsupc++/eh_throw.cc
+43736ce1075ea444b7f80a6d9f658cb8 libstdc++-v3/libsupc++/eh_throw.cc
b51d0b4a1bd0a6c6a826ad4bdf4164a3 libstdc++-v3/libsupc++/eh_tm.cc
9a10d466b09e464f7e3bcf243fce88d6 libstdc++-v3/libsupc++/eh_type.cc
a1e08fcd1fa57f761bd29ab3e2278d21 libstdc++-v3/libsupc++/eh_unex_handler.cc
@@ -73544,7 +73945,7 @@ a4f43bfc120f4923459ed46b86e0ef6a libstdc++-v3/python/libstdcxx/v6/printers.py
b1441422cec6381d9285b7681b666124 libstdc++-v3/scripts/check_compile
533e594add6e79910b0e557ba690fac6 libstdc++-v3/scripts/check_performance
82f6c1a97e33521cc247a22b9bab69e0 libstdc++-v3/scripts/create_testsuite_files
-6bfa8b29eeb543aee0ff3d884a08794d libstdc++-v3/scripts/extract_symvers.in
+0cb2682fd7ad0dc20f06e4f3864bceb4 libstdc++-v3/scripts/extract_symvers.in
e178f71b8d98a8b9b5a8d5199a59ff3d libstdc++-v3/scripts/extract_symvers.pl
755b77f929d926f07f3257df2e802f2e libstdc++-v3/scripts/gen_bind_includers.pl
85378fa65bc3dc46ffe255374b304560 libstdc++-v3/scripts/gen_includers.pl
@@ -73578,7 +73979,7 @@ dd4775ee4b4a319d6329a3d3c9681e2f libstdc++-v3/src/c++11/regex.cc
579bead8c102d83f63a528c43b1f8e8c libstdc++-v3/src/c++11/shared_ptr.cc
b57b55f6ee7eb430cceb9a4b6ffe55f0 libstdc++-v3/src/c++11/string-inst.cc
c1751cf7a69c41c48fcb71bc3a52c71b libstdc++-v3/src/c++11/system_error.cc
-54e16db6aca931cac90299e4922189df libstdc++-v3/src/c++11/thread.cc
+fec1cf7973367f22516add5806cb28b8 libstdc++-v3/src/c++11/thread.cc
806a3982d05a1e984f9839aacb17072a libstdc++-v3/src/c++11/wstring-inst.cc
4f888afca337bdd462504ff7dacfe8ef libstdc++-v3/src/c++98/Makefile.am
bf758628bbfe28b610d872cfca617e2b libstdc++-v3/src/c++98/Makefile.in
@@ -73588,7 +73989,7 @@ bf758628bbfe28b610d872cfca617e2b libstdc++-v3/src/c++98/Makefile.in
46fd5701abdb4cc1cd43078662bc3a98 libstdc++-v3/src/c++98/compatibility-debug_list-2.cc
5478df34dd0f7f4cd6cdd257f1bf2da2 libstdc++-v3/src/c++98/compatibility-debug_list.cc
02c271eeb4f1f598f22cbe4966c5f2b0 libstdc++-v3/src/c++98/compatibility-ldbl.cc
-18ed72bfcf67a8c77f35c7a8c54a1dc3 libstdc++-v3/src/c++98/compatibility.cc
+c0caaf20833759f29852f5b2eb629038 libstdc++-v3/src/c++98/compatibility.cc
6ca406f50a9388443d4c3767ab7579cc libstdc++-v3/src/c++98/complex_io.cc
15ed84d22a1aef01a4020da8ef4a8c27 libstdc++-v3/src/c++98/concept-inst.cc
84c47e3839ed2439998a58f74ae0faa6 libstdc++-v3/src/c++98/ctype.cc
@@ -73600,7 +74001,7 @@ bcaf81c8ea5f2da60a1f495f46be5407 libstdc++-v3/src/c++98/hashtable_tr1.cc
2d31564ea5f6156101afaaf28f9461b0 libstdc++-v3/src/c++98/ios-inst.cc
d4825f970fd0dfed8661001b38e7a6eb libstdc++-v3/src/c++98/ios.cc
2bf390c13e264372a6a8a8985c615970 libstdc++-v3/src/c++98/ios_failure.cc
-7235be73a1f873707b1db05afe1de119 libstdc++-v3/src/c++98/ios_init.cc
+eca2e58d0d92ac5178d7ea63c433cedd libstdc++-v3/src/c++98/ios_init.cc
a14acfc9f94518626c5567056c34ad86 libstdc++-v3/src/c++98/ios_locale.cc
5823f09ea3743624eb759077819e55bf libstdc++-v3/src/c++98/iostream-inst.cc
ef8108e9f8dcc9727455d01c19017665 libstdc++-v3/src/c++98/istream-inst.cc
@@ -73660,6 +74061,7 @@ b219f2977d3ac938932568fb0cfd5856 libstdc++-v3/testsuite/18_support/bad_alloc/co
3e37baf109258857be3cc4ef8eb0bc63 libstdc++-v3/testsuite/18_support/bad_cast/cons_virtual_derivation.cc
9cb7a32ca30b035bfe8a51c1744d1e5c libstdc++-v3/testsuite/18_support/bad_cast/what.cc
19125b16048ba5310b5f5d9deba9ba75 libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c
+70fb83e1c93634d4bb915845a33817d5 libstdc++-v3/testsuite/18_support/bad_exception/59392.cc
996c086f120c4b9f2f086ff43bf107c2 libstdc++-v3/testsuite/18_support/bad_exception/cons_virtual_derivation.cc
550691f43664ee1563b1bcdd6b3fef94 libstdc++-v3/testsuite/18_support/bad_exception/what.cc
d0ef226f0a714a2ddc837e8d4ef3eda0 libstdc++-v3/testsuite/18_support/bad_typeid/cons_virtual_derivation.cc
@@ -73829,6 +74231,7 @@ c6a9740b29c5e93bf2d282e9906b3a9d libstdc++-v3/testsuite/20_util/bind/45924.cc
4204f2b0d3d92ea28d19c57b406a2cce libstdc++-v3/testsuite/20_util/bind/48698.cc
3d37efb5d5022fda3c3578832c083cb4 libstdc++-v3/testsuite/20_util/bind/49058_1.cc
640f787e503477a8efb6cbf1b5f45160 libstdc++-v3/testsuite/20_util/bind/49058_2.cc
+3c67a7b5a69a9e643f641c3dad23dec7 libstdc++-v3/testsuite/20_util/bind/57899.cc
96de863fce4f8b6daf1236ba7e752185 libstdc++-v3/testsuite/20_util/bind/all_bound.cc
afad2338ca12fd6b15e6c27bddb54c68 libstdc++-v3/testsuite/20_util/bind/conv_result.cc
cdc5232d72263526bf71ab8a77b04944 libstdc++-v3/testsuite/20_util/bind/cv_quals.cc
@@ -73897,7 +74300,9 @@ ee7fff5585531689560eedb557305638 libstdc++-v3/testsuite/20_util/function/2.cc
307c4139c7faf88f6ec439864bf20f91 libstdc++-v3/testsuite/20_util/function/43397.cc
02964398dfdcad6da8176e1526337665 libstdc++-v3/testsuite/20_util/function/48541.cc
a615ce3ba22d73faff4275fac7465ab4 libstdc++-v3/testsuite/20_util/function/5.cc
+ba27f2cd719e30c2e28005bc15abd26e libstdc++-v3/testsuite/20_util/function/58569.cc
62dd96c6bfb84ebca312e3a461384a2d libstdc++-v3/testsuite/20_util/function/6.cc
+fabfe76dc30b13e696bbaf0d3da99caf libstdc++-v3/testsuite/20_util/function/60594.cc
47c5a07778ccc81c9b78684d64b5f33f libstdc++-v3/testsuite/20_util/function/7.cc
7460f53b8739df7e03defeb4fcaa3bca libstdc++-v3/testsuite/20_util/function/8.cc
5a2214573b7ce58c3efc64d3513473a4 libstdc++-v3/testsuite/20_util/function/9.cc
@@ -73905,6 +74310,7 @@ a615ce3ba22d73faff4275fac7465ab4 libstdc++-v3/testsuite/20_util/function/5.cc
c842c2f46930dc5ded320923c1f58394 libstdc++-v3/testsuite/20_util/function/assign/move_target.cc
42288f8412fcfbad6cffe50da9e53830 libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc
bafcf21d5a3e714726893ac86680fe8d libstdc++-v3/testsuite/20_util/function/cons/55320.cc
+f382078706cc7468790fdc90beeed55d libstdc++-v3/testsuite/20_util/function/cons/57465.cc
5128dd345b4216d789b6a32f2a2154af libstdc++-v3/testsuite/20_util/function/cons/addressof.cc
3c766f0f03522d0f4f271ab6fca27557 libstdc++-v3/testsuite/20_util/function/cons/callable.cc
6c5bf5f0df6576fbae7fd82ee27fb5e6 libstdc++-v3/testsuite/20_util/function/cons/move.cc
@@ -74159,10 +74565,12 @@ b491fbf0000e793eea23cf62bbf59a93 libstdc++-v3/testsuite/20_util/shared_ptr/cast
58561eda6521361f43d5e7f3eb0eba5b libstdc++-v3/testsuite/20_util/shared_ptr/comparison/dr1401.cc
761f162ce1b8aebf0a43c65d68116264 libstdc++-v3/testsuite/20_util/shared_ptr/comparison/less.cc
6533819891f96bc25c3d6a2b745b6dfc libstdc++-v3/testsuite/20_util/shared_ptr/cons/39405.cc
-a6dfef94e9b45dec9d46ff087f2af1f4 libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820_neg.cc
+da7c62e91c8b2c3d79447b5225e87391 libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820_neg.cc
7c43b70bf9617c706bb4581ad7f4906e libstdc++-v3/testsuite/20_util/shared_ptr/cons/46910.cc
ad6cd2ee5f85327cc42bdf5bf70f7d2a libstdc++-v3/testsuite/20_util/shared_ptr/cons/52924.cc
9c92d171303399b72034241629ee8ff5 libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc
+df158743b33e1c7ad2052ecec6182379 libstdc++-v3/testsuite/20_util/shared_ptr/cons/58659.cc
+98271e19c2d615563c381a55407ee996 libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc
76e899a5e15801fb20b06eaeea96419d libstdc++-v3/testsuite/20_util/shared_ptr/cons/alias.cc
15362ff4aaaacb8940ab49fb91ef6e9a libstdc++-v3/testsuite/20_util/shared_ptr/cons/alloc.cc
b7def0f4b2cc42ac29c552c03af3f451 libstdc++-v3/testsuite/20_util/shared_ptr/cons/alloc_min.cc
@@ -74232,6 +74640,7 @@ d148fe1d46e11e7c047fd278af215e09 libstdc++-v3/testsuite/20_util/time_point_cast
cdc7114f93f7798c2735cfd9d7170f9b libstdc++-v3/testsuite/20_util/tuple/48476.cc
49a827f5cff29387d86547cacbb0200e libstdc++-v3/testsuite/20_util/tuple/51365.cc
a82e3086b35f26eb39bd9e48f5abc76f libstdc++-v3/testsuite/20_util/tuple/53648.cc
+401c76d8c79bc85d2c657405574c9ed1 libstdc++-v3/testsuite/20_util/tuple/60497.cc
9b192570d44f3324cd03fa38abbb1ea4 libstdc++-v3/testsuite/20_util/tuple/comparison_operators/35480_neg.cc
1f53465baf6b39f4badd225e483633f4 libstdc++-v3/testsuite/20_util/tuple/comparison_operators/comparisons.cc
bae5e864ddfdbf7ade6f77f3c3c27d23 libstdc++-v3/testsuite/20_util/tuple/comparison_operators/constexpr.cc
@@ -75452,15 +75861,17 @@ ab1e93aeb444a51b0883858f0a1900ab libstdc++-v3/testsuite/23_containers/map/debug
631a184b6a185a6225fdce35a2c00df4 libstdc++-v3/testsuite/23_containers/map/debug/invalidation/2.cc
c75a8dc2c94953a846796bccdee508b8 libstdc++-v3/testsuite/23_containers/map/debug/iterator_self_move_assign_neg.cc
374b8013d775598edc3343266af53358 libstdc++-v3/testsuite/23_containers/map/debug/self_move_assign_neg.cc
-336c9a57577c404c11aed48edbb408af libstdc++-v3/testsuite/23_containers/map/dr130.cc
deb4094ce8dbbe148d7e8ebb275c8cf8 libstdc++-v3/testsuite/23_containers/map/element_access/1.cc
970af3e02047bc6bf4ad046d247f04e3 libstdc++-v3/testsuite/23_containers/map/element_access/2.cc
a4ac231e9f673f25d2967ec2193ae840 libstdc++-v3/testsuite/23_containers/map/element_access/39901.cc
fe2e209a3ad9d1496b00486adad83cd7 libstdc++-v3/testsuite/23_containers/map/element_access/46148.cc
00cdbe56b0a348be72facaf77799f453 libstdc++-v3/testsuite/23_containers/map/init-list.cc
+336c9a57577c404c11aed48edbb408af libstdc++-v3/testsuite/23_containers/map/modifiers/dr130.cc
95cb0b8ff75e41f7e655360606163a07 libstdc++-v3/testsuite/23_containers/map/modifiers/emplace/1.cc
89ccab7779eb949a3a3f74cef68634c1 libstdc++-v3/testsuite/23_containers/map/modifiers/erase/47628.cc
068708f4d4a8b05973116215787aca24 libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc
+c42b9ea56698d78fb1c55259ca03daf2 libstdc++-v3/testsuite/23_containers/map/modifiers/erase/abi_tag.cc
+7fd0cc91b40a0aa7eee063946ba0ad75 libstdc++-v3/testsuite/23_containers/map/modifiers/erase/dr130-linkage-check.cc
c33f1e66a02ff42085b1b804b329d4d7 libstdc++-v3/testsuite/23_containers/map/modifiers/insert/1.cc
7b5699fb6943d4b91df9840da31079ca libstdc++-v3/testsuite/23_containers/map/modifiers/insert/16813.cc
2405145b215aac67b8f3292ab2ccaaf8 libstdc++-v3/testsuite/23_containers/map/modifiers/insert/2.cc
@@ -75508,11 +75919,13 @@ aaccd5922d3c6ae2fc8f02a2fe4f1a92 libstdc++-v3/testsuite/23_containers/multimap/
27012c68c419408aaf34eb85eddc7778 libstdc++-v3/testsuite/23_containers/multimap/debug/invalidation/2.cc
555db94f680ac733ceb0ab3f7294c28f libstdc++-v3/testsuite/23_containers/multimap/debug/iterator_self_move_assign_neg.cc
0d7155a9daba232f4fc29695aba36cea libstdc++-v3/testsuite/23_containers/multimap/debug/self_move_assign_neg.cc
-a9d55bc3279c7dd900c281eebe658038 libstdc++-v3/testsuite/23_containers/multimap/dr130.cc
ff47ad224d6e02f07d88b3a59f498504 libstdc++-v3/testsuite/23_containers/multimap/init-list.cc
+a9d55bc3279c7dd900c281eebe658038 libstdc++-v3/testsuite/23_containers/multimap/modifiers/dr130.cc
ef7ee1aa03628ccaae18d724f725159a libstdc++-v3/testsuite/23_containers/multimap/modifiers/emplace/1.cc
19e9d94193d9bbdc5d12bd3234240a3f libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/47628.cc
70144cca9a5ee371758dc8aa6f3c23a0 libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc
+491c53df74fe54c9b03d5ab77104aa8a libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/abi_tag.cc
+881b6979627af31680085bb2a593499f libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/dr130-linkage-check.cc
f5802ceb8f1ee266150ed222abf1c82d libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/1.cc
fe280684759ea5dc53287e2afe948556 libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/2.cc
e002e83c1070397411920fab1334a805 libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/22102.cc
@@ -75554,10 +75967,12 @@ bce271af583ada3073f8f08bb25f25d6 libstdc++-v3/testsuite/23_containers/multiset/
ae3f282b1bdc69304dcccab2f9cc5885 libstdc++-v3/testsuite/23_containers/multiset/debug/invalidation/2.cc
d6c8664f0cbafd6dca296aba3dbb9612 libstdc++-v3/testsuite/23_containers/multiset/debug/iterator_self_move_assign_neg.cc
2024f422d614f5345e24a6903344c939 libstdc++-v3/testsuite/23_containers/multiset/debug/self_move_assign_neg.cc
-28033f5af4e0e0afe574c9cabe596067 libstdc++-v3/testsuite/23_containers/multiset/dr130.cc
27bf4bd73ac999e75876049d8fe1d7eb libstdc++-v3/testsuite/23_containers/multiset/init-list.cc
+28033f5af4e0e0afe574c9cabe596067 libstdc++-v3/testsuite/23_containers/multiset/modifiers/dr130.cc
b695deb9f17aa5759ba837ee18c37828 libstdc++-v3/testsuite/23_containers/multiset/modifiers/emplace/1.cc
b03df1033f244af33867f808aa63aca5 libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc
+73d0415e053ce81abec17f25184ba89d libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/abi_tag.cc
+fc1bb6832d18596936ef6fea85ac1d6b libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/dr130-linkage-check.cc
66a1a1e3fa60b892c584d50e0ae2547f libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/1.cc
1270efbf86c4bdbdd9f94dcb3d68ab98 libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/2.cc
7eac8b37d29ce8173a2b48b3023fec7c libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/22102.cc
@@ -75611,12 +76026,14 @@ adb9cc54b856ffae47fdabd794d1a809 libstdc++-v3/testsuite/23_containers/set/debug
ed28fd4721d778384d2ec0d0f69dec60 libstdc++-v3/testsuite/23_containers/set/debug/invalidation/2.cc
fc4326c5119cc590560dba91d3d3ee80 libstdc++-v3/testsuite/23_containers/set/debug/iterator_self_move_assign_neg.cc
55f89f66718ad8f4ac29c6eafdbe6aa2 libstdc++-v3/testsuite/23_containers/set/debug/self_move_assign_neg.cc
-ded58fb46169027fade43b6a81e9a8d3 libstdc++-v3/testsuite/23_containers/set/dr130.cc
9d597c5cbca80769288243b5c02d6ece libstdc++-v3/testsuite/23_containers/set/init-list.cc
20866b3b8c9386b0d02eda02696f68d2 libstdc++-v3/testsuite/23_containers/set/modifiers/16728.cc
42801eae472c3c7f74eaacc332c7d709 libstdc++-v3/testsuite/23_containers/set/modifiers/17948.cc
+ded58fb46169027fade43b6a81e9a8d3 libstdc++-v3/testsuite/23_containers/set/modifiers/dr130.cc
835ee03eb9567d71682228e70bae8801 libstdc++-v3/testsuite/23_containers/set/modifiers/emplace/1.cc
90a34e5010763c65cf003d44d76f2fb5 libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc
+1a3bc792ac59998280d565f03e700a52 libstdc++-v3/testsuite/23_containers/set/modifiers/erase/abi_tag.cc
+f1e8b9821b9ead68263f74c580c3ae95 libstdc++-v3/testsuite/23_containers/set/modifiers/erase/dr130-linkage-check.cc
57a358133bf5625996430c4d2d942a6a libstdc++-v3/testsuite/23_containers/set/modifiers/insert/1.cc
cbee2638b7a0a59a01dad5c242c7e3af libstdc++-v3/testsuite/23_containers/set/modifiers/insert/2.cc
df8a7228390c553304ea06c448a353c5 libstdc++-v3/testsuite/23_containers/set/modifiers/insert/3.cc
@@ -75645,6 +76062,7 @@ d09a62c26dc0779e21b31257739e6c63 libstdc++-v3/testsuite/23_containers/stack/req
1025afe06401dd50425f033567fa9bc4 libstdc++-v3/testsuite/23_containers/stack/requirements/explicit_instantiation/1_c++0x.cc
fbf2e3cb8ac3c9ea4fbd73596309ecf5 libstdc++-v3/testsuite/23_containers/stack/requirements/typedefs.cc
45ad75f0c87e1ff78e671c639c77a963 libstdc++-v3/testsuite/23_containers/unordered_map/55043.cc
+548260d15528d44b3401793de8bce6a9 libstdc++-v3/testsuite/23_containers/unordered_map/59548.cc
a496ca4379e01d0c5b00c96ca9c4585d libstdc++-v3/testsuite/23_containers/unordered_map/cons/56112.cc
06d77592e952c5a31caa84795602ddc5 libstdc++-v3/testsuite/23_containers/unordered_map/cons/moveable.cc
bb0e175e4b0ae9f96e1c65170d1764fd libstdc++-v3/testsuite/23_containers/unordered_map/debug/begin1_neg.cc
@@ -75679,6 +76097,7 @@ c144c3a6fcd62b77703b4bf5aa2c9c66 libstdc++-v3/testsuite/23_containers/unordered
ea57e9e88798af4335a7095d06bd3e72 libstdc++-v3/testsuite/23_containers/unordered_map/hash_policy/dr1189.cc
b910a33060c236c6fdc1d8c0b7f14069 libstdc++-v3/testsuite/23_containers/unordered_map/init-list.cc
7aaf3ddb432fef05283921b3a70f2b6e libstdc++-v3/testsuite/23_containers/unordered_map/insert/24061-map.cc
+269c89ec19ceff42da82c23856d6ad04 libstdc++-v3/testsuite/23_containers/unordered_map/insert/57619.C
b4bc8586a6b4788ffe80adc48c13b122 libstdc++-v3/testsuite/23_containers/unordered_map/insert/array_syntax.cc
fac8fa663db6dbe4eb4c62126b9f0e1c libstdc++-v3/testsuite/23_containers/unordered_map/insert/array_syntax_move.cc
e0e470a0573ce782c0ea65185ebd60ba libstdc++-v3/testsuite/23_containers/unordered_map/insert/map_range.cc
@@ -75749,6 +76168,7 @@ a2ea54d689692904dba2e980b8ffc397 libstdc++-v3/testsuite/23_containers/unordered
9229c9434f4b18e8b660c59ae850014b libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/52476.cc
867f8f710b61fcab80660401ba80a4af libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/53115.cc
84778c2c3ca257ffe1ce6d255db115fe libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/55028-debug.cc
+d78535d6ae5951625bf246b75f5706dc libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/57619.C
45f5c07d1561f22c55f73db8e4284cc1 libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/multimap_range.cc
424045615bffdc63c3b3e2ddfea5a112 libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/multimap_single.cc
9240b89a794756e93838a29194ed646d libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/multimap_single_move-1.cc
@@ -75773,7 +76193,7 @@ d7208a495de5030df515b7b7cc85b9cd libstdc++-v3/testsuite/23_containers/unordered
0aecbb7b91d6c07d6d6124d48733be69 libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/4.cc
016ee4b86832bf445aba7e250f5881ce libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/5.cc
0be36cd106b3d1409e083a9f016526ee libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/typedefs.cc
-1585ecbd7967b9f6068c57176f478033 libstdc++-v3/testsuite/23_containers/unordered_multiset/55043.cc
+a063c5f22ec11cc1d142e8a905a9143a libstdc++-v3/testsuite/23_containers/unordered_multiset/55043.cc
c907a1efcf172d9be60e198419014567 libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/copy.cc
1e1630d508f121deec00df2e37269af9 libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/moveable.cc
cb7c5e1d4d1c3dab5531952504f3ab10 libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/begin1_neg.cc
@@ -75910,7 +76330,8 @@ a9d0c8b30e0133add4f2092841d925d8 libstdc++-v3/testsuite/23_containers/vector/52
1ce798d7efa745bf45e94f69ad3ee2c5 libstdc++-v3/testsuite/23_containers/vector/allocator/copy.cc
14a65a62d9f506a8ed888dbb3e6bf69a libstdc++-v3/testsuite/23_containers/vector/allocator/copy_assign.cc
4a94f9b99f794ed96521b64bf01ada3a libstdc++-v3/testsuite/23_containers/vector/allocator/minimal.cc
-35c200b3d7d37015e5ec51d8ab8bfdff libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc
+69c3b11722245e4a4a2cd861a720fb80 libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc
+871e4088b52fb7e3e7e2817fea1bad8f libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc
854b953c080285e46da1cec4bebbc91f libstdc++-v3/testsuite/23_containers/vector/allocator/noexcept.cc
601959f6fda2dbdbf624b5f69f69877a libstdc++-v3/testsuite/23_containers/vector/allocator/swap.cc
701e4e374a75ab89b990989223598b1f libstdc++-v3/testsuite/23_containers/vector/bool/1.cc
@@ -76321,6 +76742,7 @@ fa4852b0f62caeaf767a959d91bc9f78 libstdc++-v3/testsuite/25_algorithms/none_of/r
94701544521f25f19cbf756495b49646 libstdc++-v3/testsuite/25_algorithms/nth_element/1.cc
0ad72867f6af21d21ee7ded77c657805 libstdc++-v3/testsuite/25_algorithms/nth_element/2.cc
80e493aa836b0b8882ae18a1ec8631f8 libstdc++-v3/testsuite/25_algorithms/nth_element/3.cc
+3941e2f44f7295ffaf9d8e0da8da86fe libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc
2763203388cc5a3c472d3ff5ae8090a7 libstdc++-v3/testsuite/25_algorithms/nth_element/check_type.cc
9e12f62e94d151fe388665ca872e6c6a libstdc++-v3/testsuite/25_algorithms/nth_element/moveable.cc
69043c7120213f64356787387e0cde13 libstdc++-v3/testsuite/25_algorithms/nth_element/requirements/explicit_instantiation/2.cc
@@ -76415,8 +76837,9 @@ ea083cfb40ca6ef7e6311c6b4572529f libstdc++-v3/testsuite/25_algorithms/search/1.
311fca88a20f0360c64eff81bee04559 libstdc++-v3/testsuite/25_algorithms/search/requirements/explicit_instantiation/2.cc
fdce0b1f4b0bb0f593279c54e95f9b35 libstdc++-v3/testsuite/25_algorithms/search/requirements/explicit_instantiation/pod.cc
9231c853d27ef29c23bcb79c9c05cb44 libstdc++-v3/testsuite/25_algorithms/search_n/11400.cc
+8ba6366c2b9cf1bd223c90bcd1dcab02 libstdc++-v3/testsuite/25_algorithms/search_n/58358.cc
763ea21b6803a3f1d5335d935e07fbc4 libstdc++-v3/testsuite/25_algorithms/search_n/check_type.cc
-b99a756531ceed6ea5b7c45c35e14e19 libstdc++-v3/testsuite/25_algorithms/search_n/iterator.cc
+31f389ddfa97904a41b3154bf06a93b8 libstdc++-v3/testsuite/25_algorithms/search_n/iterator.cc
9ce084e02f3d7c39f00cd217c1a20757 libstdc++-v3/testsuite/25_algorithms/search_n/requirements/explicit_instantiation/2.cc
c7f576275994aa963bb50cff37f8acb6 libstdc++-v3/testsuite/25_algorithms/search_n/requirements/explicit_instantiation/pod.cc
536a29a10b797909340a97c34f15ec54 libstdc++-v3/testsuite/25_algorithms/set_difference/1.cc
@@ -76588,11 +77011,11 @@ ebb8e41c348aa6fe52de6d450d5a9557 libstdc++-v3/testsuite/26_numerics/random/bino
783f4861501a8530fb7751302ccab531 libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/equal.cc
c71aa49d20403ff7a8368b4064f18390 libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/inequal.cc
ca8f7e1c274b831bcc18346135643229 libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/serialize.cc
-2a792034f7ecc8216c57fbe9fb25a449 libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values.cc
+22b1a76359b9b7de668d73ad36a25c7d libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values.cc
e09e91c324eb8a6f48a65a10b2470790 libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/explicit_instantiation/1.cc
fcf079f49f12dffe037be0170eaf1922 libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/typedefs.cc
-2b830cc486bb426e0371c17d55c8662e libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/cons/default.cc
-55935be4d06810d9768db9631b94cf46 libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/cons/parms.cc
+44aeb6a1d79c9a3a1ea1922d8f5e43ec libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/cons/default.cc
+da4c3136113d14bd9096c0aaac125a02 libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/cons/parms.cc
d227c535998599335d684bb5e7dc13e4 libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/operators/equal.cc
6b70aa2686c653b0d8478ebb713ae690 libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/operators/inequal.cc
06b5f5a2517eadcf4dfc02e0b1f0131f libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/operators/serialize.cc
@@ -76631,15 +77054,15 @@ fc988edadf1a5bc15d472efd9aeb8796 libstdc++-v3/testsuite/26_numerics/random/disc
bb9194388fdb49c6d66475ad41506afd libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/values.cc
6a0e2dd6ed04b12c24ff4708694e876b libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/explicit_instantiation/1.cc
c21f9bccc31626e6dcedfad6b14f3445 libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/typedefs.cc
-c526fd3ec37e655bc48f0945b8e94453 libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/cons/default.cc
-c1a19b31ed1d11359aeee9eee2160538 libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/cons/parms.cc
+6da543ec2da178d39930e55578f4a978 libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/cons/default.cc
+a43dfd3594a3bdbd1d440400c3943fe9 libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/cons/parms.cc
ebe4cd4c3fc8ef5ff7b8f1febdd3fe3a libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/operators/equal.cc
18c291ce479e6e49701f58c824919e3c libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/operators/inequal.cc
5c4f65d53d7e175ea2492df2d0a8b8d0 libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/operators/serialize.cc
7342d26a9e402a71235f357e4e6bb6c2 libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/explicit_instantiation/1.cc
8dfe07cb6469021697d397105de21765 libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/typedefs.cc
-da27bef36cb11a1e31116d3b2ad0078e libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/cons/default.cc
-35d74750023e81a6392648a89901dce6 libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/cons/parms.cc
+668991224de7a5aa6039aaca2bf58f24 libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/cons/default.cc
+62e28f425e308c50ccc6784286dfe2ee libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/cons/parms.cc
e3a9b18b872e895a9cfb7dfef41946fe libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/operators/equal.cc
af3edab3c07ef670372dc75ffe0ab1ae libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/operators/inequal.cc
d8ce0dbe24fe909187ba496b90e7444b libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/operators/serialize.cc
@@ -76722,14 +77145,15 @@ ced2cf4faf300b742d549539de7ffe14 libstdc++-v3/testsuite/26_numerics/random/mins
01668f05f55a9eef037fdbe8ca50fd26 libstdc++-v3/testsuite/26_numerics/random/mt19937_64.cc
0f7025d1860d9fc053b3dc2d93845dd1 libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/cons/default.cc
e864bc0f8b70e7653eed08650d2368fe libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/cons/parms.cc
+c9d379364d7bcd3229fa3d6ce4120758 libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/58302.cc
04e7c9af2e99dc236c4ee84f61922adf libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/equal.cc
39d5e7932612220593d7e07b7b5897d7 libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/inequal.cc
61b40d105e25a36d0e3a77fbdd05ab68 libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/serialize.cc
ad5deffad472cf4646750eda3ab7532f libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/values.cc
97a82a3d8926ec03665c599388fba701 libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/explicit_instantiation/1.cc
8b6404b09255a85106c157c39063725f libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/typedefs.cc
-dc49d3fea4bc6d9bb17ae48ee9dd4480 libstdc++-v3/testsuite/26_numerics/random/normal_distribution/cons/default.cc
-2ac73914f4db47bfb31d461bf3c1af6d libstdc++-v3/testsuite/26_numerics/random/normal_distribution/cons/parms.cc
+601526890f3a31f1839ed1991add7ae1 libstdc++-v3/testsuite/26_numerics/random/normal_distribution/cons/default.cc
+d67325275acefe3d1dd5bc490daf2d01 libstdc++-v3/testsuite/26_numerics/random/normal_distribution/cons/parms.cc
a3fab3bd19288557ba6174795e085884 libstdc++-v3/testsuite/26_numerics/random/normal_distribution/operators/equal.cc
01580121858a71bdd04a677b501d6c26 libstdc++-v3/testsuite/26_numerics/random/normal_distribution/operators/inequal.cc
1630f8e92b1fca3e74adc50ef74cb0b7 libstdc++-v3/testsuite/26_numerics/random/normal_distribution/operators/serialize.cc
@@ -76789,8 +77213,8 @@ e682392e917becc92d771a2318972be2 libstdc++-v3/testsuite/26_numerics/random/shuf
8da751c07a87630b6ef826dd5ef3efcf libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/constexpr_data.cc
35d2b6887f0931baf48cc92a2da0cd01 libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/constexpr_functions.cc
9cfb97c0f229477afdf4fa85c7624fe9 libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/typedefs.cc
-07fa4989f4b0ef6b1c8f0ae22ee42600 libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/cons/default.cc
-b5796460086d0846767692fc20b1f429 libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/cons/parms.cc
+c89ff4dbb6a51c04e2736e1855d7b5ad libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/cons/default.cc
+a4662fe590e1bad2bb6a3a9e3529a5a9 libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/cons/parms.cc
27535f5478a172708544b30dcde208ce libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/operators/equal.cc
1ca0aa168f2e52afd3b1d9d284573467 libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/operators/inequal.cc
ff21290acc7c5f9b28dca1367639342f libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/operators/serialize.cc
@@ -76846,6 +77270,7 @@ bb01ae0813275e38c20101fdd75728f3 libstdc++-v3/testsuite/26_numerics/valarray/30
592655569ae79aaf00802200e9070b9e libstdc++-v3/testsuite/26_numerics/valarray/dr543.cc
1d2fc52d60b09e263e2df15a4add633a libstdc++-v3/testsuite/26_numerics/valarray/dr630-1.cc
a0af430cabde5f2c341fff0266d8772e libstdc++-v3/testsuite/26_numerics/valarray/dr630-2.cc
+f14a05986437362cd2aeda959935dc8e libstdc++-v3/testsuite/26_numerics/valarray/dr630-3.C
f1fd97c2f14213b8aad1230fa816dad0 libstdc++-v3/testsuite/26_numerics/valarray/init-list.cc
ac66459e8981047a83f5f0e32c51731a libstdc++-v3/testsuite/26_numerics/valarray/moveable.cc
4d1d792cc2627052cd72cee05a03d5d3 libstdc++-v3/testsuite/26_numerics/valarray/name_lookup.cc
@@ -77816,6 +78241,7 @@ a2489970722a22f3e28e3131d2a21798 libstdc++-v3/testsuite/28_regex/traits/wchar_t
2467f309aeef1530f9bd33f291221776 libstdc++-v3/testsuite/28_regex/traits/wchar_t/translate.cc
822ebb91184943939ad64a631835012f libstdc++-v3/testsuite/28_regex/traits/wchar_t/translate_nocase.cc
fbb77293a8721daa3b62f37235c457b3 libstdc++-v3/testsuite/28_regex/traits/wchar_t/value.cc
+31003cd95731250071529ac38951d824 libstdc++-v3/testsuite/29_atomics/atomic/60658.cc
b4759d53489c75b8a25b0a80ced57532 libstdc++-v3/testsuite/29_atomics/atomic/cons/49445.cc
9692fe068ab1c6fd6729e6ae713fe20d libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
6e4bf801e3f83162ddf2b024c20094b2 libstdc++-v3/testsuite/29_atomics/atomic/cons/constexpr.cc
@@ -77878,7 +78304,7 @@ a72e03912ac851cd6e4acbe73ce52f79 libstdc++-v3/testsuite/30_threads/call_once/49
7d509e114e326ea32c429dd598a3f3f0 libstdc++-v3/testsuite/30_threads/call_once/call_once1.cc
41848f452333c4b9889b1801a29fbdab libstdc++-v3/testsuite/30_threads/call_once/constexpr.cc
edd2811292fe501ccdbc822da17da64f libstdc++-v3/testsuite/30_threads/call_once/once_flag.cc
-6d7522c577513249b569c8592d8648a2 libstdc++-v3/testsuite/30_threads/condition_variable/54185.cc
+3e69db7d9836bdc7f8c441936e94f7ff libstdc++-v3/testsuite/30_threads/condition_variable/54185.cc
24a87bff208d56d114987e8a1f0a2ebe libstdc++-v3/testsuite/30_threads/condition_variable/cons/1.cc
0b2af80b32716d7a7f8dad3dd9ad8138 libstdc++-v3/testsuite/30_threads/condition_variable/cons/assign_neg.cc
283290d4149fb723be137a3fcb2da402 libstdc++-v3/testsuite/30_threads/condition_variable/cons/copy_neg.cc
@@ -77940,6 +78366,7 @@ d7a4556e4aff19fb84800b034c57fa5f libstdc++-v3/testsuite/30_threads/mutex/try_lo
93a129242c4694a379227195213bebf7 libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc
7e870c923ef8daff1ea9bee68a06ab90 libstdc++-v3/testsuite/30_threads/once_flag/cons/constexpr.cc
35c942441f4f01eea1aa3dc763578b2c libstdc++-v3/testsuite/30_threads/packaged_task/49668.cc
+9cee980f8a67bcaf4cee3efadaac61dd libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc
c0b1d22d8093e8275451e4284dca1119 libstdc++-v3/testsuite/30_threads/packaged_task/cons/1.cc
755e33c5f23ac69fb87a5c2cbc6e0a36 libstdc++-v3/testsuite/30_threads/packaged_task/cons/2.cc
fb8ee3ea8c65fa74fbb2e8f4a73085b8 libstdc++-v3/testsuite/30_threads/packaged_task/cons/3.cc
@@ -78070,6 +78497,7 @@ b3381aeb781a9573e998b9cbe722b21d libstdc++-v3/testsuite/30_threads/timed_mutex/
0a8326501adeab5e7dbc563b3f11127f libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/3.cc
d729e2ad9742d40d3a6c129d3b706792 libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/1.cc
84c0ad700f327252f046d5e81c9b87fd libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/2.cc
+97b8d7e58e65c886dc9c395c70b83877 libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/57641.cc
b1c326ff67242d0ac5e31ae65234029a libstdc++-v3/testsuite/30_threads/timed_mutex/unlock/1.cc
9947e1e496acd27613b6976e29972a72 libstdc++-v3/testsuite/30_threads/try_lock/1.cc
177c6e16195dfb3212fe9f88a95f3818 libstdc++-v3/testsuite/30_threads/try_lock/2.cc
@@ -78393,7 +78821,7 @@ a7080ed4535b0fb4daac0945f9cab0db libstdc++-v3/testsuite/ext/pool_allocator/expl
da95306eba80f7c3a94efd3ab940fae3 libstdc++-v3/testsuite/ext/pool_allocator/variadic_construct.cc
449345468bd44b868ad36c0f1586da15 libstdc++-v3/testsuite/ext/profile/all.cc
c6e4f2df3265dbc54f9dff7feb16a9f1 libstdc++-v3/testsuite/ext/profile/mh.cc
-6a03df517054b555f028b504e087850d libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc
+3b6a6a0cc72a879b74062144b450c0c9 libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc
25e7b1ec221dcb990a4b7c90f5a0c0eb libstdc++-v3/testsuite/ext/profile/profiler_algos.cc
7c775309398d3bacc7f4d6484908c8bc libstdc++-v3/testsuite/ext/random/arcsine_distribution/cons/default.cc
db3882112dbc630d1b7f4decf95fd194 libstdc++-v3/testsuite/ext/random/arcsine_distribution/cons/parms.cc
@@ -78430,8 +78858,8 @@ ba07ed7e4b6be563786243460ce5f85f libstdc++-v3/testsuite/ext/random/nakagami_dis
c01ad9ee65c71390cee1196a64b1390d libstdc++-v3/testsuite/ext/random/nakagami_distribution/operators/serialize.cc
b63f4535c8fb715ebb8971c20859e27c libstdc++-v3/testsuite/ext/random/nakagami_distribution/requirements/explicit_instantiation/1.cc
a9ca701e8c9aab9e3336d7730c2c9a0c libstdc++-v3/testsuite/ext/random/nakagami_distribution/requirements/typedefs.cc
-50a84224ffcf7296074ea1368654db74 libstdc++-v3/testsuite/ext/random/normal_mv_distribution/cons/default.cc
-5af2679b485a25a335063cc5c907015c libstdc++-v3/testsuite/ext/random/normal_mv_distribution/cons/parms.cc
+8609a39fe66d4336bc10f8bf8d544306 libstdc++-v3/testsuite/ext/random/normal_mv_distribution/cons/default.cc
+3a953d4a7f1493c5971a67d9bef99a55 libstdc++-v3/testsuite/ext/random/normal_mv_distribution/cons/parms.cc
afd7a5c05aeecbf3be44dd12f71f20f2 libstdc++-v3/testsuite/ext/random/normal_mv_distribution/operators/equal.cc
72b3485a951487d6c6d409bc80f866ad libstdc++-v3/testsuite/ext/random/normal_mv_distribution/operators/inequal.cc
f970014797d53adfd071278673d96807 libstdc++-v3/testsuite/ext/random/normal_mv_distribution/operators/serialize.cc
@@ -78459,6 +78887,20 @@ fa18f67dac08bcbec918bf714cb8fe84 libstdc++-v3/testsuite/ext/random/simd_fast_me
8a90d0a4ee08673b922accee74ee1f29 libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/operators/equal.cc
01b81068ceb82fae1f804c673b6f0e0e libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/operators/inequal.cc
0cc6bd16f17939bf9ad877308348ab9b libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/operators/serialize.cc
+539e52b156799b01bf24eee454abc462 libstdc++-v3/testsuite/ext/random/triangular_distribution/cons/default.cc
+e4d19199fd682991e6844023bfa8ad16 libstdc++-v3/testsuite/ext/random/triangular_distribution/cons/parms.cc
+f38cb5dcb792b92a4de3687f1c37c6fe libstdc++-v3/testsuite/ext/random/triangular_distribution/operators/equal.cc
+8d7a402854f1a815dea25f479be9c3ed libstdc++-v3/testsuite/ext/random/triangular_distribution/operators/inequal.cc
+40f5f126a6508e9841b08c989984e268 libstdc++-v3/testsuite/ext/random/triangular_distribution/operators/serialize.cc
+0de84461380901819ceebcf12dc8e969 libstdc++-v3/testsuite/ext/random/triangular_distribution/requirements/explicit_instantiation/1.cc
+699d4f181acba70af0a5e438d5d45850 libstdc++-v3/testsuite/ext/random/triangular_distribution/requirements/typedefs.cc
+fd3648a4c4ba2c619a10f5154ae82162 libstdc++-v3/testsuite/ext/random/von_mises_distribution/cons/default.cc
+efbb1562a34e2795cca0718a3024920c libstdc++-v3/testsuite/ext/random/von_mises_distribution/cons/parms.cc
+28ada5e521f01ac5334be5088ef102ea libstdc++-v3/testsuite/ext/random/von_mises_distribution/operators/equal.cc
+b181a10b30fc116040b5701f5e8af436 libstdc++-v3/testsuite/ext/random/von_mises_distribution/operators/inequal.cc
+8d2a91c8edff4efa7fdd4b260c38f6b3 libstdc++-v3/testsuite/ext/random/von_mises_distribution/operators/serialize.cc
+ebcfaaa10f106567378cd631fd92d908 libstdc++-v3/testsuite/ext/random/von_mises_distribution/requirements/explicit_instantiation/1.cc
+78c2117a5c80289d013019588a2e25ad libstdc++-v3/testsuite/ext/random/von_mises_distribution/requirements/typedefs.cc
3d6b3b7b5c2769f1b693a8598e8675c4 libstdc++-v3/testsuite/ext/rope/1.cc
ff75269b343d110f9ff811651e91bb2a libstdc++-v3/testsuite/ext/rope/2.cc
8b1ae967b4aa3794f9927870670ae0d0 libstdc++-v3/testsuite/ext/rope/3.cc
@@ -78499,29 +78941,17 @@ cc1c2add1dfaf7ab8c37cb707fe2830d libstdc++-v3/testsuite/ext/throw_allocator/dea
e37856ce9f7935440851ac651adc790e libstdc++-v3/testsuite/ext/throw_allocator/explicit_instantiation.cc
e6199ee6464f6221db119b3d05d642fe libstdc++-v3/testsuite/ext/throw_allocator/variadic_construct.cc
444ebcd74cc8b9e60c121c897b3464bb libstdc++-v3/testsuite/ext/throw_value/cons.cc
-539e52b156799b01bf24eee454abc462 libstdc++-v3/testsuite/ext/triangular_distribution/cons/default.cc
-e4d19199fd682991e6844023bfa8ad16 libstdc++-v3/testsuite/ext/triangular_distribution/cons/parms.cc
-f38cb5dcb792b92a4de3687f1c37c6fe libstdc++-v3/testsuite/ext/triangular_distribution/operators/equal.cc
-8d7a402854f1a815dea25f479be9c3ed libstdc++-v3/testsuite/ext/triangular_distribution/operators/inequal.cc
-40f5f126a6508e9841b08c989984e268 libstdc++-v3/testsuite/ext/triangular_distribution/operators/serialize.cc
-0de84461380901819ceebcf12dc8e969 libstdc++-v3/testsuite/ext/triangular_distribution/requirements/explicit_instantiation/1.cc
-699d4f181acba70af0a5e438d5d45850 libstdc++-v3/testsuite/ext/triangular_distribution/requirements/typedefs.cc
9d41eb5343249cd5865c1877fd61fefc libstdc++-v3/testsuite/ext/type_traits/add_unsigned.cc
81092b25a86e9d9180ffb34479c70790 libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc
82333792ef6bfe457c6eaa909fdcc2a0 libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
ed0996e869124ea2a211c9073dd0e063 libstdc++-v3/testsuite/ext/type_traits/remove_unsigned.cc
00a1cf195f9b54e0be60c102c7f3e944 libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc
e4237ec5c78e83e0e22a7117c7235948 libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
-fd3648a4c4ba2c619a10f5154ae82162 libstdc++-v3/testsuite/ext/von_mises_distribution/cons/default.cc
-efbb1562a34e2795cca0718a3024920c libstdc++-v3/testsuite/ext/von_mises_distribution/cons/parms.cc
-28ada5e521f01ac5334be5088ef102ea libstdc++-v3/testsuite/ext/von_mises_distribution/operators/equal.cc
-b181a10b30fc116040b5701f5e8af436 libstdc++-v3/testsuite/ext/von_mises_distribution/operators/inequal.cc
-8d2a91c8edff4efa7fdd4b260c38f6b3 libstdc++-v3/testsuite/ext/von_mises_distribution/operators/serialize.cc
-ebcfaaa10f106567378cd631fd92d908 libstdc++-v3/testsuite/ext/von_mises_distribution/requirements/explicit_instantiation/1.cc
-78c2117a5c80289d013019588a2e25ad libstdc++-v3/testsuite/ext/von_mises_distribution/requirements/typedefs.cc
1e92c9a4b978aa362db31f8addd7e8ba libstdc++-v3/testsuite/ext/vstring/assign/move_assign.cc
a5c4fc68e464a148e94336d863d93efd libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc
0f63d02af15bcdb69e2d3611c1571253 libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc
+6ed9e91ee2ecd0b6958715cd55e746d8 libstdc++-v3/testsuite/ext/vstring/cons/58415-1.cc
+9929033a84deb575a1ccd7573fa8f2fe libstdc++-v3/testsuite/ext/vstring/cons/58415-2.cc
4314d04bb85d8b91851b34b0290ed03c libstdc++-v3/testsuite/ext/vstring/cons/moveable.cc
049a0ce3e9b6c8e0519d3103d56b2a8d libstdc++-v3/testsuite/ext/vstring/cons/noexcept_move_construct.cc
dd1619854350d7ff9ac5464de3deabcd libstdc++-v3/testsuite/ext/vstring/element_access/char/front_back.cc
@@ -78552,7 +78982,7 @@ c83620faf68602950e99333338d3ed8a libstdc++-v3/testsuite/ext/vstring/requirement
f75f5b5222d36160db05ddf8bcc63fa5 libstdc++-v3/testsuite/ext/vstring/types/23767.cc
3cdc7b25eea6a0e7ab788dd2a0e77276 libstdc++-v3/testsuite/lib/dg-options.exp
2de7cab794020b112f8ba9d1e9feee21 libstdc++-v3/testsuite/lib/gdb-test.exp
-414655c743530c0d016e21345aeb157b libstdc++-v3/testsuite/lib/libstdc++.exp
+c6dd50e2ec9b90d56edf56968137de81 libstdc++-v3/testsuite/lib/libstdc++.exp
24da12a7ea72e2fe7bc25f705a988132 libstdc++-v3/testsuite/lib/prune.exp
282116ece0a61e7c6bf83e16c73457d9 libstdc++-v3/testsuite/libstdc++-abi/abi.exp
9220792cfeef6042ba22d71bc5a21af3 libstdc++-v3/testsuite/libstdc++-dg/conformance.exp
@@ -78605,6 +79035,9 @@ aa99e264ce0cf2f5fa6d5d48a8274724 libstdc++-v3/testsuite/performance/25_algorith
21deb781394b7c6e94bfbc4d26f89d56 libstdc++-v3/testsuite/performance/25_algorithms/lexicographical_compare.cc
e71529fa2e6332324cf117d0dfbbaf4b libstdc++-v3/testsuite/performance/25_algorithms/nth_element_worst_case.cc
c0188f1520cf0470e454f0fb5af94635 libstdc++-v3/testsuite/performance/25_algorithms/search_n.cc
+864aa9e34d780091044cc45586f7144d libstdc++-v3/testsuite/performance/25_algorithms/sort.cc
+885ed66171e4d335347b605c76200a3d libstdc++-v3/testsuite/performance/25_algorithms/sort_heap.cc
+f7cc703b825680038bde13c126fc9906 libstdc++-v3/testsuite/performance/25_algorithms/stable_sort.cc
1088c186bfc7be476cce6a87867874bb libstdc++-v3/testsuite/performance/26_numerics/complex_norm.cc
fe4636f8b3b52093ba5de241e6b59329 libstdc++-v3/testsuite/performance/26_numerics/valarray_gslice_to_index.cc
20c58fddd902d1b92c22e4de15c4b3cc libstdc++-v3/testsuite/performance/27_io/cout_insert_int.cc
@@ -79329,7 +79762,7 @@ a5ad2fe1171969291f6d2ab5a90bd8c6 libstdc++-v3/testsuite/util/testsuite_allocato
7805ffd6e70bed53f868067a6a21bd42 libstdc++-v3/testsuite/util/testsuite_character.h
5c1ddb5d70ba635fed1934cb2a1c8102 libstdc++-v3/testsuite/util/testsuite_common_types.h
33a55b3102965fba6271eefd241169b1 libstdc++-v3/testsuite/util/testsuite_container_traits.h
-310e882c382c577fe75d97cf317b3a0d libstdc++-v3/testsuite/util/testsuite_containers.h
+085376bc1e89ae6dcef132fc1347eb80 libstdc++-v3/testsuite/util/testsuite_containers.h
1f4587425ea646435331b73dba0fddc8 libstdc++-v3/testsuite/util/testsuite_counter_type.h
8456e4f8c2c190d6f32f97f11bd17728 libstdc++-v3/testsuite/util/testsuite_error.h
8e549c4af39f666b616504c16e421210 libstdc++-v3/testsuite/util/testsuite_greedy_ops.h
@@ -79342,19 +79775,19 @@ be9ed82042d100b5f403d1c2e09c0393 libstdc++-v3/testsuite/util/testsuite_performa
e1befc668e27451b0ea0961b99c4e35f libstdc++-v3/testsuite/util/testsuite_regex.h
78cafd1fa0d20e60285e226ac32d9a25 libstdc++-v3/testsuite/util/testsuite_rng.h
8fdca638d48a29e2334f074708f4752c libstdc++-v3/testsuite/util/testsuite_rvalref.h
-3c572789bef84e153a04edf7ef70ccec libstdc++-v3/testsuite/util/testsuite_shared.cc
+8dd481187dbaba64954d5ce460462636 libstdc++-v3/testsuite/util/testsuite_shared.cc
f6d8a34abb130c434f27d5f852def21f libstdc++-v3/testsuite/util/testsuite_tr1.h
3460884b4921151a5b6ae1da2f363bab libstdc++-v3/testsuite/util/thread/all.h
18097d974d6f6a830c12c42592f0006d libtool-ldflags
-a553e7aea8e3f82d003693fd12506721 libtool.m4
+3bb1de19ee64b1073f3d23d9a410b743 libtool.m4
247597a3fcc5b5aa8bd923351c59d853 ltgcc.m4
01d0921596c9fa4d9a7add89fd6fc1f1 ltmain.sh
-71ab1814cb1cea54ccc20862df4b9f13 lto-plugin/ChangeLog
+1dad1d263e95a5f3ffc5491308c4b0c6 lto-plugin/ChangeLog
266147278cdeeab779ac75a4c3e2ee6d lto-plugin/Makefile.am
db5afb8268c8a17e49d078936ef6fdbc lto-plugin/Makefile.in
e0b6c77fa2326a08aa2d7a69e87e0f8c lto-plugin/aclocal.m4
e8d8e3dc8d2e134b03f22c7c567d030c lto-plugin/config.h.in
-b6539347cb10a0d0227da42aec30f415 lto-plugin/configure
+0952db3998dfaeea808bc666c188be02 lto-plugin/configure
829974866508d60d4cd5b6371c4f9a25 lto-plugin/configure.ac
7c09a10f47133982feea824b170de605 lto-plugin/lto-plugin.c
139179f8500d6f092a4f53d8f4da7f5c lto-plugin/lto-symtab.c
@@ -79362,10 +79795,10 @@ dee72a6a60e99528b0d17bf3ff9a1e15 ltoptions.m4
bc2f6032c98896249eadb56177c7d357 ltsugar.m4
c30cd33c496505f13d9fbdb6970c7c33 ltversion.m4
293853a13b7e218e3a4342cf85fbbf25 lt~obsolete.m4
-24155b5c6eca1f0d2900da4f896e3d7e maintainer-scripts/ChangeLog
+c8421f9b9601ff2eb70b3dcd9f5ad2d6 maintainer-scripts/ChangeLog
33c7bc2d2c55956dfac85a05d8a80eff maintainer-scripts/README
6ce6794398c501e0b463ac668dffed27 maintainer-scripts/crontab
-8c8d4248e14c842a3c7f7e8f3bffbb0f maintainer-scripts/gcc_release
+6facef54b1f26f6ee5d58aef536e7c82 maintainer-scripts/gcc_release
33d97164a8610c7abf67eff7d28f47ff maintainer-scripts/maintainer-addresses
6f3ba0484225dd47589714e721cac43b maintainer-scripts/update_version_svn
b931f9e31f3be4f5bcd1abd7912a492c maintainer-scripts/update_web_docs_libstdcxx_svn
@@ -79377,7 +79810,7 @@ f1fff2ea196cbf6fe4634bc3edc5af4d move-if-change
cf2baa0854f564a7785307e79f155efc symlink-tree
69678e72941d681665c3731bfb3044ab ylwrap
ed77bd1cb8611c7e07d54332abbbb44a zlib/CMakeLists.txt
-a1bc84fc5dafedd4a40fd032e1111b83 zlib/ChangeLog
+6abc941a04a8c22fa645341540414654 zlib/ChangeLog
9501e80cadfc03261bf598c295f5b714 zlib/ChangeLog.gcj
b7a1991f01daea3efe108a215c5514a5 zlib/FAQ
3b6b6f9e88f2319b75e6ccb8c2823b13 zlib/INDEX
@@ -79394,7 +79827,7 @@ f16cd4621f5561cf147b5e56a8af1946 zlib/amiga/Makefile.pup
74400ffb0d790dbb7a99a9ae24a05d8e zlib/as400/readme.txt
6e3bd5f73097042db8816d03f9abfdfa zlib/as400/zlib.inc
8f3fcf9b12fddcf9e9ad6203641a17a2 zlib/compress.c
-1325ac5c53c4ffc45258305093c5209d zlib/configure
+e76dd77bf2022d02a51a05c007db1cbf zlib/configure
cba3a5456e32f4b16926c68884076a13 zlib/configure.ac
fe1aa939bc61cde4afc0d1ea23b01ed5 zlib/contrib/README.contrib
cd14a97dd8a0613bb1244a68c0c764d6 zlib/contrib/ada/buffer_demo.adb
diff --git a/gcc-4.8/NEWS b/gcc-4.8/NEWS
index a22612c95..84ff00692 100644
--- a/gcc-4.8/NEWS
+++ b/gcc-4.8/NEWS
@@ -6,23 +6,30 @@ see ONEWS.
======================================================================
http://gcc.gnu.org/gcc-4.8/index.html
+
GCC 4.8 Release Series
- May 31, 2013
+ May 22, 2014
The [1]GNU project and the GCC developers are pleased to announce the
- release of GCC 4.8.1.
+ release of GCC 4.8.3.
This release is a bug-fix release, containing fixes for regressions in
- GCC 4.8.0 relative to previous releases of GCC.
+ GCC 4.8.2 relative to previous releases of GCC.
Release History
+ GCC 4.8.3
+ May 22, 2014 ([2]changes, [3]documentation)
+
+ GCC 4.8.2
+ October 16, 2013 ([4]changes, [5]documentation)
+
GCC 4.8.1
- May 31, 2013 ([2]changes, [3]documentation)
+ May 31, 2013 ([6]changes, [7]documentation)
GCC 4.8.0
- March 22, 2013 ([4]changes, [5]documentation)
+ March 22, 2013 ([8]changes, [9]documentation)
References and Acknowledgements
@@ -30,56 +37,61 @@ References and Acknowledgements
supports several other languages aside from C, it now stands for the
GNU Compiler Collection.
- A list of [6]successful builds is updated as new information becomes
+ A list of [10]successful builds is updated as new information becomes
available.
The GCC developers would like to thank the numerous people that have
contributed new features, improvements, bug fixes, and other changes as
- well as test results to GCC. This [7]amazing group of volunteers is
+ well as test results to GCC. This [11]amazing group of volunteers is
what makes GCC successful.
- For additional information about GCC please refer to the [8]GCC project
- web site or contact the [9]GCC development mailing list.
+ For additional information about GCC please refer to the [12]GCC
+ project web site or contact the [13]GCC development mailing list.
- To obtain GCC please use [10]our mirror sites or [11]our SVN server.
+ To obtain GCC please use [14]our mirror sites or [15]our SVN server.
For questions related to the use of GCC, please consult these web
- pages and the [12]GCC manuals. If that fails, the
- [13]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+ pages and the [16]GCC manuals. If that fails, the
+ [17]gcc-help@gcc.gnu.org mailing list might help. Comments on these
web pages and the development of GCC are welcome on our developer
- list at [14]gcc@gcc.gnu.org. All of [15]our lists have public
+ list at [18]gcc@gcc.gnu.org. All of [19]our lists have public
archives.
- Copyright (C) [16]Free Software Foundation, Inc. Verbatim copying and
+ Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
distribution of this entire article is permitted in any medium,
provided this notice is preserved.
- These pages are [17]maintained by the GCC team. Last modified
- 2013-05-31[18].
+ These pages are [21]maintained by the GCC team. Last modified
+ 2014-05-22[22].
References
1. http://www.gnu.org/
2. http://gcc.gnu.org/gcc-4.8/changes.html
- 3. http://gcc.gnu.org/onlinedocs/4.8.1/
+ 3. http://gcc.gnu.org/onlinedocs/4.8.3/
4. http://gcc.gnu.org/gcc-4.8/changes.html
- 5. http://gcc.gnu.org/onlinedocs/4.8.0/
- 6. http://gcc.gnu.org/gcc-4.8/buildstat.html
- 7. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
- 8. http://gcc.gnu.org/index.html
- 9. mailto:gcc@gcc.gnu.org
- 10. http://gcc.gnu.org/mirrors.html
- 11. http://gcc.gnu.org/svn.html
- 12. http://gcc.gnu.org/onlinedocs/
- 13. mailto:gcc-help@gcc.gnu.org
- 14. mailto:gcc@gcc.gnu.org
- 15. http://gcc.gnu.org/lists.html
- 16. http://www.fsf.org/
- 17. http://gcc.gnu.org/about.html
- 18. http://validator.w3.org/check/referer
+ 5. http://gcc.gnu.org/onlinedocs/4.8.2/
+ 6. http://gcc.gnu.org/gcc-4.8/changes.html
+ 7. http://gcc.gnu.org/onlinedocs/4.8.1/
+ 8. http://gcc.gnu.org/gcc-4.8/changes.html
+ 9. http://gcc.gnu.org/onlinedocs/4.8.0/
+ 10. http://gcc.gnu.org/gcc-4.8/buildstat.html
+ 11. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+ 12. http://gcc.gnu.org/index.html
+ 13. mailto:gcc@gcc.gnu.org
+ 14. http://gcc.gnu.org/mirrors.html
+ 15. http://gcc.gnu.org/svn.html
+ 16. http://gcc.gnu.org/onlinedocs/
+ 17. mailto:gcc-help@gcc.gnu.org
+ 18. mailto:gcc@gcc.gnu.org
+ 19. http://gcc.gnu.org/lists.html
+ 20. http://www.fsf.org/
+ 21. http://gcc.gnu.org/about.html
+ 22. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.8/changes.html
+
GCC 4.8 Release Series
Changes, New Features, and Fixes
@@ -189,11 +201,11 @@ General Optimizer Improvements (and Changes)
* [7]ThreadSanitizer has been added and can be enabled via
-fsanitize=thread. Instructions will be instrumented to detect data
races. The ThreadSanitizer is available on x86-64 GNU/Linux.
- * A new local register allocator has been implemented, which replaces
- the 26 year old reload pass and improves generated code quality.
- For now it is active on the ia32 and x86-64 targets.
+ * A new local register allocator (LRA) has been implemented, which
+ replaces the 26 year old reload pass and improves generated code
+ quality. For now it is active on the IA-32 and x86-64 targets.
* Support for transactional memory has been implemented on the
- following architectures: IA-32/x86-64, ARM, PowerPC, SH, Sparc, and
+ following architectures: IA-32/x86-64, ARM, PowerPC, SH, SPARC, and
Alpha.
New Languages and Language specific improvements
@@ -361,7 +373,7 @@ int i = A().f(); // error, f() requires an lvalue object
* The [21]-Wcompare-reals command-line option has been added. When
this is set, warnings are issued when comparing REAL or COMPLEX
types for equality and inequality; consider replacing a == b by
- abs(a-b) < eps with a suitable eps. -Wcompare-reals is enabled by
+ abs(a -b) < eps with a suitable eps. -Wcompare-reals is enabled by
-Wextra.
* The [22]-Wtarget-lifetime command-line option has been added
(enabled with -Wall), which warns if the pointer in a pointer
@@ -395,6 +407,8 @@ int i = A().f(); // error, f() requires an lvalue object
Go
+ * GCC 4.8.2 provides a complete implementation of the Go 1.1.2
+ release.
* GCC 4.8.0 and 4.8.1 implement a preliminary version of the Go 1.1
release. The library support is not quite complete.
* Go has been tested on GNU/Linux and Solaris platforms for various
@@ -551,7 +565,7 @@ New Targets and Target Specific Improvements
}
Please refer to this [32]wiki for more information.
- * The x86 backend has been improved to allow option -fschedule-insns
+ * The x86 back end has been improved to allow option -fschedule-insns
to work reliably. This option can be used to schedule instructions
better and leads to improved performace in certain cases.
* Windows MinGW-w64 targets (*-w64-mingw*) require at least r5437
@@ -717,12 +731,12 @@ Operating Systems
* Executables are now linked against shared libgcc by default. The
previous default was to link statically, which can still be done by
- explicitly specifying -static or -static-libgcc on the command
- line. However it is strongly advised against, as it will cause
- problems for any application that makes use of DLLs compiled by
- GCC. It should be alright for a monolithic stand-alone application
- that only links against the Windows OS DLLs, but offers little or
- no benefit.
+ explicitly specifying -static or static-libgcc on the command line.
+ However it is strongly advised against, as it will cause problems
+ for any application that makes use of DLLs compiled by GCC. It
+ should be alright for a monolithic stand-alone application that
+ only links against the Windows DLLs, but offers little or no
+ benefit.
GCC 4.8.1
@@ -747,20 +761,37 @@ GCC 4.8.1
libstdc++ configured with the non-default --enable-libstdcxx-time=
configuration option needs to be recompiled.
+GCC 4.8.2
+
+ This is the [34]list of problem reports (PRs) from GCC's bug tracking
+ system that are known to be fixed in the 4.8.2 release. This list might
+ not be complete (that is, it is possible that some PRs that have been
+ fixed are not listed here).
+
+GCC 4.8.3
+
+ This is the [35]list of problem reports (PRs) from GCC's bug tracking
+ system that are known to be fixed in the 4.8.3 release. This list might
+ not be complete (that is, it is possible that some PRs that have been
+ fixed are not listed here).
+
+ Support for the new powerpc64le-linux platform has been added. It
+ defaults to generating code that conforms to the ELFV2 ABI.
+
For questions related to the use of GCC, please consult these web
- pages and the [34]GCC manuals. If that fails, the
- [35]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+ pages and the [36]GCC manuals. If that fails, the
+ [37]gcc-help@gcc.gnu.org mailing list might help. Comments on these
web pages and the development of GCC are welcome on our developer
- list at [36]gcc@gcc.gnu.org. All of [37]our lists have public
+ list at [38]gcc@gcc.gnu.org. All of [39]our lists have public
archives.
- Copyright (C) [38]Free Software Foundation, Inc. Verbatim copying and
+ Copyright (C) [40]Free Software Foundation, Inc. Verbatim copying and
distribution of this entire article is permitted in any medium,
provided this notice is preserved.
- These pages are [39]maintained by the GCC team. Last modified
- 2013-05-31[40].
+ These pages are [41]maintained by the GCC team. Last modified
+ 2014-05-22[42].
References
@@ -797,15 +828,18 @@ References
31. http://gcc.gnu.org/onlinedocs/gcc/X86-Built-in-Functions.html#X86-Built-in-Functions
32. http://gcc.gnu.org/wiki/FunctionMultiVersioning
33. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.1
- 34. http://gcc.gnu.org/onlinedocs/
- 35. mailto:gcc-help@gcc.gnu.org
- 36. mailto:gcc@gcc.gnu.org
- 37. http://gcc.gnu.org/lists.html
- 38. http://www.fsf.org/
- 39. http://gcc.gnu.org/about.html
- 40. http://validator.w3.org/check/referer
+ 34. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.2
+ 35. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.3
+ 36. http://gcc.gnu.org/onlinedocs/
+ 37. mailto:gcc-help@gcc.gnu.org
+ 38. mailto:gcc@gcc.gnu.org
+ 39. http://gcc.gnu.org/lists.html
+ 40. http://www.fsf.org/
+ 41. http://gcc.gnu.org/about.html
+ 42. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.7/index.html
+
GCC 4.7 Release Series
April 11, 2013
@@ -890,6 +924,7 @@ References
22. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.7/changes.html
+
GCC 4.7 Release Series
Changes, New Features, and Fixes
@@ -1735,6 +1770,7 @@ References
55. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.6/index.html
+
GCC 4.6 Release Series
April 12, 2013
@@ -1824,6 +1860,7 @@ References
24. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.6/changes.html
+
GCC 4.6 Release Series
Changes, New Features, and Fixes
@@ -2754,6 +2791,7 @@ References
30. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.5/index.html
+
GCC 4.5 Release Series
Jul 2, 2012
@@ -2838,6 +2876,7 @@ References
19. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.5/changes.html
+
GCC 4.5 Release Series
Changes, New Features, and Fixes
@@ -3525,6 +3564,7 @@ References
35. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.4/index.html
+
GCC 4.4 Release Series
March 13, 2012
@@ -3621,6 +3661,7 @@ References
22. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.4/changes.html
+
GCC 4.4 Release Series
Changes, New Features, and Fixes
@@ -4255,6 +4296,7 @@ References
26. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.3/index.html
+
GCC 4.3 Release Series
Jun 27, 2011
@@ -4347,6 +4389,7 @@ References
21. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.3/changes.html
+
GCC 4.3 Release Series
Changes, New Features, and Fixes
@@ -5168,6 +5211,7 @@ References
37. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.2/index.html
+
GCC 4.2 Release Series
May 19, 2008
@@ -5252,6 +5296,7 @@ References
19. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.2/changes.html
+
GCC 4.2 Release Series
Changes, New Features, and Fixes
@@ -5575,6 +5620,7 @@ References
13. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.1/index.html
+
GCC 4.1 Release Series
February 13, 2007
@@ -5651,6 +5697,7 @@ References
17. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.1/changes.html
+
GCC 4.1 Release Series
Changes, New Features, and Fixes
@@ -6210,6 +6257,7 @@ References
13. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.0/index.html
+
GCC 4.0 Release Series
January 31, 2007
@@ -6294,6 +6342,7 @@ References
19. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.0/changes.html
+
GCC 4.0 Release Series
Changes, New Features, and Fixes
@@ -6823,6 +6872,7 @@ References
22. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.4/index.html
+
GCC 3.4 Release Series
May 26, 2006
@@ -6922,6 +6972,7 @@ References
23. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.4/changes.html
+
GCC 3.4 Release Series
Changes, New Features, and Fixes
@@ -9105,6 +9156,7 @@ References
418. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.3/index.html
+
GCC 3.3 Release Series
May 03, 2005
@@ -9204,6 +9256,7 @@ References
22. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.3/changes.html
+
GCC 3.3 Release Series
Changes, New Features, and Fixes
@@ -10551,7 +10604,7 @@ GCC 3.3.6
provided this notice is preserved.
These pages are [558]maintained by the GCC team. Last modified
- 2012-11-02[559].
+ 2013-10-31[559].
References
@@ -10560,7 +10613,7 @@ References
3. http://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
4. http://gcc.gnu.org/gcc-3.3/changes.html#nonnull_attribute
5. http://gcc.gnu.org/news/dfa.html
- 6. http://gcc.gnu.org/gcc-3.3/c99status.html
+ 6. http://gcc.gnu.org/c99status.html
7. http://gcc.gnu.org/onlinedocs/gcc-3.3.6/g77/News.html
8. http://gcc.gnu.org/PR10140
9. http://gcc.gnu.org/PR10198
@@ -11116,6 +11169,7 @@ References
559. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.2/index.html
+
GCC 3.2 Release Series
April 25, 2003
@@ -11205,6 +11259,7 @@ References
18. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.2/changes.html
+
GCC 3.2 Release Series
Changes, New Features, and Fixes
@@ -12062,6 +12117,7 @@ References
252. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.1/index.html
+
GCC 3.1
July 27, 2002
@@ -12128,6 +12184,7 @@ References
15. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.1/changes.html
+
GCC 3.1 Release Series
Changes, New Features, and Fixes
@@ -12462,14 +12519,14 @@ Documentation improvements
provided this notice is preserved.
These pages are [18]maintained by the GCC team. Last modified
- 2012-11-02[19].
+ 2013-10-31[19].
References
1. http://gcc.gnu.org/ml/gcc/2002-07/msg01208.html
2. http://gcc.gnu.org/news/profiledriven.html
3. http://gcc.gnu.org/benchmarks/
- 4. http://gcc.gnu.org/gcc-3.1/c99status.html
+ 4. http://gcc.gnu.org/c99status.html
5. http://gcc.gnu.org/onlinedocs/libstdc++/faq.html
6. http://gcc.gnu.org/onlinedocs/gcc-3.1.1/g77/News.html
7. http://www.adacore.com/
@@ -12487,6 +12544,7 @@ References
19. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.0/gcc-3.0.html
+
GCC 3.0.4
February 20, 2002
@@ -12560,6 +12618,7 @@ References
15. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.0/features.html
+
GCC 3.0 New Features
Additional changes in GCC 3.0.4
@@ -12659,7 +12718,7 @@ New Languages and Language specific improvements
New Targets and Target Specific Improvements
- * New x86 back-end, generating much improved code.
+ * New x86 back end, generating much improved code.
* Support for a generic i386-elf target contributed.
* New option to emit x86 assembly code using Intel style syntax
(-mintel-syntax).
@@ -12730,7 +12789,7 @@ Other significant improvements
provided this notice is preserved.
These pages are [19]maintained by the GCC team. Last modified
- 2012-11-02[20].
+ 2013-12-03[20].
References
@@ -12743,7 +12802,7 @@ References
7. http://gcc.gnu.org/libstdc++/
8. http://gcc.gnu.org/news/inlining.html
9. http://gcc.gnu.org/news/dependencies.html
- 10. http://gcc.gnu.org/gcc-3.0/c99status.html
+ 10. http://gcc.gnu.org/c99status.html
11. http://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
12. http://gcc.gnu.org/gcc-3.0/libgcc.html
13. http://gcc.gnu.org/gcc-2.95/features.html
@@ -12756,6 +12815,7 @@ References
20. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.0/caveats.html
+
GCC 3.0 Caveats
* -fstrict-aliasing is now part of -O2 and higher optimization
@@ -12816,6 +12876,7 @@ References
8. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-2.95/index.html
+
GCC 2.95
March 16, 2001: The GNU project and the GCC developers are pleased to
@@ -12905,6 +12966,7 @@ References
17. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-2.95/features.html
+
GCC 2.95 New Features
* General Optimizer Improvements:
@@ -13177,6 +13239,7 @@ References
23. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-2.95/caveats.html
+
GCC 2.95 Caveats
* GCC 2.95 will issue an error for invalid asm statements that had
@@ -13245,6 +13308,7 @@ References
8. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/egcs-1.1/index.html
+
EGCS 1.1
September 3, 1998: We are pleased to announce the release of EGCS 1.1.
@@ -13475,6 +13539,7 @@ References
17. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/egcs-1.1/features.html
+
EGCS 1.1 new features
* Integrated GNU Fortran (g77) compiler and runtime library with
@@ -13569,6 +13634,7 @@ References
11. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/egcs-1.1/caveats.html
+
EGCS 1.1 Caveats
* EGCS has an integrated libstdc++, but does not have an integrated
@@ -13619,6 +13685,7 @@ References
7. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/egcs-1.0/index.html
+
EGCS 1.0
December 3, 1997: We are pleased to announce the release of EGCS 1.0.
@@ -13684,7 +13751,7 @@ http://gcc.gnu.org/egcs-1.0/index.html
"official", so to avoid future compatibility problems we recommend
against distributing any shared libraries built by EGCS 1.0 that
contain C++ code (upgrade to 1.0.1 and use that).
- * Various bugfixes in the x86, hppa, mips, and rs6000/ppc backends.
+ * Various bugfixes in the x86, hppa, mips, and rs6000/ppc back ends.
The x86 changes fix code generation errors exposed when building
glibc2 and the usual GNU/Linux dynamic linker (ld.so).
The hppa change fixes a compiler abort when configured for use with
@@ -13802,7 +13869,7 @@ http://gcc.gnu.org/egcs-1.0/index.html
provided this notice is preserved.
These pages are [11]maintained by the GCC team. Last modified
- 2012-11-02[12].
+ 2013-12-03[12].
References
@@ -13820,6 +13887,7 @@ References
12. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/egcs-1.0/features.html
+
EGCS 1.0 features
* Core compiler is based on the gcc2 development tree from Aug 2,
@@ -13884,6 +13952,7 @@ References
9. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/egcs-1.0/caveats.html
+
EGCS 1.0 Caveats
* EGCS has an integrated libstdc++, but does not have an integrated
diff --git a/gcc-4.8/boehm-gc/ChangeLog b/gcc-4.8/boehm-gc/ChangeLog
index efb3eb86b..2803edcd5 100644
--- a/gcc-4.8/boehm-gc/ChangeLog
+++ b/gcc-4.8/boehm-gc/ChangeLog
@@ -1,3 +1,19 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * configure: Regenerate.
+
+2013-12-29 Andreas Tobler <andreast@gcc.gnu.org>
+
+ Merge from trunk:
+ * include/private/gcconfig.h: Add FreeBSD powerpc64 defines.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/boehm-gc/configure b/gcc-4.8/boehm-gc/configure
index 6020e9884..025003cac 100755
--- a/gcc-4.8/boehm-gc/configure
+++ b/gcc-4.8/boehm-gc/configure
@@ -6770,7 +6770,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -6795,7 +6795,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -6814,7 +6817,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -11312,7 +11318,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11315 "configure"
+#line 11321 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11418,7 +11424,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11421 "configure"
+#line 11427 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/gcc-4.8/boehm-gc/include/private/gcconfig.h b/gcc-4.8/boehm-gc/include/private/gcconfig.h
index 9420c7caf..79f5fb71e 100644
--- a/gcc-4.8/boehm-gc/include/private/gcconfig.h
+++ b/gcc-4.8/boehm-gc/include/private/gcconfig.h
@@ -837,7 +837,15 @@
# define NO_PTHREAD_TRYLOCK
# endif
# ifdef FREEBSD
+# if defined(__powerpc64__)
+# define ALIGNMENT 8
+# define CPP_WORDSZ 64
+# ifndef HBLKSIZE
+# define HBLKSIZE 4096
+# endif
+# else
# define ALIGNMENT 4
+# endif
# define OS_TYPE "FREEBSD"
# ifndef GC_FREEBSD_THREADS
# define MPROTECT_VDB
diff --git a/gcc-4.8/config.guess b/gcc-4.8/config.guess
index 0aee6044d..bf02d6e7e 100755
--- a/gcc-4.8/config.guess
+++ b/gcc-4.8/config.guess
@@ -1,10 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-# 2011, 2012, 2013 Free Software Foundation, Inc.
+# Copyright 1992-2013 Free Software Foundation, Inc.
-timestamp='2012-12-30'
+timestamp='2013-06-10'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -52,9 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
-2012, 2013 Free Software Foundation, Inc.
+Copyright 1992-2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -136,6 +132,27 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ LIBC=gnu
+
+ eval $set_cc_for_build
+ cat <<-EOF > $dummy.c
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #else
+ LIBC=gnu
+ #endif
+ EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ ;;
+esac
+
# Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
@@ -857,21 +874,21 @@ EOF
exit ;;
*:GNU:*:*)
# the GNU system
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit ;;
*:GNU/*:*:*)
# other systems with GNU libc and userland
- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
exit ;;
i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix
exit ;;
aarch64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
aarch64_be:Linux:*:*)
UNAME_MACHINE=aarch64_be
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
alpha:Linux:*:*)
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
@@ -884,59 +901,54 @@ EOF
EV68*) UNAME_MACHINE=alphaev68 ;;
esac
objdump --private-headers /bin/sh | grep -q ld.so.1
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arc:Linux:*:* | arceb:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
arm*:Linux:*:*)
eval $set_cc_for_build
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_EABI__
then
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
else
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_PCS_VFP
then
- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
else
- echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
fi
fi
exit ;;
avr32*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
cris:Linux:*:*)
- echo ${UNAME_MACHINE}-axis-linux-gnu
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
crisv32:Linux:*:*)
- echo ${UNAME_MACHINE}-axis-linux-gnu
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
frv:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
hexagon:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
i*86:Linux:*:*)
- LIBC=gnu
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
mips:Linux:*:* | mips64:Linux:*:*)
eval $set_cc_for_build
@@ -955,54 +967,63 @@ EOF
#endif
EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
;;
+ or1k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
or32:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
padre:Linux:*:*)
- echo sparc-unknown-linux-gnu
+ echo sparc-unknown-linux-${LIBC}
exit ;;
parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
+ echo hppa64-unknown-linux-${LIBC}
exit ;;
parisc:Linux:*:* | hppa:Linux:*:*)
# Look for CPU level
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
+ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+ *) echo hppa-unknown-linux-${LIBC} ;;
esac
exit ;;
ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
+ echo powerpc64-unknown-linux-${LIBC}
exit ;;
ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
+ echo powerpc-unknown-linux-${LIBC}
+ exit ;;
+ ppc64le:Linux:*:*)
+ echo powerpc64le-unknown-linux-${LIBC}
+ exit ;;
+ ppcle:Linux:*:*)
+ echo powerpcle-unknown-linux-${LIBC}
exit ;;
s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
+ echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
exit ;;
sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
tile*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
vax:Linux:*:*)
- echo ${UNAME_MACHINE}-dec-linux-gnu
+ echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;;
x86_64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -1235,19 +1256,21 @@ EOF
exit ;;
*:Darwin:*:*)
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- case $UNAME_PROCESSOR in
- i386)
eval $set_cc_for_build
+ if test "$UNAME_PROCESSOR" = unknown ; then
+ UNAME_PROCESSOR=powerpc
+ fi
if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
then
- UNAME_PROCESSOR="x86_64"
- fi
- fi ;;
- unknown) UNAME_PROCESSOR=powerpc ;;
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
esac
+ fi
+ fi
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
exit ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
diff --git a/gcc-4.8/config.sub b/gcc-4.8/config.sub
index 707e9e2ef..61cb4bc22 100755
--- a/gcc-4.8/config.sub
+++ b/gcc-4.8/config.sub
@@ -1,10 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-# 2011, 2012, 2013 Free Software Foundation, Inc.
+# Copyright 1992-2013 Free Software Foundation, Inc.
-timestamp='2013-01-11'
+timestamp='2013-10-01'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -70,9 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
-2012, 2013 Free Software Foundation, Inc.
+Copyright 1992-2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -256,12 +252,12 @@ case $basic_machine in
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
- | arc \
+ | arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
| be32 | be64 \
| bfin \
- | c4x | clipper \
+ | c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
| epiphany \
| fido | fr30 | frv \
@@ -269,6 +265,7 @@ case $basic_machine in
| hexagon \
| i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \
+ | k1om \
| le32 | le64 \
| lm32 \
| m32c | m32r | m32rle | m68000 | m68k | m88k \
@@ -297,10 +294,10 @@ case $basic_machine in
| mt \
| msp430 \
| nds32 | nds32le | nds32be \
- | nios | nios2 \
+ | nios | nios2 | nios2eb | nios2el \
| ns16k | ns32k \
| open8 \
- | or32 \
+ | or1k | or32 \
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle \
| pyramid \
@@ -328,7 +325,7 @@ case $basic_machine in
c6x)
basic_machine=tic6x-unknown
;;
- m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
basic_machine=$basic_machine-unknown
os=-none
;;
@@ -370,13 +367,13 @@ case $basic_machine in
| aarch64-* | aarch64_be-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
- | clipper-* | craynv-* | cydra-* \
+ | c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
| elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
@@ -385,6 +382,7 @@ case $basic_machine in
| hexagon-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
+ | k1om-* \
| le32-* | le64-* \
| lm32-* \
| m32c-* | m32r-* | m32rle-* \
@@ -414,7 +412,7 @@ case $basic_machine in
| mt-* \
| msp430-* \
| nds32-* | nds32le-* | nds32be-* \
- | nios-* | nios2-* \
+ | nios-* | nios2-* | nios2eb-* | nios2el-* \
| none-* | np1-* | ns16k-* | ns32k-* \
| open8-* \
| orion-* \
@@ -798,7 +796,7 @@ case $basic_machine in
os=-mingw64
;;
mingw32)
- basic_machine=i386-pc
+ basic_machine=i686-pc
os=-mingw32
;;
mingw32ce)
@@ -834,7 +832,7 @@ case $basic_machine in
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
;;
msys)
- basic_machine=i386-pc
+ basic_machine=i686-pc
os=-msys
;;
mvs)
@@ -1550,6 +1548,9 @@ case $basic_machine in
c4x-* | tic4x-*)
os=-coff
;;
+ c8051-*)
+ os=-elf
+ ;;
hexagon-*)
os=-elf
;;
@@ -1593,6 +1594,9 @@ case $basic_machine in
mips*-*)
os=-elf
;;
+ or1k-*)
+ os=-elf
+ ;;
or32-*)
os=-coff
;;
diff --git a/gcc-4.8/config/ChangeLog b/gcc-4.8/config/ChangeLog
index 33b7cf7ac..9dbadab98 100644
--- a/gcc-4.8/config/ChangeLog
+++ b/gcc-4.8/config/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/contrib/ChangeLog b/gcc-4.8/contrib/ChangeLog
index 5b38ad661..45259f278 100644
--- a/gcc-4.8/contrib/ChangeLog
+++ b/gcc-4.8/contrib/ChangeLog
@@ -1,3 +1,11 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2013-10-21 Mike Stump <mikestump@comcast.net>
+
+ * gcc_update (configure): Update to handle svn 1.8.1.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/contrib/gcc_update b/gcc-4.8/contrib/gcc_update
index 10a5970f6..212a99fc7 100755
--- a/gcc-4.8/contrib/gcc_update
+++ b/gcc-4.8/contrib/gcc_update
@@ -382,7 +382,7 @@ case $vcs_type in
fi
revision=`$GCC_SVN info | awk '/Revision:/ { print $2 }'`
- branch=`$GCC_SVN info | sed -ne "/URL:/ {
+ branch=`$GCC_SVN info | sed -ne "/^URL:/ {
s,.*/trunk,trunk,
s,.*/branches/,,
s,.*/tags/,,
diff --git a/gcc-4.8/contrib/reghunt/ChangeLog b/gcc-4.8/contrib/reghunt/ChangeLog
index e77d115e6..0e9ad9a85 100644
--- a/gcc-4.8/contrib/reghunt/ChangeLog
+++ b/gcc-4.8/contrib/reghunt/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/contrib/regression/ChangeLog b/gcc-4.8/contrib/regression/ChangeLog
index e3259f6c2..f59d72df9 100644
--- a/gcc-4.8/contrib/regression/ChangeLog
+++ b/gcc-4.8/contrib/regression/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/fixincludes/ChangeLog b/gcc-4.8/fixincludes/ChangeLog
index 25cd5cfbf..89ee2d309 100644
--- a/gcc-4.8/fixincludes/ChangeLog
+++ b/gcc-4.8/fixincludes/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/gcc/ChangeLog b/gcc-4.8/gcc/ChangeLog
index b8ece67d3..7e67a45ff 100644
--- a/gcc-4.8/gcc/ChangeLog
+++ b/gcc-4.8/gcc/ChangeLog
@@ -1,3 +1,5483 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-05-15 Peter Bergner <bergner@vnet.ibm.com>
+
+ Backport from mainline
+ 2014-05-15 Peter Bergner <bergner@vnet.ibm.com>
+
+ PR target/61193
+ * config/rs6000/htmxlintrin.h (_HTM_TBEGIN_STARTED): New define.
+ (__TM_simple_begin): Use it.
+ (__TM_begin): Likewise.
+
+2014-05-14 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/sparc/sparc-protos.h (sparc_absnegfloat_split_legitimate):
+ Delete.
+ * config/sparc/sparc.c (sparc_absnegfloat_split_legitimate): Likewise.
+ * config/sparc/sparc.md (fptype_ut699): New attribute.
+ (in_branch_delay): Return false if -mfix-ut699 is specified and
+ fptype_ut699 is set to single.
+ (truncdfsf2): Add fptype_ut699 attribute.
+ (fix_truncdfsi2): Likewise.
+ (floatsisf2): Change fptype attribute.
+ (fix_truncsfsi2): Likewise.
+ (negtf2_notv9): Delete.
+ (negtf2_v9): Likewise.
+ (negtf2_hq): New instruction.
+ (negtf2): New instruction and splitter.
+ (negdf2_notv9): Rewrite.
+ (abstf2_notv9): Delete.
+ (abstf2_hq_v9): Likewise.
+ (abstf2_v9): Likewise.
+ (abstf2_hq): New instruction.
+ (abstf2): New instruction and splitter.
+ (absdf2_notv9): Rewrite.
+
+2014-05-14 Matthias Klose <doko@ubuntu.com>
+
+ Revert:
+ 2014-05-08 Manuel López-Ibáñez <manu@gcc.gnu.org>
+ Matthias Klose <doko@ubuntu.com>
+
+ PR driver/61106
+ * optc-gen.awk: Fix option handling for -Wunused-parameter.
+
+2014-05-13 Peter Bergner <bergner@vnet.ibm.com>
+
+ * doc/sourcebuild.texi: (dfp_hw): Document.
+ (p8vector_hw): Likewise.
+ (powerpc_eabi_ok): Likewise.
+ (powerpc_elfv2): Likewise.
+ (powerpc_htm_ok): Likewise.
+ (ppc_recip_hw): Likewise.
+ (vsx_hw): Likewise.
+
+2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
+
+ Backport from mainline
+ 2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
+
+ PR target/60991
+ * config/avr/avr.c (avr_out_store_psi): Use correct constant
+ to restore Y.
+
+2014-05-09 Georg-Johann Lay <avr@gjlay.de>
+
+ Backport from 2014-05-09 trunk r210267
+
+ PR target/61055
+ * config/avr/avr.md (cc): Add new attribute set_vzn.
+ (addqi3, addqq3, adduqq3, subqi3, subqq3, subuqq3, negqi2) [cc]:
+ Set cc insn attribute to set_vzn instead of set_zn for alternatives
+ with INC, DEC or NEG.
+ * config/avr/avr.c (avr_notice_update_cc): Handle SET_VZN.
+ (avr_out_plus_1): ADIW sets cc0 to CC_SET_CZN.
+ INC, DEC and ADD+ADC set cc0 to CC_CLOBBER.
+
+2014-05-09 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * builtins.c (expand_builtin_setjmp_receiver): Emit a use of
+ the hard frame pointer. Synchronize commentary with mainline.
+ * cse.c (cse_insn): Only check for volatile asms.
+ * cselib.c (cselib_process_insn): Likewise.
+ * dse.c (scan_insn): Likewise.
+ * stmt.c (expand_nl_goto_receiver): Emit a use and a clobber of
+ the hard frame pointer.
+
+2014-05-08 Manuel López-Ibáñez <manu@gcc.gnu.org>
+ Matthias Klose <doko@ubuntu.com>
+
+ PR driver/61106
+ * optc-gen.awk: Fix option handling for -Wunused-parameter.
+
+2014-05-08 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/59952
+ * config/i386/i386.c (ix86_option_override_internal): Remove PTA_RTM
+ from core-avx2.
+
+2014-05-08 Charles Baylis <charles.baylis@linaro.org>
+
+ Backport from mainline
+ 2014-04-07 Charles Baylis <charles.baylis@linaro.org>
+
+ PR target/60609
+ * config/arm/arm.h (ASM_OUTPUT_CASE_END): Remove.
+ (LABEL_ALIGN_AFTER_BARRIER): Align barriers which occur after
+ ADDR_DIFF_VEC.
+
+2014-05-06 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * config.gcc (aarch64*-*-*): Use ISA flags from aarch64-arches.def.
+ Do not define target_cpu_default2 to generic.
+
+2014-05-06 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-04-14 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/55022
+ * fold-const.c (negate_expr_p): Don't negate directional rounding
+ division.
+ (fold_negate_expr): Likewise.
+
+2014-05-06 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-04-17 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/60849
+ * tree-ssa-propagate.c (valid_gimple_rhs_p): Only allow effective
+ boolean results for comparisons.
+
+ 2014-04-07 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60766
+ * tree-ssa-loop-ivopts.c (cand_value_at): Compute in an
+ unsigned type.
+ (may_eliminate_iv): Convert cand_value_at result to desired
+ type.
+
+ 2014-04-23 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60903
+ * tree-ssa-loop-im.c (execute_sm_if_changed): Properly apply
+ IRREDUCIBLE_LOOP loop flags to newly created BBs and edges.
+
+2014-05-05 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-04-23 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/60895
+ * tree-inline.c (declare_return_variable): Use mark_addressable.
+
+ 2014-04-07 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/60750
+ * tree-ssa-operands.c (maybe_add_call_vops): Also add VDEFs
+ for noreturn calls.
+ * tree-cfgcleanup.c (fixup_noreturn_call): Do not remove VDEFs.
+
+ 2014-04-14 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59817
+ PR tree-optimization/60453
+ * graphite-scop-detection.c (graphite_can_represent_scev): Complete
+ recursion to catch all CHRECs in the scalar evolution and restrict
+ the predicate for the remains appropriately.
+
+ 2014-04-17 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60836
+ * tree-vect-loop.c (vect_create_epilog_for_reduction): Force
+ initial PHI args to be gimple values.
+
+2014-05-05 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2014-04-25 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/60960
+ * tree-vect-generic.c (expand_vector_operation): Only call
+ expand_vector_divmod if type's mode satisfies VECTOR_MODE_P.
+
+2014-05-04 Peter Bergner <bergner@vnet.ibm.com>
+
+ * config/rs6000/rs6000.h (RS6000_BTM_HARD_FLOAT): New define.
+ (RS6000_BTM_COMMON): Add RS6000_BTM_HARD_FLOAT.
+ (TARGET_EXTRA_BUILTINS): Add TARGET_HARD_FLOAT.
+ * config/rs6000/rs6000-builtin.def (BU_MISC_1):
+ Use RS6000_BTM_HARD_FLOAT.
+ (BU_MISC_2): Likewise.
+ * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Handle
+ RS6000_BTM_HARD_FLOAT.
+ (rs6000_option_override_internal): Enforce -mhard-float if -mhard-dfp
+ is explicitly used.
+ (rs6000_invalid_builtin): Add hard floating builtin support.
+ (rs6000_expand_builtin): Relax the gcc_assert to allow the new
+ hard float builtins.
+ (rs6000_builtin_mask_names): Add RS6000_BTM_HARD_FLOAT.
+
+2014-05-03 Joey Ye <joey.ye@arm.com>
+
+ Backport from mainline r209463
+ 2014-04-17 Joey Ye <joey.ye@arm.com>
+
+ * opts.c (OPT_fif_conversion, OPT_fif_conversion2): Disable for Og.
+
+2014-05-03 Oleg Endo <olegendo@gcc.gnu.org>
+
+ Back port from mainline
+ PR target/61026
+ * config/sh/sh.c: Include stdlib headers before everything else.
+
+2014-05-02 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR tree-optimization/60930
+ * gimple-ssa-strength-reduction.c (create_mul_imm_cand): Reject
+ creating a multiply candidate by folding two constant
+ multiplicands when the result overflows.
+
+2014-05-02 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * config/aarch64/aarch64.h (TARGET_SIMD): Take AARCH64_ISA_SIMD
+ into account.
+ (TARGET_FLOAT): Take AARCH64_ISA_FP into account.
+
+2014-04-30 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ Back port from mainline
+ 2014-04-24 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * doc/extend.texi (PowerPC Built-in Functions): Document new
+ powerpc extended divide, bcd, pack/unpack 128-bit, builtin
+ functions.
+ (PowerPC AltiVec/VSX Built-in Functions): Likewise.
+
+ * config/rs6000/predicates.md (const_0_to_3_operand): New
+ predicate to match 0..3 integer constants.
+
+ * config/rs6000/rs6000-builtin.def (BU_DFP_MISC_1): Add new macros
+ to support adding miscellaneous builtin functions.
+ (BU_DFP_MISC_2): Likewise.
+ (BU_P7_MISC_1): Likewise.
+ (BU_P7_MISC_2): Likewise.
+ (BU_P8V_MISC_3): Likewise.
+ (BU_MISC_1): Likewise.
+ (BU_MISC_2): Likewise.
+ (DIVWE): Add extended divide builtin functions.
+ (DIVWEO): Likewise.
+ (DIVWEU): Likewise.
+ (DIVWEUO): Likewise.
+ (DIVDE): Likewise.
+ (DIVDEO): Likewise.
+ (DIVDEU): Likewise.
+ (DIVDEUO): Likewise.
+ (DXEX): Add decimal floating-point builtin functions.
+ (DXEXQ): Likewise.
+ (DDEDPD): Likewise.
+ (DDEDPDQ): Likewise.
+ (DENBCD): Likewise.
+ (DENBCDQ): Likewise.
+ (DIEX): Likewise.
+ (DIEXQ): Likewise.
+ (DSCLI): Likewise.
+ (DSCLIQ): Likewise.
+ (DSCRI): Likewise.
+ (DSCRIQ): Likewise.
+ (CDTBCD): Add new BCD builtin functions.
+ (CBCDTD): Likewise.
+ (ADDG6S): Likewise.
+ (BCDADD): Likewise.
+ (BCDADD_LT): Likewise.
+ (BCDADD_EQ): Likewise.
+ (BCDADD_GT): Likewise.
+ (BCDADD_OV): Likewise.
+ (BCDSUB): Likewise.
+ (BCDSUB_LT): Likewise.
+ (BCDSUB_EQ): Likewise.
+ (BCDSUB_GT): Likewise.
+ (BCDSUB_OV): Likewise.
+ (PACK_TD): Add new pack/unpack 128-bit type builtin functions.
+ (UNPACK_TD): Likewise.
+ (PACK_TF): Likewise.
+ (UNPACK_TF): Likewise.
+ (UNPACK_TF_0): Likewise.
+ (UNPACK_TF_1): Likewise.
+ (PACK_V1TI): Likewise.
+ (UNPACK_V1TI): Likewise.
+
+ * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Add
+ support for decimal floating point builtin functions.
+ (rs6000_expand_ternop_builtin): Add checks for the new builtin
+ functions that take constant arguments.
+ (rs6000_invalid_builtin): Add decimal floating point builtin
+ support.
+ (rs6000_init_builtins): Setup long double, _Decimal64, and
+ _Decimal128 types for new builtin functions.
+ (builtin_function_type): Set the unsigned flags appropriately for
+ the new builtin functions.
+ (rs6000_opt_masks): Add support for decimal floating point builtin
+ functions.
+
+ * config/rs6000/rs6000.h (RS6000_BTM_DFP): Add support for decimal
+ floating point builtin functions.
+ (RS6000_BTM_COMMON): Likewise.
+ (RS6000_BTI_long_double): Likewise.
+ (RS6000_BTI_dfloat64): Likewise.
+ (RS6000_BTI_dfloat128): Likewise.
+ (long_double_type_internal_node): Likewise.
+ (dfloat64_type_internal_node): Likewise.
+ (dfloat128_type_internal_node): Likewise.
+
+ * config/rs6000/altivec.h (UNSPEC_BCDADD): Add support for ISA
+ 2.07 bcd arithmetic instructions.
+ (UNSPEC_BCDSUB): Likewise.
+ (UNSPEC_BCD_OVERFLOW): Likewise.
+ (UNSPEC_BCD_ADD_SUB): Likewise.
+ (bcd_add_sub): Likewise.
+ (BCD_TEST): Likewise.
+ (bcd<bcd_add_sub>): Likewise.
+ (bcd<bcd_add_sub>_test): Likewise.
+ (bcd<bcd_add_sub>_test2): Likewise.
+ (bcd<bcd_add_sub>_<code>): Likewise.
+ (peephole2 for combined bcd ops): Likewise.
+
+ * config/rs6000/dfp.md (UNSPEC_DDEDPD): Add support for new
+ decimal floating point builtin functions.
+ (UNSPEC_DENBCD): Likewise.
+ (UNSPEC_DXEX): Likewise.
+ (UNSPEC_DIEX): Likewise.
+ (UNSPEC_DSCLI): Likewise.
+ (UNSPEC_DSCRI): Likewise.
+ (D64_D128): Likewise.
+ (dfp_suffix): Likewise.
+ (dfp_ddedpd_<mode>): Likewise.
+ (dfp_denbcd_<mode>): Likewise.
+ (dfp_dxex_<mode>): Likewise.
+ (dfp_diex_<mode>): Likewise.
+ (dfp_dscli_<mode>): Likewise.
+ (dfp_dscri_<mode>): Likewise.
+
+ * config/rs6000/rs6000.md (UNSPEC_ADDG6S): Add support for new BCD
+ builtin functions.
+ (UNSPEC_CDTBCD): Likewise.
+ (UNSPEC_CBCDTD): Likewise.
+ (UNSPEC_DIVE): Add support for new extended divide builtin
+ functions.
+ (UNSPEC_DIVEO): Likewise.
+ (UNSPEC_DIVEU): Likewise.
+ (UNSPEC_DIVEUO): Likewise.
+ (UNSPEC_UNPACK_128BIT): Add support for new builtin functions to
+ pack/unpack 128-bit types.
+ (UNSPEC_PACK_128BIT): Likewise.
+ (idiv_ldiv): New mode attribute to set the 32/64-bit divide type.
+ (udiv<mode>3): Use idiv_ldiv mode attribute.
+ (div<mode>3): Likewise.
+ (addg6s): Add new BCD builtin functions.
+ (cdtbcd): Likewise.
+ (cbcdtd): Likewise.
+ (UNSPEC_DIV_EXTEND): Add support for new extended divide
+ instructions.
+ (div_extend): Likewise.
+ (div<div_extend>_<mode>"): Likewise.
+ (FP128_64): Add support for new builtin functions to pack/unpack
+ 128-bit types.
+ (unpack<mode>): Likewise.
+ (unpacktf_0): Likewise.
+ (unpacktf_1): Likewise.
+ (unpack<mode>_dm): Likewise.
+ (unpack<mode>_nodm): Likewise.
+ (pack<mode>): Likewise.
+ (unpackv1ti): Likewise.
+ (packv1ti): Likewise.
+
+2014-04-29 Pat Haugen <pthaugen@us.ibm.com>
+
+ Backport from mainline
+ 2014-04-17 Pat Haugen <pthaugen@us.ibm.com>
+
+ * config/rs6000/rs6000.md (addti3, subti3): New.
+
+2014-04-28 Pat Haugen <pthaugen@us.ibm.com>
+
+ Backport from mainline
+ 2014-04-28 Pat Haugen <pthaugen@us.ibm.com>
+
+ * config/rs6000/sync.md (AINT mode_iterator): Move definition.
+ (loadsync_<mode>): Change mode.
+ (load_quadpti, store_quadpti): New.
+ (atomic_load<mode>, atomic_store<mode>): Add support for TI mode.
+ * config/rs6000/rs6000.md (unspec enum): Add UNSPEC_LSQ.
+
+2014-04-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ * configure.ac: Tweak GAS check for LEON instructions on SPARC.
+ * configure: Regenerate.
+ * config/sparc/sparc.opt (muser-mode): New option.
+ * config/sparc/sync.md (atomic_compare_and_swap<mode>_1): Do not enable
+ for LEON3.
+ (atomic_compare_and_swap_leon3_1): New instruction for LEON3.
+ * doc/invoke.texi (SPARC options): Document -muser-mode.
+
+2014-04-25 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR target/60941
+ * config/sparc/sparc.md (ashlsi3_extend): Delete.
+
+2014-04-22 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ Back port from main line:
+ 2014-03-27 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000-builtins.def (VBPERMQ): Add vbpermq builtin
+ for ISA 2.07.
+
+ * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add
+ vbpermq builtins.
+
+ * config/rs6000/altivec.md (UNSPEC_VBPERMQ): Add support for the
+ vbpermq instruction.
+ (altivec_vbpermq): Likewise.
+
+ PR target/60672
+ * config/rs6000/altivec.h (vec_xxsldwi): Add missing define to
+ enable use of xxsldwi and xxpermdi builtin functions.
+ (vec_xxpermdi): Likewise.
+
+ * doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions):
+ Document use of vec_xxsldwi and vec_xxpermdi builtins.
+
+2014-04-23 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2014-04-21 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/60909
+ * config/i386/i386.c (ix86_expand_builtin)
+ <case IX86_BUILTIN_RDRAND{16,32,64}_STEP>: Use temporary
+ register for target RTX.
+ <case IX86_BUILTIN_RDSEED{16,32,64}_STEP>: Ditto.
+
+2014-04-23 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-04-02 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/60729
+ * optabs.c (expand_abs_nojump): Honor flag_trapv only for
+ MODE_INTs. Properly use negv_optab.
+ (expand_abs): Likewise.
+
+ 2014-04-03 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60740
+ * graphite-scop-detection.c (stmt_simple_for_scop_p): Iterate
+ over all GIMPLE_COND operands.
+
+2014-04-23 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/60635
+ * gimplify.c (gimple_regimplify_operands): Update the
+ re-gimplifed stmt.
+
+2014-04-21 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ Back port from the trunk, subversion id 209546.
+
+ 2014-04-21 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/60735
+ * config/rs6000/rs6000.md (mov<mode>_softfloat32, FMOVE64 case):
+ If mode is DDmode and TARGET_E500_DOUBLE allow move.
+
+ * config/rs6000/rs6000.c (rs6000_debug_reg_global): Print some
+ more debug information for E500 if -mdebug=reg.
+
+2014-04-18 Richard Henderson <rth@redhat.com>
+
+ * config/aarch64/aarch64.c (aarch64_register_move_cost): Pass a mode
+ to GET_MODE_SIZE, not a reg_class_t.
+
+2014-04-17 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/vsx.md (vsx_xxmrghw_<mode>): Adjust for
+ little-endian.
+ (vsx_xxmrglw_<mode>): Likewise.
+
+2014-04-15 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR target/60839
+ Revert the following patch
+
+ 2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Back port mainline subversion id 209025.
+ 2014-04-02 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/60735
+ * config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok): If we have
+ software floating point or no floating point registers, do not
+ allow any type in the FPRs. Eliminate a test for SPE SIMD types
+ in GPRs that occurs after we tested for GPRs that would never be
+ true.
+
+ * config/rs6000/rs6000.md (mov<mode>_softfloat32, FMOVE64):
+ Rewrite tests to use TARGET_DOUBLE_FLOAT and TARGET_E500_DOUBLE,
+ since the FMOVE64 type is DFmode/DDmode. If TARGET_E500_DOUBLE,
+ specifically allow DDmode, since that does not use the SPE SIMD
+ instructions.
+
+2014-04-10 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR rtl-optimization/60769
+ * lra-constraints.c (simplify_operand_subreg): Force reload of
+ paradoxical subreg if it is not in the class contents.
+
+2014-04-10 Jakub Jelinek <jakub@redhat.com>
+
+ Backport from mainline
+ 2014-03-12 Jakub Jelinek <jakub@redhat.com>
+ Marc Glisse <marc.glisse@inria.fr>
+
+ PR tree-optimization/60502
+ * tree-ssa-reassoc.c (eliminate_not_pairs): Use build_all_ones_cst
+ instead of build_low_bits_mask.
+
+ 2013-06-13 Marc Glisse <marc.glisse@inria.fr>
+
+ * tree.c (build_all_ones_cst): New function.
+ * tree.h (build_all_ones_cst): Declare it.
+
+ 2013-05-10 Marc Glisse <marc.glisse@inria.fr>
+
+ * tree.c (build_minus_one_cst): New function.
+ * tree.h (build_minus_one_cst): Declare new function.
+
+2014-04-10 Jakub Jelinek <jakub@redhat.com>
+
+ Backport from mainline
+ 2014-03-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/60693
+ * config/i386/i386.c (ix86_copy_addr_to_reg): Call copy_addr_to_reg
+ also if addr has VOIDmode.
+
+ 2014-03-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/60516
+ * config/i386/i386.c (ix86_expand_epilogue): Adjust REG_CFA_ADJUST_CFA
+ note creation for the 2010-08-31 changes.
+
+ 2014-03-06 Jakub Jelinek <jakub@redhat.com>
+ Meador Inge <meadori@codesourcery.com>
+
+ PR target/58595
+ * config/arm/arm.c (arm_tls_symbol_p): Remove.
+ (arm_legitimize_address): Call legitimize_tls_address for any
+ arm_tls_referenced_p expression, handle constant addend. Call it
+ before testing for !TARGET_ARM.
+ (thumb_legitimize_address): Don't handle arm_tls_symbol_p here.
+
+2014-04-09 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline r208750
+ 2014-03-21 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_expand_vector_set): Generate a
+ pattern for vector nor instead of subtract from splat(-1).
+ (altivec_expand_vec_perm_const_le): Likewise.
+
+ Backport from mainline r209235
+ 2014-04-08 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_expand_vector_set): Use vnand
+ instead of vnor to exploit possible fusion opportunity in the
+ future.
+ (altivec_expand_vec_perm_const_le): Likewise.
+
+2014-04-09 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Revert following patch
+ 2014-04-08 Pat Haugen <pthaugen@us.ibm.com>
+
+ Backport from mainline
+ 2014-04-08 Pat Haugen <pthaugen@us.ibm.com>
+
+ * config/rs6000/sync.md (AINT mode_iterator): Move definition.
+ (loadsync_<mode>): Change mode.
+ (load_quadpti, store_quadpti): New.
+ (atomic_load<mode>, atomic_store<mode>): Add support for TI mode.
+ * config/rs6000/rs6000.md (unspec enum): Add UNSPEC_LSQ.
+
+2014-04-09 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline r202642
+ 2013-09-17 Alan Modra <amodra@gmail.com>
+
+ PR target/57589
+ * config/rs6000/driver-rs6000.c (elf_platform): Revert 2013-06-11
+ patch (r199972).
+
+2014-04-08 Pat Haugen <pthaugen@us.ibm.com>
+
+ Backport from mainline
+ 2014-04-08 Pat Haugen <pthaugen@us.ibm.com>
+
+ * config/rs6000/sync.md (AINT mode_iterator): Move definition.
+ (loadsync_<mode>): Change mode.
+ (load_quadpti, store_quadpti): New.
+ (atomic_load<mode>, atomic_store<mode>): Add support for TI mode.
+ * config/rs6000/rs6000.md (unspec enum): Add UNSPEC_LSQ.
+
+2014-04-07 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/60640
+ * ipa-cp.c (propagate_constants_accross_call): Do not propagate
+ accross thunks.
+
+2014-04-07 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ Backport from mainline
+ 2013-09-14 Iain Sandoe <iains@gcc.gnu.org>
+
+ PR target/48094
+ * config/darwin.c (darwin_objc2_section): Note if ObjC Metadata
+ is seen.
+ (darwin_objc1_section): Likewise.
+ (darwin_file_end): Emit Image Info section when required.
+
+2014-04-05 Alan Modra <amodra@gmail.com>
+
+ Apply from mainline
+ 2014-01-28 Alan Modra <amodra@gmail.com>
+ * Makefile.in (BUILD_CPPFLAGS): Do not use ALL_CPPFLAGS.
+ * configure.ac <recursive call for build != host>: Define
+ GENERATOR_FILE. Comment. Use CXX_FOR_BUILD, CXXFLAGS_FOR_BUILD
+ and LD_FOR_BUILD too.
+ * configure: Regenerate.
+
+2014-04-04 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ Backport from mainline r208895:
+ 2014-03-28 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/rs6000/rs6000.c (fusion_gpr_load_p): Refuse optimization
+ if it would clobber the stack pointer, even temporarily.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Back port from main line:
+ 2014-04-01 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions):
+ Document vec_vgbbd.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Back port mainline subversion id 209025.
+ 2014-04-02 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/60735
+ * config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok): If we have
+ software floating point or no floating point registers, do not
+ allow any type in the FPRs. Eliminate a test for SPE SIMD types
+ in GPRs that occurs after we tested for GPRs that would never be
+ true.
+
+ * config/rs6000/rs6000.md (mov<mode>_softfloat32, FMOVE64):
+ Rewrite tests to use TARGET_DOUBLE_FLOAT and TARGET_E500_DOUBLE,
+ since the FMOVE64 type is DFmode/DDmode. If TARGET_E500_DOUBLE,
+ specifically allow DDmode, since that does not use the SPE SIMD
+ instructions.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline r205308
+ 2013-11-23 David Edelsohn <dje.gcc@gmail.com>
+
+ * config/rs6000/rs6000.c (IN_NAMED_SECTION): New macro.
+ (rs6000_xcoff_select_section): Place decls with stricter alignment
+ into named sections.
+ (rs6000_xcoff_unique_section): Allow unique sections for
+ uninitialized data with strict alignment.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * gcc/configure: Regenerate.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Back port from trunk
+ 2013-04-25 Alan Modra <amodra@gmail.com>
+
+ PR target/57052
+ * config/rs6000/rs6000.md (rotlsi3_internal7): Rename to
+ rotlsi3_internal7le and condition on !BYTES_BIG_ENDIAN.
+ (rotlsi3_internal8be): New BYTES_BIG_ENDIAN insn.
+ Repeat for many other rotate/shift and mask patterns using subregs.
+ Name lshiftrt insns.
+ (ashrdisi3_noppc64): Rename to ashrdisi3_noppc64be and condition
+ on WORDS_BIG_ENDIAN.
+
+ 2013-06-07 Alan Modra <amodra@gmail.com>
+
+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Don't
+ override user -mfp-in-toc.
+ (offsettable_ok_by_alignment): Consider just the current access
+ rather than the whole object, unless BLKmode. Handle
+ CONSTANT_POOL_ADDRESS_P constants that lack a decl too.
+ (use_toc_relative_ref): Allow CONSTANT_POOL_ADDRESS_P constants
+ for -mcmodel=medium.
+ * config/rs6000/linux64.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Don't
+ override user -mfp-in-toc or -msum-in-toc. Default to
+ -mno-fp-in-toc for -mcmodel=medium.
+
+ 2013-06-18 Alan Modra <amodra@gmail.com>
+
+ * config/rs6000/rs6000.h (enum data_align): New.
+ (LOCAL_ALIGNMENT, DATA_ALIGNMENT): Use rs6000_data_alignment.
+ (DATA_ABI_ALIGNMENT): Define.
+ (CONSTANT_ALIGNMENT): Correct comment.
+ * config/rs6000/rs6000-protos.h (rs6000_data_alignment): Declare.
+ * config/rs6000/rs6000.c (rs6000_data_alignment): New function.
+
+ 2013-07-11 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/rs6000/rs6000.md (""*tls_gd_low<TLSmode:tls_abi_suffix>"):
+ Require GOT register as additional operand in UNSPEC.
+ ("*tls_ld_low<TLSmode:tls_abi_suffix>"): Likewise.
+ ("*tls_got_dtprel_low<TLSmode:tls_abi_suffix>"): Likewise.
+ ("*tls_got_tprel_low<TLSmode:tls_abi_suffix>"): Likewise.
+ ("*tls_gd<TLSmode:tls_abi_suffix>"): Update splitter.
+ ("*tls_ld<TLSmode:tls_abi_suffix>"): Likewise.
+ ("tls_got_dtprel_<TLSmode:tls_abi_suffix>"): Likewise.
+ ("tls_got_tprel_<TLSmode:tls_abi_suffix>"): Likewise.
+
+ 2014-01-23 Pat Haugen <pthaugen@us.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Don't
+ force flag_ira_loop_pressure if set via command line.
+
+ 2014-02-06 Alan Modra <amodra@gmail.com>
+
+ PR target/60032
+ * config/rs6000/rs6000.c (rs6000_secondary_memory_needed_mode): Only
+ change SDmode to DDmode when lra_in_progress.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ V1TImode Support
+ Back port from trunk
+ 2014-03-12 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/vector.md (VEC_L): Add V1TI mode to vector types.
+ (VEC_M): Likewise.
+ (VEC_N): Likewise.
+ (VEC_R): Likewise.
+ (VEC_base): Likewise.
+ (mov<MODE>, VEC_M modes): If we are loading TImode into VSX
+ registers, we need to swap double words in little endian mode.
+
+ * config/rs6000/rs6000-modes.def (V1TImode): Add new vector mode
+ to be a container mode for 128-bit integer operations added in ISA
+ 2.07. Unlike TImode and PTImode, the preferred register set is
+ the Altivec/VMX registers for the 128-bit operations.
+
+ * config/rs6000/rs6000-protos.h (rs6000_move_128bit_ok_p): Add
+ declarations.
+ (rs6000_split_128bit_ok_p): Likewise.
+
+ * config/rs6000/rs6000-builtin.def (BU_P8V_AV_3): Add new support
+ macros for creating ISA 2.07 normal and overloaded builtin
+ functions with 3 arguments.
+ (BU_P8V_OVERLOAD_3): Likewise.
+ (VPERM_1T): Add support for V1TImode in 128-bit vector operations
+ for use as overloaded functions.
+ (VPERM_1TI_UNS): Likewise.
+ (VSEL_1TI): Likewise.
+ (VSEL_1TI_UNS): Likewise.
+ (ST_INTERNAL_1ti): Likewise.
+ (LD_INTERNAL_1ti): Likewise.
+ (XXSEL_1TI): Likewise.
+ (XXSEL_1TI_UNS): Likewise.
+ (VPERM_1TI): Likewise.
+ (VPERM_1TI_UNS): Likewise.
+ (XXPERMDI_1TI): Likewise.
+ (SET_1TI): Likewise.
+ (LXVD2X_V1TI): Likewise.
+ (STXVD2X_V1TI): Likewise.
+ (VEC_INIT_V1TI): Likewise.
+ (VEC_SET_V1TI): Likewise.
+ (VEC_EXT_V1TI): Likewise.
+ (EQV_V1TI): Likewise.
+ (NAND_V1TI): Likewise.
+ (ORC_V1TI): Likewise.
+ (VADDCUQ): Add support for 128-bit integer arithmetic instructions
+ added in ISA 2.07. Add both normal 'altivec' builtins, and the
+ overloaded builtin.
+ (VADDUQM): Likewise.
+ (VSUBCUQ): Likewise.
+ (VADDEUQM): Likewise.
+ (VADDECUQ): Likewise.
+ (VSUBEUQM): Likewise.
+ (VSUBECUQ): Likewise.
+
+ * config/rs6000/rs6000-c.c (__int128_type): New static to hold
+ __int128_t and __uint128_t types.
+ (__uint128_type): Likewise.
+ (altivec_categorize_keyword): Add support for vector __int128_t,
+ vector __uint128_t, vector __int128, and vector unsigned __int128
+ as a container type for TImode operations that need to be done in
+ VSX/Altivec registers.
+ (rs6000_macro_to_expand): Likewise.
+ (altivec_overloaded_builtins): Add ISA 2.07 overloaded functions
+ to support 128-bit integer instructions vaddcuq, vadduqm,
+ vaddecuq, vaddeuqm, vsubcuq, vsubuqm, vsubecuq, vsubeuqm.
+ (altivec_resolve_overloaded_builtin): Add support for V1TImode.
+
+ * config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok): Add support
+ for V1TImode, and set up preferences to use VSX/Altivec
+ registers. Setup VSX reload handlers.
+ (rs6000_debug_reg_global): Likewise.
+ (rs6000_init_hard_regno_mode_ok): Likewise.
+ (rs6000_preferred_simd_mode): Likewise.
+ (vspltis_constant): Do not allow V1TImode as easy altivec
+ constants.
+ (easy_altivec_constant): Likewise.
+ (output_vec_const_move): Likewise.
+ (rs6000_expand_vector_set): Convert V1TImode set and extract to
+ simple move.
+ (rs6000_expand_vector_extract): Likewise.
+ (reg_offset_addressing_ok_p): Setup V1TImode to use VSX reg+reg
+ addressing.
+ (rs6000_const_vec): Add support for V1TImode.
+ (rs6000_emit_le_vsx_load): Swap double words when loading or
+ storing TImode/V1TImode.
+ (rs6000_emit_le_vsx_store): Likewise.
+ (rs6000_emit_le_vsx_move): Likewise.
+ (rs6000_emit_move): Add support for V1TImode.
+ (altivec_expand_ld_builtin): Likewise.
+ (altivec_expand_st_builtin): Likewise.
+ (altivec_expand_vec_init_builtin): Likewise.
+ (altivec_expand_builtin): Likewise.
+ (rs6000_init_builtins): Add support for V1TImode type. Add
+ support for ISA 2.07 128-bit integer builtins. Define type names
+ for the VSX/Altivec vector types.
+ (altivec_init_builtins): Add support for overloaded vector
+ functions with V1TImode type.
+ (rs6000_preferred_reload_class): Prefer Altivec registers for
+ V1TImode.
+ (rs6000_move_128bit_ok_p): Move 128-bit move/split validation to
+ external function.
+ (rs6000_split_128bit_ok_p): Likewise.
+ (rs6000_handle_altivec_attribute): Create V1TImode from vector
+ __int128_t and vector __uint128_t.
+
+ * config/rs6000/vsx.md (VSX_L): Add V1TImode to vector iterators
+ and mode attributes.
+ (VSX_M): Likewise.
+ (VSX_M2): Likewise.
+ (VSm): Likewise.
+ (VSs): Likewise.
+ (VSr): Likewise.
+ (VSv): Likewise.
+ (VS_scalar): Likewise.
+ (VS_double): Likewise.
+ (vsx_set_v1ti): New builtin function to create V1TImode from
+ TImode.
+
+ * config/rs6000/rs6000.h (TARGET_VADDUQM): New macro to say
+ whether we support the ISA 2.07 128-bit integer arithmetic
+ instructions.
+ (ALTIVEC_OR_VSX_VECTOR_MODE): Add V1TImode.
+ (enum rs6000_builtin_type_index): Add fields to hold V1TImode
+ and TImode types for use with the builtin functions.
+ (V1TI_type_node): Likewise.
+ (unsigned_V1TI_type_node): Likewise.
+ (intTI_type_internal_node): Likewise.
+ (uintTI_type_internal_node): Likewise.
+
+ * config/rs6000/altivec.md (UNSPEC_VADDCUQ): New unspecs for ISA
+ 2.07 128-bit builtin functions.
+ (UNSPEC_VADDEUQM): Likewise.
+ (UNSPEC_VADDECUQ): Likewise.
+ (UNSPEC_VSUBCUQ): Likewise.
+ (UNSPEC_VSUBEUQM): Likewise.
+ (UNSPEC_VSUBECUQ): Likewise.
+ (VM): Add V1TImode to vector mode iterators.
+ (VM2): Likewise.
+ (VI_unit): Likewise.
+ (altivec_vadduqm): Add ISA 2.07 128-bit binary builtins.
+ (altivec_vaddcuq): Likewise.
+ (altivec_vsubuqm): Likewise.
+ (altivec_vsubcuq): Likewise.
+ (altivec_vaddeuqm): Likewise.
+ (altivec_vaddecuq): Likewise.
+ (altivec_vsubeuqm): Likewise.
+ (altivec_vsubecuq): Likewise.
+
+ * config/rs6000/rs6000.md (FMOVE128_GPR): Add V1TImode to vector
+ mode iterators.
+ (BOOL_128): Likewise.
+ (BOOL_REGS_OUTPUT): Likewise.
+ (BOOL_REGS_OP1): Likewise.
+ (BOOL_REGS_OP2): Likewise.
+ (BOOL_REGS_UNARY): Likewise.
+ (BOOL_REGS_AND_CR0): Likewise.
+
+ * config/rs6000/altivec.h (vec_vaddcuq): Add support for ISA 2.07
+ 128-bit integer builtin support.
+ (vec_vadduqm): Likewise.
+ (vec_vaddecuq): Likewise.
+ (vec_vaddeuqm): Likewise.
+ (vec_vsubecuq): Likewise.
+ (vec_vsubeuqm): Likewise.
+ (vec_vsubcuq): Likewise.
+ (vec_vsubuqm): Likewise.
+
+ * doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions):
+ Document vec_vaddcuq, vec_vadduqm, vec_vaddecuq, vec_vaddeuqm,
+ vec_subecuq, vec_subeuqm, vec_vsubcuq, vec_vsubeqm builtins adding
+ 128-bit integer add/subtract to ISA 2.07.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Apply mainline r207798
+ 2014-02-26 Alan Modra <amodra@gmail.com>
+ PR target/58675
+ PR target/57935
+ * config/rs6000/rs6000.c (rs6000_secondary_reload_inner): Use
+ find_replacement on parts of insn rtl that might be reloaded.
+
+ Backport from mainline r208287
+ 2014-03-03 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_preferred_reload_class): Disallow
+ reload of PLUS rtx's outside of GENERAL_REGS or BASE_REGS; relax
+ constraint on constants to permit them being loaded into
+ GENERAL_REGS or BASE_REGS.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline r207699.
+ 2014-02-11 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/60137
+ * config/rs6000/rs6000.md (128-bit GPR splitter): Add a splitter
+ for VSX/Altivec vectors that land in GPR registers.
+
+ Backport from mainline r207808.
+ 2014-02-15 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/60203
+ * config/rs6000/rs6000.md (rreg): Add TFmode, TDmode constraints.
+ (mov<mode>_internal, TFmode/TDmode): Split TFmode/TDmode moves
+ into 64-bit and 32-bit moves. On 64-bit moves, add support for
+ using direct move instructions on ISA 2.07. Also adjust
+ instruction length for 64-bit.
+ (mov<mode>_64bit, TFmode/TDmode): Likewise.
+ (mov<mode>_32bit, TFmode/TDmode): Likewise.
+
+ Backport from mainline r207868.
+ 2014-02-18 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/60203
+ * config/rs6000/rs6000.md (mov<mode>_64bit, TF/TDmode moves):
+ Split 64-bit moves into 2 patterns. Do not allow the use of
+ direct move for TDmode in little endian, since the decimal value
+ has little endian bytes within a word, but the 64-bit pieces are
+ ordered in a big endian fashion, and normal subreg's of TDmode are
+ not allowed.
+ (mov<mode>_64bit_dm): Likewise.
+ (movtd_64bit_nodm): Likewise.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline r207658
+ 2014-02-06 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/rs6000/sysv4.h (ENDIAN_SELECT): Do not attempt to enforce
+ big-endian mode for -mcall-aixdesc, -mcall-freebsd, -mcall-netbsd,
+ -mcall-openbsd, or -mcall-linux.
+ (CC1_ENDIAN_BIG_SPEC): Remove.
+ (CC1_ENDIAN_LITTLE_SPEC): Remove.
+ (CC1_ENDIAN_DEFAULT_SPEC): Remove.
+ (CC1_SPEC): Remove (always empty) %cc1_endian_... spec.
+ (SUBTARGET_EXTRA_SPECS): Remove %cc1_endian_big, %cc1_endian_little,
+ and %cc1_endian_default.
+ * config/rs6000/sysv4le.h (CC1_ENDIAN_DEFAULT_SPEC): Remove.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Little Endian Vector API Support
+ Backport from mainline r206443
+ 2014-01-08 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Remove
+ two duplicate entries.
+
+ Backport from mainline r206494
+ 2014-01-09 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * doc/invoke.texi: Add -maltivec={be,le} options, and document
+ default element-order behavior for -maltivec.
+ * config/rs6000/rs6000.opt: Add -maltivec={be,le} options.
+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Ensure
+ that -maltivec={le,be} implies -maltivec; disallow -maltivec=le
+ when targeting big endian, at least for now.
+ * config/rs6000/rs6000.h: Add #define of VECTOR_ELT_ORDER_BIG.
+
+ Backport from mainline r206541
+ 2014-01-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000-builtin.def: Fix pasto for VPKSDUS.
+
+ Backport from mainline r206590
+ 2014-01-13 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
+ Implement -maltivec=be for vec_insert and vec_extract.
+
+ Backport from mainline r206641
+ 2014-01-15 Bill Schmidt <wschmidt@vnet.linux.ibm.com>
+
+ * config/rs6000/altivec.md (mulv8hi3): Explicitly generate vmulesh
+ and vmulosh rather than call gen_vec_widen_smult_*.
+ (vec_widen_umult_even_v16qi): Test VECTOR_ELT_ORDER_BIG rather
+ than BYTES_BIG_ENDIAN to determine use of even or odd instruction.
+ (vec_widen_smult_even_v16qi): Likewise.
+ (vec_widen_umult_even_v8hi): Likewise.
+ (vec_widen_smult_even_v8hi): Likewise.
+ (vec_widen_umult_odd_v16qi): Likewise.
+ (vec_widen_smult_odd_v16qi): Likewise.
+ (vec_widen_umult_odd_v8hi): Likewise.
+ (vec_widen_smult_odd_v8hi): Likewise.
+ (vec_widen_umult_hi_v16qi): Explicitly generate vmuleub and
+ vmuloub rather than call gen_vec_widen_umult_*.
+ (vec_widen_umult_lo_v16qi): Likewise.
+ (vec_widen_smult_hi_v16qi): Explicitly generate vmulesb and
+ vmulosb rather than call gen_vec_widen_smult_*.
+ (vec_widen_smult_lo_v16qi): Likewise.
+ (vec_widen_umult_hi_v8hi): Explicitly generate vmuleuh and vmulouh
+ rather than call gen_vec_widen_umult_*.
+ (vec_widen_umult_lo_v8hi): Likewise.
+ (vec_widen_smult_hi_v8hi): Explicitly gnerate vmulesh and vmulosh
+ rather than call gen_vec_widen_smult_*.
+ (vec_widen_smult_lo_v8hi): Likewise.
+
+ Backport from mainline r207062
+ 2014-01-24 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_expand_vec_perm_const_1): Remove
+ correction for little endian...
+ * config/rs6000/vsx.md (vsx_xxpermdi2_<mode>_1): ...and move it to
+ here.
+
+ Backport from mainline r207262
+ 2014-01-29 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (altivec_expand_vec_perm_const): Use
+ CODE_FOR_altivec_vmrg*_direct rather than CODE_FOR_altivec_vmrg*.
+ * config/rs6000/vsx.md (vsx_mergel_<mode>): Adjust for
+ -maltivec=be with LE targets.
+ (vsx_mergeh_<mode>): Likewise.
+ * config/rs6000/altivec.md (UNSPEC_VMRG[HL]_DIRECT): New
+ unspecs.
+ (mulv8hi3): Use gen_altivec_vmrg[hl]w_direct.
+ (altivec_vmrghb): Replace with define_expand and new
+ *altivec_vmrghb_internal insn; adjust for -maltivec=be with LE
+ targets.
+ (altivec_vmrghb_direct): New define_insn.
+ (altivec_vmrghh): Replace with define_expand and new
+ *altivec_vmrghh_internal insn; adjust for -maltivec=be with LE
+ targets.
+ (altivec_vmrghh_direct): New define_insn.
+ (altivec_vmrghw): Replace with define_expand and new
+ *altivec_vmrghw_internal insn; adjust for -maltivec=be with LE
+ targets.
+ (altivec_vmrghw_direct): New define_insn.
+ (*altivec_vmrghsf): Adjust for endianness.
+ (altivec_vmrglb): Replace with define_expand and new
+ *altivec_vmrglb_internal insn; adjust for -maltivec=be with LE
+ targets.
+ (altivec_vmrglb_direct): New define_insn.
+ (altivec_vmrglh): Replace with define_expand and new
+ *altivec_vmrglh_internal insn; adjust for -maltivec=be with LE
+ targets.
+ (altivec_vmrglh_direct): New define_insn.
+ (altivec_vmrglw): Replace with define_expand and new
+ *altivec_vmrglw_internal insn; adjust for -maltivec=be with LE
+ targets.
+ (altivec_vmrglw_direct): New define_insn.
+ (*altivec_vmrglsf): Adjust for endianness.
+ (vec_widen_umult_hi_v16qi): Use gen_altivec_vmrghh_direct.
+ (vec_widen_umult_lo_v16qi): Use gen_altivec_vmrglh_direct.
+ (vec_widen_smult_hi_v16qi): Use gen_altivec_vmrghh_direct.
+ (vec_widen_smult_lo_v16qi): Use gen_altivec_vmrglh_direct.
+ (vec_widen_umult_hi_v8hi): Use gen_altivec_vmrghw_direct.
+ (vec_widen_umult_lo_v8hi): Use gen_altivec_vmrglw_direct.
+ (vec_widen_smult_hi_v8hi): Use gen_altivec_vmrghw_direct.
+ (vec_widen_smult_lo_v8hi): Use gen_altivec_vmrglw_direct.
+
+ Backport from mainline r207318
+ 2014-01-30 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc/config/rs6000/rs6000.c (rs6000_expand_vector_init): Use
+ gen_vsx_xxspltw_v4sf_direct instead of gen_vsx_xxspltw_v4sf;
+ remove element index adjustment for endian (now handled in vsx.md
+ and altivec.md).
+ (altivec_expand_vec_perm_const): Use
+ gen_altivec_vsplt[bhw]_direct instead of gen_altivec_vsplt[bhw].
+ * gcc/config/rs6000/vsx.md (UNSPEC_VSX_XXSPLTW): New unspec.
+ (vsx_xxspltw_<mode>): Adjust element index for little endian.
+ * gcc/config/rs6000/altivec.md (altivec_vspltb): Divide into a
+ define_expand and a new define_insn *altivec_vspltb_internal;
+ adjust for -maltivec=be on a little endian target.
+ (altivec_vspltb_direct): New.
+ (altivec_vsplth): Divide into a define_expand and a new
+ define_insn *altivec_vsplth_internal; adjust for -maltivec=be on a
+ little endian target.
+ (altivec_vsplth_direct): New.
+ (altivec_vspltw): Divide into a define_expand and a new
+ define_insn *altivec_vspltw_internal; adjust for -maltivec=be on a
+ little endian target.
+ (altivec_vspltw_direct): New.
+ (altivec_vspltsf): Divide into a define_expand and a new
+ define_insn *altivec_vspltsf_internal; adjust for -maltivec=be on
+ a little endian target.
+
+ Backport from mainline r207326
+ 2014-01-30 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_expand_vector_init): Remove
+ unused variable "field".
+ * config/rs6000/vsx.md (vsx_mergel_<mode>): Add missing DONE.
+ (vsx_mergeh_<mode>): Likewise.
+ * config/rs6000/altivec.md (altivec_vmrghb): Likewise.
+ (altivec_vmrghh): Likewise.
+ (altivec_vmrghw): Likewise.
+ (altivec_vmrglb): Likewise.
+ (altivec_vmrglh): Likewise.
+ (altivec_vmrglw): Likewise.
+ (altivec_vspltb): Add missing uses.
+ (altivec_vsplth): Likewise.
+ (altivec_vspltw): Likewise.
+ (altivec_vspltsf): Likewise.
+
+ Backport from mainline r207414
+ 2014-02-02 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/altivec.md (UNSPEC_VSUMSWS_DIRECT): New unspec.
+ (altivec_vsumsws): Add handling for -maltivec=be with a little
+ endian target.
+ (altivec_vsumsws_direct): New.
+ (reduc_splus_<mode>): Call gen_altivec_vsumsws_direct instead of
+ gen_altivec_vsumsws.
+
+ Backport from mainline r207415
+ 2014-02-02 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (altivec_expand_vec_perm_le): Generalize
+ for vector types other than V16QImode.
+ * config/rs6000/altivec.md (altivec_vperm_<mode>): Change to a
+ define_expand, and call altivec_expand_vec_perm_le when producing
+ code with little endian element order.
+ (*altivec_vperm_<mode>_internal): New insn having previous
+ behavior of altivec_vperm_<mode>.
+ (altivec_vperm_<mode>_uns): Change to a define_expand, and call
+ altivec_expand_vec_perm_le when producing code with little endian
+ element order.
+ (*altivec_vperm_<mode>_uns_internal): New insn having previous
+ behavior of altivec_vperm_<mode>_uns.
+
+ Backport from mainline r207520
+ 2014-02-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * altivec.md (UNSPEC_VPACK_UNS_UNS_MOD_DIRECT): New unspec.
+ (UNSPEC_VUNPACK_HI_SIGN_DIRECT): Likewise.
+ (UNSPEC_VUNPACK_LO_SIGN_DIRECT): Likewise.
+ (mulv8hi3): Use gen_altivec_vpkuwum_direct instead of
+ gen_altivec_vpkuwum.
+ (altivec_vpkpx): Test for VECTOR_ELT_ORDER_BIG instead of for
+ BYTES_BIG_ENDIAN.
+ (altivec_vpks<VI_char>ss): Likewise.
+ (altivec_vpks<VI_char>us): Likewise.
+ (altivec_vpku<VI_char>us): Likewise.
+ (altivec_vpku<VI_char>um): Likewise.
+ (altivec_vpku<VI_char>um_direct): New (copy of
+ altivec_vpku<VI_char>um that still relies on BYTES_BIG_ENDIAN, for
+ internal use).
+ (altivec_vupkhs<VU_char>): Emit vupkls* instead of vupkhs* when
+ target is little endian and -maltivec=be is not specified.
+ (*altivec_vupkhs<VU_char>_direct): New (copy of
+ altivec_vupkhs<VU_char> that always emits vupkhs*, for internal
+ use).
+ (altivec_vupkls<VU_char>): Emit vupkhs* instead of vupkls* when
+ target is little endian and -maltivec=be is not specified.
+ (*altivec_vupkls<VU_char>_direct): New (copy of
+ altivec_vupkls<VU_char> that always emits vupkls*, for internal
+ use).
+ (altivec_vupkhpx): Emit vupklpx instead of vupkhpx when target is
+ little endian and -maltivec=be is not specified.
+ (altivec_vupklpx): Emit vupkhpx instead of vupklpx when target is
+ little endian and -maltivec=be is not specified.
+
+ Backport from mainline r207521
+ 2014-02-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/altivec.md (altivec_vsum2sws): Adjust code
+ generation for -maltivec=be.
+ (altivec_vsumsws): Simplify redundant test.
+
+ Backport from mainline r207525
+ 2014-02-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (altivec_expand_vec_perm_const): Change
+ CODE_FOR_altivec_vpku[hw]um to
+ CODE_FOR_altivec_vpku[hw]um_direct.
+ * config/rs6000/altivec.md (vec_unpacks_hi_<VP_small_lc>): Change
+ UNSPEC_VUNPACK_HI_SIGN to UNSPEC_VUNPACK_HI_SIGN_DIRECT.
+ (vec_unpacks_lo_<VP_small_lc>): Change UNSPEC_VUNPACK_LO_SIGN to
+ UNSPEC_VUNPACK_LO_SIGN_DIRECT.
+
+ Backport from mainline r207814.
+ 2014-02-16 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/vsx.md (vsx_xxpermdi_<mode>): Handle little
+ endian targets.
+
+ Backport from mainline r207815.
+ 2014-02-16 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/altivec.md (p8_vmrgew): Handle little endian
+ targets.
+ (p8_vmrgow): Likewise.
+
+ Backport from mainline r207919.
+ 2014-02-19 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (vspltis_constant): Fix most significant
+ bit of zero.
+
+ Backport from mainline 208019
+ 2014-02-21 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/altivec.md (altivec_lvxl): Rename as
+ *altivec_lvxl_<mode>_internal and use VM2 iterator instead of
+ V4SI.
+ (altivec_lvxl_<mode>): New define_expand incorporating
+ -maltivec=be semantics where needed.
+ (altivec_lvx): Rename as *altivec_lvx_<mode>_internal.
+ (altivec_lvx_<mode>): New define_expand incorporating -maltivec=be
+ semantics where needed.
+ (altivec_stvx): Rename as *altivec_stvx_<mode>_internal.
+ (altivec_stvx_<mode>): New define_expand incorporating
+ -maltivec=be semantics where needed.
+ (altivec_stvxl): Rename as *altivec_stvxl_<mode>_internal and use
+ VM2 iterator instead of V4SI.
+ (altivec_stvxl_<mode>): New define_expand incorporating
+ -maltivec=be semantics where needed.
+ * config/rs6000/rs6000-builtin.def: Add new built-in definitions
+ LVXL_V2DF, LVXL_V2DI, LVXL_V4SF, LVXL_V4SI, LVXL_V8HI, LVXL_V16QI,
+ LVX_V2DF, LVX_V2DI, LVX_V4SF, LVX_V4SI, LVX_V8HI, LVX_V16QI,
+ STVX_V2DF, STVX_V2DI, STVX_V4SF, STVX_V4SI, STVX_V8HI, STVX_V16QI,
+ STVXL_V2DF, STVXL_V2DI, STVXL_V4SF, STVXL_V4SI, STVXL_V8HI,
+ STVXL_V16QI.
+ * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Replace
+ ALTIVEC_BUILTIN_LVX with ALTIVEC_BUILTIN_LVX_<MODE> throughout;
+ similarly for ALTIVEC_BUILTIN_LVXL, ALTIVEC_BUILTIN_STVX, and
+ ALTIVEC_BUILTIN_STVXL.
+ * config/rs6000/rs6000-protos.h (altivec_expand_lvx_be): New
+ prototype.
+ (altivec_expand_stvx_be): Likewise.
+ * config/rs6000/rs6000.c (swap_selector_for_mode): New function.
+ (altivec_expand_lvx_be): Likewise.
+ (altivec_expand_stvx_be): Likewise.
+ (altivec_expand_builtin): Add cases for
+ ALTIVEC_BUILTIN_STVX_<MODE>, ALTIVEC_BUILTIN_STVXL_<MODE>,
+ ALTIVEC_BUILTIN_LVXL_<MODE>, and ALTIVEC_BUILTIN_LVX_<MODE>.
+ (altivec_init_builtins): Add definitions for
+ __builtin_altivec_lvxl_<mode>, __builtin_altivec_lvx_<mode>,
+ __builtin_altivec_stvx_<mode>, and
+ __builtin_altivec_stvxl_<mode>.
+
+ Backport from mainline 208021
+ 2014-02-21 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/altivec.md (altivec_vsumsws): Replace second
+ vspltw with vsldoi.
+ (reduc_uplus_v16qi): Use gen_altivec_vsumsws_direct instead of
+ gen_altivec_vsumsws.
+
+ Backport from mainline 208049
+ 2014-02-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/altivec.md (altivec_lve<VI_char>x): Replace
+ define_insn with define_expand and new define_insn
+ *altivec_lve<VI_char>x_internal.
+ (altivec_stve<VI_char>x): Replace define_insn with define_expand
+ and new define_insn *altivec_stve<VI_char>x_internal.
+ * config/rs6000/rs6000-protos.h (altivec_expand_stvex_be): New
+ prototype.
+ * config/rs6000/rs6000.c (altivec_expand_lvx_be): Document use by
+ lve*x built-ins.
+ (altivec_expand_stvex_be): New function.
+
+ Backport from mainline
+ 2014-02-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+ * config/rs6000/rs6000.c (rs6000_emit_le_vsx_move): Relax assert
+ to permit subregs.
+
+ Backport from mainline
+ 2014-02-25 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+ * config/rs6000/vector.md (*vector_unordered<mode>): Change split
+ to use canonical form for nor<mode>3.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2014-02-04 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.opt (-mlra): Add switch to enable the LRA
+ register allocator.
+
+ * config/rs6000/rs6000.c (TARGET_LRA_P): Add support for -mlra to
+ enable the LRA register allocator. Back port the changes from the
+ trunk to enable LRA.
+ (rs6000_legitimate_offset_address_p): Likewise.
+ (legitimate_lo_sum_address_p): Likewise.
+ (use_toc_relative_ref): Likewise.
+ (rs6000_legitimate_address_p): Likewise.
+ (rs6000_emit_move): Likewise.
+ (rs6000_secondary_memory_needed_mode): Likewise.
+ (rs6000_alloc_sdmode_stack_slot): Likewise.
+ (rs6000_lra_p): Likewise.
+
+ * config/rs6000/sync.md (load_lockedti): Copy TI/PTI variables by
+ 64-bit parts to force the register allocator to allocate even/odd
+ register pairs for the quad word atomic instructions.
+ (store_conditionalti): Likewise.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Back port from mainline
+ 2014-01-23 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/59909
+ * doc/invoke.texi (RS/6000 and PowerPC Options): Document
+ -mquad-memory-atomic. Update -mquad-memory documentation to say
+ it is only used for non-atomic loads/stores.
+
+ * config/rs6000/predicates.md (quad_int_reg_operand): Allow either
+ -mquad-memory or -mquad-memory-atomic switches.
+
+ * config/rs6000/rs6000-cpus.def (ISA_2_7_MASKS_SERVER): Add
+ -mquad-memory-atomic to ISA 2.07 support.
+
+ * config/rs6000/rs6000.opt (-mquad-memory-atomic): Add new switch
+ to separate support of normal quad word memory operations (ldq,
+ stq) from the atomic quad word memory operations.
+
+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Add
+ support to separate non-atomic quad word operations from atomic
+ quad word operations. Disable non-atomic quad word operations in
+ little endian mode so that we don't have to swap words after the
+ load and before the store.
+ (quad_load_store_p): Add comment about atomic quad word support.
+ (rs6000_opt_masks): Add -mquad-memory-atomic to the list of
+ options printed with -mdebug=reg.
+
+ * config/rs6000/rs6000.h (TARGET_SYNC_TI): Use
+ -mquad-memory-atomic as the test for whether we have quad word
+ atomic instructions.
+ (TARGET_SYNC_HI_QI): If either -mquad-memory-atomic,
+ -mquad-memory, or -mp8-vector are used, allow byte/half-word
+ atomic operations.
+
+ * config/rs6000/sync.md (load_lockedti): Insure that the address
+ is a proper indexed or indirect address for the lqarx instruction.
+ On little endian systems, swap the hi/lo registers after the lqarx
+ instruction.
+ (load_lockedpti): Use indexed_or_indirect_operand predicate to
+ insure the address is valid for the lqarx instruction.
+ (store_conditionalti): Insure that the address is a proper indexed
+ or indirect address for the stqcrx. instruction. On little endian
+ systems, swap the hi/lo registers before doing the stqcrx.
+ instruction.
+ (store_conditionalpti): Use indexed_or_indirect_operand predicate to
+ insure the address is valid for the stqcrx. instruction.
+
+ * gcc/config/rs6000/rs6000-c.c (rs6000_target_modify_macros):
+ Define __QUAD_MEMORY__ and __QUAD_MEMORY_ATOMIC__ based on what
+ type of quad memory support is available.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Apply mainline r202190, powerpc64le multilibs and multiarch dir
+ 2013-09-03 Alan Modra <amodra@gmail.com>
+
+ * config.gcc (powerpc*-*-linux*): Add support for little-endian
+ multilibs to big-endian target and vice versa.
+ * config/rs6000/t-linux64: Use := assignment on all vars.
+ (MULTILIB_EXTRA_OPTS): Remove fPIC.
+ (MULTILIB_OSDIRNAMES): Specify using mapping from multilib_options.
+ * config/rs6000/t-linux64le: New file.
+ * config/rs6000/t-linux64bele: New file.
+ * config/rs6000/t-linux64lebe: New file.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Back port from mainline
+ 2014-01-16 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/59844
+ * config/rs6000/rs6000.md (reload_vsx_from_gprsf): Add little
+ endian support, remove tests for WORDS_BIG_ENDIAN.
+ (p8_mfvsrd_3_<mode>): Likewise.
+ (reload_gpr_from_vsx<mode>): Likewise.
+ (reload_gpr_from_vsxsf): Likewise.
+ (p8_mfvsrd_4_disf): Likewise.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-04-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR target/56843
+ * config/rs6000/rs6000.c (rs6000_emit_swdiv_high_precision): Remove.
+ (rs6000_emit_swdiv_low_precision): Remove.
+ (rs6000_emit_swdiv): Rewrite to handle between one and four
+ iterations of Newton-Raphson generally; modify required number of
+ iterations for some cases.
+ * config/rs6000/rs6000.h (RS6000_RECIP_HIGH_PRECISION_P): Remove.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-08-19 Peter Bergner <bergner@vnet.ibm.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ * builtins.def (BUILT_IN_FABSD32): New DFP ABS builtin.
+ (BUILT_IN_FABSD64): Likewise.
+ (BUILT_IN_FABSD128): Likewise.
+ * builtins.c (expand_builtin): Add support for
+ new DFP ABS builtins.
+ (fold_builtin_1): Likewise.
+ * config/rs6000/dfp.md
+ (*abstd2_fpr): Handle non-overlapping destination
+ and source operands.
+ (*nabstd2_fpr): Likewise.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Apply mainline r205060.
+ 2013-11-20 Alan Modra <amodra@gmail.com>
+ * config/rs6000/sysv4.h (CC1_ENDIAN_LITTLE_SPEC): Define as empty.
+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Default
+ to strict alignment on older processors when little-endian.
+ * config/rs6000/linux64.h (PROCESSOR_DEFAULT64): Default to power8
+ for ELFv2.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ POWER ELFv2 ABI Support
+ Backport from mainline r204842:
+
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * doc/invoke.texi (-mabi=elfv1, -mabi=elfv2): Document.
+
+ Backport from mainline r204809:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/rs6000/sysv4le.h (LINUX64_DEFAULT_ABI_ELFv2): Define.
+
+ Backport from mainline r204808:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+ Alan Modra <amodra@gmail.com>
+
+ * config/rs6000/rs6000.h (RS6000_SAVE_AREA): Handle ABI_ELFv2.
+ (RS6000_SAVE_TOC): Remove.
+ (RS6000_TOC_SAVE_SLOT): New macro.
+ * config/rs6000/rs6000.c (rs6000_parm_offset): New function.
+ (rs6000_parm_start): Use it.
+ (rs6000_function_arg_advance_1): Likewise.
+ (rs6000_emit_prologue): Use RS6000_TOC_SAVE_SLOT.
+ (rs6000_emit_epilogue): Likewise.
+ (rs6000_call_aix): Likewise.
+ (rs6000_output_function_prologue): Do not save/restore r11
+ around calling _mcount for ABI_ELFv2.
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+ Alan Modra <amodra@gmail.com>
+
+ * config/rs6000/rs6000-protos.h (rs6000_reg_parm_stack_space):
+ Add prototype.
+ * config/rs6000/rs6000.h (RS6000_REG_SAVE): Remove.
+ (REG_PARM_STACK_SPACE): Call rs6000_reg_parm_stack_space.
+ * config/rs6000/rs6000.c (rs6000_parm_needs_stack): New function.
+ (rs6000_function_parms_need_stack): Likewise.
+ (rs6000_reg_parm_stack_space): Likewise.
+ (rs6000_function_arg): Do not replace BLKmode by Pmode when
+ returning a register argument.
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+ Michael Gschwind <mkg@us.ibm.com>
+
+ * config/rs6000/rs6000.h (FP_ARG_MAX_RETURN): New macro.
+ (ALTIVEC_ARG_MAX_RETURN): Likewise.
+ (FUNCTION_VALUE_REGNO_P): Use them.
+ * config/rs6000/rs6000.c (TARGET_RETURN_IN_MSB): Define.
+ (rs6000_return_in_msb): New function.
+ (rs6000_return_in_memory): Handle ELFv2 homogeneous aggregates.
+ Handle aggregates of up to 16 bytes for ELFv2.
+ (rs6000_function_value): Handle ELFv2 homogeneous aggregates.
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+ Michael Gschwind <mkg@us.ibm.com>
+
+ * config/rs6000/rs6000.h (AGGR_ARG_NUM_REG): Define.
+ * config/rs6000/rs6000.c (rs6000_aggregate_candidate): New function.
+ (rs6000_discover_homogeneous_aggregate): Likewise.
+ (rs6000_function_arg_boundary): Handle homogeneous aggregates.
+ (rs6000_function_arg_advance_1): Likewise.
+ (rs6000_function_arg): Likewise.
+ (rs6000_arg_partial_bytes): Likewise.
+ (rs6000_psave_function_arg): Handle BLKmode arguments.
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+ Michael Gschwind <mkg@us.ibm.com>
+
+ * config/rs6000/rs6000.h (AGGR_ARG_NUM_REG): Define.
+ * config/rs6000/rs6000.c (rs6000_aggregate_candidate): New function.
+ (rs6000_discover_homogeneous_aggregate): Likewise.
+ (rs6000_function_arg_boundary): Handle homogeneous aggregates.
+ (rs6000_function_arg_advance_1): Likewise.
+ (rs6000_function_arg): Likewise.
+ (rs6000_arg_partial_bytes): Likewise.
+ (rs6000_psave_function_arg): Handle BLKmode arguments.
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/rs6000/rs6000.c (machine_function): New member
+ r2_setup_needed.
+ (rs6000_emit_prologue): Set r2_setup_needed if necessary.
+ (rs6000_output_mi_thunk): Set r2_setup_needed.
+ (rs6000_output_function_prologue): Output global entry point
+ prologue and local entry point marker if needed for ABI_ELFv2.
+ Output -mprofile-kernel code here.
+ (output_function_profiler): Do not output -mprofile-kernel
+ code here; moved to rs6000_output_function_prologue.
+ (rs6000_file_start): Output ".abiversion 2" for ABI_ELFv2.
+
+ (rs6000_emit_move): Do not handle dot symbols for ABI_ELFv2.
+ (rs6000_output_function_entry): Likewise.
+ (rs6000_assemble_integer): Likewise.
+ (rs6000_elf_encode_section_info): Likewise.
+ (rs6000_elf_declare_function_name): Do not create dot symbols
+ or .opd section for ABI_ELFv2.
+
+ (rs6000_trampoline_size): Update for ABI_ELFv2 trampolines.
+ (rs6000_trampoline_init): Likewise.
+ (rs6000_elf_file_end): Call file_end_indicate_exec_stack
+ for ABI_ELFv2.
+
+ (rs6000_call_aix): Handle ELFv2 indirect calls. Do not check
+ for function descriptors in ABI_ELFv2.
+
+ * config/rs6000/rs6000.md ("*call_indirect_aix<mode>"): Support
+ on ABI_AIX only, not ABI_ELFv2.
+ ("*call_value_indirect_aix<mode>"): Likewise.
+ ("*call_indirect_elfv2<mode>"): New pattern.
+ ("*call_value_indirect_elfv2<mode>"): Likewise.
+
+ * config/rs6000/predicates.md ("symbol_ref_operand"): Do not
+ check for function descriptors in ABI_ELFv2.
+ ("current_file_function_operand"): Likewise.
+
+ * config/rs6000/ppc-asm.h [__powerpc64__ && _CALL_ELF == 2]:
+ (toc): Undefine.
+ (FUNC_NAME): Define ELFv2 variant.
+ (JUMP_TARGET): Likewise.
+ (FUNC_START): Likewise.
+ (HIDDEN_FUNC): Likewise.
+ (FUNC_END): Likeiwse.
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config.gcc [powerpc*-*-* | rs6000-*-*]: Support --with-abi=elfv1
+ and --with-abi=elfv2.
+ * config/rs6000/option-defaults.h (OPTION_DEFAULT_SPECS): Add "abi".
+ * config/rs6000/rs6000.opt (mabi=elfv1): New option.
+ (mabi=elfv2): Likewise.
+ * config/rs6000/rs6000-opts.h (enum rs6000_abi): Add ABI_ELFv2.
+ * config/rs6000/linux64.h (DEFAULT_ABI): Do not hard-code to AIX_ABI
+ if !RS6000_BI_ARCH.
+ (ELFv2_ABI_CHECK): New macro.
+ (SUBSUBTARGET_OVERRIDE_OPTIONS): Use it to decide whether to set
+ rs6000_current_abi to ABI_AIX or ABI_ELFv2.
+ (GLIBC_DYNAMIC_LINKER64): Support ELFv2 ld.so version.
+ * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Predefine
+ _CALL_ELF and __STRUCT_PARM_ALIGN__ if appropriate.
+
+ * config/rs6000/rs6000.c (rs6000_debug_reg_global): Handle ABI_ELFv2.
+ (debug_stack_info): Likewise.
+ (rs6000_file_start): Treat ABI_ELFv2 the same as ABI_AIX.
+ (rs6000_legitimize_tls_address): Likewise.
+ (rs6000_conditional_register_usage): Likewise.
+ (rs6000_emit_move): Likewise.
+ (init_cumulative_args): Likewise.
+ (rs6000_function_arg_advance_1): Likewise.
+ (rs6000_function_arg): Likewise.
+ (rs6000_arg_partial_bytes): Likewise.
+ (rs6000_output_function_entry): Likewise.
+ (rs6000_assemble_integer): Likewise.
+ (rs6000_savres_strategy): Likewise.
+ (rs6000_stack_info): Likewise.
+ (rs6000_function_ok_for_sibcall): Likewise.
+ (rs6000_emit_load_toc_table): Likewise.
+ (rs6000_savres_routine_name): Likewise.
+ (ptr_regno_for_savres): Likewise.
+ (rs6000_emit_prologue): Likewise.
+ (rs6000_emit_epilogue): Likewise.
+ (rs6000_output_function_epilogue): Likewise.
+ (output_profile_hook): Likewise.
+ (output_function_profiler): Likewise.
+ (rs6000_trampoline_size): Likewise.
+ (rs6000_trampoline_init): Likewise.
+ (rs6000_elf_output_toc_section_asm_op): Likewise.
+ (rs6000_elf_encode_section_info): Likewise.
+ (rs6000_elf_reloc_rw_mask): Likewise.
+ (rs6000_elf_declare_function_name): Likewise.
+ (rs6000_function_arg_boundary): Treat ABI_ELFv2 the same as ABI_AIX,
+ except that rs6000_compat_align_parm is always assumed false.
+ (rs6000_gimplify_va_arg): Likewise.
+ (rs6000_call_aix): Update comment.
+ (rs6000_sibcall_aix): Likewise.
+ * config/rs6000/rs6000.md ("tls_gd_aix<TLSmode:tls_abi_suffix>"):
+ Treat ABI_ELFv2 the same as ABI_AIX.
+ ("*tls_gd_call_aix<TLSmode:tls_abi_suffix>"): Likewise.
+ ("tls_ld_aix<TLSmode:tls_abi_suffix>"): Likewise.
+ ("*tls_ld_call_aix<TLSmode:tls_abi_suffix>"): Likewise.
+ ("load_toc_aix_si"): Likewise.
+ ("load_toc_aix_di"): Likewise.
+ ("call"): Likewise.
+ ("call_value"): Likewise.
+ ("*call_local_aix<mode>"): Likewise.
+ ("*call_value_local_aix<mode>"): Likewise.
+ ("*call_nonlocal_aix<mode>"): Likewise.
+ ("*call_value_nonlocal_aix<mode>"): Likewise.
+ ("*call_indirect_aix<mode>"): Likewise.
+ ("*call_value_indirect_aix<mode>"): Likewise.
+ ("sibcall"): Likewise.
+ ("sibcall_value"): Likewise.
+ ("*sibcall_aix<mode>"): Likewise.
+ ("*sibcall_value_aix<mode>"): Likewise.
+ * config/rs6000/predicates.md ("symbol_ref_operand"): Likewise.
+ ("current_file_function_operand"): Likewise.
+
+ Backport from mainline r204807:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_arg_partial_bytes): Simplify logic
+ by making use of the fact that for vector / floating point arguments
+ passed both in VRs/FPRs and in the fixed parameter area, the partial
+ bytes mechanism is in fact not used.
+
+ Backport from mainline r204806:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_psave_function_arg): New function.
+ (rs6000_finish_function_arg): Likewise.
+ (rs6000_function_arg): Use rs6000_psave_function_arg and
+ rs6000_finish_function_arg to handle both vector and floating
+ point arguments that are also passed in GPRs / the stack.
+
+ Backport from mainline r204805:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/rs6000/rs6000.c (USE_FP_FOR_ARG_P): Remove TYPE argument.
+ (USE_ALTIVEC_FOR_ARG_P): Likewise.
+ (rs6000_darwin64_record_arg_advance_recurse): Update uses.
+ (rs6000_function_arg_advance_1):Likewise.
+ (rs6000_darwin64_record_arg_recurse): Likewise.
+ (rs6000_function_arg): Likewise.
+ (rs6000_arg_partial_bytes): Likewise.
+
+ Backport from mainline r204804:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Replace
+ "DEFAULT_ABI != ABI_AIX" test by testing for ABI_V4 or ABI_DARWIN.
+ (rs6000_savres_strategy): Likewise.
+ (rs6000_return_addr): Likewise.
+ (rs6000_emit_load_toc_table): Replace "DEFAULT_ABI != ABI_AIX" by
+ testing for ABI_V4 (since ABI_DARWIN is impossible here).
+ (rs6000_emit_prologue): Likewise.
+ (legitimate_lo_sum_address_p): Simplify DEFAULT_ABI test.
+ (rs6000_elf_declare_function_name): Remove duplicated test.
+ * config/rs6000/rs6000.md ("load_toc_v4_PIC_1"): Explicitly test
+ for ABI_V4 (instead of "DEFAULT_ABI != ABI_AIX" test).
+ ("load_toc_v4_PIC_1_normal"): Likewise.
+ ("load_toc_v4_PIC_1_476"): Likewise.
+ ("load_toc_v4_PIC_1b"): Likewise.
+ ("load_toc_v4_PIC_1b_normal"): Likewise.
+ ("load_toc_v4_PIC_1b_476"): Likewise.
+ ("load_toc_v4_PIC_2"): Likewise.
+ ("load_toc_v4_PIC_3b"): Likewise.
+ ("load_toc_v4_PIC_3c"): Likewise.
+ * config/rs6000/rs6000.h (RS6000_REG_SAVE): Simplify DEFAULT_ABI test.
+ (RS6000_SAVE_AREA): Likewise.
+ (FP_ARG_MAX_REG): Likewise.
+ (RETURN_ADDRESS_OFFSET): Likewise.
+ * config/rs6000/sysv.h (TARGET_TOC): Test for ABI_V4 instead
+ of ABI_AIX.
+ (SUBTARGET_OVERRIDE_OPTIONS): Likewise.
+ (MINIMAL_TOC_SECTION_ASM_OP): Likewise.
+
+ Backport from mainline r204803:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_call_indirect_aix): Rename to ...
+ (rs6000_call_aix): ... this. Handle both direct and indirect calls.
+ Create call insn directly instead of via various gen_... routines.
+ Mention special registers used by the call in CALL_INSN_FUNCTION_USAGE.
+ (rs6000_sibcall_aix): New function.
+ * config/rs6000/rs6000.md (TOC_SAVE_OFFSET_32BIT): Remove.
+ (TOC_SAVE_OFFSET_64BIT): Likewise.
+ (AIX_FUNC_DESC_TOC_32BIT): Likewise.
+ (AIX_FUNC_DESC_TOC_64BIT): Likewise.
+ (AIX_FUNC_DESC_SC_32BIT): Likewise.
+ (AIX_FUNC_DESC_SC_64BIT): Likewise.
+ ("call" expander): Call rs6000_call_aix.
+ ("call_value" expander): Likewise.
+ ("call_indirect_aix<ptrsize>"): Replace this pattern ...
+ ("call_indirect_aix<ptrsize>_nor11"): ... and this pattern ...
+ ("*call_indirect_aix<mode>"): ... by this insn pattern.
+ ("call_value_indirect_aix<ptrsize>"): Replace this pattern ...
+ ("call_value_indirect_aix<ptrsize>_nor11"): ... and this pattern ...
+ ("*call_value_indirect_aix<mode>"): ... by this insn pattern.
+ ("*call_nonlocal_aix32", "*call_nonlocal_aix64"): Replace by ...
+ ("*call_nonlocal_aix<mode>"): ... this pattern.
+ ("*call_value_nonlocal_aix32", "*call_value_nonlocal_aix64"): Replace
+ ("*call_value_nonlocal_aix<mode>"): ... by this pattern.
+ ("*call_local_aix<mode>"): New insn pattern.
+ ("*call_value_local_aix<mode>"): Likewise.
+ ("sibcall" expander): Call rs6000_sibcall_aix.
+ ("sibcall_value" expander): Likewise. Move earlier in file.
+ ("*sibcall_nonlocal_aix<mode>"): Replace by ...
+ ("*sibcall_aix<mode>"): ... this pattern.
+ ("*sibcall_value_nonlocal_aix<mode>"): Replace by ...
+ ("*sibcall_value_aix<mode>"): ... this pattern.
+ * config/rs6000/rs6000-protos.h (rs6000_call_indirect_aix): Remove.
+ (rs6000_call_aix): Add prototype.
+ (rs6000_sibcall_aix): Likewise.
+
+ Backport from mainline r204799:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_emit_prologue): Do not place a
+ RTX_FRAME_RELATED_P marker on the UNSPEC_MOVESI_FROM_CR insn.
+ Instead, add USEs of all modified call-saved CR fields to the
+ insn storing the result to the stack slot, and provide an
+ appropriate REG_FRAME_RELATED_EXPR for that insn.
+ * config/rs6000/rs6000.md ("*crsave"): New insn pattern.
+ * config/rs6000/predicates.md ("crsave_operation"): New predicate.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ ELFv2 ABI Call Support
+ Backport from mainline r204798:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+ Alan Modra <amodra@gmail.com>
+
+ * function.c (assign_parms): Use all.reg_parm_stack_space instead
+ of re-evaluating REG_PARM_STACK_SPACE target macro.
+ (locate_and_pad_parm): New parameter REG_PARM_STACK_SPACE. Use it
+ instead of evaluating target macro REG_PARM_STACK_SPACE every time.
+ (assign_parm_find_entry_rtl): Update call.
+ * calls.c (initialize_argument_information): Update call.
+ (emit_library_call_value_1): Likewise.
+ * expr.h (locate_and_pad_parm): Update prototype.
+
+ Backport from mainline r204797:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * calls.c (store_unaligned_arguments_into_pseudos): Skip PARALLEL
+ arguments.
+
+ Backport from mainline r197003:
+
+ 2013-03-23 Eric Botcazou <ebotcazou@adacore.com>
+
+ * calls.c (expand_call): Add missing guard to code handling return
+ of non-BLKmode structures in MSB.
+ * function.c (expand_function_end): Likewise.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline r201750.
+ Note: Default setting of -mcompat-align-parm inverted!
+
+ 2013-08-14 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR target/57949
+ * doc/invoke.texi: Add documentation of mcompat-align-parm
+ option.
+ * config/rs6000/rs6000.opt: Add mcompat-align-parm option.
+ * config/rs6000/rs6000.c (rs6000_function_arg_boundary): For AIX
+ and Linux, correct BLKmode alignment when 128-bit alignment is
+ required and compatibility flag is not set.
+ (rs6000_gimplify_va_arg): For AIX and Linux, honor specified
+ alignment for zero-size arguments when compatibility flag is not
+ set.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Little Endian Vector Support
+ Backport from mainline r205333
+ 2013-11-24 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_expand_vec_perm_const_1): Correct
+ for little endian.
+
+ Backport from mainline r205241
+ 2013-11-21 Bill Schmidt <wschmidt@vnet.ibm.com>
+
+ * config/rs6000/vector.md (vec_pack_trunc_v2df): Revert previous
+ little endian change.
+ (vec_pack_sfix_trunc_v2df): Likewise.
+ (vec_pack_ufix_trunc_v2df): Likewise.
+ * config/rs6000/rs6000.c (rs6000_expand_interleave): Correct
+ double checking of endianness.
+
+ Backport from mainline r205146
+ 2013-11-20 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/vsx.md (vsx_set_<mode>): Adjust for little endian.
+ (vsx_extract_<mode>): Likewise.
+ (*vsx_extract_<mode>_one_le): New LE variant on
+ *vsx_extract_<mode>_zero.
+ (vsx_extract_v4sf): Adjust for little endian.
+
+ Backport from mainline r205080
+ 2013-11-19 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (altivec_expand_vec_perm_const): Adjust
+ V16QI vector splat case for little endian.
+
+ Backport from mainline r205045:
+
+ 2013-11-19 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/rs6000/vector.md ("mov<mode>"): Do not call
+ rs6000_emit_le_vsx_move to move into or out of GPRs.
+ * config/rs6000/rs6000.c (rs6000_emit_le_vsx_move): Assert
+ source and destination are not GPR hard regs.
+
+ Backport from mainline r204920
+ 2011-11-17 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_frame_related): Add split_reg
+ parameter and use it in REG_FRAME_RELATED_EXPR note.
+ (emit_frame_save): Call rs6000_frame_related with extra NULL_RTX
+ parameter.
+ (rs6000_emit_prologue): Likewise, but for little endian VSX
+ stores, pass the source register of the store instead.
+
+ Backport from mainline r204862
+ 2013-11-15 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/altivec.md (UNSPEC_VPERM_X, UNSPEC_VPERM_UNS_X):
+ Remove.
+ (altivec_vperm_<mode>): Revert earlier little endian change.
+ (*altivec_vperm_<mode>_internal): Remove.
+ (altivec_vperm_<mode>_uns): Revert earlier little endian change.
+ (*altivec_vperm_<mode>_uns_internal): Remove.
+ * config/rs6000/vector.md (vec_realign_load_<mode>): Revise
+ commentary.
+
+ Backport from mainline r204441
+ 2013-11-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_option_override_internal):
+ Remove restriction against use of VSX instructions when generating
+ code for little endian mode.
+
+ Backport from mainline r204440
+ 2013-11-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/altivec.md (mulv4si3): Ensure we generate vmulouh
+ for both big and little endian.
+ (mulv8hi3): Swap input operands for merge high and merge low
+ instructions for little endian.
+
+ Backport from mainline r204439
+ 2013-11-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/altivec.md (vec_widen_umult_even_v16qi): Change
+ define_insn to define_expand that uses even patterns for big
+ endian and odd patterns for little endian.
+ (vec_widen_smult_even_v16qi): Likewise.
+ (vec_widen_umult_even_v8hi): Likewise.
+ (vec_widen_smult_even_v8hi): Likewise.
+ (vec_widen_umult_odd_v16qi): Likewise.
+ (vec_widen_smult_odd_v16qi): Likewise.
+ (vec_widen_umult_odd_v8hi): Likewise.
+ (vec_widen_smult_odd_v8hi): Likewise.
+ (altivec_vmuleub): New define_insn.
+ (altivec_vmuloub): Likewise.
+ (altivec_vmulesb): Likewise.
+ (altivec_vmulosb): Likewise.
+ (altivec_vmuleuh): Likewise.
+ (altivec_vmulouh): Likewise.
+ (altivec_vmulesh): Likewise.
+ (altivec_vmulosh): Likewise.
+
+ Backport from mainline r204395
+ 2013-11-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/vector.md (vec_pack_sfix_trunc_v2df): Adjust for
+ little endian.
+ (vec_pack_ufix_trunc_v2df): Likewise.
+
+ Backport from mainline r204363
+ 2013-11-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/altivec.md (vec_widen_umult_hi_v16qi): Swap
+ arguments to merge instruction for little endian.
+ (vec_widen_umult_lo_v16qi): Likewise.
+ (vec_widen_smult_hi_v16qi): Likewise.
+ (vec_widen_smult_lo_v16qi): Likewise.
+ (vec_widen_umult_hi_v8hi): Likewise.
+ (vec_widen_umult_lo_v8hi): Likewise.
+ (vec_widen_smult_hi_v8hi): Likewise.
+ (vec_widen_smult_lo_v8hi): Likewise.
+
+ Backport from mainline r204350
+ 2013-11-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/vsx.md (*vsx_le_perm_store_<mode> for VSX_D):
+ Replace the define_insn_and_split with a define_insn and two
+ define_splits, with the split after reload re-permuting the source
+ register to its original value.
+ (*vsx_le_perm_store_<mode> for VSX_W): Likewise.
+ (*vsx_le_perm_store_v8hi): Likewise.
+ (*vsx_le_perm_store_v16qi): Likewise.
+
+ Backport from mainline r204321
+ 2013-11-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/vector.md (vec_pack_trunc_v2df): Adjust for
+ little endian.
+
+ Backport from mainline r204321
+ 2013-11-02 Bill Schmidt <wschmidt@vnet.linux.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_expand_vector_set): Adjust for
+ little endian.
+
+ Backport from mainline r203980
+ 2013-10-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/altivec.md (mulv8hi3): Adjust for little endian.
+
+ Backport from mainline r203930
+ 2013-10-22 Bill Schmidt <wschmidt@vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (altivec_expand_vec_perm_const): Reverse
+ meaning of merge-high and merge-low masks for little endian; avoid
+ use of vector-pack masks for little endian for mismatched modes.
+
+ Backport from mainline r203877
+ 2013-10-20 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/altivec.md (vec_unpacku_hi_v16qi): Adjust for
+ little endian.
+ (vec_unpacku_hi_v8hi): Likewise.
+ (vec_unpacku_lo_v16qi): Likewise.
+ (vec_unpacku_lo_v8hi): Likewise.
+
+ Backport from mainline r203863
+ 2013-10-19 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (vspltis_constant): Make sure we check
+ all elements for both endian flavors.
+
+ Backport from mainline r203714
+ 2013-10-16 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc/config/rs6000/vector.md (vec_unpacks_hi_v4sf): Correct for
+ endianness.
+ (vec_unpacks_lo_v4sf): Likewise.
+ (vec_unpacks_float_hi_v4si): Likewise.
+ (vec_unpacks_float_lo_v4si): Likewise.
+ (vec_unpacku_float_hi_v4si): Likewise.
+ (vec_unpacku_float_lo_v4si): Likewise.
+
+ Backport from mainline r203713
+ 2013-10-16 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/vsx.md (vsx_concat_<mode>): Adjust output for LE.
+ (vsx_concat_v2sf): Likewise.
+
+ Backport from mainline r203458
+ 2013-10-11 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/vsx.md (*vsx_le_perm_load_v2di): Generalize to
+ handle vector float as well.
+ (*vsx_le_perm_load_v4si): Likewise.
+ (*vsx_le_perm_store_v2di): Likewise.
+ (*vsx_le_perm_store_v4si): Likewise.
+
+ Backport from mainline r203457
+ 2013-10-11 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/vector.md (vec_realign_load<mode>): Generate vperm
+ directly to circumvent subtract from splat{31} workaround.
+ * config/rs6000/rs6000-protos.h (altivec_expand_vec_perm_le): New
+ prototype.
+ * config/rs6000/rs6000.c (altivec_expand_vec_perm_le): New.
+ * config/rs6000/altivec.md (define_c_enum "unspec"): Add
+ UNSPEC_VPERM_X and UNSPEC_VPERM_UNS_X.
+ (altivec_vperm_<mode>): Convert to define_insn_and_split to
+ separate big and little endian logic.
+ (*altivec_vperm_<mode>_internal): New define_insn.
+ (altivec_vperm_<mode>_uns): Convert to define_insn_and_split to
+ separate big and little endian logic.
+ (*altivec_vperm_<mode>_uns_internal): New define_insn.
+ (vec_permv16qi): Add little endian logic.
+
+ Backport from mainline r203247
+ 2013-10-07 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (altivec_expand_vec_perm_const_le): New.
+ (altivec_expand_vec_perm_const): Call it.
+
+ Backport from mainline r203246
+ 2013-10-07 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/vector.md (mov<mode>): Emit permuted move
+ sequences for LE VSX loads and stores at expand time.
+ * config/rs6000/rs6000-protos.h (rs6000_emit_le_vsx_move): New
+ prototype.
+ * config/rs6000/rs6000.c (rs6000_const_vec): New.
+ (rs6000_gen_le_vsx_permute): New.
+ (rs6000_gen_le_vsx_load): New.
+ (rs6000_gen_le_vsx_store): New.
+ (rs6000_gen_le_vsx_move): New.
+ * config/rs6000/vsx.md (*vsx_le_perm_load_v2di): New.
+ (*vsx_le_perm_load_v4si): New.
+ (*vsx_le_perm_load_v8hi): New.
+ (*vsx_le_perm_load_v16qi): New.
+ (*vsx_le_perm_store_v2di): New.
+ (*vsx_le_perm_store_v4si): New.
+ (*vsx_le_perm_store_v8hi): New.
+ (*vsx_le_perm_store_v16qi): New.
+ (*vsx_xxpermdi2_le_<mode>): New.
+ (*vsx_xxpermdi4_le_<mode>): New.
+ (*vsx_xxpermdi8_le_V8HI): New.
+ (*vsx_xxpermdi16_le_V16QI): New.
+ (*vsx_lxvd2x2_le_<mode>): New.
+ (*vsx_lxvd2x4_le_<mode>): New.
+ (*vsx_lxvd2x8_le_V8HI): New.
+ (*vsx_lxvd2x16_le_V16QI): New.
+ (*vsx_stxvd2x2_le_<mode>): New.
+ (*vsx_stxvd2x4_le_<mode>): New.
+ (*vsx_stxvd2x8_le_V8HI): New.
+ (*vsx_stxvd2x16_le_V16QI): New.
+
+ Backport from mainline r201235
+ 2013-07-24 Bill Schmidt <wschmidt@linux.ibm.com>
+ Anton Blanchard <anton@au1.ibm.com>
+
+ * config/rs6000/altivec.md (altivec_vpkpx): Handle little endian.
+ (altivec_vpks<VI_char>ss): Likewise.
+ (altivec_vpks<VI_char>us): Likewise.
+ (altivec_vpku<VI_char>us): Likewise.
+ (altivec_vpku<VI_char>um): Likewise.
+
+ Backport from mainline r201208
+ 2013-07-24 Bill Schmidt <wschmidt@vnet.linux.ibm.com>
+ Anton Blanchard <anton@au1.ibm.com>
+
+ * config/rs6000/vector.md (vec_realign_load_<mode>): Reorder input
+ operands to vperm for little endian.
+ * config/rs6000/rs6000.c (rs6000_expand_builtin): Use lvsr instead
+ of lvsl to create the control mask for a vperm for little endian.
+
+ Backport from mainline r201195
+ 2013-07-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+ Anton Blanchard <anton@au1.ibm.com>
+
+ * config/rs6000/rs6000.c (altivec_expand_vec_perm_const): Reverse
+ two operands for little-endian.
+
+ Backport from mainline r201193
+ 2013-07-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+ Anton Blanchard <anton@au1.ibm.com>
+
+ * config/rs6000/rs6000.c (altivec_expand_vec_perm_const): Correct
+ selection of field for vector splat in little endian mode.
+
+ Backport from mainline r201149
+ 2013-07-22 Bill Schmidt <wschmidt@vnet.linux.ibm.com>
+ Anton Blanchard <anton@au1.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_expand_vector_init): Fix
+ endianness when selecting field to splat.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline r205123:
+
+ 2013-11-20 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_cannot_change_mode_class): Do not
+ allow subregs of TDmode in FPRs of smaller size in little-endian.
+ (rs6000_split_multireg_move): When splitting an access to TDmode
+ in FPRs, do not use simplify_gen_subreg.
+
+ Backport from mainline r204927:
+
+ 2013-11-17 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_emit_move): Use low word of
+ sdmode_stack_slot also in little-endian mode.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Power8 HTM Support
+ Backport from mainline
+ 2013-12-03 Peter Bergner <bergner@vnet.ibm.com>
+
+ * config/rs6000/htmintrin.h (_TEXASR_INSTRUCTION_FETCH_CONFLICT): Fix
+ typo in macro name.
+ (_TEXASRU_INSTRUCTION_FETCH_CONFLICT): Likewise.
+
+ Backport from mainline r205233.
+ 2013-11-21 Peter Bergner <bergner@vnet.ibm.com>
+
+ * doc/extend.texi: Document htm builtins.
+
+ Backport from mainline
+ 2013-07-17 Iain Sandoe <iain@codesourcery.com>
+
+ * config/rs6000/darwin.h (REGISTER_NAMES): Add HTM registers.
+
+ Backport from mainline
+ 2013-07-16 Peter Bergner <bergner@vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Do not
+ enable extra ISA flags with TARGET_HTM.
+
+ 2013-07-16 Jakub Jelinek <jakub@redhat.com>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * config/rs6000/rs6000.h (FIRST_PSEUDO_REGISTERS): Mention HTM
+ registers in the comment.
+ (DWARF_FRAME_REGISTERS): Subtract also the 3 HTM registers.
+ (DWARF_REG_TO_UNWIND_COLUMN): Use DWARF_FRAME_REGISTERS
+ rather than FIRST_PSEUDO_REGISTERS.
+
+ * config.gcc (powerpc*-*-*): Install htmintrin.h and htmxlintrin.h.
+ * config/rs6000/t-rs6000 (MD_INCLUDES): Add htm.md.
+ * config/rs6000/rs6000.opt: Add -mhtm option.
+ * config/rs6000/rs6000-cpus.def (POWERPC_MASKS): Add OPTION_MASK_HTM.
+ (ISA_2_7_MASKS_SERVER): Add OPTION_MASK_HTM.
+ * config/rs6000/rs6000-c.c (rs6000_target_modify_macros): Define
+ __HTM__ if the HTM instructions are available.
+ * config/rs6000/predicates.md (u3bit_cint_operand, u10bit_cint_operand)
+ (htm_spr_reg_operand): New define_predicates.
+ * config/rs6000/rs6000.md (define_attr "type"): Add htm.
+ (TFHAR_REGNO, TFIAR_REGNO, TEXASR_REGNO): New define_constants.
+ Include htm.md.
+ * config/rs6000/rs6000-builtin.def (BU_HTM_0, BU_HTM_1, BU_HTM_2)
+ (BU_HTM_3, BU_HTM_SPR0, BU_HTM_SPR1): Add support macros for defining
+ HTM builtin functions.
+ * config/rs6000/rs6000.c (RS6000_BUILTIN_H): New macro.
+ (rs6000_reg_names, alt_reg_names): Add HTM SPR register names.
+ (rs6000_init_hard_regno_mode_ok): Add support for HTM instructions.
+ (rs6000_builtin_mask_calculate): Likewise.
+ (rs6000_option_override_internal): Likewise.
+ (bdesc_htm): Add new HTM builtin support.
+ (htm_spr_num): New function.
+ (htm_spr_regno): Likewise.
+ (rs6000_htm_spr_icode): Likewise.
+ (htm_expand_builtin): Likewise.
+ (htm_init_builtins): Likewise.
+ (rs6000_expand_builtin): Add support for HTM builtin functions.
+ (rs6000_init_builtins): Likewise.
+ (rs6000_invalid_builtin, rs6000_opt_mask): Add support for -mhtm option.
+ * config/rs6000/rs6000.h (ASM_CPU_SPEC): Add support for -mhtm.
+ (TARGET_HTM, MASK_HTM): Define macros.
+ (FIRST_PSEUDO_REGISTER): Adjust for new HTM SPR registers.
+ (FIXED_REGISTERS): Likewise.
+ (CALL_USED_REGISTERS): Likewise.
+ (CALL_REALLY_USED_REGISTERS): Likewise.
+ (REG_ALLOC_ORDER): Likewise.
+ (enum reg_class): Likewise.
+ (REG_CLASS_NAMES): Likewise.
+ (REG_CLASS_CONTENTS): Likewise.
+ (REGISTER_NAMES): Likewise.
+ (ADDITIONAL_REGISTER_NAMES): Likewise.
+ (RS6000_BTC_SPR, RS6000_BTC_VOID, RS6000_BTC_32BIT, RS6000_BTC_64BIT)
+ (RS6000_BTC_MISC_MASK, RS6000_BTM_HTM): New macros.
+ (RS6000_BTM_COMMON): Add RS6000_BTM_HTM.
+ * config/rs6000/htm.md: New file.
+ * config/rs6000/htmintrin.h: New file.
+ * config/rs6000/htmxlintrin.h: New file.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Power8 Base Support
+ Apply mainline
+ 2013-11-23 Alan Modra <amodra@gmail.com>
+ * config/rs6000/vsx.md (fusion peepholes): Disable when !TARGET_VSX.
+
+ Backport from mainline
+ 2013-11-12 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/59054
+ * config/rs6000/rs6000.md (movdi_internal32): Eliminate
+ constraints that would allow DImode into the traditional Altivec
+ registers, but cause undesirable code generation when loading 0 as
+ a constant.
+ (movdi_internal64): Likewise.
+ (cmp<mode>_fpr): Do not use %x for CR register output.
+ (extendsfdf2_fpr): Fix constraints when -mallow-upper-df and
+ -mallow-upper-sf debug switches are used.
+
+ Backport from mainline
+ 2013-10-17 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (enum rs6000_reload_reg_type): Add new
+ fields to the reg_addr array that describes the valid addressing
+ mode for any register, general purpose registers, floating point
+ registers, and Altivec registers.
+ (FIRST_RELOAD_REG_CLASS): Likewise.
+ (LAST_RELOAD_REG_CLASS): Likewise.
+ (struct reload_reg_map_type): Likewise.
+ (reload_reg_map_type): Likewise.
+ (RELOAD_REG_VALID): Likewise.
+ (RELOAD_REG_MULTIPLE): Likewise.
+ (RELOAD_REG_INDEXED): Likewise.
+ (RELOAD_REG_OFFSET): Likewise.
+ (RELOAD_REG_PRE_INCDEC): Likewise.
+ (RELOAD_REG_PRE_MODIFY): Likewise.
+ (reg_addr): Likewise.
+ (mode_supports_pre_incdec_p): New helper functions to say whether
+ a given mode supports PRE_INC, PRE_DEC, and PRE_MODIFY.
+ (mode_supports_pre_modify_p): Likewise.
+ (rs6000_debug_vector_unit): Rearrange the -mdebug=reg output to
+ print the valid address mode bits for each mode.
+ (rs6000_debug_print_mode): Likewise.
+ (rs6000_debug_reg_global): Likewise.
+ (rs6000_setup_reg_addr_masks): New function to set up the address
+ mask bits for each type.
+ (rs6000_init_hard_regno_mode_ok): Use memset to clear arrays.
+ Call rs6000_setup_reg_addr_masks to set up the address mask bits.
+ (rs6000_legitimate_address_p): Use mode_supports_pre_incdec_p and
+ mode_supports_pre_modify_p to determine if PRE_INC, PRE_DEC, and
+ PRE_MODIFY are supported.
+ (rs6000_output_move_128bit): Change to use {src,dest}_vmx_p for altivec
+ registers, instead of {src,dest}_av_p.
+ (rs6000_print_options_internal): Tweak the debug output slightly.
+
+ Backport from mainline
+ 2013-10-03 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000-builtin.def (XSRDPIM): Use floatdf2,
+ ceildf2, btruncdf2, instead of vsx_* name.
+
+ * config/rs6000/vsx.md (vsx_add<mode>3): Change arithmetic
+ iterators to only do V2DF and V4SF here. Move the DF code to
+ rs6000.md where it is combined with SF mode. Replace <VSv> with
+ just 'v' since only vector operations are handled with these insns
+ after moving the DF support to rs6000.md.
+ (vsx_sub<mode>3): Likewise.
+ (vsx_mul<mode>3): Likewise.
+ (vsx_div<mode>3): Likewise.
+ (vsx_fre<mode>2): Likewise.
+ (vsx_neg<mode>2): Likewise.
+ (vsx_abs<mode>2): Likewise.
+ (vsx_nabs<mode>2): Likewise.
+ (vsx_smax<mode>3): Likewise.
+ (vsx_smin<mode>3): Likewise.
+ (vsx_sqrt<mode>2): Likewise.
+ (vsx_rsqrte<mode>2): Likewise.
+ (vsx_fms<mode>4): Likewise.
+ (vsx_nfma<mode>4): Likewise.
+ (vsx_copysign<mode>3): Likewise.
+ (vsx_btrunc<mode>2): Likewise.
+ (vsx_floor<mode>2): Likewise.
+ (vsx_ceil<mode>2): Likewise.
+ (vsx_smaxsf3): Delete scalar ops that were moved to rs6000.md.
+ (vsx_sminsf3): Likewise.
+ (vsx_fmadf4): Likewise.
+ (vsx_fmsdf4): Likewise.
+ (vsx_nfmadf4): Likewise.
+ (vsx_nfmsdf4): Likewise.
+ (vsx_cmpdf_internal1): Likewise.
+
+ * config/rs6000/rs6000.h (TARGET_SF_SPE): Define macros to make it
+ simpler to select whether a target has SPE or traditional floating
+ point support in iterators.
+ (TARGET_DF_SPE): Likewise.
+ (TARGET_SF_FPR): Likewise.
+ (TARGET_DF_FPR): Likewise.
+ (TARGET_SF_INSN): Macros to say whether floating point support
+ exists for a given operation for expanders.
+ (TARGET_DF_INSN): Likewise.
+
+ * config/rs6000/rs6000.c (Ftrad): New mode attributes to allow
+ combining of SF/DF mode operations, using both traditional and VSX
+ registers.
+ (Fvsx): Likewise.
+ (Ff): Likewise.
+ (Fv): Likewise.
+ (Fs): Likewise.
+ (Ffre): Likewise.
+ (FFRE): Likewise.
+ (abs<mode>2): Combine SF/DF modes using traditional floating point
+ instructions. Add support for using the upper DF registers with
+ VSX support, and SF registers with power8-vector support. Update
+ expanders for operations supported by both the SPE and traditional
+ floating point units.
+ (abs<mode>2_fpr): Likewise.
+ (nabs<mode>2): Likewise.
+ (nabs<mode>2_fpr): Likewise.
+ (neg<mode>2): Likewise.
+ (neg<mode>2_fpr): Likewise.
+ (add<mode>3): Likewise.
+ (add<mode>3_fpr): Likewise.
+ (sub<mode>3): Likewise.
+ (sub<mode>3_fpr): Likewise.
+ (mul<mode>3): Likewise.
+ (mul<mode>3_fpr): Likewise.
+ (div<mode>3): Likewise.
+ (div<mode>3_fpr): Likewise.
+ (sqrt<mode>3): Likewise.
+ (sqrt<mode>3_fpr): Likewise.
+ (fre<Fs>): Likewise.
+ (rsqrt<mode>2): Likewise.
+ (cmp<mode>_fpr): Likewise.
+ (smax<mode>3): Likewise.
+ (smin<mode>3): Likewise.
+ (smax<mode>3_vsx): Likewise.
+ (smin<mode>3_vsx): Likewise.
+ (negsf2): Delete SF operations that are merged with DF.
+ (abssf2): Likewise.
+ (addsf3): Likewise.
+ (subsf3): Likewise.
+ (mulsf3): Likewise.
+ (divsf3): Likewise.
+ (fres): Likewise.
+ (fmasf4_fpr): Likewise.
+ (fmssf4_fpr): Likewise.
+ (nfmasf4_fpr): Likewise.
+ (nfmssf4_fpr): Likewise.
+ (sqrtsf2): Likewise.
+ (rsqrtsf_internal1): Likewise.
+ (smaxsf3): Likewise.
+ (sminsf3): Likewise.
+ (cmpsf_internal1): Likewise.
+ (copysign<mode>3_fcpsgn): Add VSX/power8-vector support.
+ (negdf2): Delete DF operations that are merged with SF.
+ (absdf2): Likewise.
+ (nabsdf2): Likewise.
+ (adddf3): Likewise.
+ (subdf3): Likewise.
+ (muldf3): Likewise.
+ (divdf3): Likewise.
+ (fred): Likewise.
+ (rsqrtdf_internal1): Likewise.
+ (fmadf4_fpr): Likewise.
+ (fmsdf4_fpr): Likewise.
+ (nfmadf4_fpr): Likewise.
+ (nfmsdf4_fpr): Likewise.
+ (sqrtdf2): Likewise.
+ (smaxdf3): Likewise.
+ (smindf3): Likewise.
+ (cmpdf_internal1): Likewise.
+ (lrint<mode>di2): Use TARGET_<MODE>_FPR macro.
+ (btrunc<mode>2): Delete separate expander, and combine with the
+ insn and add VSX instruction support. Use TARGET_<MODE>_FPR.
+ (btrunc<mode>2_fpr): Likewise.
+ (ceil<mode>2): Likewise.
+ (ceil<mode>2_fpr): Likewise.
+ (floor<mode>2): Likewise.
+ (floor<mode>2_fpr): Likewise.
+ (fma<mode>4_fpr): Combine SF and DF fused multiply/add support.
+ Add support for using the upper registers with VSX and
+ power8-vector. Move insns to be closer to the define_expands. On
+ VSX systems, prefer the traditional form of FMA over the VSX
+ version, since the traditional form allows the target not to
+ overlap with the inputs.
+ (fms<mode>4_fpr): Likewise.
+ (nfma<mode>4_fpr): Likewise.
+ (nfms<mode>4_fpr): Likewise.
+
+ Backport from mainline
+ 2013-09-27 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok): Allow
+ DFmode, DImode, and SFmode in the upper VSX registers based on the
+ -mupper-regs-{df,sf} flags. Fix wu constraint to be ALTIVEC_REGS
+ if -mpower8-vector. Combine -mvsx-timode handling with the rest
+ of the VSX register handling.
+
+ * config/rs6000/rs6000.md (f32_lv): Use %x0 for VSX regsters.
+ (f32_sv): Likewise.
+ (zero_extendsidi2_lfiwzx): Add support for loading into the
+ Altivec registers with -mpower8-vector. Use wu/wv constraints to
+ only do VSX memory options on Altivec registers.
+ (extendsidi2_lfiwax): Likewise.
+ (extendsfdf2_fpr): Likewise.
+ (mov<mode>_hardfloat, SF/SD modes): Likewise.
+ (mov<mode>_hardfloat32, DF/DD modes): Likewise.
+ (mov<mode>_hardfloat64, DF/DD modes): Likewise.
+ (movdi_internal64): Likewise.
+
+ Backport from mainline
+ 2013-09-23 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_vector_reload): Delete, combine
+ reload helper function arrays into a single array reg_addr.
+ (reload_fpr_gpr): Likewise.
+ (reload_gpr_vsx): Likewise.
+ (reload_vsx_gpr): Likewise.
+ (struct rs6000_reg_addr): Likewise.
+ (reg_addr): Likewise.
+ (rs6000_debug_reg_global): Change rs6000_vector_reload,
+ reload_fpr_gpr, reload_gpr_vsx, reload_vsx_gpr uses to reg_addr.
+ (rs6000_init_hard_regno_mode_ok): Likewise.
+ (rs6000_secondary_reload_direct_move): Likewise.
+ (rs6000_secondary_reload): Likewise.
+
+ * config/rs6000/rs6000.h (enum r6000_reg_class_enum): Add new
+ constraints: wu, ww, and wy. Repurpose wv constraint added during
+ power8 changes. Put wg constraint in alphabetical order.
+
+ * config/rs6000/rs6000.opt (-mvsx-scalar-float): New debug switch
+ for future work to add ISA 2.07 VSX single precision support.
+ (-mvsx-scalar-double): Change default from -1 to 1, update
+ documentation comment.
+ (-mvsx-scalar-memory): Rename debug switch to -mupper-regs-df.
+ (-mupper-regs-df): New debug switch to control whether DF values
+ can go in the traditional Altivec registers.
+ (-mupper-regs-sf): New debug switch to control whether SF values
+ can go in the traditional Altivec registers.
+
+ * config/rs6000/rs6000.c (rs6000_debug_reg_global): Print wu, ww,
+ and wy constraints.
+ (rs6000_init_hard_regno_mode_ok): Use ssize_t instead of int for
+ loop variables. Rename -mvsx-scalar-memory to -mupper-regs-df.
+ Add new constraints, wu/ww/wy. Repurpose wv constraint.
+ (rs6000_debug_legitimate_address_p): Print if we are running
+ before, during, or after reload.
+ (rs6000_secondary_reload): Add a comment.
+ (rs6000_opt_masks): Add -mupper-regs-df, -mupper-regs-sf.
+
+ * config/rs6000/constraints.md (wa constraint): Sort w<x>
+ constraints. Update documentation string.
+ (wd constraint): Likewise.
+ (wf constraint): Likewise.
+ (wg constraint): Likewise.
+ (wn constraint): Likewise.
+ (ws constraint): Likewise.
+ (wt constraint): Likewise.
+ (wx constraint): Likewise.
+ (wz constraint): Likewise.
+ (wu constraint): New constraint for ISA 2.07 SFmode scalar
+ instructions.
+ (ww constraint): Likewise.
+ (wy constraint): Likewise.
+ (wv constraint): Repurpose ISA 2.07 constraint that did not use in
+ the previous submissions.
+ * doc/md.texi (PowerPC and IBM RS6000): Likewise.
+
+ Backport from mainline
+ 2013-10-17 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/58673
+ * config/rs6000/rs6000.c (rs6000_legitimate_address_p): Only
+ restrict TImode addresses to single indirect registers if both
+ -mquad-memory and -mvsx-timode are used.
+ (rs6000_output_move_128bit): Use quad_load_store_p to determine if
+ we should emit load/store quad. Remove using %y for quad memory
+ addresses.
+
+ * config/rs6000/rs6000.md (mov<mode>_ppc64, TI/PTImode): Add
+ constraints to allow load/store quad on machines where TImode is
+ not allowed in VSX registers. Use 'n' instead of 'F' constraint
+ for TImode to load integer constants.
+
+ Backport from mainline
+ 2013-10-02 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/58587
+ * config/rs6000/rs6000-cpus.def (ISA_2_6_MASKS_SERVER): Turn off
+ setting -mvsx-timode by default until the underlying problem is
+ fixed.
+ (RS6000_CPU, power7 defaults): Likewise.
+
+ Backport from trunk
+ 2013-08-16 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/58160
+ * config/rs6000/predicates.md (fusion_gpr_mem_load): Allow the
+ memory rtx to contain ZERO_EXTEND and SIGN_EXTEND.
+
+ * config/rs6000/rs6000-protos.h (fusion_gpr_load_p): Pass operands
+ array instead of each individual operand as a separate argument.
+ (emit_fusion_gpr_load): Likewise.
+ (expand_fusion_gpr_load): Add new function declaration.
+
+ * config/rs6000/rs6000.c (fusion_gpr_load_p): Change the calling
+ signature to have the operands passed as an array, instead of as
+ separate arguments. Allow ZERO_EXTEND to be in the memory
+ address, and also SIGN_EXTEND if -mpower8-fusion-sign. Do not
+ depend on the register live/dead flags when peepholes are run.
+ (expand_fusion_gpr_load): New function to be called from the
+ peephole2 pass, to change the register that addis sets to be the
+ target register.
+ (emit_fusion_gpr_load): Change the calling signature to have the
+ operands passed as an array, instead of as separate arguments.
+ Allow ZERO_EXTEND to be in the memory address, and also
+ SIGN_EXTEND if -mpower8-fusion-sign.
+
+ * config/rs6000/rs6000.md (UNSPEC_FUSION_GPR): Delete unused
+ unspec enumeration.
+ (power8 fusion peephole/peephole2): Rework the fusion peepholes to
+ adjust the register addis loads up in the peephole2 pass. Do not
+ depend on the register live/dead state when the peephole pass is
+ done.
+
+ Backport from trunk
+ 2013-07-23 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/vector.md (xor<mode>3): Move 128-bit boolean
+ expanders to rs6000.md.
+ (ior<mode>3): Likewise.
+ (and<mode>3): Likewise.
+ (one_cmpl<mode>2): Likewise.
+ (nor<mode>3): Likewise.
+ (andc<mode>3): Likewise.
+ (eqv<mode>3): Likewise.
+ (nand<mode>3): Likewise.
+ (orc<mode>3): Likewise.
+
+ * config/rs6000/rs6000-protos.h (rs6000_split_logical): New
+ declaration.
+
+ * config/rs6000/rs6000.c (rs6000_split_logical_inner): Add support
+ to split multi-word logical operations.
+ (rs6000_split_logical_di): Likewise.
+ (rs6000_split_logical): Likewise.
+
+ * config/rs6000/vsx.md (VSX_L2): Delete, no longer used.
+ (vsx_and<mode>3_32bit): Move 128-bit logical insns to rs6000.md,
+ and allow TImode operations in 32-bit.
+ (vsx_and<mode>3_64bit): Likewise.
+ (vsx_ior<mode>3_32bit): Likewise.
+ (vsx_ior<mode>3_64bit): Likewise.
+ (vsx_xor<mode>3_32bit): Likewise.
+ (vsx_xor<mode>3_64bit): Likewise.
+ (vsx_one_cmpl<mode>2_32bit): Likewise.
+ (vsx_one_cmpl<mode>2_64bit): Likewise.
+ (vsx_nor<mode>3_32bit): Likewise.
+ (vsx_nor<mode>3_64bit): Likewise.
+ (vsx_andc<mode>3_32bit): Likewise.
+ (vsx_andc<mode>3_64bit): Likewise.
+ (vsx_eqv<mode>3_32bit): Likewise.
+ (vsx_eqv<mode>3_64bit): Likewise.
+ (vsx_nand<mode>3_32bit): Likewise.
+ (vsx_nand<mode>3_64bit): Likewise.
+ (vsx_orc<mode>3_32bit): Likewise.
+ (vsx_orc<mode>3_64bit): Likewise.
+
+ * config/rs6000/rs6000.h (VLOGICAL_REGNO_P): Always allow vector
+ logical types in GPRs.
+
+ * config/rs6000/altivec.md (altivec_and<mode>3): Move 128-bit
+ logical insns to rs6000.md, and allow TImode operations in
+ 32-bit.
+ (altivec_ior<mode>3): Likewise.
+ (altivec_xor<mode>3): Likewise.
+ (altivec_one_cmpl<mode>2): Likewise.
+ (altivec_nor<mode>3): Likewise.
+ (altivec_andc<mode>3): Likewise.
+
+ * config/rs6000/rs6000.md (BOOL_128): New mode iterators and mode
+ attributes for moving the 128-bit logical operations into
+ rs6000.md.
+ (BOOL_REGS_OUTPUT): Likewise.
+ (BOOL_REGS_OP1): Likewise.
+ (BOOL_REGS_OP2): Likewise.
+ (BOOL_REGS_UNARY): Likewise.
+ (BOOL_REGS_AND_CR0): Likewise.
+ (one_cmpl<mode>2): Add support for DI logical operations on
+ 32-bit, splitting the operations to 32-bit.
+ (anddi3): Likewise.
+ (iordi3): Likewise.
+ (xordi3): Likewise.
+ (and<mode>3, 128-bit types): Rewrite 2013-06-06 logical operator
+ changes to combine the 32/64-bit code, allow logical operations on
+ TI mode in 32-bit, and to use similar match_operator patterns like
+ scalar mode uses. Combine the Altivec and VSX code for logical
+ operations, and move it here.
+ (ior<mode>3, 128-bit types): Likewise.
+ (xor<mode>3, 128-bit types): Likewise.
+ (one_cmpl<mode>3, 128-bit types): Likewise.
+ (nor<mode>3, 128-bit types): Likewise.
+ (andc<mode>3, 128-bit types): Likewise.
+ (eqv<mode>3, 128-bit types): Likewise.
+ (nand<mode>3, 128-bit types): Likewise.
+ (orc<mode>3, 128-bit types): Likewise.
+ (and<mode>3_internal): Likewise.
+ (bool<mode>3_internal): Likewise.
+ (boolc<mode>3_internal1): Likewise.
+ (boolc<mode>3_internal2): Likewise.
+ (boolcc<mode>3_internal1): Likewise.
+ (boolcc<mode>3_internal2): Likewise.
+ (eqv<mode>3_internal1): Likewise.
+ (eqv<mode>3_internal2): Likewise.
+ (one_cmpl1<mode>3_internal): Likewise.
+
+ Back port from mainline:
+ 2013-06-06 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Pat Haugen <pthaugen@us.ibm.com>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * lib/target-supports.exp (check_p8vector_hw_available) Add power8
+ support.
+ (check_effective_target_powerpc_p8vector_ok): Likewise.
+ (is-effective-target): Likewise.
+ (check_vect_support_and_set_flags): Likewise.
+
+ Backport from mainline
+ 2013-07-31 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/predicates.md (fusion_gpr_addis): New predicates
+ to support power8 load fusion.
+ (fusion_gpr_mem_load): Likewise.
+
+ * config/rs6000/rs6000-modes.def (PTImode): Update a comment.
+
+ * config/rs6000/rs6000-protos.h (fusion_gpr_load_p): New
+ declarations for power8 load fusion.
+ (emit_fusion_gpr_load): Likewise.
+
+ * config/rs6000/rs6000.c (rs6000_option_override_internal): If
+ tuning for power8, turn on fusion mode by default. Turn on sign
+ extending fusion mode if normal fusion mode is on, and we are at
+ -O2 or -O3.
+ (fusion_gpr_load_p): New function, return true if we can fuse an
+ addis instruction with a dependent load to a GPR.
+ (emit_fusion_gpr_load): Emit the instructions for power8 load
+ fusion to GPRs.
+
+ * config/rs6000/vsx.md (VSX_M2): New iterator for fusion
+ peepholes.
+ (VSX load fusion peepholes): New peepholes to fuse together an
+ addi instruction with a VSX load instruction.
+
+ * config/rs6000/rs6000.md (GPR load fusion peepholes): New
+ peepholes to fuse an addis instruction with a load to a GPR base
+ register. If we are supporting sign extending fusions, convert
+ sign extending loads to zero extending loads and add an explicit
+ sign extension.
+
+ Backport from mainline
+ 2013-07-18 Pat Haugen <pthaugen@us.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Adjust flag
+ interaction for new Power8 flags and VSX.
+
+ Back port from the trunk
+ 2013-06-28 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/57744
+ * config/rs6000/rs6000.h (MODES_TIEABLE_P): Do not allow PTImode
+ to tie with any other modes. Eliminate Altivec vector mode tests,
+ since these are a subset of ALTIVEC or VSX vector modes. Simplify
+ code, to return 0 if testing MODE2 for a condition, if we've
+ already tested MODE1 for the same condition.
+
+ Backport from mainline
+ 2013-06-28 Pat Haugen <pthaugen@us.ibm.com>
+
+ * config/rs6000/rs6000.md (define_insn ""): Fix insn type.
+
+ Back port from the trunk
+ 2013-06-26 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Pat Haugen <pthaugen@us.ibm.com>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * config/rs6000/power8.md: New.
+ * config/rs6000/rs6000-cpus.def (RS6000_CPU table): Adjust processor
+ setting for power8 entry.
+ * config/rs6000/t-rs6000 (MD_INCLUDES): Add power8.md.
+ * config/rs6000/rs6000.c (is_microcoded_insn, is_cracked_insn): Adjust
+ test for Power4/Power5 only.
+ (insn_must_be_first_in_group, insn_must_be_last_in_group): Add Power8
+ support.
+ (force_new_group): Adjust comment.
+ * config/rs6000/rs6000.md: Include power8.md.
+
+ Back port from the trunk
+ 2013-06-14 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/57615
+ * config/rs6000/rs6000.md (mov<mode>_ppc64): Call
+ rs6000_output_move_128bit to handle emitting quad memory
+ operations. Set attribute length to 8 bytes.
+
+ Back port from the trunk
+ 2013-06-13 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Move
+ test for clearing quad memory on 32-bit later.
+
+ Back port from the trunk
+
+ 2013-06-12 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Pat Haugen <pthaugen@us.ibm.com>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (emit_load_locked): Add support for
+ power8 byte, half-word, and quad-word atomic instructions.
+ (emit_store_conditional): Likewise.
+ (rs6000_expand_atomic_compare_and_swap): Likewise.
+ (rs6000_expand_atomic_op): Likewise.
+
+ * config/rs6000/sync.md (larx): Add new modes for power8.
+ (stcx): Likewise.
+ (AINT): New mode iterator to include TImode as well as normal
+ integer modes on power8.
+ (fetchop_pred): Use int_reg_operand instead of gpc_reg_operand so
+ that VSX registers are not considered. Use AINT mode iterator
+ instead of INT1 to allow inclusion of quad word atomic operations
+ on power8.
+ (load_locked<mode>): Likewise.
+ (store_conditional<mode>): Likewise.
+ (atomic_compare_and_swap<mode>): Likewise.
+ (atomic_exchange<mode>): Likewise.
+ (atomic_nand<mode>): Likewise.
+ (atomic_fetch_<fetchop_name><mode>): Likewise.
+ (atomic_nand_fetch<mode>): Likewise.
+ (mem_thread_fence): Use gen_loadsync_<mode> instead of enumerating
+ each type.
+ (ATOMIC): On power8, add QImode, HImode modes.
+ (load_locked<QHI:mode>_si): Varients of load_locked for QI/HI
+ modes that promote to SImode.
+ (load_lockedti): Convert TImode arguments to PTImode, so that we
+ get a guaranteed even/odd register pair.
+ (load_lockedpti): Likewise.
+ (store_conditionalti): Likewise.
+ (store_conditionalpti): Likewise.
+
+ * config/rs6000/rs6000.md (QHI): New mode iterator for power8
+ atomic load/store instructions.
+ (HSI): Likewise.
+
+ Back port from the trunk
+
+ 2013-06-10 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Pat Haugen <pthaugen@us.ibm.com>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * config/rs6000/vector.md (GPR move splitter): Do not split moves
+ of vectors in GPRS if they are direct moves or quad word load or
+ store moves.
+
+ * config/rs6000/rs6000-protos.h (rs6000_output_move_128bit): Add
+ declaration.
+ (direct_move_p): Likewise.
+ (quad_load_store_p): Likewise.
+
+ * config/rs6000/rs6000.c (enum rs6000_reg_type): Simplify register
+ classes into bins based on the physical register type.
+ (reg_class_to_reg_type): Likewise.
+ (IS_STD_REG_TYPE): Likewise.
+ (IS_FP_VECT_REG_TYPE): Likewise.
+ (reload_fpr_gpr): Arrays to determine what insn to use if we can
+ use direct move instructions.
+ (reload_gpr_vsx): Likewise.
+ (reload_vsx_gpr): Likewise.
+ (rs6000_init_hard_regno_mode_ok): Precalculate the register type
+ information that is a simplification of register classes. Also
+ precalculate direct move reload helpers.
+ (direct_move_p): New function to return true if the operation can
+ be done as a direct move instruciton.
+ (quad_load_store_p): New function to return true if the operation
+ is a quad memory operation.
+ (rs6000_legitimize_address): If quad memory, only allow register
+ indirect for TImode addresses.
+ (rs6000_legitimate_address_p): Likewise.
+ (enum reload_reg_type): Delete, replace with rs6000_reg_type.
+ (rs6000_reload_register_type): Likewise.
+ (register_to_reg_type): Return register type.
+ (rs6000_secondary_reload_simple_move): New helper function for
+ secondary reload and secondary memory needed to identify anything
+ that is a simple move, and does not need reloading.
+ (rs6000_secondary_reload_direct_move): New helper function for
+ secondary reload to identify cases that can be done with several
+ instructions via the direct move instructions.
+ (rs6000_secondary_reload_move): New helper function for secondary
+ reload to identify moves between register types that can be done.
+ (rs6000_secondary_reload): Add support for quad memory operations
+ and for direct move.
+ (rs6000_secondary_memory_needed): Likewise.
+ (rs6000_debug_secondary_memory_needed): Change argument names.
+ (rs6000_output_move_128bit): New function to return the move to
+ use for 128-bit moves, including knowing about the various
+ limitations of quad memory operations.
+
+ * config/rs6000/vsx.md (vsx_mov<mode>): Add support for quad
+ memory operations. call rs6000_output_move_128bit for the actual
+ instruciton(s) to generate.
+ (vsx_movti_64bit): Likewise.
+
+ * config/rs6000/rs6000.md (UNSPEC_P8V_FMRGOW): New unspec values.
+ (UNSPEC_P8V_MTVSRWZ): Likewise.
+ (UNSPEC_P8V_RELOAD_FROM_GPR): Likewise.
+ (UNSPEC_P8V_MTVSRD): Likewise.
+ (UNSPEC_P8V_XXPERMDI): Likewise.
+ (UNSPEC_P8V_RELOAD_FROM_VSX): Likewise.
+ (UNSPEC_FUSION_GPR): Likewise.
+ (FMOVE128_GPR): New iterator for direct move.
+ (f32_lv): New mode attribute for load/store of SFmode/SDmode
+ values.
+ (f32_sv): Likewise.
+ (f32_dm): Likewise.
+ (zero_extend<mode>di2_internal1): Add support for power8 32-bit
+ loads and direct move instructions.
+ (zero_extendsidi2_lfiwzx): Likewise.
+ (extendsidi2_lfiwax): Likewise.
+ (extendsidi2_nocell): Likewise.
+ (floatsi<mode>2_lfiwax): Likewise.
+ (lfiwax): Likewise.
+ (floatunssi<mode>2_lfiwzx): Likewise.
+ (lfiwzx): Likewise.
+ (fix_trunc<mode>_stfiwx): Likewise.
+ (fixuns_trunc<mode>_stfiwx): Likewise.
+ (mov<mode>_hardfloat, 32-bit floating point): Likewise.
+ (mov<move>_hardfloat64, 64-bit floating point): Likewise.
+ (parity<mode>2_cmpb): Set length/type attr.
+ (unnamed shift right patterns, mov<mode>_internal2): Change type attr
+ for 'mr.' to fast_compare.
+ (bpermd_<mode>): Change type attr to popcnt.
+ (p8_fmrgow_<mode>): New insns for power8 direct move support.
+ (p8_mtvsrwz_1): Likewise.
+ (p8_mtvsrwz_2): Likewise.
+ (reload_fpr_from_gpr<mode>): Likewise.
+ (p8_mtvsrd_1): Likewise.
+ (p8_mtvsrd_2): Likewise.
+ (p8_xxpermdi_<mode>): Likewise.
+ (reload_vsx_from_gpr<mode>): Likewise.
+ (reload_vsx_from_gprsf): Likewise.
+ (p8_mfvsrd_3_<mode>): LIkewise.
+ (reload_gpr_from_vsx<mode>): Likewise.
+ (reload_gpr_from_vsxsf): Likewise.
+ (p8_mfvsrd_4_disf): Likewise.
+ (multi-word GPR splits): Do not split direct moves or quad memory
+ operations.
+
+ Backport from the trunk
+
+ 2013-06-06 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Pat Haugen <pthaugen@us.ibm.com>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions):
+ Document new power8 builtins.
+
+ * config/rs6000/vector.md (and<mode>3): Add a clobber/scratch of a
+ condition code register, to allow 128-bit logical operations to be
+ done in the VSX or GPR registers.
+ (nor<mode>3): Use the canonical form for nor.
+ (eqv<mode>3): Add expanders for power8 xxleqv, xxlnand, xxlorc,
+ vclz*, and vpopcnt* vector instructions.
+ (nand<mode>3): Likewise.
+ (orc<mode>3): Likewise.
+ (clz<mode>2): LIkewise.
+ (popcount<mode>2): Likewise.
+
+ * config/rs6000/predicates.md (int_reg_operand): Rework tests so
+ that only the GPRs are recognized.
+
+ * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add
+ support for new power8 builtins.
+
+ * config/rs6000/rs6000-builtin.def (xscvspdpn): Add new power8
+ builtin functions.
+ (xscvdpspn): Likewise.
+ (vclz): Likewise.
+ (vclzb): Likewise.
+ (vclzh): Likewise.
+ (vclzw): Likewise.
+ (vclzd): Likewise.
+ (vpopcnt): Likewise.
+ (vpopcntb): Likewise.
+ (vpopcnth): Likewise.
+ (vpopcntw): Likewise.
+ (vpopcntd): Likewise.
+ (vgbbd): Likewise.
+ (vmrgew): Likewise.
+ (vmrgow): Likewise.
+ (eqv): Likewise.
+ (eqv_v16qi3): Likewise.
+ (eqv_v8hi3): Likewise.
+ (eqv_v4si3): Likewise.
+ (eqv_v2di3): Likewise.
+ (eqv_v4sf3): Likewise.
+ (eqv_v2df3): Likewise.
+ (nand): Likewise.
+ (nand_v16qi3): Likewise.
+ (nand_v8hi3): Likewise.
+ (nand_v4si3): Likewise.
+ (nand_v2di3): Likewise.
+ (nand_v4sf3): Likewise.
+ (nand_v2df3): Likewise.
+ (orc): Likewise.
+ (orc_v16qi3): Likewise.
+ (orc_v8hi3): Likewise.
+ (orc_v4si3): Likewise.
+ (orc_v2di3): Likewise.
+ (orc_v4sf3): Likewise.
+ (orc_v2df3): Likewise.
+
+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Only
+ allow power8 quad mode in 64-bit.
+ (rs6000_builtin_vectorized_function): Add support to vectorize
+ ISA 2.07 count leading zeros, population count builtins.
+ (rs6000_expand_vector_init): On ISA 2.07 use xscvdpspn to form
+ V4SF vectors instead of xscvdpsp to avoid IEEE related traps.
+ (builtin_function_type): Add vgbbd builtin function which takes an
+ unsigned argument.
+ (altivec_expand_vec_perm_const): Add support for new power8 merge
+ instructions.
+
+ * config/rs6000/vsx.md (VSX_L2): New iterator for 128-bit types,
+ that does not include TImdoe for use with 32-bit.
+ (UNSPEC_VSX_CVSPDPN): Support for power8 xscvdpspn and xscvspdpn
+ instructions.
+ (UNSPEC_VSX_CVDPSPN): Likewise.
+ (vsx_xscvdpspn): Likewise.
+ (vsx_xscvspdpn): Likewise.
+ (vsx_xscvdpspn_scalar): Likewise.
+ (vsx_xscvspdpn_directmove): Likewise.
+ (vsx_and<mode>3): Split logical operations into 32-bit and
+ 64-bit. Add support to do logical operations on TImode as well as
+ VSX vector types. Allow logical operations to be done in either
+ VSX registers or in general purpose registers in 64-bit mode. Add
+ splitters if GPRs were used. For AND, add clobber of CCmode to
+ allow use of ANDI on GPRs. Rewrite nor to use the canonical RTL
+ encoding.
+ (vsx_and<mode>3_32bit): Likewise.
+ (vsx_and<mode>3_64bit): Likewise.
+ (vsx_ior<mode>3): Likewise.
+ (vsx_ior<mode>3_32bit): Likewise.
+ (vsx_ior<mode>3_64bit): Likewise.
+ (vsx_xor<mode>3): Likewise.
+ (vsx_xor<mode>3_32bit): Likewise.
+ (vsx_xor<mode>3_64bit): Likewise.
+ (vsx_one_cmpl<mode>2): Likewise.
+ (vsx_one_cmpl<mode>2_32bit): Likewise.
+ (vsx_one_cmpl<mode>2_64bit): Likewise.
+ (vsx_nor<mode>3): Likewise.
+ (vsx_nor<mode>3_32bit): Likewise.
+ (vsx_nor<mode>3_64bit): Likewise.
+ (vsx_andc<mode>3): Likewise.
+ (vsx_andc<mode>3_32bit): Likewise.
+ (vsx_andc<mode>3_64bit): Likewise.
+ (vsx_eqv<mode>3_32bit): Add support for power8 xxleqv, xxlnand,
+ and xxlorc instructions.
+ (vsx_eqv<mode>3_64bit): Likewise.
+ (vsx_nand<mode>3_32bit): Likewise.
+ (vsx_nand<mode>3_64bit): Likewise.
+ (vsx_orc<mode>3_32bit): Likewise.
+ (vsx_orc<mode>3_64bit): Likewise.
+
+ * config/rs6000/rs6000.h (VLOGICAL_REGNO_P): Update comment.
+
+ * config/rs6000/altivec.md (UNSPEC_VGBBD): Add power8 vgbbd
+ instruction.
+ (p8_vmrgew): Add power8 vmrgew and vmrgow instructions.
+ (p8_vmrgow): Likewise.
+ (altivec_and<mode>3): Add clobber of CCmode to allow AND using
+ GPRs to be split under VSX.
+ (p8v_clz<mode>2): Add power8 count leading zero support.
+ (p8v_popcount<mode>2): Add power8 population count support.
+ (p8v_vgbbd): Add power8 gather bits by bytes by doubleword
+ support.
+
+ * config/rs6000/rs6000.md (eqv<mode>3): Add support for powerp eqv
+ instruction.
+
+ * config/rs6000/altivec.h (vec_eqv): Add defines to export power8
+ builtin functions.
+ (vec_nand): Likewise.
+ (vec_vclz): Likewise.
+ (vec_vclzb): Likewise.
+ (vec_vclzd): Likewise.
+ (vec_vclzh): Likewise.
+ (vec_vclzw): Likewise.
+ (vec_vgbbd): Likewise.
+ (vec_vmrgew): Likewise.
+ (vec_vmrgow): Likewise.
+ (vec_vpopcnt): Likewise.
+ (vec_vpopcntb): Likewise.
+ (vec_vpopcntd): Likewise.
+ (vec_vpopcnth): Likewise.
+ (vec_vpopcntw): Likewise.
+
+ Backport from trunk
+
+ 2013-05-29 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Pat Haugen <pthaugen@us.ibm.com>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * config/rs6000/vector.md (VEC_I): Add support for new power8 V2DI
+ instructions.
+ (VEC_A): Likewise.
+ (VEC_C): Likewise.
+ (vrotl<mode>3): Likewise.
+ (vashl<mode>3): Likewise.
+ (vlshr<mode>3): Likewise.
+ (vashr<mode>3): Likewise.
+
+ * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add
+ support for power8 V2DI builtins.
+
+ * config/rs6000/rs6000-builtin.def (abs_v2di): Add support for
+ power8 V2DI builtins.
+ (vupkhsw): Likewise.
+ (vupklsw): Likewise.
+ (vaddudm): Likewise.
+ (vminsd): Likewise.
+ (vmaxsd): Likewise.
+ (vminud): Likewise.
+ (vmaxud): Likewise.
+ (vpkudum): Likewise.
+ (vpksdss): Likewise.
+ (vpkudus): Likewise.
+ (vpksdus): Likewise.
+ (vrld): Likewise.
+ (vsld): Likewise.
+ (vsrd): Likewise.
+ (vsrad): Likewise.
+ (vsubudm): Likewise.
+ (vcmpequd): Likewise.
+ (vcmpgtsd): Likewise.
+ (vcmpgtud): Likewise.
+ (vcmpequd_p): Likewise.
+ (vcmpgtsd_p): Likewise.
+ (vcmpgtud_p): Likewise.
+ (vupkhsw): Likewise.
+ (vupklsw): Likewise.
+ (vaddudm): Likewise.
+ (vmaxsd): Likewise.
+ (vmaxud): Likewise.
+ (vminsd): Likewise.
+ (vminud): Likewise.
+ (vpksdss): Likewise.
+ (vpksdus): Likewise.
+ (vpkudum): Likewise.
+ (vpkudus): Likewise.
+ (vrld): Likewise.
+ (vsld): Likewise.
+ (vsrad): Likewise.
+ (vsrd): Likewise.
+ (vsubudm): Likewise.
+
+ * config/rs6000/rs6000.c (rs6000_init_hard_regno_mode_ok): Add
+ support for power8 V2DI instructions.
+
+ * config/rs6000/altivec.md (UNSPEC_VPKUHUM): Add support for
+ power8 V2DI instructions. Combine pack and unpack insns to use an
+ iterator for each mode. Check whether a particular mode supports
+ Altivec instructions instead of just checking TARGET_ALTIVEC.
+ (UNSPEC_VPKUWUM): Likewise.
+ (UNSPEC_VPKSHSS): Likewise.
+ (UNSPEC_VPKSWSS): Likewise.
+ (UNSPEC_VPKUHUS): Likewise.
+ (UNSPEC_VPKSHUS): Likewise.
+ (UNSPEC_VPKUWUS): Likewise.
+ (UNSPEC_VPKSWUS): Likewise.
+ (UNSPEC_VPACK_SIGN_SIGN_SAT): Likewise.
+ (UNSPEC_VPACK_SIGN_UNS_SAT): Likewise.
+ (UNSPEC_VPACK_UNS_UNS_SAT): Likewise.
+ (UNSPEC_VPACK_UNS_UNS_MOD): Likewise.
+ (UNSPEC_VUPKHSB): Likewise.
+ (UNSPEC_VUNPACK_HI_SIGN): Likewise.
+ (UNSPEC_VUNPACK_LO_SIGN): Likewise.
+ (UNSPEC_VUPKHSH): Likewise.
+ (UNSPEC_VUPKLSB): Likewise.
+ (UNSPEC_VUPKLSH): Likewise.
+ (VI2): Likewise.
+ (VI_char): Likewise.
+ (VI_scalar): Likewise.
+ (VI_unit): Likewise.
+ (VP): Likewise.
+ (VP_small): Likewise.
+ (VP_small_lc): Likewise.
+ (VU_char): Likewise.
+ (add<mode>3): Likewise.
+ (altivec_vaddcuw): Likewise.
+ (altivec_vaddu<VI_char>s): Likewise.
+ (altivec_vadds<VI_char>s): Likewise.
+ (sub<mode>3): Likewise.
+ (altivec_vsubcuw): Likewise.
+ (altivec_vsubu<VI_char>s): Likewise.
+ (altivec_vsubs<VI_char>s): Likewise.
+ (altivec_vavgs<VI_char>): Likewise.
+ (altivec_vcmpbfp): Likewise.
+ (altivec_eq<mode>): Likewise.
+ (altivec_gt<mode>): Likewise.
+ (altivec_gtu<mode>): Likewise.
+ (umax<mode>3): Likewise.
+ (smax<mode>3): Likewise.
+ (umin<mode>3): Likewise.
+ (smin<mode>3): Likewise.
+ (altivec_vpkuhum): Likewise.
+ (altivec_vpkuwum): Likewise.
+ (altivec_vpkshss): Likewise.
+ (altivec_vpkswss): Likewise.
+ (altivec_vpkuhus): Likewise.
+ (altivec_vpkshus): Likewise.
+ (altivec_vpkuwus): Likewise.
+ (altivec_vpkswus): Likewise.
+ (altivec_vpks<VI_char>ss): Likewise.
+ (altivec_vpks<VI_char>us): Likewise.
+ (altivec_vpku<VI_char>us): Likewise.
+ (altivec_vpku<VI_char>um): Likewise.
+ (altivec_vrl<VI_char>): Likewise.
+ (altivec_vsl<VI_char>): Likewise.
+ (altivec_vsr<VI_char>): Likewise.
+ (altivec_vsra<VI_char>): Likewise.
+ (altivec_vsldoi_<mode>): Likewise.
+ (altivec_vupkhsb): Likewise.
+ (altivec_vupkhs<VU_char>): Likewise.
+ (altivec_vupkls<VU_char>): Likewise.
+ (altivec_vupkhsh): Likewise.
+ (altivec_vupklsb): Likewise.
+ (altivec_vupklsh): Likewise.
+ (altivec_vcmpequ<VI_char>_p): Likewise.
+ (altivec_vcmpgts<VI_char>_p): Likewise.
+ (altivec_vcmpgtu<VI_char>_p): Likewise.
+ (abs<mode>2): Likewise.
+ (vec_unpacks_hi_v16qi): Likewise.
+ (vec_unpacks_hi_v8hi): Likewise.
+ (vec_unpacks_lo_v16qi): Likewise.
+ (vec_unpacks_hi_<VP_small_lc>): Likewise.
+ (vec_unpacks_lo_v8hi): Likewise.
+ (vec_unpacks_lo_<VP_small_lc>): Likewise.
+ (vec_pack_trunc_v8h): Likewise.
+ (vec_pack_trunc_v4si): Likewise.
+ (vec_pack_trunc_<mode>): Likewise.
+
+ * config/rs6000/altivec.h (vec_vaddudm): Add defines for power8
+ V2DI builtins.
+ (vec_vmaxsd): Likewise.
+ (vec_vmaxud): Likewise.
+ (vec_vminsd): Likewise.
+ (vec_vminud): Likewise.
+ (vec_vpksdss): Likewise.
+ (vec_vpksdus): Likewise.
+ (vec_vpkudum): Likewise.
+ (vec_vpkudus): Likewise.
+ (vec_vrld): Likewise.
+ (vec_vsld): Likewise.
+ (vec_vsrad): Likewise.
+ (vec_vsrd): Likewise.
+ (vec_vsubudm): Likewise.
+ (vec_vupkhsw): Likewise.
+ (vec_vupklsw): Likewise.
+
+ 2013-05-22 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Pat Haugen <pthaugen@us.ibm.com>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions): Add
+ documentation for the power8 crypto builtins.
+
+ * config/rs6000/t-rs6000 (MD_INCLUDES): Add crypto.md.
+
+ * config/rs6000/rs6000-builtin.def (BU_P8V_AV_1): Add support
+ macros for defining power8 builtin functions.
+ (BU_P8V_AV_2): Likewise.
+ (BU_P8V_AV_P): Likewise.
+ (BU_P8V_VSX_1): Likewise.
+ (BU_P8V_OVERLOAD_1): Likewise.
+ (BU_P8V_OVERLOAD_2): Likewise.
+ (BU_CRYPTO_1): Likewise.
+ (BU_CRYPTO_2): Likewise.
+ (BU_CRYPTO_3): Likewise.
+ (BU_CRYPTO_OVERLOAD_1): Likewise.
+ (BU_CRYPTO_OVERLOAD_2): Likewise.
+ (XSCVSPDP): Fix typo, point to the correct instruction.
+ (VCIPHER): Add power8 crypto builtins.
+ (VCIPHERLAST): Likewise.
+ (VNCIPHER): Likewise.
+ (VNCIPHERLAST): Likewise.
+ (VPMSUMB): Likewise.
+ (VPMSUMH): Likewise.
+ (VPMSUMW): Likewise.
+ (VPERMXOR_V2DI): Likewise.
+ (VPERMXOR_V4SI: Likewise.
+ (VPERMXOR_V8HI: Likewise.
+ (VPERMXOR_V16QI: Likewise.
+ (VSHASIGMAW): Likewise.
+ (VSHASIGMAD): Likewise.
+ (VPMSUM): Likewise.
+ (VPERMXOR): Likewise.
+ (VSHASIGMA): Likewise.
+
+ * config/rs6000/rs6000-c.c (rs6000_target_modify_macros): Define
+ __CRYPTO__ if the crypto instructions are available.
+ (altivec_overloaded_builtins): Add support for overloaded power8
+ builtins.
+
+ * config/rs6000/rs6000.c (rs6000_expand_ternop_builtin): Add
+ support for power8 crypto builtins.
+ (builtin_function_type): Likewise.
+ (altivec_init_builtins): Add support for builtins that take vector
+ long long (V2DI) arguments.
+
+ * config/rs6000/crypto.md: New file, define power8 crypto
+ instructions.
+
+ 2013-05-22 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Pat Haugen <pthaugen@us.ibm.com>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * doc/invoke.texi (Option Summary): Add power8 options.
+ (RS/6000 and PowerPC Options): Likewise.
+
+ * doc/md.texi (PowerPC and IBM RS6000 constraints): Update to use
+ constraints.md instead of rs6000.h. Reorder w* constraints. Add
+ wm, wn, wr documentation.
+
+ * gcc/config/rs6000/constraints.md (wm): New constraint for VSX
+ registers if direct move instructions are enabled.
+ (wn): New constraint for no registers.
+ (wq): New constraint for quad word even GPR registers.
+ (wr): New constraint if 64-bit instructions are enabled.
+ (wv): New constraint if power8 vector instructions are enabled.
+ (wQ): New constraint for quad word memory locations.
+
+ * gcc/config/rs6000/predicates.md (const_0_to_15_operand): New
+ constraint for 0..15 for crypto instructions.
+ (gpc_reg_operand): If VSX allow registers in VSX registers as well
+ as GPR and floating point registers.
+ (int_reg_operand): New predicate to match only GPR registers.
+ (base_reg_operand): New predicate to match base registers.
+ (quad_int_reg_operand): New predicate to match even GPR registers
+ for quad memory operations.
+ (vsx_reg_or_cint_operand): New predicate to allow vector logical
+ operations in both GPR and VSX registers.
+ (quad_memory_operand): New predicate for quad memory operations.
+ (reg_or_indexed_operand): New predicate for direct move support.
+
+ * gcc/config/rs6000/rs6000-cpus.def (ISA_2_5_MASKS_EMBEDDED):
+ Inherit from ISA_2_4_MASKS, not ISA_2_2_MASKS.
+ (ISA_2_7_MASKS_SERVER): New mask for ISA 2.07 (i.e. power8).
+ (POWERPC_MASKS): Add power8 options.
+ (power8 cpu): Use ISA_2_7_MASKS_SERVER instead of specifying the
+ various options.
+
+ * gcc/config/rs6000/rs6000-c.c (rs6000_target_modify_macros):
+ Define _ARCH_PWR8 and __POWER8_VECTOR__ for power8.
+
+ * gcc/config/rs6000/rs6000.opt (-mvsx-timode): Add documentation.
+ (-mpower8-fusion): New power8 options.
+ (-mpower8-fusion-sign): Likewise.
+ (-mpower8-vector): Likewise.
+ (-mcrypto): Likewise.
+ (-mdirect-move): Likewise.
+ (-mquad-memory): Likewise.
+
+ * gcc/config/rs6000/rs6000.c (power8_cost): Initial definition for
+ power8.
+ (rs6000_hard_regno_mode_ok): Make PTImode only match even GPR
+ registers.
+ (rs6000_debug_reg_print): Print the base register class if
+ -mdebug=reg.
+ (rs6000_debug_vector_unit): Add p8_vector.
+ (rs6000_debug_reg_global): If -mdebug=reg, print power8 constraint
+ definitions. Also print fusion state.
+ (rs6000_init_hard_regno_mode_ok): Set up power8 constraints.
+ (rs6000_builtin_mask_calculate): Add power8 builtin support.
+ (rs6000_option_override_internal): Add support for power8.
+ (rs6000_common_init_builtins): Add debugging for skipped builtins
+ if -mdebug=builtin.
+ (rs6000_adjust_cost): Add power8 support.
+ (rs6000_issue_rate): Likewise.
+ (insn_must_be_first_in_group): Likewise.
+ (insn_must_be_last_in_group): Likewise.
+ (force_new_group): Likewise.
+ (rs6000_register_move_cost): Likewise.
+ (rs6000_opt_masks): Likewise.
+
+ * config/rs6000/rs6000.h (ASM_CPU_POWER8_SPEC): If we don't have a
+ power8 capable assembler, default to power7 options.
+ (TARGET_DIRECT_MOVE): Likewise.
+ (TARGET_CRYPTO): Likewise.
+ (TARGET_P8_VECTOR): Likewise.
+ (VECTOR_UNIT_P8_VECTOR_P): Define power8 vector support.
+ (VECTOR_UNIT_VSX_OR_P8_VECTOR_P): Likewise.
+ (VECTOR_MEM_P8_VECTOR_P): Likewise.
+ (VECTOR_MEM_VSX_OR_P8_VECTOR_P): Likewise.
+ (VECTOR_MEM_ALTIVEC_OR_VSX_P): Likewise.
+ (TARGET_XSCVDPSPN): Likewise.
+ (TARGET_XSCVSPDPN): Likewsie.
+ (TARGET_SYNC_HI_QI): Likewise.
+ (TARGET_SYNC_TI): Likewise.
+ (MASK_CRYPTO): Likewise.
+ (MASK_DIRECT_MOVE): Likewise.
+ (MASK_P8_FUSION): Likewise.
+ (MASK_P8_VECTOR): Likewise.
+ (REG_ALLOC_ORDER): Move fr13 to be lower in priority so that the
+ TFmode temporary used by some of the direct move instructions to
+ get two FP temporary registers does not force creation of a stack
+ frame.
+ (VLOGICAL_REGNO_P): Allow vector logical operations in GPRs.
+ (MODES_TIEABLE_P): Move the VSX tests above the Altivec tests so
+ that any VSX registers are tieable, even if they are also an
+ Altivec vector mode.
+ (r6000_reg_class_enum): Add wm, wr, wv constraints.
+ (RS6000_BTM_P8_VECTOR): Power8 builtin support.
+ (RS6000_BTM_CRYPTO): Likewise.
+ (RS6000_BTM_COMMON): Likewise.
+
+ * config/rs6000/rs6000.md (cpu attribute): Add power8.
+ * config/rs6000/rs6000-opts.h (PROCESSOR_POWER8): Likewise.
+ (enum rs6000_vector): Add power8 vector support.
+
+
+ Backport from mainline
+ 2013-03-20 Pat Haugen <pthaugen@us.ibm.com>
+
+ * config/rs6000/predicates.md (indexed_address, update_address_mem
+ update_indexed_address_mem): New predicates.
+ * config/rs6000/vsx.md (vsx_extract_<mode>_zero): Set correct "type"
+ attribute for load/store instructions.
+ * config/rs6000/dfp.md (movsd_store): Likewise.
+ (movsd_load): Likewise.
+ * config/rs6000/rs6000.md (zero_extend<mode>di2_internal1): Likewise.
+ (unnamed HI->DI extend define_insn): Likewise.
+ (unnamed SI->DI extend define_insn): Likewise.
+ (unnamed QI->SI extend define_insn): Likewise.
+ (unnamed QI->HI extend define_insn): Likewise.
+ (unnamed HI->SI extend define_insn): Likewise.
+ (unnamed HI->SI extend define_insn): Likewise.
+ (extendsfdf2_fpr): Likewise.
+ (movsi_internal1): Likewise.
+ (movsi_internal1_single): Likewise.
+ (movhi_internal): Likewise.
+ (movqi_internal): Likewise.
+ (movcc_internal1): Correct mnemonic for stw insn. Set correct "type"
+ attribute for load/store instructions.
+ (mov<mode>_hardfloat): Set correct "type" attribute for load/store
+ instructions.
+ (mov<mode>_softfloat): Likewise.
+ (mov<mode>_hardfloat32): Likewise.
+ (mov<mode>_hardfloat64): Likewise.
+ (mov<mode>_softfloat64): Likewise.
+ (movdi_internal32): Likewise.
+ (movdi_internal64): Likewise.
+ (probe_stack_<mode>): Likewise.
+
+ Backport from mainline
+ 2013-03-20 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/vector.md (VEC_R): Add 32-bit integer, binary
+ floating point, and decimal floating point to reload iterator.
+
+ * config/rs6000/constraints.md (wl constraint): New constraints to
+ return FLOAT_REGS if certain options are used to reduce the number
+ of separate patterns that exist in the file.
+ (wx constraint): Likewise.
+ (wz constraint): Likewise.
+
+ * config/rs6000/rs6000.c (rs6000_debug_reg_global): If
+ -mdebug=reg, print wg, wl, wx, and wz constraints.
+ (rs6000_init_hard_regno_mode_ok): Initialize new constraints.
+ Initialize the reload functions for 64-bit binary/decimal floating
+ point types.
+ (reg_offset_addressing_ok_p): If we are on a power7 or later, use
+ LFIWZX and STFIWX to load/store 32-bit decimal types, and don't
+ create the buffer on the stack to overcome not having a 32-bit
+ load and store.
+ (rs6000_emit_move): Likewise.
+ (rs6000_secondary_memory_needed_rtx): Likewise.
+ (rs6000_alloc_sdmode_stack_slot): Likewise.
+ (rs6000_preferred_reload_class): On VSX, we can create SFmode 0.0f
+ via xxlxor, just like DFmode 0.0.
+
+ * config/rs6000/rs6000.h (TARGET_NO_SDMODE_STACK): New macro)
+ (define as 1 if we are running on a power7 or newer.
+ (enum r6000_reg_class_enum): Add new constraints.
+
+ * config/rs6000/dfp.md (movsd): Delete, combine with binary
+ floating point moves in rs6000.md. Combine power6x (mfpgpr) moves
+ with other moves by using conditional constraits (wg). Use LFIWZX
+ and STFIWX for loading SDmode on power7. Use xxlxor to create
+ 0.0f.
+ (movsd splitter): Likewise.
+ (movsd_hardfloat): Likewise.
+ (movsd_softfloat): Likewise.
+
+ * config/rs6000/rs6000.md (FMOVE32): New iterators to combine
+ binary and decimal floating point moves.
+ (fmove_ok): New attributes to combine binary and decimal floating
+ point moves, and to combine power6x (mfpgpr) moves along normal
+ floating moves.
+ (real_value_to_target): Likewise.
+ (f32_lr): Likewise.
+ (f32_lm): Likewise.
+ (f32_li): Likewise.
+ (f32_sr): Likewise.
+ (f32_sm): Likewise.
+ (f32_si): Likewise.
+ (movsf): Combine binary and decimal floating point moves. Combine
+ power6x (mfpgpr) moves with other moves by using conditional
+ constraits (wg). Use LFIWZX and STFIWX for loading SDmode on
+ power7.
+ (mov<mode> for SFmode/SDmode); Likewise.
+ (SFmode/SDmode splitters): Likewise.
+ (movsf_hardfloat): Likewise.
+ (mov<mode>_hardfloat for SFmode/SDmode): Likewise.
+ (movsf_softfloat): Likewise.
+ (mov<mode>_softfloat for SFmode/SDmode): Likewise.
+
+ * doc/md.texi (PowerPC and IBM RS6000 constraints): Document wl)
+ (wx and wz constraints.
+
+ * config/rs6000/constraints.md (wg constraint): New constraint to
+ return FLOAT_REGS if -mmfpgpr (power6x) was used.
+
+ * config/rs6000/rs6000.h (enum r6000_reg_class_enum): Add wg
+ constraint.
+
+ * config/rs6000/rs6000.c (rs6000_debug_reg_global): If
+ -mdebug=reg, print wg, wl, wx, and wz constraints.
+ (rs6000_init_hard_regno_mode_ok): Initialize new constraints.
+ Initialize the reload functions for 64-bit binary/decimal floating
+ point types.
+ (reg_offset_addressing_ok_p): If we are on a power7 or later, use
+ LFIWZX and STFIWX to load/store 32-bit decimal types, and don't
+ create the buffer on the stack to overcome not having a 32-bit
+ load and store.
+ (rs6000_emit_move): Likewise.
+ (rs6000_secondary_memory_needed_rtx): Likewise.
+ (rs6000_alloc_sdmode_stack_slot): Likewise.
+ (rs6000_preferred_reload_class): On VSX, we can create SFmode 0.0f
+ via xxlxor, just like DFmode 0.0.
+
+
+ * config/rs6000/dfp.md (movdd): Delete, combine with binary
+ floating point moves in rs6000.md. Combine power6x (mfpgpr) moves
+ with other moves by using conditional constraits (wg). Use LFIWZX
+ and STFIWX for loading SDmode on power7.
+ (movdd splitters): Likewise.
+ (movdd_hardfloat32): Likewise.
+ (movdd_softfloat32): Likewise.
+ (movdd_hardfloat64_mfpgpr): Likewise.
+ (movdd_hardfloat64): Likewise.
+ (movdd_softfloat64): Likewise.
+
+ * config/rs6000/rs6000.md (FMOVE64): New iterators to combine
+ 64-bit binary and decimal floating point moves.
+ (FMOVE64X): Likewise.
+ (movdf): Combine 64-bit binary and decimal floating point moves.
+ Combine power6x (mfpgpr) moves with other moves by using
+ conditional constraits (wg).
+ (mov<mode> for DFmode/DDmode): Likewise.
+ (DFmode/DDmode splitters): Likewise.
+ (movdf_hardfloat32): Likewise.
+ (mov<mode>_hardfloat32 for DFmode/DDmode): Likewise.
+ (movdf_softfloat32): Likewise.
+ (movdf_hardfloat64_mfpgpr): Likewise.
+ (movdf_hardfloat64): Likewise.
+ (mov<mode>_hardfloat64 for DFmode/DDmode): Likewise.
+ (movdf_softfloat64): Likewise.
+ (mov<mode>_softfloat64 for DFmode/DDmode): Likewise.
+ (reload_<mode>_load): Move to later in the file so they aren't in
+ the middle of the floating point move insns.
+ (reload_<mode>_store): Likewise.
+
+ * doc/md.texi (PowerPC and IBM RS6000 constraints): Document wg
+ constraint.
+
+ * config/rs6000/rs6000.c (rs6000_debug_reg_global): Print out wg
+ constraint if -mdebug=reg.
+ (rs6000_initi_hard_regno_mode_ok): Enable wg constraint if
+ -mfpgpr. Enable using dd reload support if needed.
+
+ * config/rs6000/dfp.md (movtd): Delete, combine with 128-bit
+ binary and decimal floating point moves in rs6000.md.
+ (movtd_internal): Likewise.
+
+ * config/rs6000/rs6000.md (FMOVE128): Combine 128-bit binary and
+ decimal floating point moves.
+ (movtf): Likewise.
+ (movtf_internal): Likewise.
+ (mov<mode>_internal, TDmode/TFmode): Likewise.
+ (movtf_softfloat): Likewise.
+ (mov<mode>_softfloat, TDmode/TFmode): Likewise.
+
+ * config/rs6000/rs6000.md (movdi_mfpgpr): Delete, combine with
+ movdi_internal64, using wg constraint for move direct operations.
+ (movdi_internal64): Likewise.
+
+ * config/rs6000/rs6000.c (rs6000_debug_reg_global): Print
+ MODES_TIEABLE_P for selected modes. Print the numerical value of
+ the various virtual registers. Use GPR/FPR first/last values)
+ (instead of hard coding the register numbers. Print which modes
+ have reload functions registered.
+ (rs6000_option_override_internal): If -mdebug=reg, trace the
+ options settings before/after setting cpu, target and subtarget
+ settings.
+ (rs6000_secondary_reload_trace): Improve the RTL dump for
+ -mdebug=addr and for secondary reload failures in
+ rs6000_secondary_reload_inner.
+ (rs6000_secondary_reload_fail): Likewise.
+ (rs6000_secondary_reload_inner): Likewise.
+
+ * config/rs6000/rs6000.md (FIRST_GPR_REGNO): Add convenience
+ macros for first/last GPR and FPR registers.
+ (LAST_GPR_REGNO): Likewise.
+ (FIRST_FPR_REGNO): Likewise.
+ (LAST_FPR_REGNO): Likewise.
+
+ * config/rs6000/vector.md (mul<mode>3): Use the combined macro
+ VECTOR_UNIT_ALTIVEC_OR_VSX_P instead of separate calls to
+ VECTOR_UNIT_ALTIVEC_P and VECTOR_UNIT_VSX_P.
+ (vcond<mode><mode>): Likewise.
+ (vcondu<mode><mode>): Likewise.
+ (vector_gtu<mode>): Likewise.
+ (vector_gte<mode>): Likewise.
+ (xor<mode>3): Don't allow logical operations on TImode in 32-bit
+ to prevent the compiler from converting DImode operations to
+ TImode.
+ (ior<mode>3): Likewise.
+ (and<mode>3): Likewise.
+ (one_cmpl<mode>2): Likewise.
+ (nor<mode>3): Likewise.
+ (andc<mode>3): Likewise.
+
+ * config/rs6000/constraints.md (wt constraint): New constraint
+ that returns VSX_REGS if TImode is allowed in VSX registers.
+
+ * config/rs6000/predicates.md (easy_fp_constant): 0.0f is an easy
+ constant under VSX.
+
+ * config/rs6000/rs6000-modes.def (PTImode): Define, PTImode is
+ similar to TImode, but it is restricted to being in the GPRs.
+
+ * config/rs6000/rs6000.opt (-mvsx-timode): New switch to allow
+ TImode to occupy a single VSX register.
+
+ * config/rs6000/rs6000-cpus.def (ISA_2_6_MASKS_SERVER): Default to
+ -mvsx-timode for power7/power8.
+ (power7 cpu): Likewise.
+ (power8 cpu): Likewise.
+
+ * config/rs6000/rs6000.c (rs6000_hard_regno_nregs_internal): Make
+ sure that TFmode/TDmode take up two registers if they are ever
+ allowed in the upper VSX registers.
+ (rs6000_hard_regno_mode_ok): If -mvsx-timode, allow TImode in VSX
+ registers.
+ (rs6000_init_hard_regno_mode_ok): Likewise.
+ (rs6000_debug_reg_global): Add debugging for PTImode and wt
+ constraint. Print if LRA is turned on.
+ (rs6000_option_override_internal): Give an error if -mvsx-timode
+ and VSX is not enabled.
+ (invalid_e500_subreg): Handle PTImode, restricting it to GPRs. If
+ -mvsx-timode, restrict TImode to reg+reg addressing, and PTImode
+ to reg+offset addressing. Use PTImode when checking offset
+ addresses for validity.
+ (reg_offset_addressing_ok_p): Likewise.
+ (rs6000_legitimate_offset_address_p): Likewise.
+ (rs6000_legitimize_address): Likewise.
+ (rs6000_legitimize_reload_address): Likewise.
+ (rs6000_legitimate_address_p): Likewise.
+ (rs6000_eliminate_indexed_memrefs): Likewise.
+ (rs6000_emit_move): Likewise.
+ (rs6000_secondary_reload): Likewise.
+ (rs6000_secondary_reload_inner): Handle PTImode. Allow 64-bit
+ reloads to fpr registers to continue to use reg+offset addressing)
+ (but 64-bit reloads to altivec registers need reg+reg addressing.
+ Drop test for PRE_MODIFY, since VSX loads/stores no longer support
+ it. Treat LO_SUM like a PLUS operation.
+ (rs6000_secondary_reload_class): If type is 64-bit, prefer to use
+ FLOAT_REGS instead of VSX_RGS to allow use of reg+offset
+ addressing.
+ (rs6000_cannot_change_mode_class): Do not allow TImode in VSX
+ registers to share a register with a smaller sized type, since VSX
+ puts scalars in the upper 64-bits.
+ (print_operand): Add support for PTImode.
+ (rs6000_register_move_cost): Use VECTOR_MEM_VSX_P instead of
+ VECTOR_UNIT_VSX_P to catch types that can be loaded in VSX
+ registers, but don't have arithmetic support.
+ (rs6000_memory_move_cost): Add test for VSX.
+ (rs6000_opt_masks): Add -mvsx-timode.
+
+ * config/rs6000/vsx.md (VSm): Change to use 64-bit aligned moves
+ for TImode.
+ (VSs): Likewise.
+ (VSr): Use wt constraint for TImode.
+ (VSv): Drop TImode support.
+ (vsx_movti): Delete, replace with versions for 32-bit and 64-bit.
+ (vsx_movti_64bit): Likewise.
+ (vsx_movti_32bit): Likewise.
+ (vec_store_<mode>): Use VSX iterator instead of vector iterator.
+ (vsx_and<mode>3): Delete use of '?' constraint on inputs, just put
+ one '?' on the appropriate output constraint. Do not allow TImode
+ logical operations on 32-bit systems.
+ (vsx_ior<mode>3): Likewise.
+ (vsx_xor<mode>3): Likewise.
+ (vsx_one_cmpl<mode>2): Likewise.
+ (vsx_nor<mode>3): Likewise.
+ (vsx_andc<mode>3): Likewise.
+ (vsx_concat_<mode>): Likewise.
+ (vsx_xxpermdi_<mode>): Fix thinko for non V2DF/V2DI modes.
+
+ * config/rs6000/rs6000.h (MASK_VSX_TIMODE): Map from
+ OPTION_MASK_VSX_TIMODE.
+ (enum rs6000_reg_class_enum): Add RS6000_CONSTRAINT_wt.
+ (STACK_SAVEAREA_MODE): Use PTImode instead of TImode.
+
+ * config/rs6000/rs6000.md (INT mode attribute): Add PTImode.
+ (TI2 iterator): New iterator for TImode, PTImode.
+ (wd mode attribute): Add values for vector types.
+ (movti_string): Replace TI move operations with operations for
+ TImode and PTImode. Add support for TImode being allowed in VSX
+ registers.
+ (mov<mode>_string, TImode/PTImode): Likewise.
+ (movti_ppc64): Likewise.
+ (mov<mode>_ppc64, TImode/PTImode): Likewise.
+ (TI mode splitters): Likewise.
+
+ * doc/md.texi (PowerPC and IBM RS6000 constraints): Document wt
+ constraint.
+
+2014-04-04 Richard Biener <rguenther@suse.de>
+
+ * tree-ssanames.c (make_ssa_name_fn): Fix assert.
+
+2014-04-02 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * config/s390/s390.c (s390_expand_insv): Use GET_MODE_BITSIZE.
+
+2014-04-01 Richard Biener <rguenther@suse.de>
+
+ * gimple.h (struct gimple_statement_base): Align subcode to
+ 16 bits.
+
+2014-04-01 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * doc/invoke.texi (mapp-regs): Clarify.
+
+2014-03-31 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR rtl-optimization/60700
+ Backport from mainline
+ 2013-07-30 Zhenqiang Chen <zhenqiang.chen@linaro.org>
+
+ PR rtl-optimization/57637
+ * function.c (move_insn_for_shrink_wrap): Also check the
+ GEN set of the LIVE problem for the liveness analysis
+ if it exists, otherwise give up.
+
+2014-03-30 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ Backport from mainline
+ 2014-03-19 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ PR target/60039
+ * config/sh/sh.md (udivsi3_i1): Clobber R1 register.
+
+2014-03-26 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/60419
+ * ipa.c (symtab_remove_unreachable_nodes): Clear thunk and
+ alias flags of nodes in the border.
+
+2014-03-26 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR rtl-optimization/60452
+ * rtlanal.c (rtx_addr_can_trap_p_1): Fix head comment.
+ <case REG>: Return 1 for invalid offsets from the frame pointer.
+
+2014-03-24 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60429
+ * tree-ssa-structalias.c (get_constraint_for_ptr_offset): Remove
+ duplicated line.
+
+2014-03-23 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR rtl-optimization/60601
+ * bb-reorder.c (fix_up_fall_thru_edges): Test EDGE_FALLTHRU everywhere.
+
+ * gcc.c (eval_spec_function): Initialize save_growing_value.
+
+2014-03-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/60568
+ * config/i386/i386.c (x86_output_mi_thunk): Surround UNSPEC_GOT
+ into CONST, put pic register as first operand of PLUS. Use
+ gen_const_mem for both 32-bit and 64-bit PIC got loads.
+
+2014-03-20 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/sparc/sparc.c (sparc_do_work_around_errata): Implement work
+ around for store forwarding issue in the FPU on the UT699.
+ * config/sparc/sparc.md (in_branch_delay): Return false for single FP
+ loads and operations if -mfix-ut699 is specified.
+ (divtf3_hq): Tweak attribute.
+ (sqrttf2_hq): Likewise.
+
+2014-03-18 Kai Tietz <ktietz@redhat.com>
+
+ PR rtl-optimization/56356
+ * sdbout.c (sdbout_parms): Verify that parms'
+ incoming argument is valid.
+ (sdbout_reg_parms): Likewise.
+
+2014-03-18 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/sparc/sparc.c (sparc_do_work_around_errata): Speed up and use
+ proper constant for the store mode.
+
+2014-03-17 Mikael Pettersson <mikpelinux@gmail.com>
+ Committed by Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline:
+
+ 2013-06-20 Joern Rennecke <joern.rennecke@embecosm.com>
+
+ PR rtl-optimization/57425
+ PR rtl-optimization/57569
+ * alias.c (write_dependence_p): Remove parameters mem_mode and
+ canon_mem_addr. Add parameters x_mode, x_addr and x_canonicalized.
+ Changed all callers.
+ (canon_anti_dependence): Get comments and semantics in sync.
+ Add parameter mem_canonicalized. Changed all callers.
+ * rtl.h (canon_anti_dependence): Update prototype.
+
+ 2013-06-16 Joern Rennecke <joern.rennecke@embecosm.com>
+
+ PR rtl-optimization/57425
+ PR rtl-optimization/57569
+ * alias.c (write_dependence_p): Add new parameters mem_mode,
+ canon_mem_addr and mem_canonicalized. Change type of writep to bool.
+ Changed all callers.
+ (canon_anti_dependence): New function.
+ * cse.c (check_dependence): Use canon_anti_dependence.
+ * cselib.c (cselib_invalidate_mem): Likewise.
+ * rtl.h (canon_anti_dependence): Declare.
+
+2014-03-17 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-03-11 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60429
+ PR tree-optimization/60485
+ * tree-ssa-structalias.c (set_union_with_increment): Properly
+ take into account all fields that overlap the shifted vars.
+ (do_sd_constraint): Likewise.
+ (do_ds_constraint): Likewise.
+ (get_constraint_for_ptr_offset): Likewise.
+
+2014-03-15 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/sparc/sparc-protos.h (tls_call_delay): Delete.
+ (eligible_for_call_delay): New prototype.
+ * config/sparc/sparc.c (tls_call_delay): Rename into...
+ (eligible_for_call_delay): ...this. Return false if the instruction
+ cannot be put in the delay slot of a branch.
+ (eligible_for_restore_insn): Simplify.
+ (eligible_for_return_delay): Return false if the instruction cannot be
+ put in the delay slot of a branch and simplify.
+ (eligible_for_sibcall_delay): Return false if the instruction cannot be
+ put in the delay slot of a branch.
+ * config/sparc/sparc.md (fix_ut699): New attribute.
+ (tls_call_delay): Delete.
+ (in_call_delay): Reimplement.
+ (eligible_for_sibcall_delay): Rename into...
+ (in_sibcall_delay): ...this.
+ (eligible_for_return_delay): Rename into...
+ (in_return_delay): ...this.
+ (in_branch_delay): Reimplement.
+ (in_uncond_branch_delay): Delete.
+ (in_annul_branch_delay): Delete.
+
+2014-03-14 Georg-Johann Lay <avr@gjlay.de>
+
+ Backport from 2014-03-14 trunk r208562.
+
+ PR target/59396
+ * config/avr/avr.c (avr_set_current_function): Pass function name
+ through default_strip_name_encoding before sanity checking instead
+ of skipping the first char of the assembler name.
+
+2014-03-13 Georg-Johann Lay <avr@gjlay.de>
+
+ Backport from 2014-03-13 trunk r208532.
+
+ PR target/60486
+ * config/avr/avr.c (avr_out_plus): Swap cc_plus and cc_minus in
+ calls of avr_out_plus_1.
+
+2014-03-13 Joey Ye <joey.ye@arm.com>
+
+ Backport from mainline
+ 2014-03-12 Thomas Preud'homme <thomas.preudhomme@arm.com>
+
+ PR tree-optimization/60454
+ * tree-ssa-math-opts.c (find_bswap_1): Fix bswap detection.
+
+2014-03-06 Matthias Klose <doko@ubuntu.com>
+
+ * Makefile.in (s-mlib): Only pass MULTIARCH_DIRNAME if
+ MULTILIB_OSDIRNAMES is not defined.
+
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/60276
+ * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Avoid
+ a -Wsign-compare warning.
+
+ * Makefile.in (tree-ssa-uninit.o): Depend on $(PARAMS_H).
+
+ Backport from mainline
+ 2014-02-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/56490
+ * params.def (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS): New param.
+ * tree-ssa-uninit.c: Include params.h.
+ (compute_control_dep_chain): Add num_calls argument, return false
+ if it exceed PARAM_UNINIT_CONTROL_DEP_ATTEMPTS param, pass
+ num_calls to recursive call.
+ (find_predicates): Change dep_chain into normal array, add num_calls
+ variable and adjust compute_control_dep_chain caller.
+ (find_def_preds): Likewise.
+
+ 2014-02-13 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/43546
+ * expr.c (compress_float_constant): If x is a hard register,
+ extend into a pseudo and then move to x.
+
+ 2014-02-11 Richard Henderson <rth@redhat.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/59776
+ * tree-sra.c (load_assign_lhs_subreplacements): Add VIEW_CONVERT_EXPR
+ around drhs if type conversion to lacc->type is not useless.
+
+ 2014-02-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR ipa/60026
+ * ipa-cp.c (determine_versionability): Fail at -O0
+ or __attribute__((optimize (0))) or -fno-ipa-cp functions.
+ * tree-sra.c (ipa_sra_preliminary_function_checks): Similarly.
+
+ 2014-02-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/60062
+ * tree.h (opts_for_fn): New inline function.
+ (opt_for_fn): Define.
+ * config/i386/i386.c (ix86_function_regparm): Use
+ opt_for_fn (decl, optimize) instead of optimize.
+
+ 2014-02-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/57499
+ * tree-eh.c (cleanup_empty_eh): Bail out on totally empty
+ bb with no successors.
+
+2014-03-04 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60382
+ * tree-vect-loop.c (vect_is_simple_reduction_1): Do not consider
+ dead PHIs a reduction.
+
+2014-02-25 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-02-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60276
+ * tree-vectorizer.h (struct _stmt_vec_info): Add min_neg_dist field.
+ (STMT_VINFO_MIN_NEG_DIST): New macro.
+ * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Record
+ STMT_VINFO_MIN_NEG_DIST.
+ * tree-vect-stmts.c (vectorizable_load): Verify if assumptions
+ made for negative dependence distances still hold.
+
+2014-02-25 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-02-21 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/60291
+ * tree-ssa-live.c (mark_all_vars_used_1): Do not walk
+ DECL_INITIAL for globals not in the current function context.
+
+ 2014-02-20 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/60221
+ * tree-eh.c (execute_cleanup_eh_1): Also cleanup empty EH
+ regions at -O0.
+
+ 2014-02-14 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60183
+ * tree-ssa-phiprop.c (propagate_with_phi): Avoid speculating
+ loads.
+ (tree_ssa_phiprop): Calculate and free post-dominators.
+
+2014-02-25 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/55426
+ * config/arm/arm.h (CANNOT_CHANGE_MODE_CLASS): Allow 128 to 64-bit
+ conversions.
+
+2014-02-24 John David Anglin <danglin@gcc.gnu.org>
+
+ * config/pa/pa.c (pa_output_move_double): Don't valididate when
+ adjusting offsetable addresses.
+
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
+
+ * config/microblaze/microblaze.md: Correct ashrsi_reg / lshrsi_reg names
+
+2014-02-23 Edgar E. Iglesias <edgar.iglesias@xilinx.com>
+
+ * config/microblaze/microblaze.h: Remove SECONDARY_MEMORY_NEEDED
+ definition.
+
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
+
+ * /config/microblaze/microblaze.c: Add microblaze_asm_output_mi_thunk
+ and define TARGET_ASM_OUTPUT_MI_THUNK and
+ TARGET_ASM_CAN_OUTPUT_MI_THUNK.
+
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
+
+ * config/microblaze/predicates.md: Add cmp_op predicate.
+ * config/microblaze/microblaze.md: Add branch_compare instruction
+ which uses cmp_op predicate and emits cmp insn before branch.
+ * config/microblaze/microblaze.c (microblaze_emit_compare): Rename
+ to microblaze_expand_conditional_branch and consolidate logic.
+ (microblaze_expand_conditional_branch): emit branch_compare
+ insn instead of handling cmp op separate from branch insn.
+
+2014-02-21 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/55260
+ * ipa-cp.c (cgraph_edge_brings_all_agg_vals_for_node): Uce correct
+ info when checking whether lattices are bottom.
+
+2014-02-21 Jakub Jelinek <jakub@redhat.com>
+
+ * config/i386/i386.c (ix86_expand_vec_perm): Use V8SImode
+ mode for mask of V8SFmode permutation.
+
+2014-02-20 Richard Henderson <rth@redhat.com>
+
+ PR c++/60272
+ * builtins.c (expand_builtin_atomic_compare_exchange): Conditionalize
+ on failure the store back into EXPECT. Always make a new pseudo for
+ OLDVAL.
+
+2014-02-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/57896
+ * config/i386/i386.c (expand_vec_perm_interleave2): Don't call
+ gen_reg_rtx if d->testing_p.
+ (expand_vec_perm_pshufb2, expand_vec_perm_even_odd_1,
+ expand_vec_perm_broadcast_1): Return early if d->testing_p and
+ we will certainly return true.
+
+2014-02-20 Richard Biener <rguenther@suse.de>
+
+ * tree-cfg.c (replace_uses_by): Mark altered BBs before
+ doing the substitution.
+
+2014-02-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline
+ 2014-02-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/60207
+ * config/i386/i386.c (construct_container): Remove TFmode check
+ for X86_64_INTEGER_CLASS.
+
+2014-02-19 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2014-02-19 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/59794
+ * config/i386/i386.c (type_natural_mode): Warn for ABI changes
+ only when -Wpsabi is enabled.
+
+2014-02-19 Terry Guo <terry.guo@arm.com>
+
+ Backport from mainline
+ 2014-02-08 Terry Guo <terry.guo@arm.com>
+
+ * doc/invoke.texi: Document ARM -march=armv7e-m.
+
+2014-02-18 Kai Tietz <ktietz@redhat.com>
+
+ Backport from mainline
+ 2014-02-18 Kai Tietz <ktietz@redhat.com>
+
+ PR target/60193
+ * config/i386/i386.c (ix86_expand_prologue): Use
+ rax register as displacement for restoring %r10, %rax.
+ Additional fix wrong offset for restoring both-registers.
+
+2014-02-18 Eric Botcazou <ebotcazou@adacore.com>
+
+ * ipa-prop.c (compute_complex_ancestor_jump_func): Replace overzealous
+ assertion with conditional return.
+
+2014-02-18 Jakub Jelinek <jakub@redhat.com>
+ Uros Bizjak <ubizjak@gmail.com>
+
+ PR driver/60233
+ * config/i386/driver-i386.c (host_detect_local_cpu): If
+ YMM state is not saved by the OS, also clear has_f16c. Move
+ CPUID 0x80000001 handling before YMM state saving checking.
+
+2014-02-14 Roland McGrath <mcgrathr@google.com>
+
+ * configure.ac (HAVE_AS_IX86_UD2): New test for 'ud2' mnemonic.
+ * configure: Regenerated.
+ * config.in: Regenerated.
+ * config/i386/i386.md (trap) [HAVE_AS_IX86_UD2]: Use the mnemonic
+ instead of ASM_SHORT.
+
+2014-02-13 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2014-02-13 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/sse.md (xop_vmfrcz<mode>2): Generate const0 in
+ operands[2], not operands[3].
+
+2014-02-13 Dominik Vogt <vogt@linux.vnet.ibm.com>
+
+ * config/s390/s390.c (s390_asm_output_function_label): Fix crash
+ caused by bad second argument to warning_at() with -mhotpatch and
+ nested functions (e.g. with gfortran).
+
+2014-02-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline
+ 2014-02-12 H.J. Lu <hongjiu.lu@intel.com>
+ Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/60151
+ * configure.ac (HAVE_AS_GOTOFF_IN_DATA): Pass --32 to GNU assembler.
+
+2014-02-12 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR rtl-optimization/60116
+ * combine.c (try_combine): Also remove dangling REG_DEAD notes on the
+ other_insn once the combination has been validated.
+
+2014-02-10 Nagaraju Mekala <nagaraju.mekala@xilinx.com>
+
+ * config/microblaze/microblaze.md: Add movsi4_rev insn pattern.
+ * config/microblaze/predicates.md: Add reg_or_mem_operand predicate.
+
+2014-02-10 Nagaraju Mekala <nagaraju.mekala@xilinx.com>
+
+ * config/microblaze/microblaze.c: Extend mcpu version format
+
+2014-02-10 David Holsgrove <david.holsgrove@xilinx.com>
+
+ * config/microblaze/microblaze.h: Define SIZE_TYPE and PTRDIFF_TYPE.
+
+2014-02-10 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-01-30 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59903
+ * tree-vect-loop.c (vect_transform_loop): Guard multiple-types
+ check properly.
+
+ 2014-02-10 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60115
+ * tree-eh.c (tree_could_trap_p): Unify TARGET_MEM_REF and
+ MEM_REF handling. Properly verify that the accesses are not
+ out of the objects bound.
+
+2014-02-05 James Greenhalgh <james.greenhalgh@arm.com>
+
+ Backport from mainline.
+ 2014-02-05 James Greenhalgh <james.greenhalgh@arm.com>
+
+ PR target/59718
+ * doc/invoke.texi (-march): Clarify documentation for ARM.
+ (-mtune): Likewise.
+ (-mcpu): Likewise.
+
+2014-02-04 John David Anglin <danglin@gcc.gnu.org>
+
+ PR target/59777
+ * config/pa/pa.c (legitimize_tls_address): Return original address
+ if not passed a SYMBOL_REF rtx.
+ (hppa_legitimize_address): Call legitimize_tls_address for all TLS
+ addresses.
+ (pa_emit_move_sequence): Simplify TLS source operands.
+ (pa_legitimate_constant_p): Reject all TLS constants.
+ * config/pa/pa.h (PA_SYMBOL_REF_TLS_P): Correct comment.
+ (CONSTANT_ADDRESS_P): Reject TLS CONST addresses.
+
+2014-02-04 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2014-02-02 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/60017
+ * config/i386/i386.c (classify_argument): Fix handling of bit_offset
+ when calculating size of integer atomic types.
+
+2014-02-02 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2014-01-30 Jakub Jelinek <jakub@redhat.com>
+
+ * config/i386/f16cintrin.h (_cvtsh_ss): Avoid -Wnarrowing warning.
+
+2014-01-31 Richard Henderson <rth@redhat.com>
+
+ PR middle-end/60004
+ * tree-eh.c (lower_try_finally_switch): Delay lowering finally block
+ until after else_eh is processed.
+
+2014-01-30 David Holsgrove <david.holsgrove@xilinx.com>
+
+ Backport from mainline
+ * config/microblaze/microblaze.md(cstoresf4, cbranchsf4): Replace
+ comparison_operator with ordered_comparison_operator.
+
+2014-01-25 Walter Lee <walt@tilera.com>
+
+ Backport from mainline
+ 2014-01-25 Walter Lee <walt@tilera.com>
+
+ * config/tilegx/sync.md (atomic_fetch_sub): Fix negation and
+ avoid clobbering a live register.
+
+2014-01-25 Walter Lee <walt@tilera.com>
+
+ Backport from mainline
+ 2014-01-25 Walter Lee <walt@tilera.com>
+
+ * config/tilegx/tilegx-c.c (tilegx_cpu_cpp_builtins):
+ Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2}.
+ * config/tilegx/tilepro-c.c (tilepro_cpu_cpp_builtins):
+ Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2,4,8}.
+
+2014-01-25 Walter Lee <walt@tilera.com>
+
+ Backport from mainline
+ 2014-01-25 Walter Lee <walt@tilera.com>
+
+ * config/tilegx/tilegx.c (tilegx_gen_bundles): Delete barrier
+ insns before bundling.
+ * config/tilegx/tilegx.md (tile_network_barrier): Update comment.
+
+2014-01-25 Walter Lee <walt@tilera.com>
+
+ Backport from mainline
+ 2014-01-25 Walter Lee <walt@tilera.com>
+
+ * config/tilegx/tilegx.c (tilegx_expand_builtin): Set
+ PREFETCH_SCHEDULE_BARRIER_P to true for prefetches.
+ * config/tilepro/tilepro.c (tilepro_expand_builtin): Ditto.
+
+2014-01-25 Walter Lee <walt@tilera.com>
+
+ Backport from mainline
+ 2014-01-25 Walter Lee <walt@tilera.com>
+
+ * config/tilepro/tilepro.md (ctzdi2): Use register_operand
+ predicate.
+ (clzdi2): Ditto.
+ (ffsdi2): Ditto.
+
+2014-01-25 Walter Lee <walt@tilera.com>
+
+ Backport from mainline
+ 2014-01-25 Walter Lee <walt@tilera.com>
+
+ * config/tilegx/tilegx.c (tilegx_expand_to_rtl_hook): New.
+ (TARGET_EXPAND_TO_RTL_HOOK): Define.
+
+2014-01-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline
+ 2014-01-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/59929
+ * config/i386/i386.md (pushsf splitter): Get stack adjustment
+ from push operand if code of push isn't PRE_DEC.
+
+2014-01-23 David Holsgrove <david.holsgrove@xilinx.com>
+
+ Backport from mainline.
+ * config/microblaze/microblaze.md: Add trap insn and attribute
+
+2014-01-23 Marek Polacek <polacek@redhat.com>
+
+ Backport from mainline
+ 2013-10-21 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/58809
+ * fold-const.c (fold_range_test): Return 0 if the type is not
+ an integral type.
+
+2014-01-22 David Holsgrove <david.holsgrove@xilinx.com>
+
+ * config/microblaze/microblaze.md: Correct bswaphi2 insn.
+
+2014-01-22 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2014-01-20 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (ix86_avoid_lea_for_addr): Return false
+ for SImode_address_operand operands, having only a REG argument.
+
+ 2014-01-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/59880
+ * config/i386/i386.c (ix86_avoid_lea_for_addr): Return false
+ if operands[1] is a REG or ZERO_EXTEND of a REG.
+
+ 2014-01-18 Uros Bizjak <ubizjak@gmail.com>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/59379
+ * config/i386/i386.md (*lea<mode>): Zero-extend return register
+ to DImode for zero-extended addresses.
+
+2014-01-21 Andrew Pinski <apinski@cavium.com>
+ Steve Ellcey <sellcey@mips.com>
+
+ PR target/59462
+ * config/mips/mips.c (mips_print_operand): Check operand mode instead
+ of operator mode.
+
+2014-01-21 Andrey Belevantsev <abel@ispras.ru>
+
+ Backport from mainline
+ 2013-12-23 Andrey Belevantsev <abel@ispras.ru>
+
+ PR rtl-optimization/57422
+ * sel-sched.c (mark_unavailable_hard_regs): Fix typo when calling
+ add_to_hard_reg_set.
+
+2014-01-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/59860
+ * tree.h (fold_builtin_strcat): New prototype.
+ * builtins.c (fold_builtin_strcat): No longer static. Add len
+ argument, if non-NULL, don't call c_strlen. Optimize
+ directly into __builtin_memcpy instead of __builtin_strcpy.
+ (fold_builtin_2): Adjust fold_builtin_strcat caller.
+ * gimple-fold.c (gimple_fold_builtin): Handle BUILT_IN_STRCAT.
+
+2014-01-20 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/59860
+ * builtins.c (fold_builtin_strcat): Remove case better handled
+ by tree-ssa-strlen.c.
+
+2014-01-19 John David Anglin <danglin@gcc.gnu.org>
+
+ * config/pa/pa.c (pa_attr_length_millicode_call): Correct length of
+ long non-pic millicode calls.
+
+2014-01-17 John David Anglin <danglin@gcc.gnu.org>
+
+ * config/pa/pa.c (pa_attr_length_indirect_call): Don't output a short
+ call to $$dyncall when TARGET_LONG_CALLS is true.
+
+2014-01-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline
+ 2014-01-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/59794
+ * config/i386/i386.c (type_natural_mode): Add a bool parameter
+ to indicate if type is used for function return value. Warn
+ ABI change if the vector mode isn't available for function
+ return value.
+ (ix86_function_arg_advance): Pass false to type_natural_mode.
+ (ix86_function_arg): Likewise.
+ (ix86_gimplify_va_arg): Likewise.
+ (function_arg_32): Don't warn ABI change.
+ (ix86_function_value): Pass true to type_natural_mode.
+ (ix86_return_in_memory): Likewise.
+ (ix86_struct_value_rtx): Removed.
+ (TARGET_STRUCT_VALUE_RTX): Likewise.
+
+2014-01-17 Charles Baylis <charles.baylis@linaro.org>
+
+ Backport from mainline
+ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
+
+ PR target/59142
+ * config/arm/arm-ldmstm.ml: Use low_register_operand for Thumb
+ patterns.
+ * config/arm/ldmstm.md: Regenerate.
+
+ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
+
+ PR target/59142
+ * config/arm/predicates.md (arm_hard_general_register_operand):
+ New predicate.
+ (arm_hard_register_operand): Remove.
+ * config/arm/arm-ldmstm.ml: Use arm_hard_general_register_operand
+ for all patterns.
+ * config/arm/ldmstm.md: Regenerate.
+
+ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
+
+ PR target/59142
+ * config/arm/predicates.md (vfp_hard_register_operand): New predicate.
+ * config/arm/arm.md (vfp_pop_multiple_with_writeback): Use
+ vfp_hard_register_operand.
+
+2014-01-17 Kugan Vivekanandarajah <kuganv@linaro.org>
+
+ Backport from mainline
+ 2014-01-15 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
+ Kugan Vivekanandarajah <kuganv@linaro.org>
+
+ PR target/59695
+ * config/aarch64/aarch64.c (aarch64_build_constant): Fix incorrect
+ truncation.
+
+2014-01-17 Terry Guo <terry.guo@arm.com>
+
+ PR target/59826
+ * config/arm/arm.md (prefetch): Set insn type attribute to load1.
+
+2014-01-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/59839
+ * config/i386/i386.c (ix86_expand_builtin): If target doesn't
+ satisfy operand 0 predicate for gathers, use a new pseudo as
+ subtarget.
+
+2014-01-16 Richard Henderson <rth@redhat.com>
+
+ PR debug/54694
+ * reginfo.c (global_regs_decl): Globalize.
+ * rtl.h (global_regs_decl): Declare.
+ * ira.c (do_reload): Diagnose frame_pointer_needed and it
+ reserved via global_regs.
+
+2014-01-16 Peter Bergner <bergner@vnet.ibm.com>
+
+ Backport from mainline
+ 2014-01-15 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (ix86_hard_regno_mode_ok): Use
+ VALID_AVX256_REG_OR_OI_MODE.
+
+ 2013-09-05 Peter Bergner <bergner@vnet.ibm.com>
+
+ PR target/58139
+ * reginfo.c (choose_hard_reg_mode): Scan through all mode classes
+ looking for widest mode.
+
+2014-01-16 Marek Polacek <polacek@redhat.com>
+
+ Backported from mainline
+ 2014-01-16 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/59827
+ * gimple-low.c (gimple_check_call_args): Don't use DECL_ARG_TYPE if
+ it is error_mark_node.
+
+2014-01-15 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ PR target/59803
+ * config/s390/s390.c (s390_preferred_reload_class): Don't return
+ ADDR_REGS for invalid symrefs in non-PIC code.
+
+2014-01-14 Uros Bizjak <ubizjak@gmail.com>
+
+ Revert:
+ 2014-01-08 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (ix86_data_alignment): Calculate max_align
+ from prefetch_block tune setting.
+
+2014-01-13 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2014-01-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/59745
+ * tree-predcom.c (tree_predictive_commoning_loop): Call
+ free_affine_expand_cache if giving up because components is NULL.
+
+2014-01-10 Yufeng Zhang <yufeng.zhang@arm.com>
+
+ * config/arm/arm.c (arm_expand_neon_args): Call expand_expr
+ with EXPAND_MEMORY for NEON_ARG_MEMORY; check if the returned
+ rtx is const0_rtx or not.
+
+2014-01-10 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * config/s390/s390.c (s390_expand_tbegin): Remove jump over CC
+ extraction in good case.
+
+2014-01-10 Huacai Chen <chenhc@lemote.com>
+
+ * config/mips/driver-native.c (host_detect_local_cpu): Handle new
+ kernel strings for Loongson-2E/2F/3A.
+
+2014-01-10 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59715
+ * tree-flow.h (split_critical_edges): Declare.
+ * tree-cfg.c (split_critical_edges): Export.
+ * tree-ssa-sink.c (execute_sink_code): Split critical edges.
+
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * config/mips/mips.h (ISA_HAS_WSBH): Define.
+ * config/mips/mips.md (UNSPEC_WSBH, UNSPEC_DSBH, UNSPEC_DSHD): New
+ constants.
+ (bswaphi2, bswapsi2, bswapdi2, wsbh, dsbh, dshd): New patterns.
+
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
+
+ PR rtl-optimization/59137
+ * reorg.c (steal_delay_list_from_target): Call update_block for
+ elided insns.
+ (steal_delay_list_from_fallthrough, relax_delay_slots): Likewise.
+
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
+
+ Revert:
+ 2012-10-07 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * config/mips/mips.c (mips_truncated_op_cost): New function.
+ (mips_rtx_costs): Adjust test for BADDU.
+ * config/mips/mips.md (*baddu_di<mode>): Push truncates to operands.
+
+ 2012-10-02 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * config/mips/mips.md (*baddu_si_eb, *baddu_si_el): Merge into...
+ (*baddu_si): ...this new pattern.
+
+2014-01-09 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2013-11-18 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59125
+ PR tree-optimization/54570
+ * tree-ssa-sccvn.c (copy_reference_ops_from_ref): When inlining
+ is not complete do not treat component-references with offset zero
+ but different fields as equal.
+ * tree-object-size.c: Include tree-phinodes.h and ssa-iterators.h.
+ (compute_object_sizes): Apply TLC. Propagate the constant
+ results into all uses and fold their stmts.
+ * passes.def (pass_all_optimizations): Move pass_object_sizes
+ after the first pass_forwprop and before pass_fre.
+
+ 2013-12-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/59362
+ * tree-object-size.c (object_sizes): Change into array of
+ vec<unsigned HOST_WIDE_INT>.
+ (compute_builtin_object_size): Check computed bitmap for
+ non-NULL instead of object_sizes. Call safe_grow on object_sizes
+ vector if new SSA_NAMEs appeared.
+ (init_object_sizes): Check computed bitmap for non-NULL.
+ Call safe_grow on object_sizes elements instead of initializing
+ it with XNEWVEC.
+ (fini_object_sizes): Call release on object_sizes elements, don't
+ set it to NULL.
+
+2014-01-09 Richard Earnshaw <rearnsha@arm.com>
+
+ PR rtl-optimization/54300
+ * regcprop.c (copyprop_hardreg_forward_1): Ensure any unused
+ outputs in a single-set are killed from the value chains.
+
+2014-01-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/59724
+ * ifcvt.c (cond_exec_process_if_block): Don't call
+ flow_find_head_matching_sequence with 0 longest_match.
+ * cfgcleanup.c (flow_find_head_matching_sequence): Count even
+ non-active insns if !stop_after.
+ (try_head_merge_bb): Revert 2014-01-07 changes.
+
+2014-01-09 Hans-Peter Nilsson <hp@axis.com>
+
+ Backport from mainline
+ 2013-12-23 Hans-Peter Nilsson <hp@axis.com>
+
+ PR middle-end/59584
+ * config/cris/predicates.md (cris_nonsp_register_operand):
+ New define_predicate.
+ * config/cris/cris.md: Replace register_operand with
+ cris_nonsp_register_operand for destinations in all
+ define_splits where a register is set more than once.
+
+2014-01-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline
+ 2013-12-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/59587
+ * config/i386/i386.c (struct ptt): Add a field for processor name.
+ (processor_target_table): Sync with processor_type. Add
+ processor names.
+ (cpu_names): Removed.
+ (ix86_option_override_internal): Default x_ix86_tune_string
+ to processor_target_table[TARGET_CPU_DEFAULT].name.
+ (ix86_function_specific_print): Assert arch and tune <
+ PROCESSOR_max. Use processor_target_table to print arch and
+ tune names.
+ * config/i386/i386.h (TARGET_CPU_DEFAULT): Default to
+ PROCESSOR_GENERIC32.
+ (target_cpu_default): Removed.
+ (processor_type): Reordered.
+
+2014-01-08 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2014-01-05 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (ix86_data_alignment): Calculate max_align
+ from prefetch_block tune setting.
+ (nocona_cost): Correct size of prefetch block to 64.
+
+2014-01-08 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/59610
+ * ipa-prop.c (ipa_compute_jump_functions): Bail out if not optimizing.
+ (parm_preserved_before_stmt_p): Assume modification present when not
+ optimizing.
+
+2014-01-07 John David Anglin <danglin@gcc.gnu.org>
+
+ PR target/59652
+ * config/pa/pa.c (pa_legitimate_address_p): Return false before reload
+ for 14-bit register offsets when INT14_OK_STRICT is false.
+
+2014-01-07 Roland Stigge <stigge@antcom.de>
+ Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR 57386/target
+ * config/rs6000/rs6000.c (rs6000_legitimate_offset_address_p):
+ Only check TFmode for SPE constants. Don't check TImode or TDmode.
+
+2014-01-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/58668
+ * cfgcleanup.c (flow_find_cross_jump): Don't count
+ any jumps if dir_p is NULL. Remove p1 variable and make USE/CLOBBER
+ check consistent with other places.
+ (flow_find_head_matching_sequence): Don't count USE or CLOBBER insns.
+ (try_head_merge_bb): Adjust for the flow_find_head_matching_sequence
+ counting change.
+ * ifcvt.c (count_bb_insns): Don't count USE or CLOBBER insns.
+
+2014-01-07 Mike Stump <mikestump@comcast.net>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR pch/59436
+ * tree.h (struct tree_optimization_option): Change optabs
+ type from unsigned char * to void *.
+ * optabs.c (init_tree_optimization_optabs): Adjust
+ TREE_OPTIMIZATION_OPTABS initialization.
+
+2014-01-07 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2013-12-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/58956
+ PR middle-end/59470
+ * gimple.h (walk_stmt_load_store_addr_fn): New typedef.
+ (walk_stmt_load_store_addr_ops, walk_stmt_load_store_ops): Use it
+ for callback params.
+ * gimple.c (walk_stmt_load_store_ops): Likewise.
+ (walk_stmt_load_store_addr_ops): Likewise. Adjust all callback
+ calls to supply the gimple operand containing the base tree
+ as an extra argument.
+ * tree-ssa-ter.c (find_ssaname, find_ssaname_in_store): New helper
+ functions.
+ (find_replaceable_in_bb): For calls or GIMPLE_ASM, only set
+ same_root_var if USE is used somewhere in the stores of the stmt.
+ * ipa-prop.c (visit_ref_for_mod_analysis): Remove name of the stmt
+ argument and ATTRIBUTE_UNUSED, add another unnamed tree argument.
+ * ipa-pure-const.c (check_load, check_store, check_ipa_load,
+ check_ipa_store): Likewise.
+ * gimple.c (gimple_ior_addresses_taken_1): Likewise.
+ * ipa-split.c (test_nonssa_use, mark_nonssa_use): Likewise.
+ (verify_non_ssa_vars, visit_bb): Adjust their callers.
+ * cfgexpand.c (add_scope_conflicts_1): Use
+ walk_stmt_load_store_addr_fn type for visit variable.
+ (visit_op, visit_conflict): Remove name of the stmt
+ argument and ATTRIBUTE_UNUSED, add another unnamed tree argument.
+ * tree-sra.c (asm_visit_addr): Likewise. Remove name of the data
+ argument and ATTRIBUTE_UNUSED.
+ * cgraphbuild.c (mark_address, mark_load, mark_store): Add another
+ unnamed tree argument.
+
+2014-01-03 Andreas Schwab <schwab@linux-m68k.org>
+
+ * config/m68k/m68k.c (handle_move_double): Handle pushes with
+ overlapping registers also for registers other than the stack
+ pointer.
+
+2014-01-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/59625
+ * config/i386/i386.c (ix86_avoid_jump_mispredicts): Don't consider
+ asm goto as jump.
+
+2014-01-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/59647
+ * cse.c (cse_process_notes_1): Don't substitute negative VOIDmode
+ new_rtx into UNSIGNED_FLOAT rtxes.
+
+2013-12-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ * doc/invoke.texi (output file options): Document -fada-spec-parent.
+
+2013-12-26 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/driver-i386.c (decode_caches_intel): Add missing entries.
+
+2013-12-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/59255
+ Backported from mainline
+ 2013-08-19 Dehao Chen <dehao@google.com>
+
+ * value-prof.c (gimple_ic): Fix the bug of adding EH edge.
+
+2013-12-19 James Greenhalgh <james.greenhalgh@arm.com>
+
+ Backport from Mainline.
+ 2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * config/aarch64/aarch64-simd-builtins.def (cmhs): Rename to...
+ (cmgeu): ...This.
+ (cmhi): Rename to...
+ (cmgtu): ...This.
+ * config/aarch64/aarch64-simd.md
+ (simd_mode): Add SF.
+ (aarch64_vcond_internal): Use new names for unsigned comparison insns.
+ (aarch64_cm<optab><mode>): Rewrite to not use UNSPECs.
+ * config/aarch64/aarch64.md (*cstore<mode>_neg): Rename to...
+ (cstore<mode>_neg): ...This.
+ * config/aarch64/iterators.md
+ (VALLF): new.
+ (unspec): Remove UNSPEC_CM<EQ, LE, LT, GE, GT, HS, HI, TST>.
+ (COMPARISONS): New.
+ (UCOMPARISONS): Likewise.
+ (optab): Add missing comparisons.
+ (n_optab): New.
+ (cmp_1): Likewise.
+ (cmp_2): Likewise.
+ (CMP): Likewise.
+ (cmp): Remove.
+ (VCMP_S): Likewise.
+ (VCMP_U): Likewise.
+ (V_cmp_result): Add DF, SF modes.
+ (v_cmp_result): Likewise.
+ (v): Likewise.
+ (vmtype): Likewise.
+ * config/aarch64/predicates.md (aarch64_reg_or_fp_zero): New.
+
+ Partial Backport from mainline.
+ 2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * config/aarch64/arm_neon.h
+ (vc<eq, lt, le, gt, ge, tst><qsd>_<u><8,16,32,64>): Remap
+ to builtins or C as appropriate.
+
+2013-12-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
+ Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ Backport from mainline
+ 2013-12-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
+ * config/s390/s390.c (s390_hotpatch_trampoline_halfwords_default): New
+ constant
+ (s390_hotpatch_trampoline_halfwords_max): New constant
+ (s390_hotpatch_trampoline_halfwords): New static variable
+ (get_hotpatch_attribute): New function
+ (s390_handle_hotpatch_attribute): New function
+ (s390_attribute_table): New target specific attribute table to implement
+ the hotpatch attribute
+ (s390_option_override): Parse hotpatch options
+ (s390_function_num_hotpatch_trampoline_halfwords): New function
+ (s390_can_inline_p): Implement target hook to
+ suppress hotpatching for explicitly inlined functions
+ (s390_asm_output_function_label): Generate hotpatch prologue
+ (TARGET_ATTRIBUTE_TABLE): Define to implement target attribute table
+ (TARGET_CAN_INLINE_P): Define to implement target hook
+ * config/s390/s390.opt (mhotpatch): New options -mhotpatch, -mhotpatch=
+ * config/s390/s390-protos.h (s390_asm_output_function_label): Add
+ prototype
+ * config/s390/s390.h (ASM_OUTPUT_FUNCTION_LABEL): Target specific
+ function label generation for hotpatching
+ (FUNCTION_BOUNDARY): Align functions to eight bytes
+ * doc/extend.texi: Document hotpatch attribute
+ * doc/invoke.texi: Document -mhotpatch option
+
+2013-12-18 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/arm/arm.c (arm_expand_epilogue_apcs_frame): Fix thinko.
+
+2013-12-12 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR middle-end/59470
+ * lra-coalesce.c (lra_coalesce): Invalidate inheritance pseudo
+ values if necessary.
+
+2013-12-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR libgomp/59467
+ * gimplify.c (omp_check_private): Add copyprivate argument, if it
+ is true, don't check omp_privatize_by_reference.
+ (gimplify_scan_omp_clauses): For OMP_CLAUSE_COPYPRIVATE verify
+ decl is private in outer context. Adjust omp_check_private caller.
+
+2013-12-10 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR rtl-optimization/58295
+ * simplify-rtx.c (simplify_truncation): Restrict the distribution for
+ WORD_REGISTER_OPERATIONS targets.
+
+2013-12-10 Kai Tietz <ktietz@redhat.com>
+
+ PR target/56807
+ * config/i386/i386.c (ix86_expand_prologue): Address saved
+ registers stack-relative, not via frame-pointer.
+
+2013-12-09 Alan Modra <amodra@gmail.com>
+
+ Apply from mainline
+ 2013-12-05 Alan Modra <amodra@gmail.com>
+ * configure.ac (BUILD_CXXFLAGS) Don't use ALL_CXXFLAGS for
+ build != host.
+ <recursive call for build != host>: Clear GMPINC. Don't bother
+ saving CFLAGS.
+ * configure: Regenerate.
+
+2013-12-08 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2013-12-06 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/59405
+ * config/i386/i386.c (type_natural_mode): Properly handle
+ size 8 for !TARGET_64BIT.
+
+2013-12-07 Ralf Corsépius <ralf.corsepius@rtems.org>
+
+ * config.gcc (microblaze*-*-rtems*): Add TARGET_BIG_ENDIAN_DEFAULT.
+
+2013-12-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/59388
+ * tree-ssa-reassoc.c (update_range_test): If op == range->exp,
+ gimplify tem after stmt rather than before it.
+
+2013-12-06 Oleg Endo <olegendo@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-11-26 Oleg Endo <olegendo@gcc.gnu.org>
+
+ PR target/58314
+ PR target/50751
+ * config/sh/sh.c (max_mov_insn_displacement, disp_addr_displacement):
+ Prefix function names with 'sh_'. Make them non-static.
+ * config/sh/sh-protos.h (sh_disp_addr_displacement,
+ sh_max_mov_insn_displacement): Add declarations.
+ * config/sh/constraints.md (Q): Reject QImode.
+ (Sdd): Use match_code "mem".
+ (Snd): Fix erroneous matching of non-memory operands.
+ * config/sh/predicates.md (short_displacement_mem_operand): New
+ predicate.
+ (general_movsrc_operand): Disallow PC relative QImode loads.
+ * config/sh/sh.md (*mov<mode>_reg_reg): Remove it.
+ (*movqi, *movhi): Merge both insns into...
+ (*mov<mode>): ... this new insn. Replace generic 'm' constraints with
+ 'Snd' and 'Sdd' constraints. Calculate insn length dynamically based
+ on the operand types.
+
+2013-12-06 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2013-11-29 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59334
+ * tree-ssa-dce.c (eliminate_unnecessary_stmts): Fix bug
+ in previous commit.
+
+ 2013-11-28 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59330
+ * tree-ssa-dce.c (eliminate_unnecessary_stmts): Simplify
+ and fix delayed marking of free calls not necessary.
+
+2013-12-06 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2013-11-27 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59288
+ * tree-vect-loop.c (get_initial_def_for_induction): Do not
+ re-analyze the PHI but use STMT_VINFO_LOOP_PHI_EVOLUTION_PART.
+
+ 2013-11-19 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59164
+ * tree-vect-loop.c (vect_analyze_loop_operations): Adjust
+ check whether we can create an epilogue loop to reflect the
+ cases where we create one.
+
+ 2013-09-05 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/58137
+ * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size):
+ Do not create vectors of pointers.
+ * tree-vect-loop.c (get_initial_def_for_induction): Use proper
+ types for the components of the vector initializer.
+ * tree-cfg.c (verify_gimple_assign_binary): Remove special-casing
+ allowing pointer vectors with PLUS_EXPR/MINUS_EXPR.
+
+2013-12-06 Oleg Endo <olegendo@gcc.gnu.org>
+
+ PR target/51244
+ PR target/59343
+ * config/sh/sh.md (*cbranch_t): Check that there are no labels between
+ the s1 insn and the testing insn. Remove REG_DEAD note from s1 insn.
+
+2013-12-05 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2013-11-19 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/58956
+ * tree-ssa-ter.c (find_replaceable_in_bb): Avoid forwarding
+ loads into stmts that may clobber it.
+
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/58726
+ * combine.c (force_to_mode): Fix comment typo. Don't destructively
+ modify x for ROTATE, ROTATERT and IF_THEN_ELSE.
+
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
+ Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/59163
+ * config/i386/i386.c (ix86_legitimate_combined_insn): If for
+ !TARGET_AVX there is misaligned MEM operand with vector mode
+ and get_attr_ssememalign is 0, return false.
+ (ix86_expand_special_args_builtin): Add get_pointer_alignment
+ computed alignment and for non-temporal loads/stores also
+ at least GET_MODE_ALIGNMENT as MEM_ALIGN.
+ * config/i386/sse.md
+ (<sse>_loadu<ssemodesuffix><avxsizesuffix>,
+ <sse>_storeu<ssemodesuffix><avxsizesuffix>,
+ <sse2>_loaddqu<avxsizesuffix>,
+ <sse2>_storedqu<avxsizesuffix>, <sse3>_lddqu<avxsizesuffix>,
+ sse_vmrcpv4sf2, sse_vmrsqrtv4sf2, sse2_cvtdq2pd, sse_movhlps,
+ sse_movlhps, sse_storehps, sse_loadhps, sse_loadlps,
+ *vec_interleave_highv2df, *vec_interleave_lowv2df,
+ *vec_extractv2df_1_sse, sse2_loadhpd, sse2_loadlpd, sse2_movsd,
+ sse4_1_<code>v8qiv8hi2, sse4_1_<code>v4qiv4si2,
+ sse4_1_<code>v4hiv4si2, sse4_1_<code>v2qiv2di2,
+ sse4_1_<code>v2hiv2di2, sse4_1_<code>v2siv2di2, sse4_2_pcmpestr,
+ *sse4_2_pcmpestr_unaligned, sse4_2_pcmpestri, sse4_2_pcmpestrm,
+ sse4_2_pcmpestr_cconly, sse4_2_pcmpistr, *sse4_2_pcmpistr_unaligned,
+ sse4_2_pcmpistri, sse4_2_pcmpistrm, sse4_2_pcmpistr_cconly): Add
+ ssememalign attribute.
+ * config/i386/i386.md (ssememalign): New define_attr.
+
+2013-12-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/59011
+ * gimplify.c (nonlocal_vla_vars): New variable.
+ (gimplify_var_or_parm_decl): Put VAR_DECLs for VLAs into
+ nonlocal_vla_vars chain.
+ (gimplify_body): Call declare_vars on nonlocal_vla_vars chain
+ if outer_bind has DECL_INITIAL (current_function_decl) block.
+
+ PR target/58864
+ * optabs.c (emit_conditional_move): Save and restore
+ pending_stack_adjust and stack_pointer_delta if cmove can't be used.
+
+2013-12-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/59358
+ * tree-vrp.c (union_ranges): To check for the partially
+ overlapping ranges or adjacent ranges, also compare *vr0max
+ with vr1max.
+
+2013-12-02 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59139
+ * tree-ssa-loop-niter.c (chain_of_csts_start): Properly match
+ code in get_val_for.
+ (get_val_for): Use gcc_checking_asserts.
+
+2013-11-27 Tom de Vries <tom@codesourcery.com>
+ Marc Glisse <marc.glisse@inria.fr>
+
+ PR middle-end/59037
+ * fold-const.c (fold_indirect_ref_1): Don't create out-of-bounds
+ BIT_FIELD_REF.
+ * gimplify.c (gimple_fold_indirect_ref): Same.
+
+2013-12-01 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/i386/winnt.c (i386_pe_asm_named_section): Be prepared for an
+ identifier node.
+
+2013-12-01 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ * expr.c (emit_group_store): Fix off-by-one BITFIELD_END argument.
+
+2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ Backport from mainline
+ 2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * config/arm/iterators.md (vrint_conds): New int attribute.
+ * config/arm/vfp.md (<vrint_pattern><SDF:mode>2): Set conds attribute.
+ (smax<mode>3): Likewise.
+ (smin<mode>3): Likewise.
+
+2013-11-28 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2013-11-27 Uros Bizjak <ubizjak@gmail.com>
+ Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
+
+ PR target/56788
+ * gcc.target/i386/xop-frczX.c: New test.
+
+2013-11-28 Terry Guo <terry.guo@arm.com>
+
+ Backport mainline r205391
+ 2013-11-26 Terry Guo <terry.guo@arm.com>
+
+ * config/arm/arm.c (require_pic_register): Handle high pic base
+ register for thumb-1.
+ (arm_load_pic_register): Also initialize high pic base register.
+ * doc/invoke.texi: Update documentation for option -mpic-register.
+
+2013-11-27 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2013-11-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/59014
+ * tree-vrp.c (register_edge_assert_for_1): Don't look
+ through conversions from non-integral types or through
+ narrowing conversions.
+
+2013-11-27 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR middle-end/59138
+ * expr.c (emit_group_store): Don't write past the end of the structure.
+ (store_bit_field): Fix formatting.
+
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ Backport from mainline
+ 2013-09-17 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * config/sparc/t-rtems: Add leon3 multilibs.
+
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ Backport from mainline
+ 2013-08-09 Eric Botcazou <ebotcazou@adacore.com>
+
+ * configure.ac: Add GAS check for LEON instructions on SPARC.
+ * configure: Regenerate.
+ * config.in: Likewise.
+ * config.gcc (with_cpu): Remove sparc-leon*-* and deal with LEON in the
+ sparc*-*-* block.
+ * config/sparc/sparc.opt (LEON, LEON3): New masks.
+ * config/sparc/sparc.h (ASM_CPU32_DEFAULT_SPEC): Set to AS_LEON_FLAG
+ for LEON or LEON3.
+ (ASM_CPU_SPEC): Pass AS_LEON_FLAG if -mcpu=leon or -mcpu=leon3.
+ (AS_LEON_FLAG): New macro.
+ * config/sparc/sparc.c (sparc_option_override): Set MASK_LEON for leon
+ and MASK_LEON3 for leon3 and unset them if HAVE_AS_LEON is not defined.
+ Deal with LEON and LEON3 for the memory model.
+ * config/sparc/sync.md (atomic_compare_and_swap<mode>): Enable if LEON3
+ (atomic_compare_and_swap<mode>_1): Likewise.
+ (*atomic_compare_and_swap<mode>_1): Likewise.
+
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ Backport from mainline
+ 2013-07-23 Eric Botcazou <ebotcazou@adacore.com>
+
+ * doc/invoke.texi (SPARC Options): Document new leon3 processor value.
+
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ Backport from mainline
+ 2013-07-22 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config.gcc (sparc*-*-*): Accept leon3 processor.
+ (sparc-leon*-*): Merge with sparc*-*-* and add leon3 support.
+ * doc/invoke.texi (SPARC Options): Adjust -mfix-ut699 entry.
+ * config/sparc/sparc-opts.h (enum processor_type): Add PROCESSOR_LEON3.
+ * config/sparc/sparc.opt (enum processor_type): Add leon3.
+ (mfix-ut699): Adjust comment.
+ * config/sparc/sparc.h (TARGET_CPU_leon3): New define.
+ (CPP_CPU32_DEFAULT_SPEC): Add leon3 support.
+ (CPP_CPU_SPEC): Likewise.
+ (ASM_CPU_SPEC): Likewise.
+ * config/sparc/sparc.c (leon3_cost): New constant.
+ (sparc_option_override): Add leon3 support.
+ (mem_ref): New function.
+ (sparc_gate_work_around_errata): Return true if -mfix-ut699 is enabled.
+ (sparc_do_work_around_errata): Look into the instruction in the delay
+ slot and adjust accordingly. Add fix for the data cache nullify issues
+ of the UT699. Change insertion position for the NOP.
+ * config/sparc/leon.md (leon_fpalu, leon_fpmds, write_buf): Delete.
+ (leon3_load): New reservation.
+ (leon_store): Bump latency to 2.
+ (grfpu): New automaton.
+ (grfpu_alu): New unit.
+ (grfpu_ds): Likewise.
+ (leon_fp_alu): Adjust.
+ (leon_fp_mult): Delete.
+ (leon_fp_div): Split into leon_fp_divs and leon_fp_divd.
+ (leon_fp_sqrt): Split into leon_fp_sqrts and leon_fp_sqrtd.
+ * config/sparc/sparc.md (cpu): Add leon3.
+ * config/sparc/sync.md (atomic_exchangesi): Disable if -mfix-ut699.
+ (swapsi): Likewise.
+ (atomic_test_and_set): Likewise.
+ (ldstub): Likewise.
+
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ Backport from mainline
+ 2013-04-10 Steven Bosscher <steven@gcc.gnu.org>
+
+ * config/sparc/sparc.c: Include tree-pass.h.
+ (TARGET_MACHINE_DEPENDENT_REORG): Do not redefine.
+ (sparc_reorg): Rename to sparc_do_work_around_errata. Move to
+ head of file. Change return type. Split off gate function.
+ (sparc_gate_work_around_errata): New function.
+ (pass_work_around_errata): New pass definition.
+ (insert_pass_work_around_errata) New pass insert definition to
+ insert pass_work_around_errata just after delayed-branch scheduling.
+ (sparc_option_override): Insert the pass.
+ * config/sparc/t-sparc (sparc.o): Add TREE_PASS_H dependence.
+
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ Backport from mainline
+ 2013-05-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ * doc/invoke.texi (SPARC Options): Document -mfix-ut699.
+ * builtins.c (expand_builtin_mathfn) <BUILT_IN_SQRT>: Try to widen the
+ mode if the instruction isn't available in the original mode.
+ * config/sparc/sparc.opt (mfix-ut699): New option.
+ * config/sparc/sparc.md (muldf3_extend): Disable if -mfix-ut699.
+ (divdf3): Turn into expander.
+ (divdf3_nofix): New insn.
+ (divdf3_fix): Likewise.
+ (divsf3): Disable if -mfix-ut699.
+ (sqrtdf2): Turn into expander.
+ (sqrtdf2_nofix): New insn.
+ (sqrtdf2_fix): Likewise.
+ (sqrtsf2): Disable if -mfix-ut699.
+
+2013-11-22 Eric Botcazou <ebotcazou@adacore.com>
+
+ * print-rtl.c (print_rtx) <case MEM>: Output a space if no MEM_EXPR.
+
+2013-11-21 Zhenqiang Chen <zhenqiang.chen@linaro.org>
+
+ PR bootstrap/57683
+ Backport from mainline: r197467 and r198999.
+ 2013-04-03 Jeff Law <law@redhat.com>
+
+ * Makefile.in (lra-constraints.o): Depend on $(OPTABS_H).
+ (lra-eliminations.o): Likewise.
+
+ 2013-05-16 Jeff Law <law@redhat.com>
+
+ * Makefile.in (tree-switch-conversion.o): Depend on $(OPTABS_H).
+
+2013-11-20 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR target/59207
+ * config/sparc/sparc.c (sparc_fold_builtin) <case CODE_FOR_pdist_vis>:
+ Make sure neg2_ovf is set before being used.
+
+2013-11-20 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+ Dominik Vogt <vogt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ * config/s390/s390.c (s390_canonicalize_comparison): Don't fold
+ int comparisons with an out of range condition code.
+ (s390_optimize_nonescaping_tx): Skip empty BBs.
+ Generate the new tbegin RTX when removing the FPR clobbers (with
+ two SETs).
+ (s390_expand_tbegin): Fix the retry loop counter. Copy CC to the
+ result before doing the retry calculations.
+ (s390_init_builtins): Make tbegin "returns_twice" and tabort
+ "noreturn".
+ * config/s390/s390.md (UNSPECV_TBEGIN_TDB): New constant used for
+ the TDB setting part of an tbegin.
+ ("tbegin_1", "tbegin_nofloat_1"): Add a set for the TDB.
+ ("tx_assist"): Set unused argument to an immediate zero instead of
+ loading zero into a GPR and pass it as argument.
+ * config/s390/htmxlintrin.h (__TM_simple_begin, __TM_begin):
+ Remove inline and related attributes.
+ (__TM_nesting_depth, __TM_is_user_abort, __TM_is_named_user_abort)
+ (__TM_is_illegal, __TM_is_footprint_exceeded)
+ (__TM_is_nested_too_deep, __TM_is_conflict): Fix format value
+ check.
+
+2013-11-19 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2013-11-18 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (ix86_decompose_address): Use REG_P instead of
+ ix86_address_subreg_operand. Move subreg checks to
+ ix86_validate_address_register. Move address override check to
+ ix86_legitimate_address_p.
+ (ix86_validate_address_register): New function.
+ (ix86_legitimate_address_p): Call ix86_validate_address_register
+ to validate base and index registers. Add address override check
+ from ix86_decompose_address.
+ (ix86_decompose_address): Remove.
+
+ Backport from mainline
+ 2013-11-17 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/59153
+ * config/i386/i386.c (ix86_address_subreg_operand): Do not
+ reject non-integer subregs.
+ (ix86_decompose_address): Do not reject invalid CONST_INT RTXes.
+ Move check for invalid x32 constant addresses ...
+ (ix86_legitimate_address_p): ... here.
+
+2013-11-19 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2013-11-07 Richard Biener <rguenther@suse.de>
+
+ * tree-dfa.c (get_ref_base_and_extent): Fix casting.
+
+2013-11-19 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/57517
+ * tree-predcom.c (combinable_refs_p): Verify the combination
+ is always executed when the refs are.
+
+2013-11-19 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2013-11-05 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/58941
+ * tree-dfa.c (get_ref_base_and_extent): Merge common code
+ in MEM_REF and TARGET_MEM_REF handling. Make sure to
+ process trailing array detection before diving into the
+ view-converted object (and possibly apply some extra offset).
+
+2013-11-18 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2013-10-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/58794
+ * fold-const.c (operand_equal_p): Compare FIELD_DECL operand
+ of COMPONENT_REFs with OEP_CONSTANT_ADDRESS_OF left in place.
+
+ 2013-10-21 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/58742
+ * fold-const.c (fold_binary_loc): Fold ((T) (X /[ex] C)) * C
+ to (T) X for sign-changing conversions (or no conversion).
+
+ 2013-11-06 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/58653
+ * tree-predcom.c (ref_at_iteration): Rewrite to generate
+ a MEM_REF.
+ (prepare_initializers_chain): Adjust.
+
+ PR tree-optimization/59047
+ * tree-predcom.c (ref_at_iteration): Handle bitfield accesses
+ properly.
+
+ 2013-10-15 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/58143
+ * tree-ssa-loop-im.c (arith_code_with_undefined_signed_overflow):
+ New function.
+ (rewrite_to_defined_overflow): Likewise.
+ (move_computations_dom_walker::before_dom): Rewrite stmts
+ with undefined signed overflow that are not always executed
+ into unsigned arithmetic.
+
+2013-11-14 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2013-11-10 Uros Bizjak <ubizjak@gmail.com>
+
+ * mode-switching.c (optimize_mode_switching): Mark block as
+ nontransparent, if last_mode at block exit is different from no_mode.
+
+ Backport from mainline
+ 2013-11-06 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/59021
+ * config/i386/i386.c (ix86_avx_u128_mode_needed): Require
+ AVX_U128_DIRTY mode for call_insn RTXes that use AVX256 registers.
+ (ix86_avx_u128_mode_needed): Return AVX_U128_DIRTY mode for call_insn
+ RTXes that return in AVX256 register.
+
+2013-11-14 Jakub Jelinek <jakub@redhat.com>
+ Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/59101
+ * config/i386/i386.md (*anddi_2): Only allow CCZmode if
+ operands[2] satisfies_constraint_Z that might have bit 31 set.
+
+2013-11-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backported from mainline
+ 2013-11-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/59088
+ * config/i386/i386.c (initial_ix86_tune_features): Set
+ X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL and
+ X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL for m_HASWELL.
+
+2013-11-11 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
+
+ Backported from mainline
+ 2013-10-30 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
+
+ PR target/58854
+ * config/arm/arm.c (arm_expand_epilogue_apcs_frame): Emit blockage
+
+2013-11-11 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2013-11-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/58970
+ * expr.c (get_bit_range): Handle *offset == NULL_TREE.
+ (expand_assignment): If *bitpos is negative, set *offset
+ and adjust *bitpos, so that it is not negative.
+
+ 2013-11-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/58997
+ * loop-iv.c (iv_subreg): For IV_UNKNOWN_EXTEND, expect
+ get_iv_value to be in iv->mode rather than iv->extend_mode.
+ (iv_extend): Likewise. Otherwise, if iv->extend != extend,
+ use lowpart_subreg on get_iv_value before calling simplify_gen_unary.
+ * loop-unswitch.c (may_unswitch_on): Make sure op[i] is in the right
+ mode.
+
+2013-11-10 Karlson2k <k2k@narod.ru>
+ Kai Tietz <ktietz@redhat.com>
+
+ Merged from trunk
+ PR plugins/52872
+ * configure.ac: Adding for exported symbols check
+ and for rdynamic-check executable-extension.
+ * configure: Regenerated.
+
+2013-11-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/59034
+ * config/i386/i386.md (push peepholer/splitter): Use Pmode
+ with stack_pointer_rtx.
+
+2013-11-05 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/t-rtems (MULTILIB_MATCHES): Fix option typos.
+
+2013-11-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/58984
+ * ipa-prop.c (ipa_load_from_parm_agg_1): Add SIZE_P argument,
+ set *SIZE_P if non-NULL on success.
+ (ipa_load_from_parm_agg, ipa_analyze_indirect_call_uses): Adjust
+ callers.
+ (ipcp_transform_function): Likewise. Punt if size of access
+ is different from TYPE_SIZE on v->value's type.
+
+2013-11-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline
+ 2013-10-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/58690
+ * config/i386/i386.c (ix86_copy_addr_to_reg): New function.
+ (ix86_expand_movmem): Replace copy_addr_to_reg with
+ ix86_copy_addr_to_reg.
+ (ix86_expand_setmem): Likewise.
+
+2013-10-29 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2013-08-08 Richard Sandiford <rdsandiford@googlemail.com>
+
+ PR rtl-optimization/58079
+ * combine.c (combine_simplify_rtx): Avoid using SUBST if
+ simplify_comparison has widened a comparison with an integer.
+
+2013-10-29 Martin Jambor <mjambor@suse.cz>
+
+ PR middle-end/58789
+ Backport from mainline
+ 2013-05-09 Martin Jambor <mjambor@suse.cz>
+
+ PR lto/57084
+ * gimple-fold.c (canonicalize_constructor_val): Call
+ cgraph_get_create_real_symbol_node instead of cgraph_get_create_node.
+
+ Backport from mainline
+ 2013-03-16 Jan Hubicka <jh@suse.cz>
+
+ * cgraph.h (cgraph_get_create_real_symbol_node): Declare.
+ * cgraph.c (cgraph_get_create_real_symbol_node): New function.
+ * cgrpahbuild.c: Use cgraph_get_create_real_symbol_node instead
+ of cgraph_get_create_node.
+ * ipa-prop.c (ipa_make_edge_direct_to_target): Likewise.
+
+2013-10-28 Tom de Vries <tom@codesourcery.com>
+
+ * cfgexpand.c (gimple_expand_cfg): Remove test for parm_birth_insn.
+ Don't commit insertions after NOTE_INSN_FUNCTION_BEG.
+
+2013-10-26 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2013-10-22 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/58779
+ * config/i386/i386.c (put_condition_code) <case GTU, case LEU>:
+ Remove CCCmode handling.
+ <case LTU>: Return 'c' suffix for CCCmode.
+ <case GEU>: Return 'nc' suffix for CCCmode.
+ (ix86_cc_mode) <case GTU, case LEU>: Do not generate overflow checks.
+ * config/i386/i386.md (*sub<mode>3_cconly_overflow): Remove.
+ (*sub<mode>3_cc_overflow): Ditto.
+ (*subsi3_zext_cc_overflow): Ditto.
+
+2013-10-26 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2013-10-19 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/58792
+ * config/i386/i386.c (ix86_function_value_regno): Add DX_REG,
+ ST1_REG and XMM1_REG for 32bit and 64bit targets. Also add DI_REG
+ and SI_REG for 64bit SYSV ABI targets.
+
+2013-08-25 Richard Henderson <rth@twiddle.net>
+
+ PR rtl/58542
+ * optabs.c (maybe_emit_atomic_exchange): Use create_input_operand
+ instead of create_convert_operand_to.
+ (maybe_emit_sync_lock_test_and_set): Likewise.
+ (expand_atomic_compare_and_swap): Likewise.
+ (maybe_emit_compare_and_swap_exchange_loop): Don't convert_modes.
+
+2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR rtl-optimization/58831
+ * alias.c (init_alias_analysis): At the beginning of each iteration, set
+ the reg_seen[N] bit if static_reg_base_value[N] is non-null.
+
+2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
+
+ * recog.c (search_ofs): New static variable moved from...
+ (peep2_find_free_register): ...here.
+ (peephole2_optimize): Initialize it.
+
+2013-10-24 David Edelsohn <dje.gcc@gmail.com>
+
+ Backport from mainline
+ 2013-10-23 David Edelsohn <dje.gcc@gmail.com>
+
+ PR target/58838
+ * config/rs6000/rs6000.md (mulsi3_internal1 and splitter): Add
+ TARGET_32BIT final condition.
+ (mulsi3_internal2 and splitter): Same.
+
+2013-10-23 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/58805
+ * tree-ssa-tail-merge.c (stmt_local_def): Add gimple_vdef check.
+
+2013-10-23 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2013-06-24 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/57488
+ * tree-ssa-pre.c (insert): Clear NEW sets before each iteration.
+
+2013-10-16 Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
+
+ Backport from mainline
+ 2013-10-16 Ganesh Gopalasubramanian
+ <Ganesh.Gopalasubramanian@amd.com>
+
+ * config/i386/i386.c (ix86_option_override_internal): Enable FMA4
+ for AMD bdver3.
+
+2013-10-16 Jakub Jelinek <jakub@redhat.com>
+
+ * BASE-VER: Set to 4.8.3.
+ * DEV-PHASE: Set to prerelease.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/gcc/DATESTAMP b/gcc-4.8/gcc/DATESTAMP
index 8c8fa238b..1967b777f 100644
--- a/gcc-4.8/gcc/DATESTAMP
+++ b/gcc-4.8/gcc/DATESTAMP
@@ -1 +1 @@
-20131016
+20140522
diff --git a/gcc-4.8/gcc/Makefile.in b/gcc-4.8/gcc/Makefile.in
index 25532a1a9..2aa0d8f3e 100644
--- a/gcc-4.8/gcc/Makefile.in
+++ b/gcc-4.8/gcc/Makefile.in
@@ -747,7 +747,8 @@ BUILD_LINKERFLAGS = $(BUILD_CXXFLAGS)
# Native linker and preprocessor flags. For x-fragment overrides.
BUILD_LDFLAGS=@BUILD_LDFLAGS@
-BUILD_CPPFLAGS=$(ALL_CPPFLAGS)
+BUILD_CPPFLAGS= -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \
+ -I$(srcdir)/../include @INCINTL@ $(CPPINC) $(CPPFLAGS)
# Actual name to use when installing a native compiler.
GCC_INSTALL_NAME := $(shell echo gcc|sed '$(program_transform_name)')
@@ -1828,7 +1829,7 @@ s-mlib: $(srcdir)/genmultilib Makefile
"$(MULTILIB_EXCLUSIONS)" \
"$(MULTILIB_OSDIRNAMES)" \
"$(MULTILIB_REQUIRED)" \
- "$(MULTIARCH_DIRNAME)" \
+ "$(if $(MULTILIB_OSDIRNAMES),,$(MULTIARCH_DIRNAME))" \
"$(MULTILIB_REUSE)" \
"@enable_multilib@" \
> tmp-mlib.h; \
@@ -2257,7 +2258,7 @@ tree-ssa-uninit.o : tree-ssa-uninit.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(FUNCTION_H) $(TM_H) coretypes.h \
$(TREE_PASS_H) $(BASIC_BLOCK_H) $(BITMAP_H) \
$(FLAGS_H) $(HASHTAB_H) pointer-set.h \
- $(GIMPLE_H) $(TREE_INLINE_H) $(GIMPLE_PRETTY_PRINT_H)
+ $(GIMPLE_H) $(TREE_INLINE_H) $(GIMPLE_PRETTY_PRINT_H) $(PARAMS_H)
tree-ssa.o : tree-ssa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(TREE_H) $(TM_P_H) $(EXPR_H) $(DIAGNOSTIC_H) \
toplev.h $(FUNCTION_H) $(TM_H) coretypes.h \
@@ -3041,7 +3042,7 @@ tree-switch-conversion.o : tree-switch-conversion.c $(CONFIG_H) $(SYSTEM_H) \
$(TM_H) coretypes.h $(GIMPLE_H) \
$(TREE_PASS_H) $(FLAGS_H) $(EXPR_H) $(BASIC_BLOCK_H) \
$(GGC_H) $(OBSTACK_H) $(PARAMS_H) $(CPPLIB_H) $(PARAMS_H) \
- $(GIMPLE_PRETTY_PRINT_H) langhooks.h
+ $(GIMPLE_PRETTY_PRINT_H) langhooks.h $(OPTABS_H)
tree-complex.o : tree-complex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
$(TM_H) $(FLAGS_H) $(TREE_FLOW_H) $(GIMPLE_H) \
tree-iterator.h $(TREE_PASS_H) tree-ssa-propagate.h
@@ -3280,12 +3281,12 @@ lra-constraints.o : lra-constraints.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(RTL_H) $(REGS_H) insn-config.h insn-codes.h $(DF_H) \
$(RECOG_H) output.h addresses.h $(REGS_H) hard-reg-set.h $(FLAGS_H) \
$(FUNCTION_H) $(EXPR_H) $(BASIC_BLOCK_H) $(TM_P_H) $(EXCEPT_H) \
- ira.h rtl-error.h $(LRA_INT_H)
+ ira.h rtl-error.h $(LRA_INT_H) $(OPTABS_H)
lra-eliminations.o : lra-eliminations.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(RTL_H) $(REGS_H) insn-config.h $(DF_H) \
$(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \
$(EXPR_H) $(BASIC_BLOCK_H) $(TM_P_H) $(EXCEPT_H) ira.h \
- rtl-error.h $(LRA_INT_H)
+ rtl-error.h $(LRA_INT_H) $(OPTABS_H)
lra-lives.o : lra-lives.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(RTL_H) $(REGS_H) insn-config.h $(DF_H) \
$(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \
diff --git a/gcc-4.8/gcc/ada/ChangeLog b/gcc-4.8/gcc/ada/ChangeLog
index 8f647a708..eea52d22a 100644
--- a/gcc-4.8/gcc/ada/ChangeLog
+++ b/gcc-4.8/gcc/ada/ChangeLog
@@ -1,3 +1,64 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-03-30 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR ada/60703
+ * system-linux-alpha.ads: Adjust for Ada 2005.
+ * system-linux-mips.ads: Likewise.
+ * system-linux-mips64el.ads: Likewise.
+ * system-linux-mipsel.ads: Likewise.
+ * system-linux-s390.ads: Likewise.
+ * system-linux-s390x.ads: Likewise.
+ * system-linux-sparc.ads: Likewise.
+ * system-linux-sparcv9.ads: Likewise.
+ * system-rtems.ads: Likewise.
+ * system-vxworks-arm.ads: Likewise.
+
+2014-03-13 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR ada/51483
+ * back_end.ads (Register_Type_Proc): Add 'precision' parameter.
+ * cstand.adb (Register_Float_Type): Add 'precision' parameter and use
+ it to set the RM size. Use directly 'size' for the Esize.
+ * gcc-interface/gigi.h (enumerate_modes): Add integer parameter.
+ * gcc-interface/misc.c (enumerate_modes): Likewise. Do not register
+ types for vector modes, pass the size in addition to the precision.
+
+2014-01-12 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR ada/59772
+ * gcc-interface/cuintp.c (build_cst_from_int): Use 32-bit integer type
+ as intermediate type.
+ (UI_To_gnu): Likewise.
+
+2013-12-12 Eric Botcazou <ebotcazou@adacore.com>
+ Iain Sandoe <iain@codesourcery.com>
+
+ PR ada/55946
+ * gcc-interface/Make-lang.in (ada/doctools/xgnatugn): Use gnatmake.
+ * gcc-interface/Makefile.in (GCC_LINK): Add LDFLAGS.
+ (../../gnatmake): Remove LDFLAGS.
+ (../../gnatlink): Likewise.
+
+2013-12-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR ada/59382
+ * indepsw-darwin.adb: New file.
+
+2013-10-19 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/utils.c (scale_by_factor_of): New function.
+ (rest_of_record_type_compilation): Use scale_by_factor_of in order to
+ scale the original offset for both rounding cases; in the second case,
+ take into accout the addend to compute the alignment. Tidy up.
+
+2013-10-19 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/utils.c (gnat_set_type_context): New function.
+ (gnat_pushdecl): Use it to set the context of the type.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/gcc/ada/back_end.ads b/gcc-4.8/gcc/ada/back_end.ads
index bfa2eb5b4..9d92ce39c 100644
--- a/gcc-4.8/gcc/ada/back_end.ads
+++ b/gcc-4.8/gcc/ada/back_end.ads
@@ -55,6 +55,7 @@ package Back_End is
Complex : Boolean; -- True iff type has real and imaginary parts
Count : Natural; -- Number of elements in vector, 0 otherwise
Float_Rep : Float_Rep_Kind; -- Representation used for fpt type
+ Precision : Positive; -- Precision of representation in bits
Size : Positive; -- Size of representation in bits
Alignment : Natural); -- Required alignment in bits
pragma Convention (C, Register_Type_Proc);
diff --git a/gcc-4.8/gcc/ada/cstand.adb b/gcc-4.8/gcc/ada/cstand.adb
index 82f8697bc..7a7243fae 100644
--- a/gcc-4.8/gcc/ada/cstand.adb
+++ b/gcc-4.8/gcc/ada/cstand.adb
@@ -151,6 +151,7 @@ package body CStand is
Complex : Boolean; -- True iff type has real and imaginary parts
Count : Natural; -- Number of elements in vector, 0 otherwise
Float_Rep : Float_Rep_Kind; -- Representation used for fpt type
+ Precision : Positive; -- Precision of representation in bits
Size : Positive; -- Size of representation in bits
Alignment : Natural); -- Required alignment in bits
pragma Convention (C, Register_Float_Type);
@@ -2014,6 +2015,7 @@ package body CStand is
Complex : Boolean;
Count : Natural;
Float_Rep : Float_Rep_Kind;
+ Precision : Positive;
Size : Positive;
Alignment : Natural)
is
@@ -2063,14 +2065,25 @@ package body CStand is
else
Write_Str ("mod 2**");
- Write_Int (Int (Size / Positive'Max (1, Count)));
+ Write_Int (Int (Precision / Positive'Max (1, Count)));
Write_Line (";");
end if;
- Write_Str ("for " & T & "'Size use ");
+ if Precision = Size then
+ Write_Str ("for " & T (1 .. Last) & "'Size use ");
Write_Int (Int (Size));
Write_Line (";");
+ else
+ Write_Str ("for " & T (1 .. Last) & "'Value_Size use ");
+ Write_Int (Int (Precision));
+ Write_Line (";");
+
+ Write_Str ("for " & T (1 .. Last) & "'Object_Size use ");
+ Write_Int (Int (Size));
+ Write_Line (";");
+ end if;
+
Write_Str ("for " & T & "'Alignment use ");
Write_Int (Int (Alignment / 8));
Write_Line (";");
@@ -2092,15 +2105,13 @@ package body CStand is
if Digs > 0 and then not Complex and then Count = 0 then
declare
Ent : constant Entity_Id := New_Standard_Entity;
- Esize : constant Pos := Pos ((Size + Alignment - 1)
- / Alignment * Alignment);
begin
Set_Defining_Identifier
(New_Node (N_Full_Type_Declaration, Stloc), Ent);
Make_Name (Ent, T (1 .. Last));
Set_Scope (Ent, Standard_Standard);
- Build_Float_Type (Ent, Esize, Float_Rep, Pos (Digs));
- Set_RM_Size (Ent, UI_From_Int (Int (Size)));
+ Build_Float_Type (Ent, Int (Size), Float_Rep, Pos (Digs));
+ Set_RM_Size (Ent, UI_From_Int (Int (Precision)));
Set_Alignment (Ent, UI_From_Int (Int (Alignment / 8)));
if No (Back_End_Float_Types) then
diff --git a/gcc-4.8/gcc/ada/gcc-interface/Make-lang.in b/gcc-4.8/gcc/ada/gcc-interface/Make-lang.in
index 57f90090d..e1d3ed6eb 100644
--- a/gcc-4.8/gcc/ada/gcc-interface/Make-lang.in
+++ b/gcc-4.8/gcc/ada/gcc-interface/Make-lang.in
@@ -625,7 +625,7 @@ ada.tags: force
ada/doctools/xgnatugn$(build_exeext): ada/xgnatugn.adb
-$(MKDIR) ada/doctools
$(CP) $^ ada/doctools
- cd ada/doctools && $(GNATMAKE) -q xgnatugn
+ cd ada/doctools && gnatmake -q xgnatugn
# Note that doc/gnat_ugn.texi and doc/projects.texi do not depend on
# xgnatugn being built so we can distribute a pregenerated doc/gnat_ugn.info
diff --git a/gcc-4.8/gcc/ada/gcc-interface/Makefile.in b/gcc-4.8/gcc/ada/gcc-interface/Makefile.in
index 0ddde7294..ee610f789 100644
--- a/gcc-4.8/gcc/ada/gcc-interface/Makefile.in
+++ b/gcc-4.8/gcc/ada/gcc-interface/Makefile.in
@@ -2397,7 +2397,7 @@ TOOLS_FLAGS_TO_PASS= \
"GNATLINK=$(GNATLINK)" \
"GNATBIND=$(GNATBIND)"
-GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES)
+GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES) $(LDFLAGS)
# Build directory for the tools. Let's copy the target-dependent
# sources using the same mechanism as for gnatlib. The other sources are
@@ -2519,12 +2519,10 @@ gnatlink-re: ../stamp-tools link.o targext.o gnatmake-re
# Likewise for the tools
../../gnatmake$(exeext): $(P) b_gnatm.o link.o targext.o $(GNATMAKE_OBJS)
- $(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) \
- $(TOOLS_LIBS)
+ +$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) $(TOOLS_LIBS)
../../gnatlink$(exeext): $(P) b_gnatl.o link.o targext.o $(GNATLINK_OBJS)
- $(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) \
- $(TOOLS_LIBS)
+ +$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) $(TOOLS_LIBS)
../stamp-gnatlib-$(RTSDIR):
@if [ ! -f stamp-gnatlib-$(RTSDIR) ] ; \
diff --git a/gcc-4.8/gcc/ada/gcc-interface/cuintp.c b/gcc-4.8/gcc/ada/gcc-interface/cuintp.c
index e077d9ce0..f4d75eca2 100644
--- a/gcc-4.8/gcc/ada/gcc-interface/cuintp.c
+++ b/gcc-4.8/gcc/ada/gcc-interface/cuintp.c
@@ -6,7 +6,7 @@
* *
* C Implementation File *
* *
- * Copyright (C) 1992-2012, Free Software Foundation, Inc. *
+ * Copyright (C) 1992-2014, Free Software Foundation, Inc. *
* *
* GNAT is free software; you can redistribute it and/or modify it under *
* terms of the GNU General Public License as published by the Free Soft- *
@@ -59,8 +59,8 @@
static tree
build_cst_from_int (tree type, HOST_WIDE_INT low)
{
- if (TREE_CODE (type) == REAL_TYPE)
- return convert (type, build_int_cst (NULL_TREE, low));
+ if (SCALAR_FLOAT_TYPE_P (type))
+ return convert (type, build_int_cst (gnat_type_for_size (32, 0), low));
else
return build_int_cst_type (type, low);
}
@@ -99,19 +99,12 @@ UI_To_gnu (Uint Input, tree type)
gcc_assert (Length > 0);
/* The computations we perform below always require a type at least as
- large as an integer not to overflow. REAL types are always fine, but
+ large as an integer not to overflow. FP types are always fine, but
INTEGER or ENUMERAL types we are handed may be too short. We use a
base integer type node for the computations in this case and will
- convert the final result back to the incoming type later on.
- The base integer precision must be superior than 16. */
-
- if (TREE_CODE (comp_type) != REAL_TYPE
- && TYPE_PRECISION (comp_type)
- < TYPE_PRECISION (long_integer_type_node))
- {
- comp_type = long_integer_type_node;
- gcc_assert (TYPE_PRECISION (comp_type) > 16);
- }
+ convert the final result back to the incoming type later on. */
+ if (!SCALAR_FLOAT_TYPE_P (comp_type) && TYPE_PRECISION (comp_type) < 32)
+ comp_type = gnat_type_for_size (32, 0);
gnu_base = build_cst_from_int (comp_type, Base);
diff --git a/gcc-4.8/gcc/ada/gcc-interface/gigi.h b/gcc-4.8/gcc/ada/gcc-interface/gigi.h
index de1c7e86d..c0db89bda 100644
--- a/gcc-4.8/gcc/ada/gcc-interface/gigi.h
+++ b/gcc-4.8/gcc/ada/gcc-interface/gigi.h
@@ -1014,7 +1014,7 @@ extern Nat get_target_double_scalar_alignment (void);
/* This function is called by the front-end to enumerate all the supported
modes for the machine, as well as some predefined C types. */
extern void enumerate_modes (void (*f) (const char *, int, int, int, int, int,
- int));
+ int, int));
#ifdef __cplusplus
}
diff --git a/gcc-4.8/gcc/ada/gcc-interface/misc.c b/gcc-4.8/gcc/ada/gcc-interface/misc.c
index 2fd2743bb..83620487b 100644
--- a/gcc-4.8/gcc/ada/gcc-interface/misc.c
+++ b/gcc-4.8/gcc/ada/gcc-interface/misc.c
@@ -648,7 +648,7 @@ must_pass_by_ref (tree gnu_type)
/* This function is called by the front-end to enumerate all the supported
modes for the machine, as well as some predefined C types. F is a function
which is called back with the parameters as listed below, first a string,
- then six ints. The name is any arbitrary null-terminated string and has
+ then seven ints. The name is any arbitrary null-terminated string and has
no particular significance, except for the case of predefined C types, where
it should be the name of the C type. For integer types, only signed types
should be listed, unsigned versions are assumed. The order of types should
@@ -664,11 +664,12 @@ must_pass_by_ref (tree gnu_type)
COMPLEX_P nonzero is this represents a complex mode
COUNT count of number of items, nonzero for vector mode
FLOAT_REP Float_Rep_Kind for FP, otherwise undefined
- SIZE number of bits used to store data
+ PRECISION number of bits used to store data
+ SIZE number of bits occupied by the mode
ALIGN number of bits to which mode is aligned. */
void
-enumerate_modes (void (*f) (const char *, int, int, int, int, int, int))
+enumerate_modes (void (*f) (const char *, int, int, int, int, int, int, int))
{
const tree c_types[]
= { float_type_node, double_type_node, long_double_type_node };
@@ -742,28 +743,26 @@ enumerate_modes (void (*f) (const char *, int, int, int, int, int, int))
/* First register any C types for this mode that the front end
may need to know about, unless the mode should be skipped. */
-
- if (!skip_p)
+ if (!skip_p && !vector_p)
for (nameloop = 0; nameloop < ARRAY_SIZE (c_types); nameloop++)
{
- tree typ = c_types[nameloop];
- const char *nam = c_names[nameloop];
+ tree type = c_types[nameloop];
+ const char *name = c_names[nameloop];
- if (TYPE_MODE (typ) == i)
+ if (TYPE_MODE (type) == i)
{
- f (nam, digs, complex_p,
- vector_p ? GET_MODE_NUNITS (i) : 0, float_rep,
- TYPE_PRECISION (typ), TYPE_ALIGN (typ));
+ f (name, digs, complex_p, 0, float_rep, TYPE_PRECISION (type),
+ TREE_INT_CST_LOW (TYPE_SIZE (type)), TYPE_ALIGN (type));
skip_p = true;
}
}
/* If no predefined C types were found, register the mode itself. */
-
if (!skip_p)
f (GET_MODE_NAME (i), digs, complex_p,
vector_p ? GET_MODE_NUNITS (i) : 0, float_rep,
- GET_MODE_PRECISION (i), GET_MODE_ALIGNMENT (i));
+ GET_MODE_PRECISION (i), GET_MODE_BITSIZE (i),
+ GET_MODE_ALIGNMENT (i));
}
}
diff --git a/gcc-4.8/gcc/ada/gcc-interface/utils.c b/gcc-4.8/gcc/ada/gcc-interface/utils.c
index c5cee7a00..b90922b23 100644
--- a/gcc-4.8/gcc/ada/gcc-interface/utils.c
+++ b/gcc-4.8/gcc/ada/gcc-interface/utils.c
@@ -232,6 +232,7 @@ static tree compute_related_constant (tree, tree);
static tree split_plus (tree, tree *);
static tree float_type_for_precision (int, enum machine_mode);
static tree convert_to_fat_pointer (tree, tree);
+static unsigned int scale_by_factor_of (tree, unsigned int);
static bool potential_alignment_gap (tree, tree, tree);
static void process_attributes (tree, struct attrib *);
@@ -532,6 +533,22 @@ gnat_zaplevel (void)
free_binding_level = level;
}
+/* Set the context of TYPE and its parallel types (if any) to CONTEXT. */
+
+static void
+gnat_set_type_context (tree type, tree context)
+{
+ tree decl = TYPE_STUB_DECL (type);
+
+ TYPE_CONTEXT (type) = context;
+
+ while (decl && DECL_PARALLEL_TYPE (decl))
+ {
+ TYPE_CONTEXT (DECL_PARALLEL_TYPE (decl)) = context;
+ decl = TYPE_STUB_DECL (DECL_PARALLEL_TYPE (decl));
+ }
+}
+
/* Record DECL as belonging to the current lexical scope and use GNAT_NODE
for location information and flag propagation. */
@@ -613,7 +630,7 @@ gnat_pushdecl (tree decl, Node_Id gnat_node)
if (TREE_CODE (t) == POINTER_TYPE)
TYPE_NEXT_PTR_TO (t) = tt;
TYPE_NAME (tt) = DECL_NAME (decl);
- TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
+ gnat_set_type_context (tt, DECL_CONTEXT (decl));
TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (t);
DECL_ORIGINAL_TYPE (decl) = tt;
}
@@ -623,7 +640,7 @@ gnat_pushdecl (tree decl, Node_Id gnat_node)
/* We need a variant for the placeholder machinery to work. */
tree tt = build_variant_type_copy (t);
TYPE_NAME (tt) = decl;
- TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
+ gnat_set_type_context (tt, DECL_CONTEXT (decl));
TREE_USED (tt) = TREE_USED (t);
TREE_TYPE (decl) = tt;
if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
@@ -645,7 +662,7 @@ gnat_pushdecl (tree decl, Node_Id gnat_node)
if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
{
TYPE_NAME (t) = decl;
- TYPE_CONTEXT (t) = DECL_CONTEXT (decl);
+ gnat_set_type_context (t, DECL_CONTEXT (decl));
}
}
}
@@ -1692,18 +1709,21 @@ rest_of_record_type_compilation (tree record_type)
TYPE_SIZE_UNIT (new_record_type)
= size_int (TYPE_ALIGN (record_type) / BITS_PER_UNIT);
- /* Now scan all the fields, replacing each field with a new
- field corresponding to the new encoding. */
+ /* Now scan all the fields, replacing each field with a new field
+ corresponding to the new encoding. */
for (old_field = TYPE_FIELDS (record_type); old_field;
old_field = DECL_CHAIN (old_field))
{
tree field_type = TREE_TYPE (old_field);
tree field_name = DECL_NAME (old_field);
- tree new_field;
tree curpos = bit_position (old_field);
+ tree pos, new_field;
bool var = false;
unsigned int align = 0;
- tree pos;
+
+ /* We're going to do some pattern matching below so remove as many
+ conversions as possible. */
+ curpos = remove_conversions (curpos, true);
/* See how the position was modified from the last position.
@@ -1711,74 +1731,52 @@ rest_of_record_type_compilation (tree record_type)
to the last position or the last position was rounded to
a boundary and they something was added. Check for the
first case first. If not, see if there is any evidence
- of rounding. If so, round the last position and try
- again.
+ of rounding. If so, round the last position and retry.
If this is a union, the position can be taken as zero. */
-
- /* Some computations depend on the shape of the position expression,
- so strip conversions to make sure it's exposed. */
- curpos = remove_conversions (curpos, true);
-
if (TREE_CODE (new_record_type) == UNION_TYPE)
- pos = bitsize_zero_node, align = 0;
+ pos = bitsize_zero_node;
else
pos = compute_related_constant (curpos, last_pos);
- if (!pos && TREE_CODE (curpos) == MULT_EXPR
+ if (!pos
+ && TREE_CODE (curpos) == MULT_EXPR
&& host_integerp (TREE_OPERAND (curpos, 1), 1))
{
tree offset = TREE_OPERAND (curpos, 0);
align = tree_low_cst (TREE_OPERAND (curpos, 1), 1);
-
- /* An offset which is a bitwise AND with a mask increases the
- alignment according to the number of trailing zeros. */
- offset = remove_conversions (offset, true);
- if (TREE_CODE (offset) == BIT_AND_EXPR
- && TREE_CODE (TREE_OPERAND (offset, 1)) == INTEGER_CST)
- {
- unsigned HOST_WIDE_INT mask
- = TREE_INT_CST_LOW (TREE_OPERAND (offset, 1));
- unsigned int i;
-
- for (i = 0; i < HOST_BITS_PER_WIDE_INT; i++)
- {
- if (mask & 1)
- break;
- mask >>= 1;
- align *= 2;
- }
- }
-
- pos = compute_related_constant (curpos,
- round_up (last_pos, align));
+ align = scale_by_factor_of (offset, align);
+ last_pos = round_up (last_pos, align);
+ pos = compute_related_constant (curpos, last_pos);
}
- else if (!pos && TREE_CODE (curpos) == PLUS_EXPR
- && TREE_CODE (TREE_OPERAND (curpos, 1)) == INTEGER_CST
+ else if (!pos
+ && TREE_CODE (curpos) == PLUS_EXPR
+ && host_integerp (TREE_OPERAND (curpos, 1), 1)
&& TREE_CODE (TREE_OPERAND (curpos, 0)) == MULT_EXPR
- && host_integerp (TREE_OPERAND
- (TREE_OPERAND (curpos, 0), 1),
- 1))
+ && host_integerp
+ (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1))
{
+ tree offset = TREE_OPERAND (TREE_OPERAND (curpos, 0), 0);
+ unsigned HOST_WIDE_INT addend
+ = tree_low_cst (TREE_OPERAND (curpos, 1), 1);
align
- = tree_low_cst
- (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1);
- pos = compute_related_constant (curpos,
- round_up (last_pos, align));
+ = tree_low_cst (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1);
+ align = scale_by_factor_of (offset, align);
+ align = MIN (align, addend & -addend);
+ last_pos = round_up (last_pos, align);
+ pos = compute_related_constant (curpos, last_pos);
}
- else if (potential_alignment_gap (prev_old_field, old_field,
- pos))
+ else if (potential_alignment_gap (prev_old_field, old_field, pos))
{
align = TYPE_ALIGN (field_type);
- pos = compute_related_constant (curpos,
- round_up (last_pos, align));
+ last_pos = round_up (last_pos, align);
+ pos = compute_related_constant (curpos, last_pos);
}
/* If we can't compute a position, set it to zero.
??? We really should abort here, but it's too much work
to get this correct for all cases. */
-
if (!pos)
pos = bitsize_zero_node;
@@ -2553,6 +2551,32 @@ value_factor_p (tree value, HOST_WIDE_INT factor)
return false;
}
+/* Return VALUE scaled by the biggest power-of-2 factor of EXPR. */
+
+static unsigned int
+scale_by_factor_of (tree expr, unsigned int value)
+{
+ expr = remove_conversions (expr, true);
+
+ /* An expression which is a bitwise AND with a mask has a power-of-2 factor
+ corresponding to the number of trailing zeros of the mask. */
+ if (TREE_CODE (expr) == BIT_AND_EXPR
+ && TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST)
+ {
+ unsigned HOST_WIDE_INT mask = TREE_INT_CST_LOW (TREE_OPERAND (expr, 1));
+ unsigned int i = 0;
+
+ while ((mask & 1) == 0 && i < HOST_BITS_PER_WIDE_INT)
+ {
+ mask >>= 1;
+ value *= 2;
+ i++;
+ }
+ }
+
+ return value;
+}
+
/* Given two consecutive field decls PREV_FIELD and CURR_FIELD, return true
unless we can prove these 2 fields are laid out in such a way that no gap
exist between the end of PREV_FIELD and the beginning of CURR_FIELD. OFFSET
diff --git a/gcc-4.8/gcc/ada/indepsw-darwin.adb b/gcc-4.8/gcc/ada/indepsw-darwin.adb
new file mode 100644
index 000000000..e25e90492
--- /dev/null
+++ b/gcc-4.8/gcc/ada/indepsw-darwin.adb
@@ -0,0 +1,67 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT COMPILER COMPONENTS --
+-- --
+-- I N D E P S W --
+-- --
+-- B o d y --
+-- (Darwin version) --
+-- --
+-- Copyright (C) 2013, Free Software Foundation, Inc. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+-- This is the Darwin version
+
+package body Indepsw is
+
+ Map_Switch : aliased constant String := "-Wl,-map,";
+
+ -------------
+ -- Convert --
+ -------------
+
+ procedure Convert
+ (Switch : Switch_Kind;
+ Argument : String;
+ To : out String_List_Access)
+ is
+ begin
+ case Switch is
+ when Map_File =>
+ To := new Argument_List'(1 => new String'(Map_Switch & Argument));
+ end case;
+ end Convert;
+
+ ------------------
+ -- Is_Supported --
+ ------------------
+
+ function Is_Supported (Switch : Switch_Kind) return Boolean is
+ begin
+ case Switch is
+ when Map_File =>
+ return True;
+ end case;
+ end Is_Supported;
+
+end Indepsw;
diff --git a/gcc-4.8/gcc/ada/system-linux-alpha.ads b/gcc-4.8/gcc/ada/system-linux-alpha.ads
index 5d8450204..044ab3e1c 100644
--- a/gcc-4.8/gcc/ada/system-linux-alpha.ads
+++ b/gcc-4.8/gcc/ada/system-linux-alpha.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (GNU-Linux/alpha Version) --
-- --
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -35,9 +35,10 @@
------------------------------------------------------------------------------
package System is
-pragma Pure (System);
--- Note that we take advantage of the implementation permission to
--- make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ pragma Pure;
+ -- Note that we take advantage of the implementation permission to make
+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
+ -- 2005, this is Pure in any case (AI-362).
type Name is (SYSTEM_NAME_GNAT);
System_Name : constant Name := SYSTEM_NAME_GNAT;
@@ -61,6 +62,7 @@ pragma Pure (System);
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc-4.8/gcc/ada/system-linux-mips.ads b/gcc-4.8/gcc/ada/system-linux-mips.ads
index 18f449563..08724650d 100644
--- a/gcc-4.8/gcc/ada/system-linux-mips.ads
+++ b/gcc-4.8/gcc/ada/system-linux-mips.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (GNU-Linux/MIPS Version) --
-- --
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -62,6 +62,7 @@ package System is
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc-4.8/gcc/ada/system-linux-mips64el.ads b/gcc-4.8/gcc/ada/system-linux-mips64el.ads
index 85a0f41c3..5c8cad177 100644
--- a/gcc-4.8/gcc/ada/system-linux-mips64el.ads
+++ b/gcc-4.8/gcc/ada/system-linux-mips64el.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (GNU-Linux/MIPS64EL Version) --
-- --
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -62,6 +62,7 @@ package System is
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc-4.8/gcc/ada/system-linux-mipsel.ads b/gcc-4.8/gcc/ada/system-linux-mipsel.ads
index c700048b8..e6d56fb82 100644
--- a/gcc-4.8/gcc/ada/system-linux-mipsel.ads
+++ b/gcc-4.8/gcc/ada/system-linux-mipsel.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (GNU-Linux/MIPSEL Version) --
-- --
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -62,6 +62,7 @@ package System is
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc-4.8/gcc/ada/system-linux-s390.ads b/gcc-4.8/gcc/ada/system-linux-s390.ads
index 28107a0b4..e240d2e48 100644
--- a/gcc-4.8/gcc/ada/system-linux-s390.ads
+++ b/gcc-4.8/gcc/ada/system-linux-s390.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (GNU-Linux/s390 Version) --
-- --
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -35,9 +35,10 @@
------------------------------------------------------------------------------
package System is
-pragma Pure (System);
--- Note that we take advantage of the implementation permission to
--- make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ pragma Pure;
+ -- Note that we take advantage of the implementation permission to make
+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
+ -- 2005, this is Pure in any case (AI-362).
type Name is (SYSTEM_NAME_GNAT);
System_Name : constant Name := SYSTEM_NAME_GNAT;
@@ -61,6 +62,7 @@ pragma Pure (System);
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc-4.8/gcc/ada/system-linux-s390x.ads b/gcc-4.8/gcc/ada/system-linux-s390x.ads
index 135b5a3b1..19d2180ff 100644
--- a/gcc-4.8/gcc/ada/system-linux-s390x.ads
+++ b/gcc-4.8/gcc/ada/system-linux-s390x.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (GNU-Linux/s390x Version) --
-- --
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -35,9 +35,10 @@
------------------------------------------------------------------------------
package System is
-pragma Pure (System);
--- Note that we take advantage of the implementation permission to
--- make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ pragma Pure;
+ -- Note that we take advantage of the implementation permission to make
+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
+ -- 2005, this is Pure in any case (AI-362).
type Name is (SYSTEM_NAME_GNAT);
System_Name : constant Name := SYSTEM_NAME_GNAT;
@@ -61,6 +62,7 @@ pragma Pure (System);
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc-4.8/gcc/ada/system-linux-sparc.ads b/gcc-4.8/gcc/ada/system-linux-sparc.ads
index ff93463cf..6fde138ea 100644
--- a/gcc-4.8/gcc/ada/system-linux-sparc.ads
+++ b/gcc-4.8/gcc/ada/system-linux-sparc.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (GNU/Linux-SPARC Version) --
-- --
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -35,9 +35,10 @@
------------------------------------------------------------------------------
package System is
-pragma Pure (System);
--- Note that we take advantage of the implementation permission to
--- make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ pragma Pure;
+ -- Note that we take advantage of the implementation permission to make
+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
+ -- 2005, this is Pure in any case (AI-362).
type Name is (SYSTEM_NAME_GNAT);
System_Name : constant Name := SYSTEM_NAME_GNAT;
@@ -61,6 +62,7 @@ pragma Pure (System);
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc-4.8/gcc/ada/system-linux-sparcv9.ads b/gcc-4.8/gcc/ada/system-linux-sparcv9.ads
index 14d89f929..5b7598f3e 100644
--- a/gcc-4.8/gcc/ada/system-linux-sparcv9.ads
+++ b/gcc-4.8/gcc/ada/system-linux-sparcv9.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (GNU/Linux-SPARCV9 Version) --
-- --
--- Copyright (C) 1992-2011, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -35,9 +35,10 @@
------------------------------------------------------------------------------
package System is
-pragma Pure (System);
--- Note that we take advantage of the implementation permission to
--- make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ pragma Pure;
+ -- Note that we take advantage of the implementation permission to make
+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
+ -- 2005, this is Pure in any case (AI-362).
type Name is (SYSTEM_NAME_GNAT);
System_Name : constant Name := SYSTEM_NAME_GNAT;
@@ -61,6 +62,7 @@ pragma Pure (System);
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := 8;
diff --git a/gcc-4.8/gcc/ada/system-rtems.ads b/gcc-4.8/gcc/ada/system-rtems.ads
index 3cab22abf..50bf7ac64 100644
--- a/gcc-4.8/gcc/ada/system-rtems.ads
+++ b/gcc-4.8/gcc/ada/system-rtems.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (Compiler Version) --
-- --
--- Copyright (C) 1992-2011 Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2014 Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -34,9 +34,8 @@
-- --
------------------------------------------------------------------------------
--- This version of System is a RTEMS version that is used in building
--- the compiler. This is based as closely as possible on the generic
--- version with the following exceptions:
+-- This version is for RTEMS. It is based as closely as possible on the
+-- generic version with the following exceptions:
-- + priority definitions
package System is
@@ -67,6 +66,7 @@ package System is
-- Storage-related Declarations
type Address is private;
+ pragma Preelaborable_Initialization (Address);
Null_Address : constant Address;
Storage_Unit : constant := Standard'Storage_Unit;
diff --git a/gcc-4.8/gcc/ada/system-vxworks-arm.ads b/gcc-4.8/gcc/ada/system-vxworks-arm.ads
index ae8ddd510..1bc6e8988 100644
--- a/gcc-4.8/gcc/ada/system-vxworks-arm.ads
+++ b/gcc-4.8/gcc/ada/system-vxworks-arm.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (VxWorks Version ARM) --
-- --
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -35,10 +35,10 @@
------------------------------------------------------------------------------
package System is
-pragma Pure (System);
--- Note that we take advantage of the implementation permission to make this
--- unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada 2005, this is
--- Pure in any case (AI-362).
+ pragma Pure;
+ -- Note that we take advantage of the implementation permission to make
+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
+ -- 2005, this is Pure in any case (AI-362).
type Name is (SYSTEM_NAME_GNAT);
System_Name : constant Name := SYSTEM_NAME_GNAT;
diff --git a/gcc-4.8/gcc/alias.c b/gcc-4.8/gcc/alias.c
index 970bdb0ee..637839615 100644
--- a/gcc-4.8/gcc/alias.c
+++ b/gcc-4.8/gcc/alias.c
@@ -156,7 +156,9 @@ static int insert_subset_children (splay_tree_node, void*);
static alias_set_entry get_alias_set_entry (alias_set_type);
static bool nonoverlapping_component_refs_p (const_rtx, const_rtx);
static tree decl_for_component_ref (tree);
-static int write_dependence_p (const_rtx, const_rtx, int);
+static int write_dependence_p (const_rtx,
+ const_rtx, enum machine_mode, rtx,
+ bool, bool, bool);
static void memory_modified_1 (rtx, const_rtx, void *);
@@ -2558,15 +2560,24 @@ canon_true_dependence (const_rtx mem, enum machine_mode mem_mode, rtx mem_addr,
}
/* Returns nonzero if a write to X might alias a previous read from
- (or, if WRITEP is nonzero, a write to) MEM. */
+ (or, if WRITEP is true, a write to) MEM.
+ If X_CANONCALIZED is true, then X_ADDR is the canonicalized address of X,
+ and X_MODE the mode for that access.
+ If MEM_CANONICALIZED is true, MEM is canonicalized. */
static int
-write_dependence_p (const_rtx mem, const_rtx x, int writep)
+write_dependence_p (const_rtx mem,
+ const_rtx x, enum machine_mode x_mode, rtx x_addr,
+ bool mem_canonicalized, bool x_canonicalized, bool writep)
{
- rtx x_addr, mem_addr;
+ rtx mem_addr;
rtx base;
int ret;
+ gcc_checking_assert (x_canonicalized
+ ? (x_addr != NULL_RTX && x_mode != VOIDmode)
+ : (x_addr == NULL_RTX && x_mode == VOIDmode));
+
if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
return 1;
@@ -2590,8 +2601,10 @@ write_dependence_p (const_rtx mem, const_rtx x, int writep)
if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
return 1;
- x_addr = XEXP (x, 0);
mem_addr = XEXP (mem, 0);
+ if (!x_addr)
+ {
+ x_addr = XEXP (x, 0);
if (!((GET_CODE (x_addr) == VALUE
&& GET_CODE (mem_addr) != VALUE
&& reg_mentioned_p (x_addr, mem_addr))
@@ -2600,8 +2613,10 @@ write_dependence_p (const_rtx mem, const_rtx x, int writep)
&& reg_mentioned_p (mem_addr, x_addr))))
{
x_addr = get_addr (x_addr);
+ if (!mem_canonicalized)
mem_addr = get_addr (mem_addr);
}
+ }
if (! writep)
{
@@ -2616,11 +2631,16 @@ write_dependence_p (const_rtx mem, const_rtx x, int writep)
GET_MODE (mem)))
return 0;
+ if (!x_canonicalized)
+ {
x_addr = canon_rtx (x_addr);
+ x_mode = GET_MODE (x);
+ }
+ if (!mem_canonicalized)
mem_addr = canon_rtx (mem_addr);
if ((ret = memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
- SIZE_FOR_MODE (x), x_addr, 0)) != -1)
+ GET_MODE_SIZE (x_mode), x_addr, 0)) != -1)
return ret;
if (nonoverlapping_memrefs_p (x, mem, false))
@@ -2634,7 +2654,23 @@ write_dependence_p (const_rtx mem, const_rtx x, int writep)
int
anti_dependence (const_rtx mem, const_rtx x)
{
- return write_dependence_p (mem, x, /*writep=*/0);
+ return write_dependence_p (mem, x, VOIDmode, NULL_RTX,
+ /*mem_canonicalized=*/false,
+ /*x_canonicalized*/false, /*writep=*/false);
+}
+
+/* Likewise, but we already have a canonicalized MEM, and X_ADDR for X.
+ Also, consider X in X_MODE (which might be from an enclosing
+ STRICT_LOW_PART / ZERO_EXTRACT).
+ If MEM_CANONICALIZED is true, MEM is canonicalized. */
+
+int
+canon_anti_dependence (const_rtx mem, bool mem_canonicalized,
+ const_rtx x, enum machine_mode x_mode, rtx x_addr)
+{
+ return write_dependence_p (mem, x, x_mode, x_addr,
+ mem_canonicalized, /*x_canonicalized=*/true,
+ /*writep=*/false);
}
/* Output dependence: X is written after store in MEM takes place. */
@@ -2642,7 +2678,9 @@ anti_dependence (const_rtx mem, const_rtx x)
int
output_dependence (const_rtx mem, const_rtx x)
{
- return write_dependence_p (mem, x, /*writep=*/1);
+ return write_dependence_p (mem, x, VOIDmode, NULL_RTX,
+ /*mem_canonicalized=*/false,
+ /*x_canonicalized*/false, /*writep=*/true);
}
@@ -2871,16 +2909,13 @@ init_alias_analysis (void)
/* Wipe the reg_seen array clean. */
bitmap_clear (reg_seen);
- /* Mark all hard registers which may contain an address.
- The stack, frame and argument pointers may contain an address.
- An argument register which can hold a Pmode value may contain
- an address even if it is not in BASE_REGS.
-
- The address expression is VOIDmode for an argument and
- Pmode for other registers. */
-
- memcpy (new_reg_base_value, static_reg_base_value,
- FIRST_PSEUDO_REGISTER * sizeof (rtx));
+ /* Initialize the alias information for this pass. */
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ if (static_reg_base_value[i])
+ {
+ new_reg_base_value[i] = static_reg_base_value[i];
+ bitmap_set_bit (reg_seen, i);
+ }
/* Walk the insns adding values to the new_reg_base_value array. */
for (i = 0; i < rpo_cnt; i++)
diff --git a/gcc-4.8/gcc/bb-reorder.c b/gcc-4.8/gcc/bb-reorder.c
index 20c25bd59..a38d1153a 100644
--- a/gcc-4.8/gcc/bb-reorder.c
+++ b/gcc-4.8/gcc/bb-reorder.c
@@ -1685,9 +1685,8 @@ fix_up_fall_thru_edges (void)
edge e;
edge_iterator ei;
- /* Find EDGE_CAN_FALLTHRU edge. */
FOR_EACH_EDGE (e, ei, cur_bb->succs)
- if (e->flags & EDGE_CAN_FALLTHRU)
+ if (e->flags & EDGE_FALLTHRU)
{
fall_thru = e;
break;
diff --git a/gcc-4.8/gcc/builtins.c b/gcc-4.8/gcc/builtins.c
index e3c32a91c..61035ff60 100644
--- a/gcc-4.8/gcc/builtins.c
+++ b/gcc-4.8/gcc/builtins.c
@@ -180,7 +180,6 @@ static tree fold_builtin_varargs (location_t, tree, tree, bool);
static tree fold_builtin_strpbrk (location_t, tree, tree, tree);
static tree fold_builtin_strstr (location_t, tree, tree, tree);
static tree fold_builtin_strrchr (location_t, tree, tree, tree);
-static tree fold_builtin_strcat (location_t, tree, tree);
static tree fold_builtin_strncat (location_t, tree, tree, tree);
static tree fold_builtin_strspn (location_t, tree, tree);
static tree fold_builtin_strcspn (location_t, tree, tree);
@@ -906,9 +905,24 @@ expand_builtin_setjmp_receiver (rtx receiver_label ATTRIBUTE_UNUSED)
if (! HAVE_nonlocal_goto)
#endif
{
+ /* First adjust our frame pointer to its actual value. It was
+ previously set to the start of the virtual area corresponding to
+ the stacked variables when we branched here and now needs to be
+ adjusted to the actual hardware fp value.
+
+ Assignments to virtual registers are converted by
+ instantiate_virtual_regs into the corresponding assignment
+ to the underlying register (fp in this case) that makes
+ the original assignment true.
+ So the following insn will actually be decrementing fp by
+ STARTING_FRAME_OFFSET. */
emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);
- /* This might change the hard frame pointer in ways that aren't
- apparent to early optimization passes, so force a clobber. */
+
+ /* Restoring the frame pointer also modifies the hard frame pointer.
+ Mark it used (so that the previous assignment remains live once
+ the frame pointer is eliminated) and clobbered (to represent the
+ implicit update from the assignment). */
+ emit_use (hard_frame_pointer_rtx);
emit_clobber (hard_frame_pointer_rtx);
}
@@ -949,8 +963,7 @@ expand_builtin_setjmp_receiver (rtx receiver_label ATTRIBUTE_UNUSED)
/* We must not allow the code we just generated to be reordered by
scheduling. Specifically, the update of the frame pointer must
- happen immediately, not later. Similarly, we must block
- (frame-related) register values to be used across this code. */
+ happen immediately, not later. */
emit_insn (gen_blockage ());
}
@@ -1958,6 +1971,7 @@ expand_builtin_mathfn (tree exp, rtx target, rtx subtarget)
tree fndecl = get_callee_fndecl (exp);
enum machine_mode mode;
bool errno_set = false;
+ bool try_widening = false;
tree arg;
if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
@@ -1969,6 +1983,7 @@ expand_builtin_mathfn (tree exp, rtx target, rtx subtarget)
{
CASE_FLT_FN (BUILT_IN_SQRT):
errno_set = ! tree_expr_nonnegative_p (arg);
+ try_widening = true;
builtin_optab = sqrt_optab;
break;
CASE_FLT_FN (BUILT_IN_EXP):
@@ -2025,8 +2040,10 @@ expand_builtin_mathfn (tree exp, rtx target, rtx subtarget)
if (! flag_errno_math || ! HONOR_NANS (mode))
errno_set = false;
- /* Before working hard, check whether the instruction is available. */
- if (optab_handler (builtin_optab, mode) != CODE_FOR_nothing
+ /* Before working hard, check whether the instruction is available, but try
+ to widen the mode for specific operations. */
+ if ((optab_handler (builtin_optab, mode) != CODE_FOR_nothing
+ || (try_widening && !excess_precision_type (TREE_TYPE (exp))))
&& (!errno_set || !optimize_insn_for_size_p ()))
{
rtx result = gen_reg_rtx (mode);
@@ -5347,7 +5364,7 @@ static rtx
expand_builtin_atomic_compare_exchange (enum machine_mode mode, tree exp,
rtx target)
{
- rtx expect, desired, mem, oldval;
+ rtx expect, desired, mem, oldval, label;
enum memmodel success, failure;
tree weak;
bool is_weak;
@@ -5385,14 +5402,26 @@ expand_builtin_atomic_compare_exchange (enum machine_mode mode, tree exp,
if (host_integerp (weak, 0) && tree_low_cst (weak, 0) != 0)
is_weak = true;
- oldval = expect;
- if (!expand_atomic_compare_and_swap ((target == const0_rtx ? NULL : &target),
- &oldval, mem, oldval, desired,
+ if (target == const0_rtx)
+ target = NULL;
+
+ /* Lest the rtl backend create a race condition with an imporoper store
+ to memory, always create a new pseudo for OLDVAL. */
+ oldval = NULL;
+
+ if (!expand_atomic_compare_and_swap (&target, &oldval, mem, expect, desired,
is_weak, success, failure))
return NULL_RTX;
- if (oldval != expect)
+ /* Conditionally store back to EXPECT, lest we create a race condition
+ with an improper store to memory. */
+ /* ??? With a rearrangement of atomics at the gimple level, we can handle
+ the normal case where EXPECT is totally private, i.e. a register. At
+ which point the store can be unconditional. */
+ label = gen_label_rtx ();
+ emit_cmp_and_jump_insns (target, const0_rtx, NE, NULL, VOIDmode, 1, label);
emit_move_insn (expect, oldval);
+ emit_label (label);
return target;
}
@@ -5846,6 +5875,9 @@ expand_builtin (tree exp, rtx target, rtx subtarget, enum machine_mode mode,
switch (fcode)
{
CASE_FLT_FN (BUILT_IN_FABS):
+ case BUILT_IN_FABSD32:
+ case BUILT_IN_FABSD64:
+ case BUILT_IN_FABSD128:
target = expand_builtin_fabs (exp, target, subtarget);
if (target)
return target;
@@ -10298,6 +10330,9 @@ fold_builtin_1 (location_t loc, tree fndecl, tree arg0, bool ignore)
return fold_builtin_strlen (loc, type, arg0);
CASE_FLT_FN (BUILT_IN_FABS):
+ case BUILT_IN_FABSD32:
+ case BUILT_IN_FABSD64:
+ case BUILT_IN_FABSD128:
return fold_builtin_fabs (loc, arg0, type);
case BUILT_IN_ABS:
@@ -10766,7 +10801,7 @@ fold_builtin_2 (location_t loc, tree fndecl, tree arg0, tree arg1, bool ignore)
return fold_builtin_strstr (loc, arg0, arg1, type);
case BUILT_IN_STRCAT:
- return fold_builtin_strcat (loc, arg0, arg1);
+ return fold_builtin_strcat (loc, arg0, arg1, NULL_TREE);
case BUILT_IN_STRSPN:
return fold_builtin_strspn (loc, arg0, arg1);
@@ -11809,8 +11844,9 @@ fold_builtin_strpbrk (location_t loc, tree s1, tree s2, tree type)
COMPOUND_EXPR in the chain will contain the tree for the simplified
form of the builtin function call. */
-static tree
-fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src)
+tree
+fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src,
+ tree len)
{
if (!validate_arg (dst, POINTER_TYPE)
|| !validate_arg (src, POINTER_TYPE))
@@ -11828,22 +11864,17 @@ fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src)
/* See if we can store by pieces into (dst + strlen(dst)). */
tree newdst, call;
tree strlen_fn = builtin_decl_implicit (BUILT_IN_STRLEN);
- tree strcpy_fn = builtin_decl_implicit (BUILT_IN_STRCPY);
+ tree memcpy_fn = builtin_decl_implicit (BUILT_IN_MEMCPY);
- if (!strlen_fn || !strcpy_fn)
+ if (!strlen_fn || !memcpy_fn)
return NULL_TREE;
- /* If we don't have a movstr we don't want to emit an strcpy
- call. We have to do that if the length of the source string
- isn't computable (in that case we can use memcpy probably
- later expanding to a sequence of mov instructions). If we
- have movstr instructions we can emit strcpy calls. */
- if (!HAVE_movstr)
- {
- tree len = c_strlen (src, 1);
+ /* If the length of the source string isn't computable don't
+ split strcat into strlen and memcpy. */
+ if (! len)
+ len = c_strlen (src, 1);
if (! len || TREE_SIDE_EFFECTS (len))
return NULL_TREE;
- }
/* Stabilize the argument list. */
dst = builtin_save_expr (dst);
@@ -11855,7 +11886,11 @@ fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src)
newdst = fold_build_pointer_plus_loc (loc, dst, newdst);
newdst = builtin_save_expr (newdst);
- call = build_call_expr_loc (loc, strcpy_fn, 2, newdst, src);
+ len = fold_convert_loc (loc, size_type_node, len);
+ len = size_binop_loc (loc, PLUS_EXPR, len,
+ build_int_cst (size_type_node, 1));
+
+ call = build_call_expr_loc (loc, memcpy_fn, 3, newdst, src, len);
return build2 (COMPOUND_EXPR, TREE_TYPE (dst), call, dst);
}
return NULL_TREE;
diff --git a/gcc-4.8/gcc/builtins.def b/gcc-4.8/gcc/builtins.def
index 4f378fad6..d5afe0d05 100644
--- a/gcc-4.8/gcc/builtins.def
+++ b/gcc-4.8/gcc/builtins.def
@@ -252,6 +252,9 @@ DEF_C99_BUILTIN (BUILT_IN_EXPM1L, "expm1l", BT_FN_LONGDOUBLE_LONGDOUBLE,
DEF_LIB_BUILTIN (BUILT_IN_FABS, "fabs", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_C99_C90RES_BUILTIN (BUILT_IN_FABSF, "fabsf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_C99_C90RES_BUILTIN (BUILT_IN_FABSL, "fabsl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_FABSD32, "fabsd32", BT_FN_DFLOAT32_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_FABSD64, "fabsd64", BT_FN_DFLOAT64_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_FABSD128, "fabsd128", BT_FN_DFLOAT128_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_C99_BUILTIN (BUILT_IN_FDIM, "fdim", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_BUILTIN (BUILT_IN_FDIMF, "fdimf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_BUILTIN (BUILT_IN_FDIML, "fdiml", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
diff --git a/gcc-4.8/gcc/c-family/ChangeLog b/gcc-4.8/gcc/c-family/ChangeLog
index 794be14c4..8100afca2 100644
--- a/gcc-4.8/gcc/c-family/ChangeLog
+++ b/gcc-4.8/gcc/c-family/ChangeLog
@@ -1,3 +1,82 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-05-06 Richard Biener <rguenther@suse.de>
+
+ * c-opts.c (c_common_post_options): For -freestanding,
+ -fno-hosted and -fno-builtin disable pattern recognition
+ if not enabled explicitely.
+
+2014-04-10 Jakub Jelinek <jakub@redhat.com>
+
+ Backport from mainline
+ 2014-03-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/60689
+ * c-common.c (add_atomic_size_parameter): When creating new
+ params vector, push the size argument first.
+
+ 2014-03-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/60603
+ * c-opts.c (c_finish_options): Restore cb_file_change call to
+ <built-in>.
+
+ 2014-03-13 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/36282
+ * c-pragma.c (apply_pragma_weak): Only look at
+ TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) if
+ DECL_ASSEMBLER_NAME_SET_P (decl).
+ (maybe_apply_pending_pragma_weaks): Exit early if
+ vec_safe_is_empty (pending_weaks) rather than only when
+ !pending_weaks.
+ (maybe_apply_pragma_weak): Likewise. If !DECL_ASSEMBLER_NAME_SET_P,
+ set assembler name back to NULL afterwards.
+
+2014-04-07 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ Backport from mainline
+ 2013-09-14 Iain Sandoe <iains@gcc.gnu.org>
+
+ PR target/48094
+ * c.opt (fgnu-runtime, fnext-runtime, fobjc-abi-version,
+ fobjc-gc, freplace-objc-classes): Accept for LTO.
+
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
+
+ Backport from mainline
+ 2014-02-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/37743
+ * c-common.c (c_common_nodes_and_builtins): When initializing
+ c_uint{16,32,64}_type_node, also set corresponding
+ uint{16,32,64}_type_node to the same value.
+
+ 2014-02-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/60101
+ * c-common.c (merge_tlist): If copy is true, call new_tlist,
+ if false, add ADD itself, rather than vice versa.
+ (verify_tree): For COND_EXPR, don't call merge_tlist with non-zero
+ copy. For SAVE_EXPR, only call merge_tlist once.
+
+2013-11-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/59280
+ * c-common.c (get_priority): If TREE_VALUE (args) is IDENTIFIER_NODE,
+ goto invalid. If it is error_mark_node, don't issue further
+ diagnostics.
+
+2013-11-04 Marek Polacek <polacek@redhat.com>
+
+ Backport from mainline
+ 2013-11-04 Marek Polacek <polacek@redhat.com>
+
+ PR c++/58979
+ * c-common.c (invalid_indirection_error): Handle RO_ARROW_STAR case.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/gcc/c-family/c-common.c b/gcc-4.8/gcc/c-family/c-common.c
index 0d91cc3cf..86f64ec60 100644
--- a/gcc-4.8/gcc/c-family/c-common.c
+++ b/gcc-4.8/gcc/c-family/c-common.c
@@ -2894,7 +2894,7 @@ merge_tlist (struct tlist **to, struct tlist *add, int copy)
}
if (!found)
{
- *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
+ *end = copy ? new_tlist (NULL, add->expr, add->writer) : add;
end = &(*end)->next;
*end = 0;
}
@@ -3052,7 +3052,7 @@ verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
warn_for_collisions (tmp_list2);
merge_tlist (pbefore_sp, tmp_before, 0);
- merge_tlist (pbefore_sp, tmp_list2, 1);
+ merge_tlist (pbefore_sp, tmp_list2, 0);
tmp_list3 = tmp_nosp = 0;
verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
@@ -3156,12 +3156,7 @@ verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
warn_for_collisions (tmp_nosp);
tmp_list3 = 0;
- while (tmp_nosp)
- {
- struct tlist *t = tmp_nosp;
- tmp_nosp = t->next;
- merge_tlist (&tmp_list3, t, 0);
- }
+ merge_tlist (&tmp_list3, tmp_nosp, 0);
t->cache_before_sp = tmp_before;
t->cache_after_sp = tmp_list3;
}
@@ -5511,13 +5506,13 @@ c_common_nodes_and_builtins (void)
uint8_type_node =
TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)));
if (UINT16_TYPE)
- c_uint16_type_node =
+ c_uint16_type_node = uint16_type_node =
TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)));
if (UINT32_TYPE)
- c_uint32_type_node =
+ c_uint32_type_node = uint32_type_node =
TREE_TYPE (identifier_global_value (c_get_ident (UINT32_TYPE)));
if (UINT64_TYPE)
- c_uint64_type_node =
+ c_uint64_type_node = uint64_type_node =
TREE_TYPE (identifier_global_value (c_get_ident (UINT64_TYPE)));
if (INT_LEAST8_TYPE)
int_least8_type_node =
@@ -6917,6 +6912,10 @@ get_priority (tree args, bool is_destructor)
}
arg = TREE_VALUE (args);
+ if (TREE_CODE (arg) == IDENTIFIER_NODE)
+ goto invalid;
+ if (arg == error_mark_node)
+ return DEFAULT_INIT_PRIORITY;
arg = default_conversion (arg);
if (!host_integerp (arg, /*pos=*/0)
|| !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
@@ -9763,6 +9762,11 @@ invalid_indirection_error (location_t loc, tree type, ref_operator errstring)
"invalid type argument of %<->%> (have %qT)",
type);
break;
+ case RO_ARROW_STAR:
+ error_at (loc,
+ "invalid type argument of %<->*%> (have %qT)",
+ type);
+ break;
case RO_IMPLICIT_CONVERSION:
error_at (loc,
"invalid type argument of implicit conversion (have %qT)",
@@ -10198,6 +10202,7 @@ add_atomic_size_parameter (unsigned n, location_t loc, tree function,
len = params->length ();
vec_alloc (v, len + 1);
+ v->quick_push (build_int_cst (size_type_node, n));
for (z = 0; z < len; z++)
v->quick_push ((*params)[z]);
f = build_function_call_vec (loc, function, v, NULL);
diff --git a/gcc-4.8/gcc/c-family/c-opts.c b/gcc-4.8/gcc/c-family/c-opts.c
index 4b6990a60..5fce7b653 100644
--- a/gcc-4.8/gcc/c-family/c-opts.c
+++ b/gcc-4.8/gcc/c-family/c-opts.c
@@ -840,6 +840,12 @@ c_common_post_options (const char **pfilename)
if (flag_objc_exceptions && !flag_objc_sjlj_exceptions)
flag_exceptions = 1;
+ /* If -ffreestanding, -fno-hosted or -fno-builtin then disable
+ pattern recognition. */
+ if (!global_options_set.x_flag_tree_loop_distribute_patterns
+ && flag_no_builtin)
+ flag_tree_loop_distribute_patterns = 0;
+
/* -Woverlength-strings is off by default, but is enabled by -Wpedantic.
It is never enabled in C++, as the minimum limit is not normative
in that standard. */
@@ -1258,7 +1264,9 @@ c_finish_options (void)
{
size_t i;
- {
+ cb_file_change (parse_in,
+ linemap_add (line_table, LC_RENAME, 0,
+ _("<built-in>"), 0));
/* Make sure all of the builtins about to be declared have
BUILTINS_LOCATION has their source_location. */
source_location builtins_loc = BUILTINS_LOCATION;
@@ -1268,7 +1276,6 @@ c_finish_options (void)
c_cpp_builtins (parse_in);
cpp_stop_forcing_token_locations (parse_in);
- }
/* We're about to send user input to cpplib, so make it warn for
things that we previously (when we sent it internal definitions)
diff --git a/gcc-4.8/gcc/c-family/c-pragma.c b/gcc-4.8/gcc/c-family/c-pragma.c
index 7d8a1a605..02cb36a60 100644
--- a/gcc-4.8/gcc/c-family/c-pragma.c
+++ b/gcc-4.8/gcc/c-family/c-pragma.c
@@ -259,6 +259,7 @@ apply_pragma_weak (tree decl, tree value)
if (SUPPORTS_WEAK && DECL_EXTERNAL (decl) && TREE_USED (decl)
&& !DECL_WEAK (decl) /* Don't complain about a redundant #pragma. */
+ && DECL_ASSEMBLER_NAME_SET_P (decl)
&& TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
warning (OPT_Wpragmas, "applying #pragma weak %q+D after first use "
"results in unspecified behavior", decl);
@@ -276,7 +277,7 @@ maybe_apply_pragma_weak (tree decl)
/* Avoid asking for DECL_ASSEMBLER_NAME when it's not needed. */
/* No weak symbols pending, take the short-cut. */
- if (!pending_weaks)
+ if (vec_safe_is_empty (pending_weaks))
return;
/* If it's not visible outside this file, it doesn't matter whether
it's weak. */
@@ -288,7 +289,13 @@ maybe_apply_pragma_weak (tree decl)
if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL)
return;
+ if (DECL_ASSEMBLER_NAME_SET_P (decl))
id = DECL_ASSEMBLER_NAME (decl);
+ else
+ {
+ id = DECL_ASSEMBLER_NAME (decl);
+ SET_DECL_ASSEMBLER_NAME (decl, NULL_TREE);
+ }
FOR_EACH_VEC_ELT (*pending_weaks, i, pe)
if (id == pe->name)
@@ -309,7 +316,7 @@ maybe_apply_pending_pragma_weaks (void)
pending_weak *pe;
symtab_node target;
- if (!pending_weaks)
+ if (vec_safe_is_empty (pending_weaks))
return;
FOR_EACH_VEC_ELT (*pending_weaks, i, pe)
diff --git a/gcc-4.8/gcc/c-family/c.opt b/gcc-4.8/gcc/c-family/c.opt
index 10ae84dbb..4da80b0ed 100644
--- a/gcc-4.8/gcc/c-family/c.opt
+++ b/gcc-4.8/gcc/c-family/c.opt
@@ -933,7 +933,7 @@ C++ ObjC++ Var(flag_no_gnu_keywords, 0)
Recognize GNU-defined keywords
fgnu-runtime
-ObjC ObjC++ Report RejectNegative Var(flag_next_runtime,0) Init(NEXT_OBJC_RUNTIME)
+ObjC ObjC++ LTO Report RejectNegative Var(flag_next_runtime,0) Init(NEXT_OBJC_RUNTIME)
Generate code for GNU runtime environment
fgnu89-inline
@@ -1007,7 +1007,7 @@ fnew-abi
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
fnext-runtime
-ObjC ObjC++ Report RejectNegative Var(flag_next_runtime)
+ObjC ObjC++ LTO Report RejectNegative Var(flag_next_runtime)
Generate code for NeXT (Apple Mac OS X) runtime environment
fnil-receivers
@@ -1025,7 +1025,7 @@ C++ ObjC++ Optimization Var(flag_nothrow_opt)
Treat a throw() exception specification as noexcept to improve code size
fobjc-abi-version=
-ObjC ObjC++ Joined Report RejectNegative UInteger Var(flag_objc_abi)
+ObjC ObjC++ LTO Joined Report RejectNegative UInteger Var(flag_objc_abi)
Specify which ABI to use for Objective-C family code and meta-data generation.
; Generate special '- .cxx_construct' and '- .cxx_destruct' methods
@@ -1045,7 +1045,7 @@ ObjC ObjC++ Var(flag_objc_exceptions)
Enable Objective-C exception and synchronization syntax
fobjc-gc
-ObjC ObjC++ Var(flag_objc_gc)
+ObjC ObjC++ LTO Var(flag_objc_gc)
Enable garbage collection (GC) in Objective-C/Objective-C++ programs
fobjc-nilcheck
@@ -1105,7 +1105,7 @@ C++ ObjC++ Var(flag_pretty_templates) Init(1)
-fno-pretty-templates Do not pretty-print template specializations as the template signature followed by the arguments
freplace-objc-classes
-ObjC ObjC++ Var(flag_replace_objc_classes)
+ObjC ObjC++ LTO Var(flag_replace_objc_classes)
Used in Fix-and-Continue mode to indicate that object files may be swapped in at runtime
frepo
diff --git a/gcc-4.8/gcc/c/ChangeLog b/gcc-4.8/gcc/c/ChangeLog
index e9449eee6..22d0e032a 100644
--- a/gcc-4.8/gcc/c/ChangeLog
+++ b/gcc-4.8/gcc/c/ChangeLog
@@ -1,3 +1,53 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-10 Jakub Jelinek <jakub@redhat.com>
+
+ Backport from mainline
+ 2014-03-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/60689
+ * c-tree.h (c_build_function_call_vec): New prototype.
+ * c-typeck.c (build_function_call_vec): Don't call
+ resolve_overloaded_builtin here.
+ (c_build_function_call_vec): New wrapper function around
+ build_function_call_vec. Call resolve_overloaded_builtin here.
+ (convert_lvalue_to_rvalue, build_function_call, build_atomic_assign):
+ Call c_build_function_call_vec instead of build_function_call_vec.
+ * c-parser.c (c_parser_postfix_expression_after_primary): Likewise.
+ * c-decl.c (finish_decl): Likewise.
+
+2014-01-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/58809
+ * c-typeck.c (c_finish_omp_clause): Reject MIN_EXPR, MAX_EXPR,
+ BIT_AND_EXPR, BIT_IOR_EXPR and BIT_XOR_EXPR on COMPLEX_TYPEs.
+
+2014-01-22 Marek Polacek <polacek@redhat.com>
+
+ Backport from mainline
+ 2014-01-22 Marek Polacek <polacek@redhat.com>
+
+ PR c/59891
+ * c-typeck.c (build_conditional_expr): Call c_fully_fold instead
+ of remove_c_maybe_const_expr on op1 and op2.
+
+2013-12-03 Marek Polacek <polacek@redhat.com>
+
+ Backport from mainline
+ 2013-12-03 Marek Polacek <polacek@redhat.com>
+
+ PR c/59351
+ * c-decl.c (build_compound_literal): Allow compound literals with
+ empty initial value.
+
+2013-11-27 Tom de Vries <tom@codesourcery.com>
+ Marc Glisse <marc.glisse@inria.fr>
+
+ PR c++/59032
+ * c-typeck.c (build_unary_op): Allow vector increment and decrement.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/gcc/c/c-decl.c b/gcc-4.8/gcc/c/c-decl.c
index d9bbf5c25..826e84b83 100644
--- a/gcc-4.8/gcc/c/c-decl.c
+++ b/gcc-4.8/gcc/c/c-decl.c
@@ -4507,7 +4507,7 @@ finish_decl (tree decl, location_t init_loc, tree init,
cleanup = build_unary_op (input_location, ADDR_EXPR, decl, 0);
vec_alloc (v, 1);
v->quick_push (cleanup);
- cleanup = build_function_call_vec (DECL_SOURCE_LOCATION (decl),
+ cleanup = c_build_function_call_vec (DECL_SOURCE_LOCATION (decl),
cleanup_decl, v, NULL);
vec_free (v);
@@ -4632,7 +4632,9 @@ build_compound_literal (location_t loc, tree type, tree init, bool non_const)
{
int failure = complete_array_type (&TREE_TYPE (decl),
DECL_INITIAL (decl), true);
- gcc_assert (!failure);
+ /* If complete_array_type returns 3, it means that the
+ initial value of the compound literal is empty. Allow it. */
+ gcc_assert (failure == 0 || failure == 3);
type = TREE_TYPE (decl);
TREE_TYPE (DECL_INITIAL (decl)) = type;
diff --git a/gcc-4.8/gcc/c/c-parser.c b/gcc-4.8/gcc/c/c-parser.c
index 2ae46220a..0832b81b8 100644
--- a/gcc-4.8/gcc/c/c-parser.c
+++ b/gcc-4.8/gcc/c/c-parser.c
@@ -6904,7 +6904,7 @@ c_parser_postfix_expression_after_primary (c_parser *parser,
sizeof_ptr_memacc_comptypes);
/* FIXME diagnostics: Ideally we want the FUNCNAME, not the
"(" after the FUNCNAME, which is what we have now. */
- expr.value = build_function_call_vec (op_loc, expr.value, exprlist,
+ expr.value = c_build_function_call_vec (op_loc, expr.value, exprlist,
origtypes);
expr.original_code = ERROR_MARK;
if (TREE_CODE (expr.value) == INTEGER_CST
diff --git a/gcc-4.8/gcc/c/c-tree.h b/gcc-4.8/gcc/c/c-tree.h
index d1a871daa..1e6e68acb 100644
--- a/gcc-4.8/gcc/c/c-tree.h
+++ b/gcc-4.8/gcc/c/c-tree.h
@@ -640,6 +640,8 @@ extern tree c_finish_omp_task (location_t, tree, tree);
extern tree c_finish_omp_clauses (tree);
extern tree c_build_va_arg (location_t, tree, tree);
extern tree c_finish_transaction (location_t, tree, int);
+extern tree c_build_function_call_vec (location_t, tree, vec<tree, va_gc> *,
+ vec<tree, va_gc> *);
/* Set to 0 at beginning of a function definition, set to 1 if
a return statement that specifies a return value is seen. */
diff --git a/gcc-4.8/gcc/c/c-typeck.c b/gcc-4.8/gcc/c/c-typeck.c
index ddb6d3977..fc2a165dc 100644
--- a/gcc-4.8/gcc/c/c-typeck.c
+++ b/gcc-4.8/gcc/c/c-typeck.c
@@ -2666,7 +2666,7 @@ build_function_call (location_t loc, tree function, tree params)
vec_alloc (v, list_length (params));
for (; params; params = TREE_CHAIN (params))
v->quick_push (TREE_VALUE (params));
- ret = build_function_call_vec (loc, function, v, NULL);
+ ret = c_build_function_call_vec (loc, function, v, NULL);
vec_free (v);
return ret;
}
@@ -2705,14 +2705,6 @@ build_function_call_vec (location_t loc, tree function,
/* Convert anything with function type to a pointer-to-function. */
if (TREE_CODE (function) == FUNCTION_DECL)
{
- /* Implement type-directed function overloading for builtins.
- resolve_overloaded_builtin and targetm.resolve_overloaded_builtin
- handle all the type checking. The result is a complete expression
- that implements this function call. */
- tem = resolve_overloaded_builtin (loc, function, params);
- if (tem)
- return tem;
-
name = DECL_NAME (function);
if (flag_tm)
@@ -2864,6 +2856,30 @@ build_function_call_vec (location_t loc, tree function,
return require_complete_type (result);
}
+/* Like build_function_call_vec, but call also resolve_overloaded_builtin. */
+
+tree
+c_build_function_call_vec (location_t loc, tree function,
+ vec<tree, va_gc> *params,
+ vec<tree, va_gc> *origtypes)
+{
+ /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
+ STRIP_TYPE_NOPS (function);
+
+ /* Convert anything with function type to a pointer-to-function. */
+ if (TREE_CODE (function) == FUNCTION_DECL)
+ {
+ /* Implement type-directed function overloading for builtins.
+ resolve_overloaded_builtin and targetm.resolve_overloaded_builtin
+ handle all the type checking. The result is a complete expression
+ that implements this function call. */
+ tree tem = resolve_overloaded_builtin (loc, function, params);
+ if (tem)
+ return tem;
+ }
+ return build_function_call_vec (loc, function, params, origtypes);
+}
+
/* Convert the argument expressions in the vector VALUES
to the types in the list TYPELIST.
@@ -3629,7 +3645,8 @@ build_unary_op (location_t location,
/* Report invalid types. */
if (typecode != POINTER_TYPE && typecode != FIXED_POINT_TYPE
- && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
+ && typecode != INTEGER_TYPE && typecode != REAL_TYPE
+ && typecode != VECTOR_TYPE)
{
if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
error_at (location, "wrong type argument to increment");
@@ -3694,7 +3711,9 @@ build_unary_op (location_t location,
}
else
{
- inc = integer_one_node;
+ inc = (TREE_CODE (argtype) == VECTOR_TYPE
+ ? build_one_cst (argtype)
+ : integer_one_node);
inc = convert (argtype, inc);
}
@@ -4331,8 +4350,10 @@ build_conditional_expr (location_t colon_loc, tree ifexp, bool ifexp_bcp,
{
if (int_operands)
{
- op1 = remove_c_maybe_const_expr (op1);
- op2 = remove_c_maybe_const_expr (op2);
+ /* Use c_fully_fold here, since C_MAYBE_CONST_EXPR might be
+ nested inside of the expression. */
+ op1 = c_fully_fold (op1, false, NULL);
+ op2 = c_fully_fold (op2, false, NULL);
}
ret = build3 (COND_EXPR, result_type, ifexp, op1, op2);
if (int_operands)
@@ -10618,7 +10639,8 @@ c_finish_omp_clauses (tree clauses)
"%qE has invalid type for %<reduction%>", t);
remove = true;
}
- else if (FLOAT_TYPE_P (TREE_TYPE (t)))
+ else if (FLOAT_TYPE_P (TREE_TYPE (t))
+ || TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
{
enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
const char *r_name = NULL;
@@ -10628,8 +10650,14 @@ c_finish_omp_clauses (tree clauses)
case PLUS_EXPR:
case MULT_EXPR:
case MINUS_EXPR:
+ break;
case MIN_EXPR:
+ if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
+ r_name = "min";
+ break;
case MAX_EXPR:
+ if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
+ r_name = "max";
break;
case BIT_AND_EXPR:
r_name = "&";
@@ -10641,9 +10669,11 @@ c_finish_omp_clauses (tree clauses)
r_name = "|";
break;
case TRUTH_ANDIF_EXPR:
+ if (FLOAT_TYPE_P (TREE_TYPE (t)))
r_name = "&&";
break;
case TRUTH_ORIF_EXPR:
+ if (FLOAT_TYPE_P (TREE_TYPE (t)))
r_name = "||";
break;
default:
diff --git a/gcc-4.8/gcc/calls.c b/gcc-4.8/gcc/calls.c
index dd034b400..bf0ba306b 100644
--- a/gcc-4.8/gcc/calls.c
+++ b/gcc-4.8/gcc/calls.c
@@ -983,6 +983,7 @@ store_unaligned_arguments_into_pseudos (struct arg_data *args, int num_actuals)
for (i = 0; i < num_actuals; i++)
if (args[i].reg != 0 && ! args[i].pass_on_stack
+ && GET_CODE (args[i].reg) != PARALLEL
&& args[i].mode == BLKmode
&& MEM_P (args[i].value)
&& (MEM_ALIGN (args[i].value)
@@ -1327,6 +1328,7 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
#else
args[i].reg != 0,
#endif
+ reg_parm_stack_space,
args[i].pass_on_stack ? 0 : args[i].partial,
fndecl, args_size, &args[i].locate);
#ifdef BLOCK_REG_PADDING
@@ -3171,7 +3173,9 @@ expand_call (tree exp, rtx target, int ignore)
group load/store machinery below. */
if (!structure_value_addr
&& !pcc_struct_value
+ && TYPE_MODE (rettype) != VOIDmode
&& TYPE_MODE (rettype) != BLKmode
+ && REG_P (valreg)
&& targetm.calls.return_in_msb (rettype))
{
if (shift_return_value (TYPE_MODE (rettype), false, valreg))
@@ -3734,7 +3738,8 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
#else
argvec[count].reg != 0,
#endif
- 0, NULL_TREE, &args_size, &argvec[count].locate);
+ reg_parm_stack_space, 0,
+ NULL_TREE, &args_size, &argvec[count].locate);
if (argvec[count].reg == 0 || argvec[count].partial != 0
|| reg_parm_stack_space > 0)
@@ -3821,7 +3826,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
#else
argvec[count].reg != 0,
#endif
- argvec[count].partial,
+ reg_parm_stack_space, argvec[count].partial,
NULL_TREE, &args_size, &argvec[count].locate);
args_size.constant += argvec[count].locate.size.constant;
gcc_assert (!argvec[count].locate.size.var);
diff --git a/gcc-4.8/gcc/cfgcleanup.c b/gcc-4.8/gcc/cfgcleanup.c
index 8a120bf90..ba62cb95a 100644
--- a/gcc-4.8/gcc/cfgcleanup.c
+++ b/gcc-4.8/gcc/cfgcleanup.c
@@ -1293,7 +1293,6 @@ flow_find_cross_jump (basic_block bb1, basic_block bb2, rtx *f1, rtx *f2,
{
rtx i1, i2, last1, last2, afterlast1, afterlast2;
int ninsns = 0;
- rtx p1;
enum replace_direction dir, last_dir, afterlast_dir;
bool follow_fallthru, did_fallthru;
@@ -1321,8 +1320,9 @@ flow_find_cross_jump (basic_block bb1, basic_block bb2, rtx *f1, rtx *f2,
|| (returnjump_p (i2) && !side_effects_p (PATTERN (i2))))
{
last2 = i2;
- /* Count everything except for unconditional jump as insn. */
- if (!simplejump_p (i2) && !returnjump_p (i2) && last1)
+ /* Count everything except for unconditional jump as insn.
+ Don't count any jumps if dir_p is NULL. */
+ if (!simplejump_p (i2) && !returnjump_p (i2) && last1 && dir_p)
ninsns++;
i2 = PREV_INSN (i2);
}
@@ -1373,8 +1373,8 @@ flow_find_cross_jump (basic_block bb1, basic_block bb2, rtx *f1, rtx *f2,
last1 = i1, last2 = i2;
afterlast_dir = last_dir;
last_dir = dir;
- p1 = PATTERN (i1);
- if (!(GET_CODE (p1) == USE || GET_CODE (p1) == CLOBBER))
+ if (GET_CODE (PATTERN (i1)) != USE
+ && GET_CODE (PATTERN (i1)) != CLOBBER)
ninsns++;
}
@@ -1420,7 +1420,8 @@ flow_find_cross_jump (basic_block bb1, basic_block bb2, rtx *f1, rtx *f2,
/* Like flow_find_cross_jump, except start looking for a matching sequence from
the head of the two blocks. Do not include jumps at the end.
If STOP_AFTER is nonzero, stop after finding that many matching
- instructions. */
+ instructions. If STOP_AFTER is zero, count all INSN_P insns, if it is
+ non-zero, only count active insns. */
int
flow_find_head_matching_sequence (basic_block bb1, basic_block bb2, rtx *f1,
@@ -1492,6 +1493,9 @@ flow_find_head_matching_sequence (basic_block bb1, basic_block bb2, rtx *f1,
beforelast1 = last1, beforelast2 = last2;
last1 = i1, last2 = i2;
+ if (!stop_after
+ || (GET_CODE (PATTERN (i1)) != USE
+ && GET_CODE (PATTERN (i1)) != CLOBBER))
ninsns++;
}
diff --git a/gcc-4.8/gcc/cfgexpand.c b/gcc-4.8/gcc/cfgexpand.c
index 5acc42d73..884e97a33 100644
--- a/gcc-4.8/gcc/cfgexpand.c
+++ b/gcc-4.8/gcc/cfgexpand.c
@@ -331,7 +331,7 @@ stack_var_conflict_p (size_t x, size_t y)
enter its partition number into bitmap DATA. */
static bool
-visit_op (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
+visit_op (gimple, tree op, tree, void *data)
{
bitmap active = (bitmap)data;
op = get_base_address (op);
@@ -351,7 +351,7 @@ visit_op (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
from bitmap DATA. */
static bool
-visit_conflict (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
+visit_conflict (gimple, tree op, tree, void *data)
{
bitmap active = (bitmap)data;
op = get_base_address (op);
@@ -385,7 +385,7 @@ add_scope_conflicts_1 (basic_block bb, bitmap work, bool for_conflict)
edge e;
edge_iterator ei;
gimple_stmt_iterator gsi;
- bool (*visit)(gimple, tree, void *);
+ walk_stmt_load_store_addr_fn visit;
bitmap_clear (work);
FOR_EACH_EDGE (e, ei, bb->preds)
@@ -4707,13 +4707,17 @@ gimple_expand_cfg (void)
if (e->insns.r)
{
rebuild_jump_labels_chain (e->insns.r);
- /* Avoid putting insns before parm_birth_insn. */
+ /* Put insns after parm birth, but before
+ NOTE_INSNS_FUNCTION_BEG. */
if (e->src == ENTRY_BLOCK_PTR
- && single_succ_p (ENTRY_BLOCK_PTR)
- && parm_birth_insn)
+ && single_succ_p (ENTRY_BLOCK_PTR))
{
rtx insns = e->insns.r;
e->insns.r = NULL_RTX;
+ if (NOTE_P (parm_birth_insn)
+ && NOTE_KIND (parm_birth_insn) == NOTE_INSN_FUNCTION_BEG)
+ emit_insn_before_noloc (insns, parm_birth_insn, e->dest);
+ else
emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
}
else
diff --git a/gcc-4.8/gcc/cgraph.c b/gcc-4.8/gcc/cgraph.c
index 8c1efb4c3..fd3aadee4 100644
--- a/gcc-4.8/gcc/cgraph.c
+++ b/gcc-4.8/gcc/cgraph.c
@@ -2596,4 +2596,47 @@ verify_cgraph (void)
FOR_EACH_FUNCTION (node)
verify_cgraph_node (node);
}
+
+/* Create external decl node for DECL.
+ The difference i nbetween cgraph_get_create_node and
+ cgraph_get_create_real_symbol_node is that cgraph_get_create_node
+ may return inline clone, while cgraph_get_create_real_symbol_node
+ will create a new node in this case.
+ FIXME: This function should be removed once clones are put out of decl
+ hash. */
+
+struct cgraph_node *
+cgraph_get_create_real_symbol_node (tree decl)
+{
+ struct cgraph_node *first_clone = cgraph_get_node (decl);
+ struct cgraph_node *node;
+ /* create symbol table node. even if inline clone exists, we can not take
+ it as a target of non-inlined call. */
+ node = cgraph_get_node (decl);
+ if (node && !node->global.inlined_to)
+ return node;
+
+ node = cgraph_create_node (decl);
+
+ /* ok, we previously inlined the function, then removed the offline copy and
+ now we want it back for external call. this can happen when devirtualizing
+ while inlining function called once that happens after extern inlined and
+ virtuals are already removed. in this case introduce the external node
+ and make it available for call. */
+ if (first_clone)
+ {
+ first_clone->clone_of = node;
+ node->clones = first_clone;
+ symtab_prevail_in_asm_name_hash ((symtab_node) node);
+ symtab_insert_node_to_hashtable ((symtab_node) node);
+ if (dump_file)
+ fprintf (dump_file, "Introduced new external node "
+ "(%s/%i) and turned into root of the clone tree.\n",
+ xstrdup (cgraph_node_name (node)), node->uid);
+ }
+ else if (dump_file)
+ fprintf (dump_file, "Introduced new external node "
+ "(%s/%i).\n", xstrdup (cgraph_node_name (node)), node->uid);
+ return node;
+}
#include "gt-cgraph.h"
diff --git a/gcc-4.8/gcc/cgraph.h b/gcc-4.8/gcc/cgraph.h
index 5df7fb478..8ab7ae181 100644
--- a/gcc-4.8/gcc/cgraph.h
+++ b/gcc-4.8/gcc/cgraph.h
@@ -575,6 +575,7 @@ struct cgraph_indirect_call_info *cgraph_allocate_init_indirect_info (void);
struct cgraph_node * cgraph_create_node (tree);
struct cgraph_node * cgraph_create_empty_node (void);
struct cgraph_node * cgraph_get_create_node (tree);
+struct cgraph_node * cgraph_get_create_real_symbol_node (tree);
struct cgraph_node * cgraph_same_body_alias (struct cgraph_node *, tree, tree);
struct cgraph_node * cgraph_add_thunk (struct cgraph_node *, tree, tree, bool, HOST_WIDE_INT,
HOST_WIDE_INT, tree, tree);
diff --git a/gcc-4.8/gcc/cgraphbuild.c b/gcc-4.8/gcc/cgraphbuild.c
index fb01f24ec..8869f524d 100644
--- a/gcc-4.8/gcc/cgraphbuild.c
+++ b/gcc-4.8/gcc/cgraphbuild.c
@@ -73,7 +73,7 @@ record_reference (tree *tp, int *walk_subtrees, void *data)
decl = get_base_var (*tp);
if (TREE_CODE (decl) == FUNCTION_DECL)
{
- struct cgraph_node *node = cgraph_get_create_node (decl);
+ struct cgraph_node *node = cgraph_get_create_real_symbol_node (decl);
if (!ctx->only_vars)
cgraph_mark_address_taken_node (node);
ipa_record_reference ((symtab_node)ctx->varpool_node,
@@ -143,7 +143,7 @@ record_eh_tables (struct cgraph_node *node, struct function *fun)
{
struct cgraph_node *per_node;
- per_node = cgraph_get_create_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
+ per_node = cgraph_get_create_real_symbol_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
ipa_record_reference ((symtab_node)node, (symtab_node)per_node, IPA_REF_ADDR, NULL);
cgraph_mark_address_taken_node (per_node);
}
@@ -218,12 +218,12 @@ compute_call_stmt_bb_frequency (tree decl, basic_block bb)
/* Mark address taken in STMT. */
static bool
-mark_address (gimple stmt, tree addr, void *data)
+mark_address (gimple stmt, tree addr, tree, void *data)
{
addr = get_base_address (addr);
if (TREE_CODE (addr) == FUNCTION_DECL)
{
- struct cgraph_node *node = cgraph_get_create_node (addr);
+ struct cgraph_node *node = cgraph_get_create_real_symbol_node (addr);
cgraph_mark_address_taken_node (node);
ipa_record_reference ((symtab_node)data,
(symtab_node)node,
@@ -245,14 +245,14 @@ mark_address (gimple stmt, tree addr, void *data)
/* Mark load of T. */
static bool
-mark_load (gimple stmt, tree t, void *data)
+mark_load (gimple stmt, tree t, tree, void *data)
{
t = get_base_address (t);
if (t && TREE_CODE (t) == FUNCTION_DECL)
{
/* ??? This can happen on platforms with descriptors when these are
directly manipulated in the code. Pretend that it's an address. */
- struct cgraph_node *node = cgraph_get_create_node (t);
+ struct cgraph_node *node = cgraph_get_create_real_symbol_node (t);
cgraph_mark_address_taken_node (node);
ipa_record_reference ((symtab_node)data,
(symtab_node)node,
@@ -273,7 +273,7 @@ mark_load (gimple stmt, tree t, void *data)
/* Mark store of T. */
static bool
-mark_store (gimple stmt, tree t, void *data)
+mark_store (gimple stmt, tree t, tree, void *data)
{
t = get_base_address (t);
if (t && TREE_CODE (t) == VAR_DECL
@@ -330,7 +330,7 @@ build_cgraph_edges (void)
{
tree fn = gimple_omp_parallel_child_fn (stmt);
ipa_record_reference ((symtab_node)node,
- (symtab_node)cgraph_get_create_node (fn),
+ (symtab_node)cgraph_get_create_real_symbol_node (fn),
IPA_REF_ADDR, stmt);
}
if (gimple_code (stmt) == GIMPLE_OMP_TASK)
@@ -338,12 +338,12 @@ build_cgraph_edges (void)
tree fn = gimple_omp_task_child_fn (stmt);
if (fn)
ipa_record_reference ((symtab_node)node,
- (symtab_node) cgraph_get_create_node (fn),
+ (symtab_node) cgraph_get_create_real_symbol_node (fn),
IPA_REF_ADDR, stmt);
fn = gimple_omp_task_copy_fn (stmt);
if (fn)
ipa_record_reference ((symtab_node)node,
- (symtab_node)cgraph_get_create_node (fn),
+ (symtab_node)cgraph_get_create_real_symbol_node (fn),
IPA_REF_ADDR, stmt);
}
}
diff --git a/gcc-4.8/gcc/combine.c b/gcc-4.8/gcc/combine.c
index a589cfadb..8e3dff3f5 100644
--- a/gcc-4.8/gcc/combine.c
+++ b/gcc-4.8/gcc/combine.c
@@ -3884,15 +3884,19 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p,
PATTERN (undobuf.other_insn) = other_pat;
- /* If any of the notes in OTHER_INSN were REG_UNUSED, ensure that they
- are still valid. Then add any non-duplicate notes added by
- recog_for_combine. */
+ /* If any of the notes in OTHER_INSN were REG_DEAD or REG_UNUSED,
+ ensure that they are still valid. Then add any non-duplicate
+ notes added by recog_for_combine. */
for (note = REG_NOTES (undobuf.other_insn); note; note = next)
{
next = XEXP (note, 1);
- if (REG_NOTE_KIND (note) == REG_UNUSED
- && ! reg_set_p (XEXP (note, 0), PATTERN (undobuf.other_insn)))
+ if ((REG_NOTE_KIND (note) == REG_DEAD
+ && !reg_referenced_p (XEXP (note, 0),
+ PATTERN (undobuf.other_insn)))
+ ||(REG_NOTE_KIND (note) == REG_UNUSED
+ && !reg_set_p (XEXP (note, 0),
+ PATTERN (undobuf.other_insn))))
remove_note (undobuf.other_insn, note);
}
@@ -5798,8 +5802,15 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest,
return x;
}
- /* If the code changed, return a whole new comparison. */
- if (new_code != code)
+ /* If the code changed, return a whole new comparison.
+ We also need to avoid using SUBST in cases where
+ simplify_comparison has widened a comparison with a CONST_INT,
+ since in that case the wider CONST_INT may fail the sanity
+ checks in do_SUBST. */
+ if (new_code != code
+ || (CONST_INT_P (op1)
+ && GET_MODE (op0) != GET_MODE (XEXP (x, 0))
+ && GET_MODE (op0) != GET_MODE (XEXP (x, 1))))
return gen_rtx_fmt_ee (new_code, mode, op0, op1);
/* Otherwise, keep this operation, but maybe change its operands.
@@ -7991,7 +8002,7 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask,
if (code == CALL || code == ASM_OPERANDS || code == CLOBBER)
return x;
- /* We want to perform the operation is its present mode unless we know
+ /* We want to perform the operation in its present mode unless we know
that the operation is valid in MODE, in which case we do the operation
in MODE. */
op_mode = ((GET_MODE_CLASS (mode) == GET_MODE_CLASS (GET_MODE (x))
@@ -8427,9 +8438,10 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask,
GET_MODE (x), GEN_INT (mask),
XEXP (x, 1));
if (temp && CONST_INT_P (temp))
- SUBST (XEXP (x, 0),
+ x = simplify_gen_binary (code, GET_MODE (x),
force_to_mode (XEXP (x, 0), GET_MODE (x),
- INTVAL (temp), next_select));
+ INTVAL (temp), next_select),
+ XEXP (x, 1));
}
break;
@@ -8497,14 +8509,16 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask,
/* We have no way of knowing if the IF_THEN_ELSE can itself be
written in a narrower mode. We play it safe and do not do so. */
- SUBST (XEXP (x, 1),
- gen_lowpart_or_truncate (GET_MODE (x),
+ op0 = gen_lowpart_or_truncate (GET_MODE (x),
force_to_mode (XEXP (x, 1), mode,
- mask, next_select)));
- SUBST (XEXP (x, 2),
- gen_lowpart_or_truncate (GET_MODE (x),
+ mask, next_select));
+ op1 = gen_lowpart_or_truncate (GET_MODE (x),
force_to_mode (XEXP (x, 2), mode,
- mask, next_select)));
+ mask, next_select));
+ if (op0 != XEXP (x, 1) || op1 != XEXP (x, 2))
+ x = simplify_gen_ternary (IF_THEN_ELSE, GET_MODE (x),
+ GET_MODE (XEXP (x, 0)), XEXP (x, 0),
+ op0, op1);
break;
default:
diff --git a/gcc-4.8/gcc/config.gcc b/gcc-4.8/gcc/config.gcc
index d91bea33f..7ae195e44 100644
--- a/gcc-4.8/gcc/config.gcc
+++ b/gcc-4.8/gcc/config.gcc
@@ -420,7 +420,7 @@ picochip-*-*)
;;
powerpc*-*-*)
cpu_type=rs6000
- extra_headers="ppc-asm.h altivec.h spe.h ppu_intrinsics.h paired.h spu2vmx.h vec_types.h si2vmx.h"
+ extra_headers="ppc-asm.h altivec.h spe.h ppu_intrinsics.h paired.h spu2vmx.h vec_types.h si2vmx.h htmintrin.h htmxlintrin.h"
need_64bit_hwint=yes
case x$with_cpu in
xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[345678]|xpower6x|xrs64a|xcell|xa2|xe500mc64|xe5500|Xe6500)
@@ -1761,6 +1761,14 @@ microblaze*-linux*)
tmake_file="${tmake_file} microblaze/t-microblaze-linux"
;;
microblaze*-*-rtems*)
+ case $target in
+ microblazeel-*)
+ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=0"
+ ;;
+ microblaze-*)
+ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=4321"
+ ;;
+ esac
tm_file="${tm_file} dbxelf.h"
tm_file="${tm_file} microblaze/rtems.h rtems.h newlib-stdint.h"
c_target_objs="${c_target_objs} microblaze-c.o"
@@ -2110,6 +2118,19 @@ powerpc*-*-linux*)
fi
tm_file="rs6000/biarch64.h ${tm_file} rs6000/linux64.h glibc-stdint.h"
tmake_file="$tmake_file rs6000/t-linux64"
+ case ${target} in
+ powerpc*le-*-*)
+ tmake_file="$tmake_file rs6000/t-linux64le"
+ case ${enable_targets} in
+ all | *powerpc64-* | *powerpc-*)
+ tmake_file="$tmake_file rs6000/t-linux64lebe" ;;
+ esac ;;
+ *)
+ case ${enable_targets} in
+ all | *powerpc64le-* | *powerpcle-*)
+ tmake_file="$tmake_file rs6000/t-linux64bele" ;;
+ esac ;;
+ esac
extra_options="${extra_options} rs6000/linux64.opt"
;;
*)
@@ -2977,13 +2998,20 @@ if test x$with_cpu = x ; then
with_cpu=8540
fi
;;
- sparc-leon*-*)
- with_cpu=v8;
- ;;
sparc*-*-*)
+ case ${target} in
+ *-leon-*)
+ with_cpu=leon
+ ;;
+ *-leon[3-9]*)
+ with_cpu=leon3
+ ;;
+ *)
with_cpu="`echo ${target} | sed 's/-.*$//'`"
;;
esac
+ ;;
+ esac
# Avoid overriding --with-cpu-32 and --with-cpu-64 values.
case ${target} in
@@ -3136,6 +3164,11 @@ case "${target}" in
${srcdir}/config/aarch64/$def | \
sed -e 's/^[^,]*,[ ]*//' | \
sed -e 's/,.*$//'`
+ # Extract the architecture flags from aarch64-arches.def
+ ext_mask=`grep "^$pattern(\"$base_val\"," \
+ ${srcdir}/config/aarch64/$def | \
+ sed -e 's/)$//' | \
+ sed -e 's/^.*,//'`
else
base_id=`grep "^$pattern(\"$base_val\"," \
${srcdir}/config/aarch64/$def | \
@@ -3508,7 +3541,7 @@ case "${target}" in
;;
powerpc*-*-* | rs6000-*-*)
- supported_defaults="cpu cpu_32 cpu_64 float tune tune_32 tune_64"
+ supported_defaults="abi cpu cpu_32 cpu_64 float tune tune_32 tune_64"
for which in cpu cpu_32 cpu_64 tune tune_32 tune_64; do
eval "val=\$with_$which"
@@ -3545,6 +3578,16 @@ case "${target}" in
;;
esac
done
+
+ case "$with_abi" in
+ "" | elfv1 | elfv2 )
+ #OK
+ ;;
+ *)
+ echo "Unknown ABI used in --with-abi=$with_abi"
+ exit 1
+ ;;
+ esac
;;
s390*-*-*)
@@ -3601,7 +3644,7 @@ case "${target}" in
case ${val} in
"" | sparc | sparcv9 | sparc64 \
| v7 | cypress \
- | v8 | supersparc | hypersparc | leon \
+ | v8 | supersparc | hypersparc | leon | leon3 \
| sparclite | f930 | f934 | sparclite86x \
| sparclet | tsc701 \
| v9 | ultrasparc | ultrasparc3 | niagara | niagara2 \
@@ -3675,10 +3718,8 @@ esac
target_cpu_default2=
case ${target} in
aarch64*-*-*)
- if test x$target_cpu_cname = x
+ if test x"$target_cpu_cname" != x
then
- target_cpu_default2=TARGET_CPU_generic
- else
target_cpu_default2=$target_cpu_cname
fi
;;
@@ -3759,15 +3800,6 @@ case ${target} in
cxx_target_objs="${cxx_target_objs} sh-c.o"
;;
- sparc-leon*-*)
- if test x$with_tune = x ; then
- with_tune=leon;
- fi
-
- # The SPARC port checks this value at compile-time.
- target_cpu_default2="TARGET_CPU_$with_cpu"
- ;;
-
sparc*-*-*)
# Some standard aliases.
case x$with_cpu in
@@ -3779,6 +3811,17 @@ case ${target} in
;;
esac
+ if test x$with_tune = x ; then
+ case ${target} in
+ *-leon-*)
+ with_tune=leon
+ ;;
+ *-leon[3-9]*)
+ with_tune=leon3
+ ;;
+ esac
+ fi
+
# The SPARC port checks this value at compile-time.
target_cpu_default2="TARGET_CPU_$with_cpu"
;;
diff --git a/gcc-4.8/gcc/config.in b/gcc-4.8/gcc/config.in
index 819341755..6f23c032b 100644
--- a/gcc-4.8/gcc/config.in
+++ b/gcc-4.8/gcc/config.in
@@ -363,6 +363,12 @@
#endif
+/* Define if your assembler supports the 'ud2' mnemonic. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_AS_IX86_UD2
+#endif
+
+
/* Define if your assembler supports the lituse_jsrdirect relocation. */
#ifndef USED_FOR_TARGET
#undef HAVE_AS_JSRDIRECT_RELOCS
@@ -375,6 +381,12 @@
#endif
+/* Define if your assembler supports LEON instructions. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_AS_LEON
+#endif
+
+
/* Define if the assembler won't complain about a line such as # 0 "" 2. */
#ifndef USED_FOR_TARGET
#undef HAVE_AS_LINE_ZERO
diff --git a/gcc-4.8/gcc/config/aarch64/aarch64-simd-builtins.def b/gcc-4.8/gcc/config/aarch64/aarch64-simd-builtins.def
index 955da265a..ed73c15d7 100644
--- a/gcc-4.8/gcc/config/aarch64/aarch64-simd-builtins.def
+++ b/gcc-4.8/gcc/config/aarch64/aarch64-simd-builtins.def
@@ -217,8 +217,8 @@
BUILTIN_VSDQ_I_DI (BINOP, cmle)
BUILTIN_VSDQ_I_DI (BINOP, cmlt)
/* Implemented by aarch64_cm<cmp><mode>. */
- BUILTIN_VSDQ_I_DI (BINOP, cmhs)
- BUILTIN_VSDQ_I_DI (BINOP, cmhi)
+ BUILTIN_VSDQ_I_DI (BINOP, cmgeu)
+ BUILTIN_VSDQ_I_DI (BINOP, cmgtu)
BUILTIN_VSDQ_I_DI (BINOP, cmtst)
/* Implemented by aarch64_<fmaxmin><mode>. */
diff --git a/gcc-4.8/gcc/config/aarch64/aarch64-simd.md b/gcc-4.8/gcc/config/aarch64/aarch64-simd.md
index 00f3c3121..481222cf5 100644
--- a/gcc-4.8/gcc/config/aarch64/aarch64-simd.md
+++ b/gcc-4.8/gcc/config/aarch64/aarch64-simd.md
@@ -21,7 +21,7 @@
; Main data types used by the insntructions
-(define_attr "simd_mode" "unknown,none,V8QI,V16QI,V4HI,V8HI,V2SI,V4SI,V2DI,V2SF,V4SF,V2DF,OI,CI,XI,DI,DF,SI,HI,QI"
+(define_attr "simd_mode" "unknown,none,V8QI,V16QI,V4HI,V8HI,V2SI,V4SI,V2DI,V2SF,V4SF,V2DF,OI,CI,XI,DI,DF,SI,SF,HI,QI"
(const_string "unknown"))
@@ -1548,12 +1548,12 @@
case LTU:
case GEU:
- emit_insn (gen_aarch64_cmhs<mode> (mask, operands[4], operands[5]));
+ emit_insn (gen_aarch64_cmgeu<mode> (mask, operands[4], operands[5]));
break;
case LEU:
case GTU:
- emit_insn (gen_aarch64_cmhi<mode> (mask, operands[4], operands[5]));
+ emit_insn (gen_aarch64_cmgtu<mode> (mask, operands[4], operands[5]));
break;
case NE:
@@ -3034,48 +3034,181 @@
)
-;; cm(eq|ge|le|lt|gt)
+;; cm(eq|ge|gt|lt|le)
+;; Note, we have constraints for Dz and Z as different expanders
+;; have different ideas of what should be passed to this pattern.
-(define_insn "aarch64_cm<cmp><mode>"
+(define_insn "aarch64_cm<optab><mode>"
[(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
- (unspec:<V_cmp_result>
- [(match_operand:VSDQ_I_DI 1 "register_operand" "w,w")
- (match_operand:VSDQ_I_DI 2 "aarch64_simd_reg_or_zero" "w,Z")]
- VCMP_S))]
+ (neg:<V_cmp_result>
+ (COMPARISONS:<V_cmp_result>
+ (match_operand:VDQ 1 "register_operand" "w,w")
+ (match_operand:VDQ 2 "aarch64_simd_reg_or_zero" "w,ZDz")
+ )))]
"TARGET_SIMD"
"@
- cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
- cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #0"
+ cm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>
+ cm<optab>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #0"
[(set_attr "simd_type" "simd_cmp")
(set_attr "simd_mode" "<MODE>")]
)
-;; cm(hs|hi|tst)
+(define_insn_and_split "aarch64_cm<optab>di"
+ [(set (match_operand:DI 0 "register_operand" "=w,w,r")
+ (neg:DI
+ (COMPARISONS:DI
+ (match_operand:DI 1 "register_operand" "w,w,r")
+ (match_operand:DI 2 "aarch64_simd_reg_or_zero" "w,ZDz,r")
+ )))]
+ "TARGET_SIMD"
+ "@
+ cm<n_optab>\t%d0, %d<cmp_1>, %d<cmp_2>
+ cm<optab>\t%d0, %d1, #0
+ #"
+ "reload_completed
+ /* We need to prevent the split from
+ happening in the 'w' constraint cases. */
+ && GP_REGNUM_P (REGNO (operands[0]))
+ && GP_REGNUM_P (REGNO (operands[1]))"
+ [(set (reg:CC CC_REGNUM)
+ (compare:CC
+ (match_dup 1)
+ (match_dup 2)))
+ (set (match_dup 0)
+ (neg:DI
+ (COMPARISONS:DI
+ (match_operand 3 "cc_register" "")
+ (const_int 0))))]
+ {
+ enum machine_mode mode = SELECT_CC_MODE (<CMP>, operands[1], operands[2]);
+ rtx cc_reg = aarch64_gen_compare_reg (<CMP>, operands[1], operands[2]);
+ rtx comparison = gen_rtx_<CMP> (mode, operands[1], operands[2]);
+ emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
+ DONE;
+ }
+ [(set_attr "simd_type" "simd_cmp")
+ (set_attr "simd_mode" "DI")]
+)
+
+;; cm(hs|hi)
-(define_insn "aarch64_cm<cmp><mode>"
+(define_insn "aarch64_cm<optab><mode>"
[(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
- (unspec:<V_cmp_result>
- [(match_operand:VSDQ_I_DI 1 "register_operand" "w")
- (match_operand:VSDQ_I_DI 2 "register_operand" "w")]
- VCMP_U))]
+ (neg:<V_cmp_result>
+ (UCOMPARISONS:<V_cmp_result>
+ (match_operand:VDQ 1 "register_operand" "w")
+ (match_operand:VDQ 2 "register_operand" "w")
+ )))]
"TARGET_SIMD"
- "cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
+ "cm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>"
[(set_attr "simd_type" "simd_cmp")
(set_attr "simd_mode" "<MODE>")]
)
-;; fcm(eq|ge|le|lt|gt)
+(define_insn_and_split "aarch64_cm<optab>di"
+ [(set (match_operand:DI 0 "register_operand" "=w,r")
+ (neg:DI
+ (UCOMPARISONS:DI
+ (match_operand:DI 1 "register_operand" "w,r")
+ (match_operand:DI 2 "aarch64_simd_reg_or_zero" "w,r")
+ )))]
+ "TARGET_SIMD"
+ "@
+ cm<n_optab>\t%d0, %d<cmp_1>, %d<cmp_2>
+ #"
+ "reload_completed
+ /* We need to prevent the split from
+ happening in the 'w' constraint cases. */
+ && GP_REGNUM_P (REGNO (operands[0]))
+ && GP_REGNUM_P (REGNO (operands[1]))"
+ [(set (reg:CC CC_REGNUM)
+ (compare:CC
+ (match_dup 1)
+ (match_dup 2)))
+ (set (match_dup 0)
+ (neg:DI
+ (UCOMPARISONS:DI
+ (match_operand 3 "cc_register" "")
+ (const_int 0))))]
+ {
+ enum machine_mode mode = SELECT_CC_MODE (<CMP>, operands[1], operands[2]);
+ rtx cc_reg = aarch64_gen_compare_reg (<CMP>, operands[1], operands[2]);
+ rtx comparison = gen_rtx_<CMP> (mode, operands[1], operands[2]);
+ emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
+ DONE;
+ }
+ [(set_attr "simd_type" "simd_cmp")
+ (set_attr "simd_mode" "DI")]
+)
+
+;; cmtst
+
+(define_insn "aarch64_cmtst<mode>"
+ [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
+ (neg:<V_cmp_result>
+ (ne:<V_cmp_result>
+ (and:VDQ
+ (match_operand:VDQ 1 "register_operand" "w")
+ (match_operand:VDQ 2 "register_operand" "w"))
+ (vec_duplicate:<V_cmp_result> (const_int 0)))))]
+ "TARGET_SIMD"
+ "cmtst\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
+ [(set_attr "simd_type" "simd_cmp")
+ (set_attr "simd_mode" "<MODE>")]
+)
+
+(define_insn_and_split "aarch64_cmtstdi"
+ [(set (match_operand:DI 0 "register_operand" "=w,r")
+ (neg:DI
+ (ne:DI
+ (and:DI
+ (match_operand:DI 1 "register_operand" "w,r")
+ (match_operand:DI 2 "register_operand" "w,r"))
+ (const_int 0))))]
+ "TARGET_SIMD"
+ "@
+ cmtst\t%d0, %d1, %d2
+ #"
+ "reload_completed
+ /* We need to prevent the split from
+ happening in the 'w' constraint cases. */
+ && GP_REGNUM_P (REGNO (operands[0]))
+ && GP_REGNUM_P (REGNO (operands[1]))"
+ [(set (reg:CC_NZ CC_REGNUM)
+ (compare:CC_NZ
+ (and:DI (match_dup 1)
+ (match_dup 2))
+ (const_int 0)))
+ (set (match_dup 0)
+ (neg:DI
+ (ne:DI
+ (match_operand 3 "cc_register" "")
+ (const_int 0))))]
+ {
+ rtx and_tree = gen_rtx_AND (DImode, operands[1], operands[2]);
+ enum machine_mode mode = SELECT_CC_MODE (NE, and_tree, const0_rtx);
+ rtx cc_reg = aarch64_gen_compare_reg (NE, and_tree, const0_rtx);
+ rtx comparison = gen_rtx_NE (mode, and_tree, const0_rtx);
+ emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
+ DONE;
+ }
+ [(set_attr "simd_type" "simd_cmp")
+ (set_attr "simd_mode" "DI")]
+)
+
+;; fcm(eq|ge|gt|le|lt)
-(define_insn "aarch64_cm<cmp><mode>"
+(define_insn "aarch64_cm<optab><mode>"
[(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
- (unspec:<V_cmp_result>
- [(match_operand:VDQF 1 "register_operand" "w,w")
- (match_operand:VDQF 2 "aarch64_simd_reg_or_zero" "w,Dz")]
- VCMP_S))]
+ (neg:<V_cmp_result>
+ (COMPARISONS:<V_cmp_result>
+ (match_operand:VALLF 1 "register_operand" "w,w")
+ (match_operand:VALLF 2 "aarch64_simd_reg_or_zero" "w,YDz")
+ )))]
"TARGET_SIMD"
"@
- fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
- fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
+ fcm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>
+ fcm<optab>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
[(set_attr "simd_type" "simd_fcmp")
(set_attr "simd_mode" "<MODE>")]
)
diff --git a/gcc-4.8/gcc/config/aarch64/aarch64.c b/gcc-4.8/gcc/config/aarch64/aarch64.c
index 4d5166618..0d4b26515 100644
--- a/gcc-4.8/gcc/config/aarch64/aarch64.c
+++ b/gcc-4.8/gcc/config/aarch64/aarch64.c
@@ -4568,9 +4568,11 @@ aarch64_address_cost (rtx x ATTRIBUTE_UNUSED,
}
static int
-aarch64_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED,
- reg_class_t from, reg_class_t to)
+aarch64_register_move_cost (enum machine_mode mode,
+ reg_class_t from_i, reg_class_t to_i)
{
+ enum reg_class from = (enum reg_class) from_i;
+ enum reg_class to = (enum reg_class) to_i;
const struct cpu_regmove_cost *regmove_cost
= aarch64_tune_params->regmove_cost;
@@ -4586,8 +4588,7 @@ aarch64_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED,
secondary reload. A general register is used as a scratch to move
the upper DI value and the lower DI value is moved directly,
hence the cost is the sum of three moves. */
-
- if (! TARGET_SIMD && GET_MODE_SIZE (from) == 128 && GET_MODE_SIZE (to) == 128)
+ if (! TARGET_SIMD && GET_MODE_SIZE (mode) == 128)
return regmove_cost->GP2FP + regmove_cost->FP2GP + regmove_cost->FP2FP;
return regmove_cost->FP2FP;
diff --git a/gcc-4.8/gcc/config/aarch64/aarch64.h b/gcc-4.8/gcc/config/aarch64/aarch64.h
index c3efd2a88..19ac5ebc4 100644
--- a/gcc-4.8/gcc/config/aarch64/aarch64.h
+++ b/gcc-4.8/gcc/config/aarch64/aarch64.h
@@ -73,9 +73,9 @@
#define WORDS_BIG_ENDIAN (BYTES_BIG_ENDIAN)
/* AdvSIMD is supported in the default configuration, unless disabled by
- -mgeneral-regs-only. */
-#define TARGET_SIMD !TARGET_GENERAL_REGS_ONLY
-#define TARGET_FLOAT !TARGET_GENERAL_REGS_ONLY
+ -mgeneral-regs-only or the +nosimd extension. */
+#define TARGET_SIMD (!TARGET_GENERAL_REGS_ONLY && AARCH64_ISA_SIMD)
+#define TARGET_FLOAT (!TARGET_GENERAL_REGS_ONLY && AARCH64_ISA_FP)
#define UNITS_PER_WORD 8
diff --git a/gcc-4.8/gcc/config/aarch64/aarch64.md b/gcc-4.8/gcc/config/aarch64/aarch64.md
index 04a5e01f9..c5cfedb8f 100644
--- a/gcc-4.8/gcc/config/aarch64/aarch64.md
+++ b/gcc-4.8/gcc/config/aarch64/aarch64.md
@@ -2211,7 +2211,7 @@
(set_attr "mode" "SI")]
)
-(define_insn "*cstore<mode>_neg"
+(define_insn "cstore<mode>_neg"
[(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)])))]
diff --git a/gcc-4.8/gcc/config/aarch64/arm_neon.h b/gcc-4.8/gcc/config/aarch64/arm_neon.h
index b083eb4e6..73c7e7d63 100644
--- a/gcc-4.8/gcc/config/aarch64/arm_neon.h
+++ b/gcc-4.8/gcc/config/aarch64/arm_neon.h
@@ -19551,28 +19551,28 @@ vcge_s64 (int64x1_t __a, int64x1_t __b)
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
vcge_u8 (uint8x8_t __a, uint8x8_t __b)
{
- return (uint8x8_t) __builtin_aarch64_cmhsv8qi ((int8x8_t) __a,
+ return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __a,
(int8x8_t) __b);
}
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
vcge_u16 (uint16x4_t __a, uint16x4_t __b)
{
- return (uint16x4_t) __builtin_aarch64_cmhsv4hi ((int16x4_t) __a,
+ return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __a,
(int16x4_t) __b);
}
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
vcge_u32 (uint32x2_t __a, uint32x2_t __b)
{
- return (uint32x2_t) __builtin_aarch64_cmhsv2si ((int32x2_t) __a,
+ return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __a,
(int32x2_t) __b);
}
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
vcge_u64 (uint64x1_t __a, uint64x1_t __b)
{
- return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __a,
+ return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __a,
(int64x1_t) __b);
}
@@ -19603,28 +19603,28 @@ vcgeq_s64 (int64x2_t __a, int64x2_t __b)
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
vcgeq_u8 (uint8x16_t __a, uint8x16_t __b)
{
- return (uint8x16_t) __builtin_aarch64_cmhsv16qi ((int8x16_t) __a,
+ return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __a,
(int8x16_t) __b);
}
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
vcgeq_u16 (uint16x8_t __a, uint16x8_t __b)
{
- return (uint16x8_t) __builtin_aarch64_cmhsv8hi ((int16x8_t) __a,
+ return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __a,
(int16x8_t) __b);
}
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
vcgeq_u32 (uint32x4_t __a, uint32x4_t __b)
{
- return (uint32x4_t) __builtin_aarch64_cmhsv4si ((int32x4_t) __a,
+ return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __a,
(int32x4_t) __b);
}
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
vcgeq_u64 (uint64x2_t __a, uint64x2_t __b)
{
- return (uint64x2_t) __builtin_aarch64_cmhsv2di ((int64x2_t) __a,
+ return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __a,
(int64x2_t) __b);
}
@@ -19637,7 +19637,7 @@ vcged_s64 (int64x1_t __a, int64x1_t __b)
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
vcged_u64 (uint64x1_t __a, uint64x1_t __b)
{
- return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __a,
+ return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __a,
(int64x1_t) __b);
}
@@ -19676,28 +19676,28 @@ vcgt_s64 (int64x1_t __a, int64x1_t __b)
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
vcgt_u8 (uint8x8_t __a, uint8x8_t __b)
{
- return (uint8x8_t) __builtin_aarch64_cmhiv8qi ((int8x8_t) __a,
+ return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __a,
(int8x8_t) __b);
}
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
vcgt_u16 (uint16x4_t __a, uint16x4_t __b)
{
- return (uint16x4_t) __builtin_aarch64_cmhiv4hi ((int16x4_t) __a,
+ return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __a,
(int16x4_t) __b);
}
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
vcgt_u32 (uint32x2_t __a, uint32x2_t __b)
{
- return (uint32x2_t) __builtin_aarch64_cmhiv2si ((int32x2_t) __a,
+ return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __a,
(int32x2_t) __b);
}
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
vcgt_u64 (uint64x1_t __a, uint64x1_t __b)
{
- return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __a,
+ return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __a,
(int64x1_t) __b);
}
@@ -19728,28 +19728,28 @@ vcgtq_s64 (int64x2_t __a, int64x2_t __b)
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
vcgtq_u8 (uint8x16_t __a, uint8x16_t __b)
{
- return (uint8x16_t) __builtin_aarch64_cmhiv16qi ((int8x16_t) __a,
+ return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __a,
(int8x16_t) __b);
}
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
vcgtq_u16 (uint16x8_t __a, uint16x8_t __b)
{
- return (uint16x8_t) __builtin_aarch64_cmhiv8hi ((int16x8_t) __a,
+ return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __a,
(int16x8_t) __b);
}
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
vcgtq_u32 (uint32x4_t __a, uint32x4_t __b)
{
- return (uint32x4_t) __builtin_aarch64_cmhiv4si ((int32x4_t) __a,
+ return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __a,
(int32x4_t) __b);
}
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
vcgtq_u64 (uint64x2_t __a, uint64x2_t __b)
{
- return (uint64x2_t) __builtin_aarch64_cmhiv2di ((int64x2_t) __a,
+ return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __a,
(int64x2_t) __b);
}
@@ -19762,7 +19762,7 @@ vcgtd_s64 (int64x1_t __a, int64x1_t __b)
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
vcgtd_u64 (uint64x1_t __a, uint64x1_t __b)
{
- return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __a,
+ return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __a,
(int64x1_t) __b);
}
@@ -19801,28 +19801,28 @@ vcle_s64 (int64x1_t __a, int64x1_t __b)
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
vcle_u8 (uint8x8_t __a, uint8x8_t __b)
{
- return (uint8x8_t) __builtin_aarch64_cmhsv8qi ((int8x8_t) __b,
+ return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __b,
(int8x8_t) __a);
}
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
vcle_u16 (uint16x4_t __a, uint16x4_t __b)
{
- return (uint16x4_t) __builtin_aarch64_cmhsv4hi ((int16x4_t) __b,
+ return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __b,
(int16x4_t) __a);
}
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
vcle_u32 (uint32x2_t __a, uint32x2_t __b)
{
- return (uint32x2_t) __builtin_aarch64_cmhsv2si ((int32x2_t) __b,
+ return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __b,
(int32x2_t) __a);
}
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
vcle_u64 (uint64x1_t __a, uint64x1_t __b)
{
- return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __b,
+ return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __b,
(int64x1_t) __a);
}
@@ -19853,28 +19853,28 @@ vcleq_s64 (int64x2_t __a, int64x2_t __b)
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
vcleq_u8 (uint8x16_t __a, uint8x16_t __b)
{
- return (uint8x16_t) __builtin_aarch64_cmhsv16qi ((int8x16_t) __b,
+ return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __b,
(int8x16_t) __a);
}
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
vcleq_u16 (uint16x8_t __a, uint16x8_t __b)
{
- return (uint16x8_t) __builtin_aarch64_cmhsv8hi ((int16x8_t) __b,
+ return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __b,
(int16x8_t) __a);
}
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
vcleq_u32 (uint32x4_t __a, uint32x4_t __b)
{
- return (uint32x4_t) __builtin_aarch64_cmhsv4si ((int32x4_t) __b,
+ return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __b,
(int32x4_t) __a);
}
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
vcleq_u64 (uint64x2_t __a, uint64x2_t __b)
{
- return (uint64x2_t) __builtin_aarch64_cmhsv2di ((int64x2_t) __b,
+ return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __b,
(int64x2_t) __a);
}
@@ -19919,28 +19919,28 @@ vclt_s64 (int64x1_t __a, int64x1_t __b)
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
vclt_u8 (uint8x8_t __a, uint8x8_t __b)
{
- return (uint8x8_t) __builtin_aarch64_cmhiv8qi ((int8x8_t) __b,
+ return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __b,
(int8x8_t) __a);
}
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
vclt_u16 (uint16x4_t __a, uint16x4_t __b)
{
- return (uint16x4_t) __builtin_aarch64_cmhiv4hi ((int16x4_t) __b,
+ return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __b,
(int16x4_t) __a);
}
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
vclt_u32 (uint32x2_t __a, uint32x2_t __b)
{
- return (uint32x2_t) __builtin_aarch64_cmhiv2si ((int32x2_t) __b,
+ return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __b,
(int32x2_t) __a);
}
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
vclt_u64 (uint64x1_t __a, uint64x1_t __b)
{
- return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __b,
+ return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __b,
(int64x1_t) __a);
}
@@ -19971,28 +19971,28 @@ vcltq_s64 (int64x2_t __a, int64x2_t __b)
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
vcltq_u8 (uint8x16_t __a, uint8x16_t __b)
{
- return (uint8x16_t) __builtin_aarch64_cmhiv16qi ((int8x16_t) __b,
+ return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __b,
(int8x16_t) __a);
}
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
vcltq_u16 (uint16x8_t __a, uint16x8_t __b)
{
- return (uint16x8_t) __builtin_aarch64_cmhiv8hi ((int16x8_t) __b,
+ return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __b,
(int16x8_t) __a);
}
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
vcltq_u32 (uint32x4_t __a, uint32x4_t __b)
{
- return (uint32x4_t) __builtin_aarch64_cmhiv4si ((int32x4_t) __b,
+ return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __b,
(int32x4_t) __a);
}
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
vcltq_u64 (uint64x2_t __a, uint64x2_t __b)
{
- return (uint64x2_t) __builtin_aarch64_cmhiv2di ((int64x2_t) __b,
+ return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __b,
(int64x2_t) __a);
}
diff --git a/gcc-4.8/gcc/config/aarch64/iterators.md b/gcc-4.8/gcc/config/aarch64/iterators.md
index ce81ac5ce..d19b26a64 100644
--- a/gcc-4.8/gcc/config/aarch64/iterators.md
+++ b/gcc-4.8/gcc/config/aarch64/iterators.md
@@ -83,6 +83,9 @@
;; Vector Float modes.
(define_mode_iterator VDQF [V2SF V4SF V2DF])
+;; All Float modes.
+(define_mode_iterator VALLF [V2SF V4SF V2DF SF DF])
+
;; Vector Float modes with 2 elements.
(define_mode_iterator V2F [V2SF V2DF])
@@ -213,13 +216,6 @@
UNSPEC_URSHL ; Used in aarch64-simd.md.
UNSPEC_SQRSHL ; Used in aarch64-simd.md.
UNSPEC_UQRSHL ; Used in aarch64-simd.md.
- UNSPEC_CMEQ ; Used in aarch64-simd.md.
- UNSPEC_CMLE ; Used in aarch64-simd.md.
- UNSPEC_CMLT ; Used in aarch64-simd.md.
- UNSPEC_CMGE ; Used in aarch64-simd.md.
- UNSPEC_CMGT ; Used in aarch64-simd.md.
- UNSPEC_CMHS ; Used in aarch64-simd.md.
- UNSPEC_CMHI ; Used in aarch64-simd.md.
UNSPEC_SSLI ; Used in aarch64-simd.md.
UNSPEC_USLI ; Used in aarch64-simd.md.
UNSPEC_SSRI ; Used in aarch64-simd.md.
@@ -227,7 +223,6 @@
UNSPEC_SSHLL ; Used in aarch64-simd.md.
UNSPEC_USHLL ; Used in aarch64-simd.md.
UNSPEC_ADDP ; Used in aarch64-simd.md.
- UNSPEC_CMTST ; Used in aarch64-simd.md.
UNSPEC_FMAX ; Used in aarch64-simd.md.
UNSPEC_FMIN ; Used in aarch64-simd.md.
UNSPEC_BSL ; Used in aarch64-simd.md.
@@ -251,6 +246,7 @@
;; For scalar usage of vector/FP registers
(define_mode_attr v [(QI "b") (HI "h") (SI "s") (DI "d")
+ (SF "s") (DF "d")
(V8QI "") (V16QI "")
(V4HI "") (V8HI "")
(V2SI "") (V4SI "")
@@ -305,7 +301,8 @@
(V4SF ".4s") (V2DF ".2d")
(DI "") (SI "")
(HI "") (QI "")
- (TI "")])
+ (TI "") (SF "")
+ (DF "")])
;; Register suffix narrowed modes for VQN.
(define_mode_attr Vmntype [(V8HI ".8b") (V4SI ".4h")
@@ -444,7 +441,8 @@
(V2SI "V2SI") (V4SI "V4SI")
(DI "DI") (V2DI "V2DI")
(V2SF "V2SI") (V4SF "V4SI")
- (V2DF "V2DI")])
+ (V2DF "V2DI") (DF "DI")
+ (SF "SI")])
;; Lower case mode of results of comparison operations.
(define_mode_attr v_cmp_result [(V8QI "v8qi") (V16QI "v16qi")
@@ -452,7 +450,8 @@
(V2SI "v2si") (V4SI "v4si")
(DI "di") (V2DI "v2di")
(V2SF "v2si") (V4SF "v4si")
- (V2DF "v2di")])
+ (V2DF "v2di") (DF "di")
+ (SF "si")])
;; Vm for lane instructions is restricted to FP_LO_REGS.
(define_mode_attr vwx [(V4HI "x") (V8HI "x") (HI "x")
@@ -543,6 +542,12 @@
;; Code iterator for signed variants of vector saturating binary ops.
(define_code_iterator SBINQOPS [ss_plus ss_minus])
+;; Comparison operators for <F>CM.
+(define_code_iterator COMPARISONS [lt le eq ge gt])
+
+;; Unsigned comparison operators.
+(define_code_iterator UCOMPARISONS [ltu leu geu gtu])
+
;; -------------------------------------------------------------------
;; Code Attributes
;; -------------------------------------------------------------------
@@ -571,7 +576,28 @@
(eq "eq")
(ne "ne")
(lt "lt")
- (ge "ge")])
+ (ge "ge")
+ (le "le")
+ (gt "gt")
+ (ltu "ltu")
+ (leu "leu")
+ (geu "geu")
+ (gtu "gtu")])
+
+;; For comparison operators we use the FCM* and CM* instructions.
+;; As there are no CMLE or CMLT instructions which act on 3 vector
+;; operands, we must use CMGE or CMGT and swap the order of the
+;; source operands.
+
+(define_code_attr n_optab [(lt "gt") (le "ge") (eq "eq") (ge "ge") (gt "gt")
+ (ltu "hi") (leu "hs") (geu "hs") (gtu "hi")])
+(define_code_attr cmp_1 [(lt "2") (le "2") (eq "1") (ge "1") (gt "1")
+ (ltu "2") (leu "2") (geu "1") (gtu "1")])
+(define_code_attr cmp_2 [(lt "1") (le "1") (eq "2") (ge "2") (gt "2")
+ (ltu "1") (leu "1") (geu "2") (gtu "2")])
+
+(define_code_attr CMP [(lt "LT") (le "LE") (eq "EQ") (ge "GE") (gt "GT")
+ (ltu "LTU") (leu "LEU") (geu "GEU") (gtu "GTU")])
;; Optab prefix for sign/zero-extending operations
(define_code_attr su_optab [(sign_extend "") (zero_extend "u")
@@ -680,11 +706,6 @@
UNSPEC_SQSHRN UNSPEC_UQSHRN
UNSPEC_SQRSHRN UNSPEC_UQRSHRN])
-(define_int_iterator VCMP_S [UNSPEC_CMEQ UNSPEC_CMGE UNSPEC_CMGT
- UNSPEC_CMLE UNSPEC_CMLT])
-
-(define_int_iterator VCMP_U [UNSPEC_CMHS UNSPEC_CMHI UNSPEC_CMTST])
-
(define_int_iterator PERMUTE [UNSPEC_ZIP1 UNSPEC_ZIP2
UNSPEC_TRN1 UNSPEC_TRN2
UNSPEC_UZP1 UNSPEC_UZP2])
@@ -768,12 +789,6 @@
(UNSPEC_RADDHN2 "add")
(UNSPEC_RSUBHN2 "sub")])
-(define_int_attr cmp [(UNSPEC_CMGE "ge") (UNSPEC_CMGT "gt")
- (UNSPEC_CMLE "le") (UNSPEC_CMLT "lt")
- (UNSPEC_CMEQ "eq")
- (UNSPEC_CMHS "hs") (UNSPEC_CMHI "hi")
- (UNSPEC_CMTST "tst")])
-
(define_int_attr offsetlr [(UNSPEC_SSLI "1") (UNSPEC_USLI "1")
(UNSPEC_SSRI "0") (UNSPEC_USRI "0")])
diff --git a/gcc-4.8/gcc/config/aarch64/predicates.md b/gcc-4.8/gcc/config/aarch64/predicates.md
index 8f80b2028..8514e8f8f 100644
--- a/gcc-4.8/gcc/config/aarch64/predicates.md
+++ b/gcc-4.8/gcc/config/aarch64/predicates.md
@@ -31,6 +31,11 @@
(ior (match_operand 0 "register_operand")
(match_test "op == const0_rtx"))))
+(define_predicate "aarch64_reg_or_fp_zero"
+ (and (match_code "reg,subreg,const_double")
+ (ior (match_operand 0 "register_operand")
+ (match_test "aarch64_float_const_zero_rtx_p (op)"))))
+
(define_predicate "aarch64_reg_zero_or_m1_or_1"
(and (match_code "reg,subreg,const_int")
(ior (match_operand 0 "register_operand")
diff --git a/gcc-4.8/gcc/config/arm/arm-ldmstm.ml b/gcc-4.8/gcc/config/arm/arm-ldmstm.ml
index 2bc9702be..0f637d3fe 100644
--- a/gcc-4.8/gcc/config/arm/arm-ldmstm.ml
+++ b/gcc-4.8/gcc/config/arm/arm-ldmstm.ml
@@ -67,10 +67,13 @@ let destreg nregs first op_type thumb =
Printf.sprintf ("(match_operand:SI %d \"s_register_operand\" \"%s%s\")")
(nregs + 1) (inout_constr op_type) (constr thumb)
+let reg_predicate thumb =
+ if thumb then "low_register_operand" else "arm_hard_general_register_operand"
+
let write_ldm_set thumb nregs offset opnr first =
let indent = " " in
Printf.printf "%s" (if first then " [" else indent);
- Printf.printf "(set (match_operand:SI %d \"arm_hard_register_operand\" \"\")\n" opnr;
+ Printf.printf "(set (match_operand:SI %d \"%s\" \"\")\n" opnr (reg_predicate thumb);
Printf.printf "%s (mem:SI " indent;
begin if offset != 0 then Printf.printf "(plus:SI " end;
Printf.printf "%s" (destreg nregs first IN thumb);
@@ -84,7 +87,7 @@ let write_stm_set thumb nregs offset opnr first =
begin if offset != 0 then Printf.printf "(plus:SI " end;
Printf.printf "%s" (destreg nregs first IN thumb);
begin if offset != 0 then Printf.printf " (const_int %d))" offset end;
- Printf.printf ")\n%s (match_operand:SI %d \"arm_hard_register_operand\" \"\"))" indent opnr
+ Printf.printf ")\n%s (match_operand:SI %d \"%s\" \"\"))" indent opnr (reg_predicate thumb)
let write_ldm_peep_set extra_indent nregs opnr first =
let indent = " " ^ extra_indent in
diff --git a/gcc-4.8/gcc/config/arm/arm.c b/gcc-4.8/gcc/config/arm/arm.c
index e8d83e0f3..14c79ec99 100644
--- a/gcc-4.8/gcc/config/arm/arm.c
+++ b/gcc-4.8/gcc/config/arm/arm.c
@@ -230,7 +230,6 @@ static tree arm_gimplify_va_arg_expr (tree, tree, gimple_seq *, gimple_seq *);
static void arm_option_override (void);
static unsigned HOST_WIDE_INT arm_shift_truncation_mask (enum machine_mode);
static bool arm_cannot_copy_insn_p (rtx);
-static bool arm_tls_symbol_p (rtx x);
static int arm_issue_rate (void);
static void arm_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
static bool arm_output_addr_const_extra (FILE *, rtx);
@@ -5446,7 +5445,8 @@ require_pic_register (void)
if (!crtl->uses_pic_offset_table)
{
gcc_assert (can_create_pseudo_p ());
- if (arm_pic_register != INVALID_REGNUM)
+ if (arm_pic_register != INVALID_REGNUM
+ && !(TARGET_THUMB1 && arm_pic_register > LAST_LO_REGNUM))
{
if (!cfun->machine->pic_reg)
cfun->machine->pic_reg = gen_rtx_REG (Pmode, arm_pic_register);
@@ -5472,6 +5472,11 @@ require_pic_register (void)
crtl->uses_pic_offset_table = 1;
start_sequence ();
+ if (TARGET_THUMB1 && arm_pic_register != INVALID_REGNUM
+ && arm_pic_register > LAST_LO_REGNUM)
+ emit_move_insn (cfun->machine->pic_reg,
+ gen_rtx_REG (Pmode, arm_pic_register));
+ else
arm_load_pic_register (0UL);
seq = get_insns ();
@@ -5730,6 +5735,14 @@ arm_load_pic_register (unsigned long saved_regs ATTRIBUTE_UNUSED)
emit_insn (gen_movsi (pic_offset_table_rtx, pic_tmp));
emit_insn (gen_pic_add_dot_plus_four (pic_reg, pic_reg, labelno));
}
+ else if (arm_pic_register != INVALID_REGNUM
+ && arm_pic_register > LAST_LO_REGNUM
+ && REGNO (pic_reg) <= LAST_LO_REGNUM)
+ {
+ emit_insn (gen_pic_load_addr_unified (pic_reg, pic_rtx, labelno));
+ emit_move_insn (gen_rtx_REG (Pmode, arm_pic_register), pic_reg);
+ emit_use (gen_rtx_REG (Pmode, arm_pic_register));
+ }
else
emit_insn (gen_pic_load_addr_unified (pic_reg, pic_rtx, labelno));
}
@@ -6595,6 +6608,32 @@ legitimize_tls_address (rtx x, rtx reg)
rtx
arm_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode)
{
+ if (arm_tls_referenced_p (x))
+ {
+ rtx addend = NULL;
+
+ if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == PLUS)
+ {
+ addend = XEXP (XEXP (x, 0), 1);
+ x = XEXP (XEXP (x, 0), 0);
+ }
+
+ if (GET_CODE (x) != SYMBOL_REF)
+ return x;
+
+ gcc_assert (SYMBOL_REF_TLS_MODEL (x) != 0);
+
+ x = legitimize_tls_address (x, NULL_RTX);
+
+ if (addend)
+ {
+ x = gen_rtx_PLUS (SImode, x, addend);
+ orig_x = x;
+ }
+ else
+ return x;
+ }
+
if (!TARGET_ARM)
{
/* TODO: legitimize_address for Thumb2. */
@@ -6603,9 +6642,6 @@ arm_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode)
return thumb_legitimize_address (x, orig_x, mode);
}
- if (arm_tls_symbol_p (x))
- return legitimize_tls_address (x, NULL_RTX);
-
if (GET_CODE (x) == PLUS)
{
rtx xop0 = XEXP (x, 0);
@@ -6717,9 +6753,6 @@ arm_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode)
rtx
thumb_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode)
{
- if (arm_tls_symbol_p (x))
- return legitimize_tls_address (x, NULL_RTX);
-
if (GET_CODE (x) == PLUS
&& CONST_INT_P (XEXP (x, 1))
&& (INTVAL (XEXP (x, 1)) >= 32 * GET_MODE_SIZE (mode)
@@ -7010,20 +7043,6 @@ thumb_legitimize_reload_address (rtx *x_p,
/* Test for various thread-local symbols. */
-/* Return TRUE if X is a thread-local symbol. */
-
-static bool
-arm_tls_symbol_p (rtx x)
-{
- if (! TARGET_HAVE_TLS)
- return false;
-
- if (GET_CODE (x) != SYMBOL_REF)
- return false;
-
- return SYMBOL_REF_TLS_MODEL (x) != 0;
-}
-
/* Helper for arm_tls_referenced_p. */
static int
@@ -21305,7 +21324,11 @@ arm_expand_neon_args (rtx target, int icode, int have_retval,
type_mode);
}
- op[argc] = expand_normal (arg[argc]);
+ /* Use EXPAND_MEMORY for NEON_ARG_MEMORY to ensure a MEM_P
+ be returned. */
+ op[argc] = expand_expr (arg[argc], NULL_RTX, VOIDmode,
+ (thisarg == NEON_ARG_MEMORY
+ ? EXPAND_MEMORY : EXPAND_NORMAL));
switch (thisarg)
{
@@ -21324,6 +21347,9 @@ arm_expand_neon_args (rtx target, int icode, int have_retval,
break;
case NEON_ARG_MEMORY:
+ /* Check if expand failed. */
+ if (op[argc] == const0_rtx)
+ return 0;
gcc_assert (MEM_P (op[argc]));
PUT_MODE (op[argc], mode[argc]);
/* ??? arm_neon.h uses the same built-in functions for signed
@@ -23611,7 +23637,7 @@ arm_expand_epilogue_apcs_frame (bool really_return)
if (crtl->calls_eh_return)
emit_insn (gen_addsi3 (stack_pointer_rtx,
stack_pointer_rtx,
- GEN_INT (ARM_EH_STACKADJ_REGNUM)));
+ gen_rtx_REG (SImode, ARM_EH_STACKADJ_REGNUM)));
if (IS_STACKALIGN (func_type))
/* Restore the original stack pointer. Before prologue, the stack was
diff --git a/gcc-4.8/gcc/config/arm/arm.h b/gcc-4.8/gcc/config/arm/arm.h
index 478a3d7c8..b7cf352ba 100644
--- a/gcc-4.8/gcc/config/arm/arm.h
+++ b/gcc-4.8/gcc/config/arm/arm.h
@@ -1213,9 +1213,13 @@ enum reg_class
VFPv2.
In big-endian mode, modes greater than word size (i.e. DFmode) are stored in
VFP registers in little-endian order. We can't describe that accurately to
- GCC, so avoid taking subregs of such values. */
+ GCC, so avoid taking subregs of such values.
+ The only exception is going from a 128-bit to a 64-bit type. In that case
+ the data layout happens to be consistent for big-endian, so we explicitly allow
+ that case. */
#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
(TARGET_VFP && TARGET_BIG_END \
+ && !(GET_MODE_SIZE (FROM) == 16 && GET_MODE_SIZE (TO) == 8) \
&& (GET_MODE_SIZE (FROM) > UNITS_PER_WORD \
|| GET_MODE_SIZE (TO) > UNITS_PER_WORD) \
&& reg_classes_intersect_p (VFP_REGS, (CLASS)))
@@ -2140,14 +2144,9 @@ extern int making_const_table;
#undef ASM_OUTPUT_BEFORE_CASE_LABEL
#define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE, PREFIX, NUM, TABLE) /* Empty. */
-/* Make sure subsequent insns are aligned after a TBB. */
-#define ASM_OUTPUT_CASE_END(FILE, NUM, JUMPTABLE) \
- do \
- { \
- if (GET_MODE (PATTERN (JUMPTABLE)) == QImode) \
- ASM_OUTPUT_ALIGN (FILE, 1); \
- } \
- while (0)
+#define LABEL_ALIGN_AFTER_BARRIER(LABEL) \
+ (GET_CODE (PATTERN (prev_active_insn (LABEL))) == ADDR_DIFF_VEC \
+ ? 1 : 0)
#define ARM_DECLARE_FUNCTION_NAME(STREAM, NAME, DECL) \
do \
diff --git a/gcc-4.8/gcc/config/arm/arm.md b/gcc-4.8/gcc/config/arm/arm.md
index aea02fbf4..cdb761a43 100644
--- a/gcc-4.8/gcc/config/arm/arm.md
+++ b/gcc-4.8/gcc/config/arm/arm.md
@@ -11036,7 +11036,7 @@
[(set (match_operand:SI 1 "s_register_operand" "+rk")
(plus:SI (match_dup 1)
(match_operand:SI 2 "const_int_operand" "I")))
- (set (match_operand:DF 3 "arm_hard_register_operand" "")
+ (set (match_operand:DF 3 "vfp_hard_register_operand" "")
(mem:DF (match_dup 1)))])]
"TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
"*
@@ -11270,7 +11270,9 @@
(match_operand:SI 1 "" "")
(match_operand:SI 2 "" ""))]
"TARGET_32BIT && arm_arch5e"
- "pld\\t%a0")
+ "pld\\t%a0"
+ [(set_attr "type" "load1")]
+)
;; General predication pattern
diff --git a/gcc-4.8/gcc/config/arm/iterators.md b/gcc-4.8/gcc/config/arm/iterators.md
index b3ad42b37..df82c061f 100644
--- a/gcc-4.8/gcc/config/arm/iterators.md
+++ b/gcc-4.8/gcc/config/arm/iterators.md
@@ -493,6 +493,10 @@
(UNSPEC_VRINTA "no") (UNSPEC_VRINTM "no")
(UNSPEC_VRINTR "yes") (UNSPEC_VRINTX "yes")])
+(define_int_attr vrint_conds [(UNSPEC_VRINTZ "nocond") (UNSPEC_VRINTP "unconditional")
+ (UNSPEC_VRINTA "unconditional") (UNSPEC_VRINTM "unconditional")
+ (UNSPEC_VRINTR "nocond") (UNSPEC_VRINTX "nocond")])
+
(define_int_attr nvrint_variant [(UNSPEC_NVRINTZ "z") (UNSPEC_NVRINTP "p")
(UNSPEC_NVRINTA "a") (UNSPEC_NVRINTM "m")
(UNSPEC_NVRINTX "x") (UNSPEC_NVRINTN "n")])
diff --git a/gcc-4.8/gcc/config/arm/ldmstm.md b/gcc-4.8/gcc/config/arm/ldmstm.md
index 8ebdfc817..ed206b00c 100644
--- a/gcc-4.8/gcc/config/arm/ldmstm.md
+++ b/gcc-4.8/gcc/config/arm/ldmstm.md
@@ -23,15 +23,15 @@
(define_insn "*ldm4_ia"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (match_operand:SI 5 "s_register_operand" "rk")))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 4))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 8))))
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 12))))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
@@ -41,15 +41,15 @@
(define_insn "*thumb_ldm4_ia"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "low_register_operand" "")
(mem:SI (match_operand:SI 5 "s_register_operand" "l")))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "low_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 4))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "low_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 8))))
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
+ (set (match_operand:SI 4 "low_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 12))))])]
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
@@ -60,15 +60,15 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
(plus:SI (match_dup 5) (const_int 16)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (match_dup 5)))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 4))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 8))))
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 12))))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
@@ -80,15 +80,15 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 5 "s_register_operand" "+&l")
(plus:SI (match_dup 5) (const_int 16)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "low_register_operand" "")
(mem:SI (match_dup 5)))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "low_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 4))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "low_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 8))))
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
+ (set (match_operand:SI 4 "low_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 12))))])]
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
@@ -98,13 +98,13 @@
(define_insn "*stm4_ia"
[(match_parallel 0 "store_multiple_operation"
[(set (mem:SI (match_operand:SI 5 "s_register_operand" "rk"))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
"stm%(ia%)\t%5, {%1, %2, %3, %4}"
[(set_attr "type" "store4")
@@ -115,13 +115,13 @@
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
(plus:SI (match_dup 5) (const_int 16)))
(set (mem:SI (match_dup 5))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
"stm%(ia%)\t%5!, {%1, %2, %3, %4}"
[(set_attr "type" "store4")
@@ -132,29 +132,29 @@
[(set (match_operand:SI 5 "s_register_operand" "+&l")
(plus:SI (match_dup 5) (const_int 16)))
(set (mem:SI (match_dup 5))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "low_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "low_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))
+ (match_operand:SI 3 "low_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 4 "low_register_operand" ""))])]
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
"stm%(ia%)\t%5!, {%1, %2, %3, %4}"
[(set_attr "type" "store4")])
(define_insn "*ldm4_ib"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
(const_int 4))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 8))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 12))))
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 16))))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
@@ -166,16 +166,16 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
(plus:SI (match_dup 5) (const_int 16)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 4))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 8))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 12))))
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int 16))))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 5"
@@ -186,13 +186,13 @@
(define_insn "*stm4_ib"
[(match_parallel 0 "store_multiple_operation"
[(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int 4)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
"stm%(ib%)\t%5, {%1, %2, %3, %4}"
[(set_attr "type" "store4")
@@ -203,13 +203,13 @@
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
(plus:SI (match_dup 5) (const_int 16)))
(set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 5"
"stm%(ib%)\t%5!, {%1, %2, %3, %4}"
[(set_attr "type" "store4")
@@ -217,16 +217,16 @@
(define_insn "*ldm4_da"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
(const_int -12))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int -8))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int -4))))
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
(mem:SI (match_dup 5)))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
"ldm%(da%)\t%5, {%1, %2, %3, %4}"
@@ -237,16 +237,16 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
(plus:SI (match_dup 5) (const_int -16)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int -12))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int -8))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int -4))))
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
(mem:SI (match_dup 5)))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 5"
"ldm%(da%)\t%5!, {%1, %2, %3, %4}"
@@ -256,13 +256,13 @@
(define_insn "*stm4_da"
[(match_parallel 0 "store_multiple_operation"
[(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -12)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
(set (mem:SI (match_dup 5))
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
"stm%(da%)\t%5, {%1, %2, %3, %4}"
[(set_attr "type" "store4")
@@ -273,13 +273,13 @@
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
(plus:SI (match_dup 5) (const_int -16)))
(set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
(set (mem:SI (match_dup 5))
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 5"
"stm%(da%)\t%5!, {%1, %2, %3, %4}"
[(set_attr "type" "store4")
@@ -287,16 +287,16 @@
(define_insn "*ldm4_db"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
(const_int -16))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int -12))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int -8))))
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int -4))))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
@@ -308,16 +308,16 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
(plus:SI (match_dup 5) (const_int -16)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int -16))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int -12))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int -8))))
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 5)
(const_int -4))))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
@@ -328,13 +328,13 @@
(define_insn "*stm4_db"
[(match_parallel 0 "store_multiple_operation"
[(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -16)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
"stm%(db%)\t%5, {%1, %2, %3, %4}"
[(set_attr "type" "store4")
@@ -345,13 +345,13 @@
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
(plus:SI (match_dup 5) (const_int -16)))
(set (mem:SI (plus:SI (match_dup 5) (const_int -16)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
"stm%(db%)\t%5!, {%1, %2, %3, %4}"
[(set_attr "type" "store4")
@@ -466,12 +466,12 @@
(define_insn "*ldm3_ia"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (match_operand:SI 4 "s_register_operand" "rk")))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int 4))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int 8))))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
@@ -481,12 +481,12 @@
(define_insn "*thumb_ldm3_ia"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "low_register_operand" "")
(mem:SI (match_operand:SI 4 "s_register_operand" "l")))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "low_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int 4))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "low_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int 8))))])]
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
@@ -497,12 +497,12 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
(plus:SI (match_dup 4) (const_int 12)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (match_dup 4)))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int 4))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int 8))))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
@@ -514,12 +514,12 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 4 "s_register_operand" "+&l")
(plus:SI (match_dup 4) (const_int 12)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "low_register_operand" "")
(mem:SI (match_dup 4)))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "low_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int 4))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "low_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int 8))))])]
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
@@ -529,11 +529,11 @@
(define_insn "*stm3_ia"
[(match_parallel 0 "store_multiple_operation"
[(set (mem:SI (match_operand:SI 4 "s_register_operand" "rk"))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
"stm%(ia%)\t%4, {%1, %2, %3}"
[(set_attr "type" "store3")
@@ -544,11 +544,11 @@
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
(plus:SI (match_dup 4) (const_int 12)))
(set (mem:SI (match_dup 4))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
"stm%(ia%)\t%4!, {%1, %2, %3}"
[(set_attr "type" "store3")
@@ -559,24 +559,24 @@
[(set (match_operand:SI 4 "s_register_operand" "+&l")
(plus:SI (match_dup 4) (const_int 12)))
(set (mem:SI (match_dup 4))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "low_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "low_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 3 "low_register_operand" ""))])]
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
"stm%(ia%)\t%4!, {%1, %2, %3}"
[(set_attr "type" "store3")])
(define_insn "*ldm3_ib"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
(const_int 4))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int 8))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int 12))))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
@@ -588,13 +588,13 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
(plus:SI (match_dup 4) (const_int 12)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int 4))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int 8))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int 12))))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
@@ -605,11 +605,11 @@
(define_insn "*stm3_ib"
[(match_parallel 0 "store_multiple_operation"
[(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int 4)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
"stm%(ib%)\t%4, {%1, %2, %3}"
[(set_attr "type" "store3")
@@ -620,11 +620,11 @@
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
(plus:SI (match_dup 4) (const_int 12)))
(set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
"stm%(ib%)\t%4!, {%1, %2, %3}"
[(set_attr "type" "store3")
@@ -632,13 +632,13 @@
(define_insn "*ldm3_da"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
(const_int -8))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int -4))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (match_dup 4)))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
"ldm%(da%)\t%4, {%1, %2, %3}"
@@ -649,13 +649,13 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
(plus:SI (match_dup 4) (const_int -12)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int -8))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int -4))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (match_dup 4)))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
"ldm%(da%)\t%4!, {%1, %2, %3}"
@@ -665,11 +665,11 @@
(define_insn "*stm3_da"
[(match_parallel 0 "store_multiple_operation"
[(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -8)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (match_dup 4))
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
"stm%(da%)\t%4, {%1, %2, %3}"
[(set_attr "type" "store3")
@@ -680,11 +680,11 @@
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
(plus:SI (match_dup 4) (const_int -12)))
(set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (match_dup 4))
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
"stm%(da%)\t%4!, {%1, %2, %3}"
[(set_attr "type" "store3")
@@ -692,13 +692,13 @@
(define_insn "*ldm3_db"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
(const_int -12))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int -8))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int -4))))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
@@ -710,13 +710,13 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
(plus:SI (match_dup 4) (const_int -12)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int -12))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int -8))))
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 4)
(const_int -4))))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
@@ -727,11 +727,11 @@
(define_insn "*stm3_db"
[(match_parallel 0 "store_multiple_operation"
[(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -12)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
"stm%(db%)\t%4, {%1, %2, %3}"
[(set_attr "type" "store3")
@@ -742,11 +742,11 @@
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
(plus:SI (match_dup 4) (const_int -12)))
(set (mem:SI (plus:SI (match_dup 4) (const_int -12)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
"stm%(db%)\t%4!, {%1, %2, %3}"
[(set_attr "type" "store3")
@@ -847,9 +847,9 @@
(define_insn "*ldm2_ia"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (match_operand:SI 3 "s_register_operand" "rk")))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 3)
(const_int 4))))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
@@ -859,9 +859,9 @@
(define_insn "*thumb_ldm2_ia"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "low_register_operand" "")
(mem:SI (match_operand:SI 3 "s_register_operand" "l")))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "low_register_operand" "")
(mem:SI (plus:SI (match_dup 3)
(const_int 4))))])]
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 2"
@@ -872,9 +872,9 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
(plus:SI (match_dup 3) (const_int 8)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (match_dup 3)))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 3)
(const_int 4))))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
@@ -886,9 +886,9 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 3 "s_register_operand" "+&l")
(plus:SI (match_dup 3) (const_int 8)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "low_register_operand" "")
(mem:SI (match_dup 3)))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "low_register_operand" "")
(mem:SI (plus:SI (match_dup 3)
(const_int 4))))])]
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
@@ -898,9 +898,9 @@
(define_insn "*stm2_ia"
[(match_parallel 0 "store_multiple_operation"
[(set (mem:SI (match_operand:SI 3 "s_register_operand" "rk"))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
"stm%(ia%)\t%3, {%1, %2}"
[(set_attr "type" "store2")
@@ -911,9 +911,9 @@
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
(plus:SI (match_dup 3) (const_int 8)))
(set (mem:SI (match_dup 3))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
"stm%(ia%)\t%3!, {%1, %2}"
[(set_attr "type" "store2")
@@ -924,19 +924,19 @@
[(set (match_operand:SI 3 "s_register_operand" "+&l")
(plus:SI (match_dup 3) (const_int 8)))
(set (mem:SI (match_dup 3))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "low_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 2 "low_register_operand" ""))])]
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
"stm%(ia%)\t%3!, {%1, %2}"
[(set_attr "type" "store2")])
(define_insn "*ldm2_ib"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
(const_int 4))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 3)
(const_int 8))))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 2"
@@ -948,10 +948,10 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
(plus:SI (match_dup 3) (const_int 8)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 3)
(const_int 4))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 3)
(const_int 8))))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
@@ -962,9 +962,9 @@
(define_insn "*stm2_ib"
[(match_parallel 0 "store_multiple_operation"
[(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int 4)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 2"
"stm%(ib%)\t%3, {%1, %2}"
[(set_attr "type" "store2")
@@ -975,9 +975,9 @@
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
(plus:SI (match_dup 3) (const_int 8)))
(set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
"stm%(ib%)\t%3!, {%1, %2}"
[(set_attr "type" "store2")
@@ -985,10 +985,10 @@
(define_insn "*ldm2_da"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
(const_int -4))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (match_dup 3)))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 2"
"ldm%(da%)\t%3, {%1, %2}"
@@ -999,10 +999,10 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
(plus:SI (match_dup 3) (const_int -8)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 3)
(const_int -4))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (match_dup 3)))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
"ldm%(da%)\t%3!, {%1, %2}"
@@ -1012,9 +1012,9 @@
(define_insn "*stm2_da"
[(match_parallel 0 "store_multiple_operation"
[(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -4)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (match_dup 3))
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 2"
"stm%(da%)\t%3, {%1, %2}"
[(set_attr "type" "store2")
@@ -1025,9 +1025,9 @@
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
(plus:SI (match_dup 3) (const_int -8)))
(set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (match_dup 3))
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
"stm%(da%)\t%3!, {%1, %2}"
[(set_attr "type" "store2")
@@ -1035,10 +1035,10 @@
(define_insn "*ldm2_db"
[(match_parallel 0 "load_multiple_operation"
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
(const_int -8))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 3)
(const_int -4))))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
@@ -1050,10 +1050,10 @@
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
(plus:SI (match_dup 3) (const_int -8)))
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 3)
(const_int -8))))
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
(mem:SI (plus:SI (match_dup 3)
(const_int -4))))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
@@ -1064,9 +1064,9 @@
(define_insn "*stm2_db"
[(match_parallel 0 "store_multiple_operation"
[(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -8)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
"stm%(db%)\t%3, {%1, %2}"
[(set_attr "type" "store2")
@@ -1077,9 +1077,9 @@
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
(plus:SI (match_dup 3) (const_int -8)))
(set (mem:SI (plus:SI (match_dup 3) (const_int -8)))
- (match_operand:SI 1 "arm_hard_register_operand" ""))
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
(set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
"stm%(db%)\t%3!, {%1, %2}"
[(set_attr "type" "store2")
diff --git a/gcc-4.8/gcc/config/arm/predicates.md b/gcc-4.8/gcc/config/arm/predicates.md
index f493d8284..238f9fd7e 100644
--- a/gcc-4.8/gcc/config/arm/predicates.md
+++ b/gcc-4.8/gcc/config/arm/predicates.md
@@ -31,11 +31,11 @@
|| REGNO_REG_CLASS (REGNO (op)) != NO_REGS));
})
-;; Any hard register.
-(define_predicate "arm_hard_register_operand"
+;; Any general register.
+(define_predicate "arm_hard_general_register_operand"
(match_code "reg")
{
- return REGNO (op) < FIRST_PSEUDO_REGISTER;
+ return REGNO (op) <= LAST_ARM_REGNUM;
})
;; A low register.
@@ -76,6 +76,12 @@
&& REGNO_REG_CLASS (REGNO (op)) == VFP_REGS)));
})
+(define_predicate "vfp_hard_register_operand"
+ (match_code "reg")
+{
+ return (IS_VFP_REGNUM (REGNO (op)));
+})
+
(define_predicate "zero_operand"
(and (match_code "const_int,const_double,const_vector")
(match_test "op == CONST0_RTX (mode)")))
diff --git a/gcc-4.8/gcc/config/arm/vfp.md b/gcc-4.8/gcc/config/arm/vfp.md
index 10e271ae5..13e151f5a 100644
--- a/gcc-4.8/gcc/config/arm/vfp.md
+++ b/gcc-4.8/gcc/config/arm/vfp.md
@@ -1264,6 +1264,7 @@
"TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
"vrint<vrint_variant>%?.<V_if_elem>\\t%<V_reg>0, %<V_reg>1"
[(set_attr "predicable" "<vrint_predicable>")
+ (set_attr "conds" "<vrint_conds>")
(set_attr "type" "f_rint<vfp_type>")]
)
@@ -1280,7 +1281,8 @@
(match_operand:SDF 2 "register_operand" "<F_constraint>")))]
"TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
"vmaxnm.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
- [(set_attr "type" "f_minmax<vfp_type>")]
+ [(set_attr "type" "f_minmax<vfp_type>")
+ (set_attr "conds" "unconditional")]
)
(define_insn "smin<mode>3"
@@ -1289,7 +1291,8 @@
(match_operand:SDF 2 "register_operand" "<F_constraint>")))]
"TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
"vminnm.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
- [(set_attr "type" "f_minmax<vfp_type>")]
+ [(set_attr "type" "f_minmax<vfp_type>")
+ (set_attr "conds" "unconditional")]
)
;; Unimplemented insns:
diff --git a/gcc-4.8/gcc/config/avr/avr.c b/gcc-4.8/gcc/config/avr/avr.c
index 74872aa6c..86c46e9c4 100644
--- a/gcc-4.8/gcc/config/avr/avr.c
+++ b/gcc-4.8/gcc/config/avr/avr.c
@@ -587,10 +587,14 @@ avr_set_current_function (tree decl)
const char *name;
name = DECL_ASSEMBLER_NAME_SET_P (decl)
- /* Remove the leading '*' added in set_user_assembler_name. */
- ? 1 + IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))
+ ? IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))
: IDENTIFIER_POINTER (DECL_NAME (decl));
+ /* Skip a leading '*' that might still prefix the assembler name,
+ e.g. in non-LTO runs. */
+
+ name = default_strip_name_encoding (name);
+
/* Silently ignore 'signal' if 'interrupt' is present. AVR-LibC startet
using this when it switched from SIGNAL and INTERRUPT to ISR. */
@@ -2339,6 +2343,12 @@ avr_notice_update_cc (rtx body ATTRIBUTE_UNUSED, rtx insn)
}
break;
+ case CC_SET_VZN:
+ /* Insn like INC, DEC, NEG that set Z,N,V. We currently don't make use
+ of this combination, cf. also PR61055. */
+ CC_STATUS_INIT;
+ break;
+
case CC_SET_CZN:
/* Insn sets the Z,N,C flags of CC to recog_operand[0].
The V flag may or may not be known but that's ok because
@@ -3977,7 +3987,7 @@ avr_out_store_psi (rtx insn, rtx *op, int *plen)
"std Y+61,%A1" CR_TAB
"std Y+62,%B1" CR_TAB
"std Y+63,%C1" CR_TAB
- "sbiw r28,%o0-60", op, plen, -5);
+ "sbiw r28,%o0-61", op, plen, -5);
return avr_asm_len ("subi r28,lo8(-%o0)" CR_TAB
"sbci r29,hi8(-%o0)" CR_TAB
@@ -6274,7 +6284,7 @@ avr_out_plus_1 (rtx *xop, int *plen, enum rtx_code code, int *pcc,
if (REG_P (xop[2]))
{
- *pcc = MINUS == code ? (int) CC_SET_CZN : (int) CC_SET_N;
+ *pcc = MINUS == code ? (int) CC_SET_CZN : (int) CC_CLOBBER;
for (i = 0; i < n_bytes; i++)
{
@@ -6383,7 +6393,7 @@ avr_out_plus_1 (rtx *xop, int *plen, enum rtx_code code, int *pcc,
op, plen, 1);
if (n_bytes == 2 && PLUS == code)
- *pcc = CC_SET_ZN;
+ *pcc = CC_SET_CZN;
}
i++;
@@ -6406,6 +6416,7 @@ avr_out_plus_1 (rtx *xop, int *plen, enum rtx_code code, int *pcc,
{
avr_asm_len ((code == PLUS) ^ (val8 == 1) ? "dec %0" : "inc %0",
op, plen, 1);
+ *pcc = CC_CLOBBER;
break;
}
@@ -6806,8 +6817,8 @@ avr_out_plus (rtx insn, rtx *xop, int *plen, int *pcc, bool out_label)
/* Work out the shortest sequence. */
- avr_out_plus_1 (op, &len_minus, MINUS, &cc_plus, code_sat, sign, out_label);
- avr_out_plus_1 (op, &len_plus, PLUS, &cc_minus, code_sat, sign, out_label);
+ avr_out_plus_1 (op, &len_minus, MINUS, &cc_minus, code_sat, sign, out_label);
+ avr_out_plus_1 (op, &len_plus, PLUS, &cc_plus, code_sat, sign, out_label);
if (plen)
{
diff --git a/gcc-4.8/gcc/config/avr/avr.md b/gcc-4.8/gcc/config/avr/avr.md
index f2681233a..ae2e7651d 100644
--- a/gcc-4.8/gcc/config/avr/avr.md
+++ b/gcc-4.8/gcc/config/avr/avr.md
@@ -89,7 +89,7 @@
(include "constraints.md")
;; Condition code settings.
-(define_attr "cc" "none,set_czn,set_zn,set_n,compare,clobber,
+(define_attr "cc" "none,set_czn,set_zn,set_vzn,set_n,compare,clobber,
plus,ldi"
(const_string "none"))
@@ -1097,7 +1097,7 @@
inc %0\;inc %0
dec %0\;dec %0"
[(set_attr "length" "1,1,1,1,2,2")
- (set_attr "cc" "set_czn,set_czn,set_zn,set_zn,set_zn,set_zn")])
+ (set_attr "cc" "set_czn,set_czn,set_vzn,set_vzn,set_vzn,set_vzn")])
;; "addhi3"
;; "addhq3" "adduhq3"
@@ -1368,7 +1368,7 @@
dec %0\;dec %0
inc %0\;inc %0"
[(set_attr "length" "1,1,1,1,2,2")
- (set_attr "cc" "set_czn,set_czn,set_zn,set_zn,set_zn,set_zn")])
+ (set_attr "cc" "set_czn,set_czn,set_vzn,set_vzn,set_vzn,set_vzn")])
;; "subhi3"
;; "subhq3" "subuhq3"
@@ -3991,7 +3991,7 @@
""
"neg %0"
[(set_attr "length" "1")
- (set_attr "cc" "set_zn")])
+ (set_attr "cc" "set_vzn")])
(define_insn "*negqihi2"
[(set (match_operand:HI 0 "register_operand" "=r")
diff --git a/gcc-4.8/gcc/config/cris/cris.md b/gcc-4.8/gcc/config/cris/cris.md
index 8a7f0bfdd..b3e9f0494 100644
--- a/gcc-4.8/gcc/config/cris/cris.md
+++ b/gcc-4.8/gcc/config/cris/cris.md
@@ -758,7 +758,7 @@
(match_operand:SI 1 "const_int_operand" ""))
(match_operand:SI 2 "register_operand" ""))])
(match_operand 3 "register_operand" ""))
- (set (match_operand:SI 4 "register_operand" "")
+ (set (match_operand:SI 4 "cris_nonsp_register_operand" "")
(plus:SI (mult:SI (match_dup 0)
(match_dup 1))
(match_dup 2)))])]
@@ -859,7 +859,7 @@
(match_operand:SI 0 "cris_bdap_operand" "")
(match_operand:SI 1 "cris_bdap_operand" ""))])
(match_operand 2 "register_operand" ""))
- (set (match_operand:SI 3 "register_operand" "")
+ (set (match_operand:SI 3 "cris_nonsp_register_operand" "")
(plus:SI (match_dup 0) (match_dup 1)))])]
"reload_completed && reg_overlap_mentioned_p (operands[3], operands[2])"
[(set (match_dup 4) (match_dup 2))
@@ -3960,7 +3960,7 @@
;; up.
(define_split
- [(set (match_operand 0 "register_operand" "")
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
(match_operator
4 "cris_operand_extend_operator"
[(match_operand 1 "register_operand" "")
@@ -3990,7 +3990,7 @@
;; Call this op-extend-split-rx=rz
(define_split
- [(set (match_operand 0 "register_operand" "")
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
(match_operator
4 "cris_plus_or_bound_operator"
[(match_operand 1 "register_operand" "")
@@ -4018,7 +4018,7 @@
;; Call this op-extend-split-swapped
(define_split
- [(set (match_operand 0 "register_operand" "")
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
(match_operator
4 "cris_plus_or_bound_operator"
[(match_operator
@@ -4044,7 +4044,7 @@
;; bound. Call this op-extend-split-swapped-rx=rz.
(define_split
- [(set (match_operand 0 "register_operand" "")
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
(match_operator
4 "cris_plus_or_bound_operator"
[(match_operator
@@ -4075,7 +4075,7 @@
;; Call this op-extend.
(define_split
- [(set (match_operand 0 "register_operand" "")
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
(match_operator
3 "cris_orthogonal_operator"
[(match_operand 1 "register_operand" "")
@@ -4099,7 +4099,7 @@
;; Call this op-split-rx=rz
(define_split
- [(set (match_operand 0 "register_operand" "")
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
(match_operator
3 "cris_commutative_orth_op"
[(match_operand 2 "memory_operand" "")
@@ -4123,7 +4123,7 @@
;; Call this op-split-swapped.
(define_split
- [(set (match_operand 0 "register_operand" "")
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
(match_operator
3 "cris_commutative_orth_op"
[(match_operand 1 "register_operand" "")
@@ -4146,7 +4146,7 @@
;; Call this op-split-swapped-rx=rz.
(define_split
- [(set (match_operand 0 "register_operand" "")
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
(match_operator
3 "cris_orthogonal_operator"
[(match_operand 2 "memory_operand" "")
@@ -4555,10 +4555,11 @@
;; We're not allowed to generate copies of registers with different mode
;; until after reload; copying pseudos upsets reload. CVS as of
;; 2001-08-24, unwind-dw2-fde.c, _Unwind_Find_FDE ICE in
-;; cselib_invalidate_regno.
+;; cselib_invalidate_regno. Also, don't do this for the stack-pointer,
+;; as we don't want it set temporarily to an invalid value.
(define_split ; indir_to_reg_split
- [(set (match_operand 0 "register_operand" "")
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
(match_operand 1 "indirect_operand" ""))]
"reload_completed
&& REG_P (operands[0])
@@ -4574,7 +4575,7 @@
;; As the above, but MOVS and MOVU.
(define_split
- [(set (match_operand 0 "register_operand" "")
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
(match_operator
4 "cris_extend_operator"
[(match_operand 1 "indirect_operand" "")]))]
diff --git a/gcc-4.8/gcc/config/cris/predicates.md b/gcc-4.8/gcc/config/cris/predicates.md
index 040482ba9..2acd02f8a 100644
--- a/gcc-4.8/gcc/config/cris/predicates.md
+++ b/gcc-4.8/gcc/config/cris/predicates.md
@@ -76,6 +76,10 @@
(match_test "cris_simple_address_operand (XEXP (op, 0),
Pmode)"))))
+(define_predicate "cris_nonsp_register_operand"
+ (and (match_operand 0 "register_operand")
+ (match_test "op != stack_pointer_rtx")))
+
;; The caller needs to use :SI.
(define_predicate "cris_bdap_sign_extend_operand"
; Disabled until <URL:http://gcc.gnu.org/ml/gcc-patches/2005-10/msg01376.html>
diff --git a/gcc-4.8/gcc/config/darwin.c b/gcc-4.8/gcc/config/darwin.c
index e07fa4c83..05646f781 100644
--- a/gcc-4.8/gcc/config/darwin.c
+++ b/gcc-4.8/gcc/config/darwin.c
@@ -1329,6 +1329,9 @@ is_objc_metadata (tree decl)
return NULL_TREE;
}
+static int classes_seen;
+static int objc_metadata_seen;
+
/* Return the section required for Objective C ABI 2 metadata. */
static section *
darwin_objc2_section (tree decl ATTRIBUTE_UNUSED, tree meta, section * base)
@@ -1338,12 +1341,9 @@ darwin_objc2_section (tree decl ATTRIBUTE_UNUSED, tree meta, section * base)
gcc_assert (TREE_CODE (ident) == IDENTIFIER_NODE);
p = IDENTIFIER_POINTER (ident);
- /* If we are in LTO, then we don't know the state of flag_next_runtime
- or flag_objc_abi when the code was generated. We set these from the
- meta-data - which is needed to deal with const string constructors. */
+ gcc_checking_assert (flag_next_runtime == 1 && flag_objc_abi == 2);
- flag_next_runtime = 1;
- flag_objc_abi = 2;
+ objc_metadata_seen = 1;
if (base == data_section)
base = darwin_sections[objc2_metadata_section];
@@ -1366,7 +1366,10 @@ darwin_objc2_section (tree decl ATTRIBUTE_UNUSED, tree meta, section * base)
else if (!strncmp (p, "V2_NLCL", 7))
return darwin_sections[objc2_nonlazy_class_section];
else if (!strncmp (p, "V2_CLAB", 7))
+ {
+ classes_seen = 1;
return darwin_sections[objc2_classlist_section];
+ }
else if (!strncmp (p, "V2_SRFS", 7))
return darwin_sections[objc2_selector_refs_section];
else if (!strncmp (p, "V2_NLCA", 7))
@@ -1401,12 +1404,9 @@ darwin_objc1_section (tree decl ATTRIBUTE_UNUSED, tree meta, section * base)
gcc_assert (TREE_CODE (ident) == IDENTIFIER_NODE);
p = IDENTIFIER_POINTER (ident);
- /* If we are in LTO, then we don't know the state of flag_next_runtime
- or flag_objc_abi when the code was generated. We set these from the
- meta-data - which is needed to deal with const string constructors. */
- flag_next_runtime = 1;
- if (!global_options_set.x_flag_objc_abi)
- flag_objc_abi = 1;
+ gcc_checking_assert (flag_next_runtime == 1 && flag_objc_abi < 2);
+
+ objc_metadata_seen = 1;
/* String sections first, cos there are lots of strings. */
if (!strncmp (p, "V1_STRG", 7))
@@ -1419,7 +1419,10 @@ darwin_objc1_section (tree decl ATTRIBUTE_UNUSED, tree meta, section * base)
return darwin_sections[objc_meth_var_types_section];
else if (!strncmp (p, "V1_CLAS", 7))
+ {
+ classes_seen = 1;
return darwin_sections[objc_class_section];
+ }
else if (!strncmp (p, "V1_META", 7))
return darwin_sections[objc_meta_class_section];
else if (!strncmp (p, "V1_CATG", 7))
@@ -1603,8 +1606,6 @@ machopic_select_section (tree decl,
if (TREE_CODE (name) == TYPE_DECL)
name = DECL_NAME (name);
- /* FIXME: This is unsatisfactory for LTO, since it relies on other
- metadata determining the source FE. */
if (!strcmp (IDENTIFIER_POINTER (name), "__builtin_ObjCString"))
{
if (flag_next_runtime)
@@ -2845,6 +2846,33 @@ darwin_file_end (void)
finalize_ctors ();
if (!vec_safe_is_empty (dtors))
finalize_dtors ();
+
+ /* If we are expecting to output NeXT ObjC meta-data, (and we actually see
+ some) then we output the fix-and-continue marker (Image Info).
+ This applies to Objective C, Objective C++ and LTO with either language
+ as part of the input. */
+ if (flag_next_runtime && objc_metadata_seen)
+ {
+ unsigned int flags = 0;
+ if (flag_objc_abi >= 2)
+ {
+ flags = 16;
+ output_section_asm_op
+ (darwin_sections[objc2_image_info_section]->unnamed.data);
+ }
+ else
+ output_section_asm_op
+ (darwin_sections[objc_image_info_section]->unnamed.data);
+
+ ASM_OUTPUT_ALIGN (asm_out_file, 2);
+ fputs ("L_OBJC_ImageInfo:\n", asm_out_file);
+
+ flags |= (flag_replace_objc_classes && classes_seen) ? 1 : 0;
+ flags |= flag_objc_gc ? 2 : 0;
+
+ fprintf (asm_out_file, "\t.long\t0\n\t.long\t%u\n", flags);
+ }
+
machopic_finish (asm_out_file);
if (strcmp (lang_hooks.name, "GNU C++") == 0)
{
diff --git a/gcc-4.8/gcc/config/i386/driver-i386.c b/gcc-4.8/gcc/config/i386/driver-i386.c
index 763758495..148fbc227 100644
--- a/gcc-4.8/gcc/config/i386/driver-i386.c
+++ b/gcc-4.8/gcc/config/i386/driver-i386.c
@@ -126,6 +126,18 @@ decode_caches_intel (unsigned reg, bool xeon_mp,
case 0x0c:
level1->sizekb = 16; level1->assoc = 4; level1->line = 32;
break;
+ case 0x0d:
+ level1->sizekb = 16; level1->assoc = 4; level1->line = 64;
+ break;
+ case 0x0e:
+ level1->sizekb = 24; level1->assoc = 6; level1->line = 64;
+ break;
+ case 0x21:
+ level2->sizekb = 256; level2->assoc = 8; level2->line = 64;
+ break;
+ case 0x24:
+ level2->sizekb = 1024; level2->assoc = 16; level2->line = 64;
+ break;
case 0x2c:
level1->sizekb = 32; level1->assoc = 8; level1->line = 64;
break;
@@ -162,6 +174,9 @@ decode_caches_intel (unsigned reg, bool xeon_mp,
case 0x45:
level2->sizekb = 2048; level2->assoc = 4; level2->line = 32;
break;
+ case 0x48:
+ level2->sizekb = 3072; level2->assoc = 12; level2->line = 64;
+ break;
case 0x49:
if (xeon_mp)
break;
@@ -203,6 +218,9 @@ decode_caches_intel (unsigned reg, bool xeon_mp,
case 0x7f:
level2->sizekb = 512; level2->assoc = 2; level2->line = 64;
break;
+ case 0x80:
+ level2->sizekb = 512; level2->assoc = 8; level2->line = 64;
+ break;
case 0x82:
level2->sizekb = 256; level2->assoc = 8; level2->line = 32;
break;
@@ -470,6 +488,28 @@ const char *host_detect_local_cpu (int argc, const char **argv)
has_xsaveopt = eax & bit_XSAVEOPT;
}
+ /* Check cpuid level of extended features. */
+ __cpuid (0x80000000, ext_level, ebx, ecx, edx);
+
+ if (ext_level > 0x80000000)
+ {
+ __cpuid (0x80000001, eax, ebx, ecx, edx);
+
+ has_lahf_lm = ecx & bit_LAHF_LM;
+ has_sse4a = ecx & bit_SSE4a;
+ has_abm = ecx & bit_ABM;
+ has_lwp = ecx & bit_LWP;
+ has_fma4 = ecx & bit_FMA4;
+ has_xop = ecx & bit_XOP;
+ has_tbm = ecx & bit_TBM;
+ has_lzcnt = ecx & bit_LZCNT;
+ has_prfchw = ecx & bit_PRFCHW;
+
+ has_longmode = edx & bit_LM;
+ has_3dnowp = edx & bit_3DNOWP;
+ has_3dnow = edx & bit_3DNOW;
+ }
+
/* Get XCR_XFEATURE_ENABLED_MASK register with xgetbv. */
#define XCR_XFEATURE_ENABLED_MASK 0x0
#define XSTATE_FP 0x1
@@ -488,33 +528,12 @@ const char *host_detect_local_cpu (int argc, const char **argv)
has_avx2 = 0;
has_fma = 0;
has_fma4 = 0;
+ has_f16c = 0;
has_xop = 0;
has_xsave = 0;
has_xsaveopt = 0;
}
- /* Check cpuid level of extended features. */
- __cpuid (0x80000000, ext_level, ebx, ecx, edx);
-
- if (ext_level > 0x80000000)
- {
- __cpuid (0x80000001, eax, ebx, ecx, edx);
-
- has_lahf_lm = ecx & bit_LAHF_LM;
- has_sse4a = ecx & bit_SSE4a;
- has_abm = ecx & bit_ABM;
- has_lwp = ecx & bit_LWP;
- has_fma4 = ecx & bit_FMA4;
- has_xop = ecx & bit_XOP;
- has_tbm = ecx & bit_TBM;
- has_lzcnt = ecx & bit_LZCNT;
- has_prfchw = ecx & bit_PRFCHW;
-
- has_longmode = edx & bit_LM;
- has_3dnowp = edx & bit_3DNOWP;
- has_3dnow = edx & bit_3DNOW;
- }
-
if (!arch)
{
if (vendor == signature_AMD_ebx
diff --git a/gcc-4.8/gcc/config/i386/f16cintrin.h b/gcc-4.8/gcc/config/i386/f16cintrin.h
index 88903c162..4a29fccff 100644
--- a/gcc-4.8/gcc/config/i386/f16cintrin.h
+++ b/gcc-4.8/gcc/config/i386/f16cintrin.h
@@ -35,7 +35,7 @@
extern __inline float __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_cvtsh_ss (unsigned short __S)
{
- __v8hi __H = __extension__ (__v8hi){ __S, 0, 0, 0, 0, 0, 0, 0 };
+ __v8hi __H = __extension__ (__v8hi){ (short) __S, 0, 0, 0, 0, 0, 0, 0 };
__v4sf __A = __builtin_ia32_vcvtph2ps (__H);
return __builtin_ia32_vec_ext_v4sf (__A, 0);
}
diff --git a/gcc-4.8/gcc/config/i386/i386.c b/gcc-4.8/gcc/config/i386/i386.c
index 98dc2e41e..0569828f3 100644
--- a/gcc-4.8/gcc/config/i386/i386.c
+++ b/gcc-4.8/gcc/config/i386/i386.c
@@ -1378,7 +1378,7 @@ struct processor_costs nocona_cost = {
8, /* MMX or SSE register to integer */
8, /* size of l1 cache. */
1024, /* size of l2 cache. */
- 128, /* size of prefetch block */
+ 64, /* size of prefetch block */
8, /* number of parallel prefetches */
1, /* Branch cost */
COSTS_N_INSNS (6), /* cost of FADD and FSUB insns. */
@@ -1894,10 +1894,10 @@ static unsigned int initial_ix86_tune_features[X86_TUNE_LAST] = {
m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_ATOM | m_AMDFAM10 | m_BDVER | m_GENERIC,
/* X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL */
- m_COREI7 | m_AMDFAM10 | m_BDVER | m_BTVER,
+ m_COREI7 | m_HASWELL | m_AMDFAM10 | m_BDVER | m_BTVER,
/* X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL */
- m_COREI7 | m_BDVER,
+ m_COREI7 | m_HASWELL| m_BDVER,
/* X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL */
m_BDVER ,
@@ -2409,6 +2409,7 @@ static tree ix86_veclibabi_acml (enum built_in_function, tree, tree);
/* Processor target table, indexed by processor number */
struct ptt
{
+ const char *const name; /* processor name */
const struct processor_costs *cost; /* Processor costs */
const int align_loop; /* Default alignments. */
const int align_loop_max_skip;
@@ -2417,66 +2418,31 @@ struct ptt
const int align_func;
};
+/* This table must be in sync with enum processor_type in i386.h. */
static const struct ptt processor_target_table[PROCESSOR_max] =
{
- {&i386_cost, 4, 3, 4, 3, 4},
- {&i486_cost, 16, 15, 16, 15, 16},
- {&pentium_cost, 16, 7, 16, 7, 16},
- {&pentiumpro_cost, 16, 15, 16, 10, 16},
- {&geode_cost, 0, 0, 0, 0, 0},
- {&k6_cost, 32, 7, 32, 7, 32},
- {&athlon_cost, 16, 7, 16, 7, 16},
- {&pentium4_cost, 0, 0, 0, 0, 0},
- {&k8_cost, 16, 7, 16, 7, 16},
- {&nocona_cost, 0, 0, 0, 0, 0},
- /* Core 2 */
- {&core_cost, 16, 10, 16, 10, 16},
- /* Core i7 */
- {&core_cost, 16, 10, 16, 10, 16},
- /* Core avx2 */
- {&core_cost, 16, 10, 16, 10, 16},
- {&generic32_cost, 16, 7, 16, 7, 16},
- {&generic64_cost, 16, 10, 16, 10, 16},
- {&amdfam10_cost, 32, 24, 32, 7, 32},
- {&bdver1_cost, 16, 10, 16, 7, 11},
- {&bdver2_cost, 16, 10, 16, 7, 11},
- {&bdver3_cost, 16, 10, 16, 7, 11},
- {&btver1_cost, 16, 10, 16, 7, 11},
- {&btver2_cost, 16, 10, 16, 7, 11},
- {&atom_cost, 16, 15, 16, 7, 16}
-};
-
-static const char *const cpu_names[TARGET_CPU_DEFAULT_max] =
-{
- "generic",
- "i386",
- "i486",
- "pentium",
- "pentium-mmx",
- "pentiumpro",
- "pentium2",
- "pentium3",
- "pentium4",
- "pentium-m",
- "prescott",
- "nocona",
- "core2",
- "corei7",
- "core-avx2",
- "atom",
- "geode",
- "k6",
- "k6-2",
- "k6-3",
- "athlon",
- "athlon-4",
- "k8",
- "amdfam10",
- "bdver1",
- "bdver2",
- "bdver3",
- "btver1",
- "btver2"
+ {"generic", &generic32_cost, 16, 7, 16, 7, 16},
+ {"generic", &generic64_cost, 16, 10, 16, 10, 16},
+ {"i386", &i386_cost, 4, 3, 4, 3, 4},
+ {"i486", &i486_cost, 16, 15, 16, 15, 16},
+ {"pentium", &pentium_cost, 16, 7, 16, 7, 16},
+ {"pentiumpro", &pentiumpro_cost, 16, 15, 16, 10, 16},
+ {"pentium4", &pentium4_cost, 0, 0, 0, 0, 0},
+ {"nocona", &nocona_cost, 0, 0, 0, 0, 0},
+ {"core2", &core_cost, 16, 10, 16, 10, 16},
+ {"corei7", &core_cost, 16, 10, 16, 10, 16},
+ {"core-avx2", &core_cost, 16, 10, 16, 10, 16},
+ {"atom", &atom_cost, 16, 15, 16, 7, 16},
+ {"geode", &geode_cost, 0, 0, 0, 0, 0},
+ {"k6", &k6_cost, 32, 7, 32, 7, 32},
+ {"athlon", &athlon_cost, 16, 7, 16, 7, 16},
+ {"k8", &k8_cost, 16, 7, 16, 7, 16},
+ {"amdfam10", &amdfam10_cost, 32, 24, 32, 7, 32},
+ {"bdver1", &bdver1_cost, 16, 10, 16, 7, 11},
+ {"bdver2", &bdver2_cost, 16, 10, 16, 7, 11},
+ {"bdver3", &bdver3_cost, 16, 10, 16, 7, 11},
+ {"btver1", &btver1_cost, 16, 10, 16, 7, 11},
+ {"btver2", &btver2_cost, 16, 10, 16, 7, 11}
};
static bool
@@ -2921,7 +2887,7 @@ ix86_option_override_internal (bool main_args_p)
| PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_AVX | PTA_AVX2
| PTA_CX16 | PTA_POPCNT | PTA_AES | PTA_PCLMUL | PTA_FSGSBASE
| PTA_RDRND | PTA_F16C | PTA_BMI | PTA_BMI2 | PTA_LZCNT
- | PTA_FMA | PTA_MOVBE | PTA_RTM | PTA_HLE | PTA_FXSR | PTA_XSAVE
+ | PTA_FMA | PTA_MOVBE | PTA_HLE | PTA_FXSR | PTA_XSAVE
| PTA_XSAVEOPT},
{"atom", PROCESSOR_ATOM, CPU_ATOM,
PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
@@ -2984,7 +2950,7 @@ ix86_option_override_internal (bool main_args_p)
{"bdver3", PROCESSOR_BDVER3, CPU_BDVER3,
PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
| PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
- | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX
+ | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_FMA4
| PTA_XOP | PTA_LWP | PTA_BMI | PTA_TBM | PTA_F16C
| PTA_FMA | PTA_PRFCHW | PTA_FXSR | PTA_XSAVE
| PTA_XSAVEOPT},
@@ -3126,7 +3092,8 @@ ix86_option_override_internal (bool main_args_p)
ix86_tune_string = ix86_arch_string;
if (!ix86_tune_string)
{
- ix86_tune_string = cpu_names[TARGET_CPU_DEFAULT];
+ ix86_tune_string
+ = processor_target_table[TARGET_CPU_DEFAULT].name;
ix86_tune_defaulted = 1;
}
@@ -4092,19 +4059,15 @@ ix86_function_specific_print (FILE *file, int indent,
= ix86_target_string (ptr->x_ix86_isa_flags, ptr->x_target_flags,
NULL, NULL, ptr->x_ix86_fpmath, false);
+ gcc_assert (ptr->arch < PROCESSOR_max);
fprintf (file, "%*sarch = %d (%s)\n",
indent, "",
- ptr->arch,
- ((ptr->arch < TARGET_CPU_DEFAULT_max)
- ? cpu_names[ptr->arch]
- : "<unknown>"));
+ ptr->arch, processor_target_table[ptr->arch].name);
+ gcc_assert (ptr->tune < PROCESSOR_max);
fprintf (file, "%*stune = %d (%s)\n",
indent, "",
- ptr->tune,
- ((ptr->tune < TARGET_CPU_DEFAULT_max)
- ? cpu_names[ptr->tune]
- : "<unknown>"));
+ ptr->tune, processor_target_table[ptr->tune].name);
fprintf (file, "%*sbranch_cost = %d\n", indent, "", ptr->branch_cost);
@@ -5227,7 +5190,12 @@ ix86_function_regparm (const_tree type, const_tree decl)
/* Use register calling convention for local functions when possible. */
if (decl
&& TREE_CODE (decl) == FUNCTION_DECL
- && optimize
+ /* Caller and callee must agree on the calling convention, so
+ checking here just optimize means that with
+ __attribute__((optimize (...))) caller could use regparm convention
+ and callee not, or vice versa. Instead look at whether the callee
+ is optimized or not. */
+ && opt_for_fn (decl, optimize)
&& !(profile_flag && !flag_fentry))
{
/* FIXME: remove this CONST_CAST when cgraph.[ch] is constified. */
@@ -5423,6 +5391,17 @@ ix86_legitimate_combined_insn (rtx insn)
bool win;
int j;
+ /* For pre-AVX disallow unaligned loads/stores where the
+ instructions don't support it. */
+ if (!TARGET_AVX
+ && VECTOR_MODE_P (GET_MODE (op))
+ && misaligned_operand (op, GET_MODE (op)))
+ {
+ int min_align = get_attr_ssememalign (insn);
+ if (min_align == 0)
+ return false;
+ }
+
/* A unary operator may be accepted by the predicate, but it
is irrelevant for matching constraints. */
if (UNARY_P (op))
@@ -5761,9 +5740,9 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, /* Argument info to initialize */
cum->nregs = 0;
cum->sse_nregs = 0;
cum->mmx_nregs = 0;
- cum->warn_avx = 0;
- cum->warn_sse = 0;
- cum->warn_mmx = 0;
+ cum->warn_avx = false;
+ cum->warn_sse = false;
+ cum->warn_mmx = false;
return;
}
@@ -5804,10 +5783,14 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, /* Argument info to initialize */
The midde-end can't deal with the vector types > 16 bytes. In this
case, we return the original mode and warn ABI change if CUM isn't
- NULL. */
+ NULL.
+
+ If INT_RETURN is true, warn ABI change if the vector mode isn't
+ available for function return value. */
static enum machine_mode
-type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum)
+type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum,
+ bool in_return)
{
enum machine_mode mode = TYPE_MODE (type);
@@ -5833,32 +5816,60 @@ type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum)
if (size == 32 && !TARGET_AVX)
{
static bool warnedavx;
+ static bool warnedavx_ret;
- if (cum
- && !warnedavx
- && cum->warn_avx)
+ if (cum && cum->warn_avx && !warnedavx)
{
+ if (warning (OPT_Wpsabi, "AVX vector argument "
+ "without AVX enabled changes the ABI"))
warnedavx = true;
- warning (0, "AVX vector argument without AVX "
- "enabled changes the ABI");
}
+ else if (in_return && !warnedavx_ret)
+ {
+ if (warning (OPT_Wpsabi, "AVX vector return "
+ "without AVX enabled changes the ABI"))
+ warnedavx_ret = true;
+ }
+
return TYPE_MODE (type);
}
- else if ((size == 8 || size == 16) && !TARGET_SSE)
+ else if (((size == 8 && TARGET_64BIT) || size == 16)
+ && !TARGET_SSE)
{
static bool warnedsse;
+ static bool warnedsse_ret;
- if (cum
- && !warnedsse
- && cum->warn_sse)
+ if (cum && cum->warn_sse && !warnedsse)
{
+ if (warning (OPT_Wpsabi, "SSE vector argument "
+ "without SSE enabled changes the ABI"))
warnedsse = true;
- warning (0, "SSE vector argument without SSE "
- "enabled changes the ABI");
}
- return mode;
+ else if (!TARGET_64BIT && in_return && !warnedsse_ret)
+ {
+ if (warning (OPT_Wpsabi, "SSE vector return "
+ "without SSE enabled changes the ABI"))
+ warnedsse_ret = true;
+ }
+ }
+ else if ((size == 8 && !TARGET_64BIT) && !TARGET_MMX)
+ {
+ static bool warnedmmx;
+ static bool warnedmmx_ret;
+
+ if (cum && cum->warn_mmx && !warnedmmx)
+ {
+ if (warning (OPT_Wpsabi, "MMX vector argument "
+ "without MMX enabled changes the ABI"))
+ warnedmmx = true;
+ }
+ else if (in_return && !warnedmmx_ret)
+ {
+ if (warning (OPT_Wpsabi, "MMX vector return "
+ "without MMX enabled changes the ABI"))
+ warnedmmx_ret = true;
+ }
}
- else
return mode;
}
@@ -6204,25 +6215,28 @@ classify_argument (enum machine_mode mode, const_tree type,
case CHImode:
case CQImode:
{
- int size = (bit_offset % 64)+ (int) GET_MODE_BITSIZE (mode);
+ int size = bit_offset + (int) GET_MODE_BITSIZE (mode);
+
+ /* Analyze last 128 bits only. */
+ size = (size - 1) & 0x7f;
- if (size <= 32)
+ if (size < 32)
{
classes[0] = X86_64_INTEGERSI_CLASS;
return 1;
}
- else if (size <= 64)
+ else if (size < 64)
{
classes[0] = X86_64_INTEGER_CLASS;
return 1;
}
- else if (size <= 64+32)
+ else if (size < 64+32)
{
classes[0] = X86_64_INTEGER_CLASS;
classes[1] = X86_64_INTEGERSI_CLASS;
return 2;
}
- else if (size <= 64+64)
+ else if (size < 64+64)
{
classes[0] = classes[1] = X86_64_INTEGER_CLASS;
return 2;
@@ -6489,7 +6503,7 @@ construct_container (enum machine_mode mode, enum machine_mode orig_mode,
if (n == 2
&& regclass[0] == X86_64_INTEGER_CLASS
&& regclass[1] == X86_64_INTEGER_CLASS
- && (mode == CDImode || mode == TImode || mode == TFmode)
+ && (mode == CDImode || mode == TImode)
&& intreg[0] + 1 == intreg[1])
return gen_rtx_REG (mode, intreg[0]);
@@ -6739,7 +6753,7 @@ ix86_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
if (type)
- mode = type_natural_mode (type, NULL);
+ mode = type_natural_mode (type, NULL, false);
if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
function_arg_advance_ms_64 (cum, bytes, words);
@@ -6767,8 +6781,6 @@ function_arg_32 (const CUMULATIVE_ARGS *cum, enum machine_mode mode,
enum machine_mode orig_mode, const_tree type,
HOST_WIDE_INT bytes, HOST_WIDE_INT words)
{
- static bool warnedsse, warnedmmx;
-
/* Avoid the AL settings for the Unix64 ABI. */
if (mode == VOIDmode)
return constm1_rtx;
@@ -6825,12 +6837,6 @@ function_arg_32 (const CUMULATIVE_ARGS *cum, enum machine_mode mode,
case V2DFmode:
if (!type || !AGGREGATE_TYPE_P (type))
{
- if (!TARGET_SSE && !warnedsse && cum->warn_sse)
- {
- warnedsse = true;
- warning (0, "SSE vector argument without SSE enabled "
- "changes the ABI");
- }
if (cum->sse_nregs)
return gen_reg_or_parallel (mode, orig_mode,
cum->sse_regno + FIRST_SSE_REG);
@@ -6863,12 +6869,6 @@ function_arg_32 (const CUMULATIVE_ARGS *cum, enum machine_mode mode,
case V1DImode:
if (!type || !AGGREGATE_TYPE_P (type))
{
- if (!TARGET_MMX && !warnedmmx && cum->warn_mmx)
- {
- warnedmmx = true;
- warning (0, "MMX vector argument without MMX enabled "
- "changes the ABI");
- }
if (cum->mmx_nregs)
return gen_reg_or_parallel (mode, orig_mode,
cum->mmx_regno + FIRST_MMX_REG);
@@ -6991,7 +6991,7 @@ ix86_function_arg (cumulative_args_t cum_v, enum machine_mode omode,
/* To simplify the code below, represent vector types with a vector mode
even if MMX/SSE are not active. */
if (type && TREE_CODE (type) == VECTOR_TYPE)
- mode = type_natural_mode (type, cum);
+ mode = type_natural_mode (type, cum, false);
if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
arg = function_arg_ms_64 (cum, mode, omode, named, bytes);
@@ -7249,9 +7249,15 @@ ix86_function_value_regno_p (const unsigned int regno)
switch (regno)
{
case AX_REG:
+ case DX_REG:
return true;
+ case DI_REG:
+ case SI_REG:
+ return TARGET_64BIT && ix86_abi != MS_ABI;
- case FIRST_FLOAT_REG:
+ /* Complex values are returned in %st(0)/%st(1) pair. */
+ case ST0_REG:
+ case ST1_REG:
/* TODO: The function should depend on current function ABI but
builtins.c would need updating then. Therefore we use the
default ABI. */
@@ -7259,10 +7265,12 @@ ix86_function_value_regno_p (const unsigned int regno)
return false;
return TARGET_FLOAT_RETURNS_IN_80387;
- case FIRST_SSE_REG:
+ /* Complex values are returned in %xmm0/%xmm1 pair. */
+ case XMM0_REG:
+ case XMM1_REG:
return TARGET_SSE;
- case FIRST_MMX_REG:
+ case MM0_REG:
if (TARGET_MACHO || TARGET_64BIT)
return false;
return TARGET_MMX;
@@ -7434,7 +7442,7 @@ ix86_function_value (const_tree valtype, const_tree fntype_or_decl,
enum machine_mode mode, orig_mode;
orig_mode = TYPE_MODE (valtype);
- mode = type_natural_mode (valtype, NULL);
+ mode = type_natural_mode (valtype, NULL, true);
return ix86_function_value_1 (valtype, fntype_or_decl, orig_mode, mode);
}
@@ -7549,7 +7557,7 @@ ix86_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED)
#ifdef SUBTARGET_RETURN_IN_MEMORY
return SUBTARGET_RETURN_IN_MEMORY (type, fntype);
#else
- const enum machine_mode mode = type_natural_mode (type, NULL);
+ const enum machine_mode mode = type_natural_mode (type, NULL, true);
if (TARGET_64BIT)
{
@@ -7563,52 +7571,6 @@ ix86_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED)
#endif
}
-/* When returning SSE vector types, we have a choice of either
- (1) being abi incompatible with a -march switch, or
- (2) generating an error.
- Given no good solution, I think the safest thing is one warning.
- The user won't be able to use -Werror, but....
-
- Choose the STRUCT_VALUE_RTX hook because that's (at present) only
- called in response to actually generating a caller or callee that
- uses such a type. As opposed to TARGET_RETURN_IN_MEMORY, which is called
- via aggregate_value_p for general type probing from tree-ssa. */
-
-static rtx
-ix86_struct_value_rtx (tree type, int incoming ATTRIBUTE_UNUSED)
-{
- static bool warnedsse, warnedmmx;
-
- if (!TARGET_64BIT && type)
- {
- /* Look at the return type of the function, not the function type. */
- enum machine_mode mode = TYPE_MODE (TREE_TYPE (type));
-
- if (!TARGET_SSE && !warnedsse)
- {
- if (mode == TImode
- || (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 16))
- {
- warnedsse = true;
- warning (0, "SSE vector return without SSE enabled "
- "changes the ABI");
- }
- }
-
- if (!TARGET_MMX && !warnedmmx)
- {
- if (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 8)
- {
- warnedmmx = true;
- warning (0, "MMX vector return without MMX enabled "
- "changes the ABI");
- }
- }
- }
-
- return NULL;
-}
-
/* Create the va_list data type. */
@@ -8033,7 +7995,7 @@ ix86_gimplify_va_arg (tree valist, tree type, gimple_seq *pre_p,
size = int_size_in_bytes (type);
rsize = (size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
- nat_mode = type_natural_mode (type, NULL);
+ nat_mode = type_natural_mode (type, NULL, false);
switch (nat_mode)
{
case V8SFmode:
@@ -10574,18 +10536,20 @@ ix86_expand_prologue (void)
}
m->fs.sp_offset += allocate;
+ /* Use stack_pointer_rtx for relative addressing so that code
+ works for realigned stack, too. */
if (r10_live && eax_live)
{
- t = choose_baseaddr (m->fs.sp_offset - allocate);
+ t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
emit_move_insn (gen_rtx_REG (word_mode, R10_REG),
gen_frame_mem (word_mode, t));
- t = choose_baseaddr (m->fs.sp_offset - allocate - UNITS_PER_WORD);
+ t = plus_constant (Pmode, t, UNITS_PER_WORD);
emit_move_insn (gen_rtx_REG (word_mode, AX_REG),
gen_frame_mem (word_mode, t));
}
else if (eax_live || r10_live)
{
- t = choose_baseaddr (m->fs.sp_offset - allocate);
+ t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
emit_move_insn (gen_rtx_REG (word_mode,
(eax_live ? AX_REG : R10_REG)),
gen_frame_mem (word_mode, t));
@@ -11178,8 +11142,9 @@ ix86_expand_epilogue (int style)
m->fs.cfa_offset -= UNITS_PER_WORD;
m->fs.sp_offset -= UNITS_PER_WORD;
- add_reg_note (insn, REG_CFA_ADJUST_CFA,
- copy_rtx (XVECEXP (PATTERN (insn), 0, 1)));
+ rtx x = plus_constant (Pmode, stack_pointer_rtx, UNITS_PER_WORD);
+ x = gen_rtx_SET (VOIDmode, stack_pointer_rtx, x);
+ add_reg_note (insn, REG_CFA_ADJUST_CFA, x);
add_reg_note (insn, REG_CFA_REGISTER,
gen_rtx_SET (VOIDmode, ecx, pc_rtx));
RTX_FRAME_RELATED_P (insn) = 1;
@@ -11575,30 +11540,6 @@ ix86_live_on_entry (bitmap regs)
}
}
-/* Determine if op is suitable SUBREG RTX for address. */
-
-static bool
-ix86_address_subreg_operand (rtx op)
-{
- enum machine_mode mode;
-
- if (!REG_P (op))
- return false;
-
- mode = GET_MODE (op);
-
- if (GET_MODE_CLASS (mode) != MODE_INT)
- return false;
-
- /* Don't allow SUBREGs that span more than a word. It can lead to spill
- failures when the register is one word out of a two word structure. */
- if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
- return false;
-
- /* Allow only SUBREGs of non-eliminable hard registers. */
- return register_no_elim_operand (op, mode);
-}
-
/* Extract the parts of an RTL expression that is a valid memory address
for an instruction. Return 0 if the structure of the address is
grossly off. Return -1 if the address contains ASHIFT, so it is not
@@ -11655,7 +11596,7 @@ ix86_decompose_address (rtx addr, struct ix86_address *out)
base = addr;
else if (GET_CODE (addr) == SUBREG)
{
- if (ix86_address_subreg_operand (SUBREG_REG (addr)))
+ if (REG_P (SUBREG_REG (addr)))
base = addr;
else
return 0;
@@ -11719,7 +11660,7 @@ ix86_decompose_address (rtx addr, struct ix86_address *out)
break;
case SUBREG:
- if (!ix86_address_subreg_operand (SUBREG_REG (op)))
+ if (!REG_P (SUBREG_REG (op)))
return 0;
/* FALLTHRU */
@@ -11764,19 +11705,6 @@ ix86_decompose_address (rtx addr, struct ix86_address *out)
scale = 1 << scale;
retval = -1;
}
- else if (CONST_INT_P (addr))
- {
- if (!x86_64_immediate_operand (addr, VOIDmode))
- return 0;
-
- /* Constant addresses are sign extended to 64bit, we have to
- prevent addresses from 0x80000000 to 0xffffffff in x32 mode. */
- if (TARGET_X32
- && val_signbit_known_set_p (SImode, INTVAL (addr)))
- return 0;
-
- disp = addr;
- }
else
disp = addr; /* displacement */
@@ -11785,18 +11713,12 @@ ix86_decompose_address (rtx addr, struct ix86_address *out)
if (REG_P (index))
;
else if (GET_CODE (index) == SUBREG
- && ix86_address_subreg_operand (SUBREG_REG (index)))
+ && REG_P (SUBREG_REG (index)))
;
else
return 0;
}
-/* Address override works only on the (%reg) part of %fs:(%reg). */
- if (seg != SEG_DEFAULT
- && ((base && GET_MODE (base) != word_mode)
- || (index && GET_MODE (index) != word_mode)))
- return 0;
-
/* Extract the integral value of scale. */
if (scale_rtx)
{
@@ -12272,6 +12194,45 @@ ix86_legitimize_reload_address (rtx x,
return false;
}
+/* Determine if op is suitable RTX for an address register.
+ Return naked register if a register or a register subreg is
+ found, otherwise return NULL_RTX. */
+
+static rtx
+ix86_validate_address_register (rtx op)
+{
+ enum machine_mode mode = GET_MODE (op);
+
+ /* Only SImode or DImode registers can form the address. */
+ if (mode != SImode && mode != DImode)
+ return NULL_RTX;
+
+ if (REG_P (op))
+ return op;
+ else if (GET_CODE (op) == SUBREG)
+ {
+ rtx reg = SUBREG_REG (op);
+
+ if (!REG_P (reg))
+ return NULL_RTX;
+
+ mode = GET_MODE (reg);
+
+ /* Don't allow SUBREGs that span more than a word. It can
+ lead to spill failures when the register is one word out
+ of a two word structure. */
+ if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
+ return NULL_RTX;
+
+ /* Allow only SUBREGs of non-eliminable hard registers. */
+ if (register_no_elim_operand (reg, mode))
+ return reg;
+ }
+
+ /* Op is not a register. */
+ return NULL_RTX;
+}
+
/* Recognizes RTL expressions that are valid memory addresses for an
instruction. The MODE argument is the machine mode for the MEM
expression that wants to use this address.
@@ -12287,6 +12248,7 @@ ix86_legitimate_address_p (enum machine_mode mode ATTRIBUTE_UNUSED,
struct ix86_address parts;
rtx base, index, disp;
HOST_WIDE_INT scale;
+ enum ix86_address_seg seg;
if (ix86_decompose_address (addr, &parts) <= 0)
/* Decomposition failed. */
@@ -12296,21 +12258,14 @@ ix86_legitimate_address_p (enum machine_mode mode ATTRIBUTE_UNUSED,
index = parts.index;
disp = parts.disp;
scale = parts.scale;
+ seg = parts.seg;
/* Validate base register. */
if (base)
{
- rtx reg;
+ rtx reg = ix86_validate_address_register (base);
- if (REG_P (base))
- reg = base;
- else if (GET_CODE (base) == SUBREG && REG_P (SUBREG_REG (base)))
- reg = SUBREG_REG (base);
- else
- /* Base is not a register. */
- return false;
-
- if (GET_MODE (base) != SImode && GET_MODE (base) != DImode)
+ if (reg == NULL_RTX)
return false;
if ((strict && ! REG_OK_FOR_BASE_STRICT_P (reg))
@@ -12322,17 +12277,9 @@ ix86_legitimate_address_p (enum machine_mode mode ATTRIBUTE_UNUSED,
/* Validate index register. */
if (index)
{
- rtx reg;
-
- if (REG_P (index))
- reg = index;
- else if (GET_CODE (index) == SUBREG && REG_P (SUBREG_REG (index)))
- reg = SUBREG_REG (index);
- else
- /* Index is not a register. */
- return false;
+ rtx reg = ix86_validate_address_register (index);
- if (GET_MODE (index) != SImode && GET_MODE (index) != DImode)
+ if (reg == NULL_RTX)
return false;
if ((strict && ! REG_OK_FOR_INDEX_STRICT_P (reg))
@@ -12346,6 +12293,12 @@ ix86_legitimate_address_p (enum machine_mode mode ATTRIBUTE_UNUSED,
&& GET_MODE (base) != GET_MODE (index))
return false;
+ /* Address override works only on the (%reg) part of %fs:(%reg). */
+ if (seg != SEG_DEFAULT
+ && ((base && GET_MODE (base) != word_mode)
+ || (index && GET_MODE (index) != word_mode)))
+ return false;
+
/* Validate scale factor. */
if (scale != 1)
{
@@ -12467,6 +12420,12 @@ ix86_legitimate_address_p (enum machine_mode mode ATTRIBUTE_UNUSED,
&& !x86_64_immediate_operand (disp, VOIDmode))
/* Displacement is out of range. */
return false;
+ /* In x32 mode, constant addresses are sign extended to 64bit, so
+ we have to prevent addresses from 0x80000000 to 0xffffffff. */
+ else if (TARGET_X32 && !(index || base)
+ && CONST_INT_P (disp)
+ && val_signbit_known_set_p (SImode, INTVAL (disp)))
+ return false;
}
/* Everything looks valid. */
@@ -13831,8 +13790,6 @@ put_condition_code (enum rtx_code code, enum machine_mode mode, bool reverse,
Those same assemblers have the same but opposite lossage on cmov. */
if (mode == CCmode)
suffix = fp ? "nbe" : "a";
- else if (mode == CCCmode)
- suffix = "b";
else
gcc_unreachable ();
break;
@@ -13854,8 +13811,12 @@ put_condition_code (enum rtx_code code, enum machine_mode mode, bool reverse,
}
break;
case LTU:
- gcc_assert (mode == CCmode || mode == CCCmode);
+ if (mode == CCmode)
suffix = "b";
+ else if (mode == CCCmode)
+ suffix = "c";
+ else
+ gcc_unreachable ();
break;
case GE:
switch (mode)
@@ -13875,20 +13836,20 @@ put_condition_code (enum rtx_code code, enum machine_mode mode, bool reverse,
}
break;
case GEU:
- /* ??? As above. */
- gcc_assert (mode == CCmode || mode == CCCmode);
+ if (mode == CCmode)
suffix = fp ? "nb" : "ae";
+ else if (mode == CCCmode)
+ suffix = "nc";
+ else
+ gcc_unreachable ();
break;
case LE:
gcc_assert (mode == CCmode || mode == CCGCmode || mode == CCNOmode);
suffix = "le";
break;
case LEU:
- /* ??? As above. */
if (mode == CCmode)
suffix = "be";
- else if (mode == CCCmode)
- suffix = fp ? "nb" : "ae";
else
gcc_unreachable ();
break;
@@ -15354,7 +15315,7 @@ ix86_avx_u128_mode_needed (rtx insn)
rtx arg = XEXP (XEXP (link, 0), 0);
if (ix86_check_avx256_register (&arg, NULL))
- return AVX_U128_ANY;
+ return AVX_U128_DIRTY;
}
}
@@ -15474,8 +15435,8 @@ ix86_avx_u128_mode_after (int mode, rtx insn)
{
bool avx_reg256_found = false;
note_stores (pat, ix86_check_avx256_stores, &avx_reg256_found);
- if (!avx_reg256_found)
- return AVX_U128_CLEAN;
+
+ return avx_reg256_found ? AVX_U128_DIRTY : AVX_U128_CLEAN;
}
/* Otherwise, return current mode. Remember that if insn
@@ -17364,8 +17325,18 @@ ix86_avoid_lea_for_addr (rtx insn, rtx operands[])
if (!TARGET_OPT_AGU || optimize_function_for_size_p (cfun))
return false;
- /* Check it is correct to split here. */
- if (!ix86_ok_to_clobber_flags(insn))
+ /* The "at least two components" test below might not catch simple
+ move or zero extension insns if parts.base is non-NULL and parts.disp
+ is const0_rtx as the only components in the address, e.g. if the
+ register is %rbp or %r13. As this test is much cheaper and moves or
+ zero extensions are the common case, do this check first. */
+ if (REG_P (operands[1])
+ || (SImode_address_operand (operands[1], VOIDmode)
+ && REG_P (XEXP (operands[1], 0))))
+ return false;
+
+ /* Check if it is OK to split here. */
+ if (!ix86_ok_to_clobber_flags (insn))
return false;
ok = ix86_decompose_address (operands[1], &parts);
@@ -18500,11 +18471,6 @@ ix86_cc_mode (enum rtx_code code, rtx op0, rtx op1)
return CCmode;
case GTU: /* CF=0 & ZF=0 */
case LEU: /* CF=1 | ZF=1 */
- /* Detect overflow checks. They need just the carry flag. */
- if (GET_CODE (op0) == MINUS
- && rtx_equal_p (op1, XEXP (op0, 0)))
- return CCCmode;
- else
return CCmode;
/* Codes possibly doable only with sign flag when
comparing against zero. */
@@ -20514,7 +20480,7 @@ ix86_expand_vec_perm (rtx operands[])
return;
case V8SFmode:
- mask = gen_lowpart (V8SFmode, mask);
+ mask = gen_lowpart (V8SImode, mask);
if (one_operand_shuffle)
emit_insn (gen_avx2_permvarv8sf (target, op0, mask));
else
@@ -21754,6 +21720,21 @@ counter_mode (rtx count_exp)
return SImode;
}
+/* Copy the address to a Pmode register. This is used for x32 to
+ truncate DImode TLS address to a SImode register. */
+
+static rtx
+ix86_copy_addr_to_reg (rtx addr)
+{
+ if (GET_MODE (addr) == Pmode || GET_MODE (addr) == VOIDmode)
+ return copy_addr_to_reg (addr);
+ else
+ {
+ gcc_assert (GET_MODE (addr) == DImode && Pmode == SImode);
+ return gen_rtx_SUBREG (SImode, copy_to_mode_reg (DImode, addr), 0);
+ }
+}
+
/* When SRCPTR is non-NULL, output simple loop to move memory
pointer to SRCPTR to DESTPTR via chunks of MODE unrolled UNROLL times,
overall size is COUNT specified in bytes. When SRCPTR is NULL, output the
@@ -22742,8 +22723,8 @@ ix86_expand_movmem (rtx dst, rtx src, rtx count_exp, rtx align_exp,
gcc_assert (alg != no_stringop);
if (!count)
count_exp = copy_to_mode_reg (GET_MODE (count_exp), count_exp);
- destreg = copy_addr_to_reg (XEXP (dst, 0));
- srcreg = copy_addr_to_reg (XEXP (src, 0));
+ destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
+ srcreg = ix86_copy_addr_to_reg (XEXP (src, 0));
switch (alg)
{
case libcall:
@@ -23133,7 +23114,7 @@ ix86_expand_setmem (rtx dst, rtx count_exp, rtx val_exp, rtx align_exp,
gcc_assert (alg != no_stringop);
if (!count)
count_exp = copy_to_mode_reg (counter_mode (count_exp), count_exp);
- destreg = copy_addr_to_reg (XEXP (dst, 0));
+ destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
switch (alg)
{
case libcall:
@@ -25002,7 +24983,8 @@ ix86_constant_alignment (tree exp, int align)
int
ix86_data_alignment (tree type, int align)
{
- int max_align = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
+ int max_align
+ = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
if (AGGREGATE_TYPE_P (type)
&& TYPE_SIZE (type)
@@ -27998,8 +27980,8 @@ static const struct builtin_description bdesc_multi_arg[] =
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv8hi3, "__builtin_ia32_vpshlw", IX86_BUILTIN_VPSHLW, UNKNOWN, (int)MULTI_ARG_2_HI },
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv16qi3, "__builtin_ia32_vpshlb", IX86_BUILTIN_VPSHLB, UNKNOWN, (int)MULTI_ARG_2_QI },
- { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2, "__builtin_ia32_vfrczss", IX86_BUILTIN_VFRCZSS, UNKNOWN, (int)MULTI_ARG_2_SF },
- { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2, "__builtin_ia32_vfrczsd", IX86_BUILTIN_VFRCZSD, UNKNOWN, (int)MULTI_ARG_2_DF },
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2, "__builtin_ia32_vfrczss", IX86_BUILTIN_VFRCZSS, UNKNOWN, (int)MULTI_ARG_1_SF },
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2, "__builtin_ia32_vfrczsd", IX86_BUILTIN_VFRCZSD, UNKNOWN, (int)MULTI_ARG_1_DF },
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv4sf2, "__builtin_ia32_vfrczps", IX86_BUILTIN_VFRCZPS, UNKNOWN, (int)MULTI_ARG_1_SF },
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv2df2, "__builtin_ia32_vfrczpd", IX86_BUILTIN_VFRCZPD, UNKNOWN, (int)MULTI_ARG_1_DF },
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv8sf2, "__builtin_ia32_vfrczps256", IX86_BUILTIN_VFRCZPS256, UNKNOWN, (int)MULTI_ARG_1_SF2 },
@@ -31264,6 +31246,7 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
tree arg;
rtx pat, op;
unsigned int i, nargs, arg_adjust, memory;
+ bool aligned_mem = false;
struct
{
rtx op;
@@ -31309,6 +31292,15 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
nargs = 1;
klass = load;
memory = 0;
+ switch (icode)
+ {
+ case CODE_FOR_sse4_1_movntdqa:
+ case CODE_FOR_avx2_movntdqa:
+ aligned_mem = true;
+ break;
+ default:
+ break;
+ }
break;
case VOID_FTYPE_PV2SF_V4SF:
case VOID_FTYPE_PV4DI_V4DI:
@@ -31326,6 +31318,26 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
klass = store;
/* Reserve memory operand for target. */
memory = ARRAY_SIZE (args);
+ switch (icode)
+ {
+ /* These builtins and instructions require the memory
+ to be properly aligned. */
+ case CODE_FOR_avx_movntv4di:
+ case CODE_FOR_sse2_movntv2di:
+ case CODE_FOR_avx_movntv8sf:
+ case CODE_FOR_sse_movntv4sf:
+ case CODE_FOR_sse4a_vmmovntv4sf:
+ case CODE_FOR_avx_movntv4df:
+ case CODE_FOR_sse2_movntv2df:
+ case CODE_FOR_sse4a_vmmovntv2df:
+ case CODE_FOR_sse2_movntidi:
+ case CODE_FOR_sse_movntq:
+ case CODE_FOR_sse2_movntisi:
+ aligned_mem = true;
+ break;
+ default:
+ break;
+ }
break;
case V4SF_FTYPE_V4SF_PCV2SF:
case V2DF_FTYPE_V2DF_PCDOUBLE:
@@ -31382,6 +31394,17 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
{
op = force_reg (Pmode, convert_to_mode (Pmode, op, 1));
target = gen_rtx_MEM (tmode, op);
+ /* target at this point has just BITS_PER_UNIT MEM_ALIGN
+ on it. Try to improve it using get_pointer_alignment,
+ and if the special builtin is one that requires strict
+ mode alignment, also from it's GET_MODE_ALIGNMENT.
+ Failure to do so could lead to ix86_legitimate_combined_insn
+ rejecting all changes to such insns. */
+ unsigned int align = get_pointer_alignment (arg);
+ if (aligned_mem && align < GET_MODE_ALIGNMENT (tmode))
+ align = GET_MODE_ALIGNMENT (tmode);
+ if (MEM_ALIGN (target) < align)
+ set_mem_align (target, align);
}
else
target = force_reg (tmode, op);
@@ -31427,8 +31450,17 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
/* This must be the memory operand. */
op = force_reg (Pmode, convert_to_mode (Pmode, op, 1));
op = gen_rtx_MEM (mode, op);
- gcc_assert (GET_MODE (op) == mode
- || GET_MODE (op) == VOIDmode);
+ /* op at this point has just BITS_PER_UNIT MEM_ALIGN
+ on it. Try to improve it using get_pointer_alignment,
+ and if the special builtin is one that requires strict
+ mode alignment, also from it's GET_MODE_ALIGNMENT.
+ Failure to do so could lead to ix86_legitimate_combined_insn
+ rejecting all changes to such insns. */
+ unsigned int align = get_pointer_alignment (arg);
+ if (aligned_mem && align < GET_MODE_ALIGNMENT (mode))
+ align = GET_MODE_ALIGNMENT (mode);
+ if (MEM_ALIGN (op) < align)
+ set_mem_align (op, align);
}
else
{
@@ -32041,7 +32073,8 @@ rdrand_step:
else
op2 = gen_rtx_SUBREG (SImode, op0, 0);
- if (target == 0)
+ if (target == 0
+ || !register_operand (target, SImode))
target = gen_reg_rtx (SImode);
pat = gen_rtx_GEU (VOIDmode, gen_rtx_REG (CCCmode, FLAGS_REG),
@@ -32083,7 +32116,8 @@ rdseed_step:
const0_rtx);
emit_insn (gen_rtx_SET (VOIDmode, op2, pat));
- if (target == 0)
+ if (target == 0
+ || !register_operand (target, SImode))
target = gen_reg_rtx (SImode);
emit_insn (gen_zero_extendqisi2 (target, op2));
@@ -32222,7 +32256,9 @@ addcarryx:
mode4 = insn_data[icode].operand[5].mode;
if (target == NULL_RTX
- || GET_MODE (target) != insn_data[icode].operand[0].mode)
+ || GET_MODE (target) != insn_data[icode].operand[0].mode
+ || !insn_data[icode].operand[0].predicate (target,
+ GET_MODE (target)))
subtarget = gen_reg_rtx (insn_data[icode].operand[0].mode);
else
subtarget = target;
@@ -33893,10 +33929,10 @@ ix86_hard_regno_mode_ok (int regno, enum machine_mode mode)
{
/* We implement the move patterns for all vector modes into and
out of SSE registers, even when no operation instructions
- are available. OImode move is available only when AVX is
- enabled. */
- return ((TARGET_AVX && mode == OImode)
- || VALID_AVX256_REG_MODE (mode)
+ are available. OImode and AVX modes are available only when
+ AVX is enabled. */
+ return ((TARGET_AVX
+ && VALID_AVX256_REG_OR_OI_MODE (mode))
|| VALID_SSE_REG_MODE (mode)
|| VALID_SSE2_REG_MODE (mode)
|| VALID_MMX_REG_MODE (mode)
@@ -35034,7 +35070,7 @@ x86_output_mi_thunk (FILE *file,
{
tmp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, fnaddr), UNSPEC_GOTPCREL);
tmp = gen_rtx_CONST (Pmode, tmp);
- fnaddr = gen_rtx_MEM (Pmode, tmp);
+ fnaddr = gen_const_mem (Pmode, tmp);
}
}
else
@@ -35054,8 +35090,9 @@ x86_output_mi_thunk (FILE *file,
output_set_got (tmp, NULL_RTX);
fnaddr = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, fnaddr), UNSPEC_GOT);
- fnaddr = gen_rtx_PLUS (Pmode, fnaddr, tmp);
- fnaddr = gen_rtx_MEM (Pmode, fnaddr);
+ fnaddr = gen_rtx_CONST (Pmode, fnaddr);
+ fnaddr = gen_rtx_PLUS (Pmode, tmp, fnaddr);
+ fnaddr = gen_const_mem (Pmode, fnaddr);
}
}
@@ -35246,7 +35283,10 @@ ix86_avoid_jump_mispredicts (void)
The smallest offset in the page INSN can start is the case where START
ends on the offset 0. Offset of INSN is then NBYTES - sizeof (INSN).
We add p2align to 16byte window with maxskip 15 - NBYTES + sizeof (INSN).
- */
+
+ Don't consider asm goto as jump, while it can contain a jump, it doesn't
+ have to, control transfer to label(s) can be performed through other
+ means, and also we estimate minimum length of all asm stmts as 0. */
for (insn = start; insn; insn = NEXT_INSN (insn))
{
int min_size;
@@ -35274,6 +35314,7 @@ ix86_avoid_jump_mispredicts (void)
{
start = NEXT_INSN (start);
if ((JUMP_P (start)
+ && asm_noperands (PATTERN (start)) < 0
&& GET_CODE (PATTERN (start)) != ADDR_VEC
&& GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
|| CALL_P (start))
@@ -35292,6 +35333,7 @@ ix86_avoid_jump_mispredicts (void)
fprintf (dump_file, "Insn %i estimated to %i bytes\n",
INSN_UID (insn), min_size);
if ((JUMP_P (insn)
+ && asm_noperands (PATTERN (insn)) < 0
&& GET_CODE (PATTERN (insn)) != ADDR_VEC
&& GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
|| CALL_P (insn))
@@ -35303,6 +35345,7 @@ ix86_avoid_jump_mispredicts (void)
{
start = NEXT_INSN (start);
if ((JUMP_P (start)
+ && asm_noperands (PATTERN (start)) < 0
&& GET_CODE (PATTERN (start)) != ADDR_VEC
&& GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
|| CALL_P (start))
@@ -39385,6 +39428,8 @@ expand_vec_perm_interleave2 (struct expand_vec_perm_d *d)
else
dfinal.perm[i] = e;
}
+
+ if (!d->testing_p)
dfinal.op0 = gen_reg_rtx (dfinal.vmode);
dfinal.op1 = dfinal.op0;
dfinal.one_operand_p = true;
@@ -39820,6 +39865,9 @@ expand_vec_perm_pshufb2 (struct expand_vec_perm_d *d)
return false;
gcc_assert (!d->one_operand_p);
+ if (d->testing_p)
+ return true;
+
nelt = d->nelt;
eltsz = GET_MODE_SIZE (GET_MODE_INNER (d->vmode));
@@ -40019,6 +40067,8 @@ expand_vec_perm_even_odd_1 (struct expand_vec_perm_d *d, unsigned odd)
switch (d->vmode)
{
case V4DFmode:
+ if (d->testing_p)
+ break;
t1 = gen_reg_rtx (V4DFmode);
t2 = gen_reg_rtx (V4DFmode);
@@ -40038,6 +40088,8 @@ expand_vec_perm_even_odd_1 (struct expand_vec_perm_d *d, unsigned odd)
{
int mask = odd ? 0xdd : 0x88;
+ if (d->testing_p)
+ break;
t1 = gen_reg_rtx (V8SFmode);
t2 = gen_reg_rtx (V8SFmode);
t3 = gen_reg_rtx (V8SFmode);
@@ -40079,6 +40131,8 @@ expand_vec_perm_even_odd_1 (struct expand_vec_perm_d *d, unsigned odd)
return expand_vec_perm_pshufb2 (d);
else
{
+ if (d->testing_p)
+ break;
/* We need 2*log2(N)-1 operations to achieve odd/even
with interleave. */
t1 = gen_reg_rtx (V8HImode);
@@ -40100,6 +40154,8 @@ expand_vec_perm_even_odd_1 (struct expand_vec_perm_d *d, unsigned odd)
return expand_vec_perm_pshufb2 (d);
else
{
+ if (d->testing_p)
+ break;
t1 = gen_reg_rtx (V16QImode);
t2 = gen_reg_rtx (V16QImode);
t3 = gen_reg_rtx (V16QImode);
@@ -40132,6 +40188,9 @@ expand_vec_perm_even_odd_1 (struct expand_vec_perm_d *d, unsigned odd)
return expand_vec_perm_even_odd_1 (&d_copy, odd);
}
+ if (d->testing_p)
+ break;
+
t1 = gen_reg_rtx (V4DImode);
t2 = gen_reg_rtx (V4DImode);
@@ -40158,6 +40217,9 @@ expand_vec_perm_even_odd_1 (struct expand_vec_perm_d *d, unsigned odd)
return expand_vec_perm_even_odd_1 (&d_copy, odd);
}
+ if (d->testing_p)
+ break;
+
t1 = gen_reg_rtx (V8SImode);
t2 = gen_reg_rtx (V8SImode);
@@ -40250,6 +40312,8 @@ expand_vec_perm_broadcast_1 (struct expand_vec_perm_d *d)
case V16QImode:
/* These can be implemented via interleave. We save one insn by
stopping once we have promoted to V4SImode and then use pshufd. */
+ if (d->testing_p)
+ return true;
do
{
rtx dest;
@@ -42487,8 +42551,6 @@ ix86_memmodel_check (unsigned HOST_WIDE_INT val)
#undef TARGET_PROMOTE_PROTOTYPES
#define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true
-#undef TARGET_STRUCT_VALUE_RTX
-#define TARGET_STRUCT_VALUE_RTX ix86_struct_value_rtx
#undef TARGET_SETUP_INCOMING_VARARGS
#define TARGET_SETUP_INCOMING_VARARGS ix86_setup_incoming_varargs
#undef TARGET_MUST_PASS_IN_STACK
diff --git a/gcc-4.8/gcc/config/i386/i386.h b/gcc-4.8/gcc/config/i386/i386.h
index f68aa93e0..3810be048 100644
--- a/gcc-4.8/gcc/config/i386/i386.h
+++ b/gcc-4.8/gcc/config/i386/i386.h
@@ -197,10 +197,10 @@ extern const struct processor_costs ix86_size_cost;
/* Macros used in the machine description to test the flags. */
-/* configure can arrange to make this 2, to force a 486. */
+/* configure can arrange to change it. */
#ifndef TARGET_CPU_DEFAULT
-#define TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT_generic
+#define TARGET_CPU_DEFAULT PROCESSOR_GENERIC32
#endif
#ifndef TARGET_FPMATH_DEFAULT
@@ -594,43 +594,6 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
/* Target Pragmas. */
#define REGISTER_TARGET_PRAGMAS() ix86_register_pragmas ()
-enum target_cpu_default
-{
- TARGET_CPU_DEFAULT_generic = 0,
-
- TARGET_CPU_DEFAULT_i386,
- TARGET_CPU_DEFAULT_i486,
- TARGET_CPU_DEFAULT_pentium,
- TARGET_CPU_DEFAULT_pentium_mmx,
- TARGET_CPU_DEFAULT_pentiumpro,
- TARGET_CPU_DEFAULT_pentium2,
- TARGET_CPU_DEFAULT_pentium3,
- TARGET_CPU_DEFAULT_pentium4,
- TARGET_CPU_DEFAULT_pentium_m,
- TARGET_CPU_DEFAULT_prescott,
- TARGET_CPU_DEFAULT_nocona,
- TARGET_CPU_DEFAULT_core2,
- TARGET_CPU_DEFAULT_corei7,
- TARGET_CPU_DEFAULT_haswell,
- TARGET_CPU_DEFAULT_atom,
-
- TARGET_CPU_DEFAULT_geode,
- TARGET_CPU_DEFAULT_k6,
- TARGET_CPU_DEFAULT_k6_2,
- TARGET_CPU_DEFAULT_k6_3,
- TARGET_CPU_DEFAULT_athlon,
- TARGET_CPU_DEFAULT_athlon_sse,
- TARGET_CPU_DEFAULT_k8,
- TARGET_CPU_DEFAULT_amdfam10,
- TARGET_CPU_DEFAULT_bdver1,
- TARGET_CPU_DEFAULT_bdver2,
- TARGET_CPU_DEFAULT_bdver3,
- TARGET_CPU_DEFAULT_btver1,
- TARGET_CPU_DEFAULT_btver2,
-
- TARGET_CPU_DEFAULT_max
-};
-
#ifndef CC1_SPEC
#define CC1_SPEC "%(cc1_cpu) "
#endif
@@ -2095,32 +2058,33 @@ do { \
with x86-64 medium memory model */
#define DEFAULT_LARGE_SECTION_THRESHOLD 65536
-/* Which processor to tune code generation for. */
+/* Which processor to tune code generation for. These must be in sync
+ with processor_target_table in i386.c. */
enum processor_type
{
- PROCESSOR_I386 = 0, /* 80386 */
+ PROCESSOR_GENERIC32 = 0,
+ PROCESSOR_GENERIC64,
+ PROCESSOR_I386, /* 80386 */
PROCESSOR_I486, /* 80486DX, 80486SX, 80486DX[24] */
PROCESSOR_PENTIUM,
PROCESSOR_PENTIUMPRO,
- PROCESSOR_GEODE,
- PROCESSOR_K6,
- PROCESSOR_ATHLON,
PROCESSOR_PENTIUM4,
- PROCESSOR_K8,
PROCESSOR_NOCONA,
PROCESSOR_CORE2,
PROCESSOR_COREI7,
PROCESSOR_HASWELL,
- PROCESSOR_GENERIC32,
- PROCESSOR_GENERIC64,
+ PROCESSOR_ATOM,
+ PROCESSOR_GEODE,
+ PROCESSOR_K6,
+ PROCESSOR_ATHLON,
+ PROCESSOR_K8,
PROCESSOR_AMDFAM10,
PROCESSOR_BDVER1,
PROCESSOR_BDVER2,
PROCESSOR_BDVER3,
PROCESSOR_BTVER1,
PROCESSOR_BTVER2,
- PROCESSOR_ATOM,
PROCESSOR_max
};
diff --git a/gcc-4.8/gcc/config/i386/i386.md b/gcc-4.8/gcc/config/i386/i386.md
index 576a19cf5..3b5bf884d 100644
--- a/gcc-4.8/gcc/config/i386/i386.md
+++ b/gcc-4.8/gcc/config/i386/i386.md
@@ -363,6 +363,13 @@
(const_string "unknown")]
(const_string "integer")))
+;; The minimum required alignment of vector mode memory operands of the SSE
+;; (non-VEX/EVEX) instruction in bits, if it is different from
+;; GET_MODE_ALIGNMENT of the operand, otherwise 0. If an instruction has
+;; multiple alternatives, this should be conservative maximum of those minimum
+;; required alignments.
+(define_attr "ssememalign" "" (const_int 0))
+
;; The (bounding maximum) length of an instruction immediate.
(define_attr "length_immediate" ""
(cond [(eq_attr "type" "incdec,setcc,icmov,str,lea,other,multi,idiv,leave,
@@ -1570,7 +1577,7 @@
split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
operands[1] = gen_lowpart (DImode, operands[2]);
- operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
+ operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
GEN_INT (4)));
})
@@ -1587,7 +1594,7 @@
split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
operands[1] = gen_lowpart (DImode, operands[2]);
- operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
+ operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
GEN_INT (4)));
})
@@ -2715,7 +2722,20 @@
"reload_completed"
[(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_dup 2)))
(set (mem:SF (reg:P SP_REG)) (match_dup 1))]
- "operands[2] = GEN_INT (-GET_MODE_SIZE (<P:MODE>mode));")
+{
+ rtx op = XEXP (operands[0], 0);
+ if (GET_CODE (op) == PRE_DEC)
+ {
+ gcc_assert (!TARGET_64BIT);
+ op = GEN_INT (-4);
+ }
+ else
+ {
+ op = XEXP (XEXP (op, 1), 1);
+ gcc_assert (CONST_INT_P (op));
+ }
+ operands[2] = op;
+})
(define_split
[(set (match_operand:SF 0 "push_operand")
@@ -5443,6 +5463,12 @@
mode = SImode;
ix86_split_lea_for_addr (curr_insn, operands, mode);
+
+ /* Zero-extend return register to DImode for zero-extended addresses. */
+ if (mode != <MODE>mode)
+ emit_insn (gen_zero_extendsidi2
+ (operands[0], gen_lowpart (mode, operands[0])));
+
DONE;
}
[(set_attr "type" "lea")
@@ -6589,7 +6615,7 @@
(set_attr "use_carry" "1")
(set_attr "mode" "<MODE>")])
-;; Overflow setting add and subtract instructions
+;; Overflow setting add instructions
(define_insn "*add<mode>3_cconly_overflow"
[(set (reg:CCC FLAGS_REG)
@@ -6604,43 +6630,31 @@
[(set_attr "type" "alu")
(set_attr "mode" "<MODE>")])
-(define_insn "*sub<mode>3_cconly_overflow"
- [(set (reg:CCC FLAGS_REG)
- (compare:CCC
- (minus:SWI
- (match_operand:SWI 0 "nonimmediate_operand" "<r>m,<r>")
- (match_operand:SWI 1 "<general_operand>" "<r><i>,<r>m"))
- (match_dup 0)))]
- ""
- "cmp{<imodesuffix>}\t{%1, %0|%0, %1}"
- [(set_attr "type" "icmp")
- (set_attr "mode" "<MODE>")])
-
-(define_insn "*<plusminus_insn><mode>3_cc_overflow"
+(define_insn "*add<mode>3_cc_overflow"
[(set (reg:CCC FLAGS_REG)
(compare:CCC
- (plusminus:SWI
- (match_operand:SWI 1 "nonimmediate_operand" "<comm>0,0")
+ (plus:SWI
+ (match_operand:SWI 1 "nonimmediate_operand" "%0,0")
(match_operand:SWI 2 "<general_operand>" "<r><i>,<r>m"))
(match_dup 1)))
(set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>")
- (plusminus:SWI (match_dup 1) (match_dup 2)))]
- "ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
- "<plusminus_mnemonic>{<imodesuffix>}\t{%2, %0|%0, %2}"
+ (plus:SWI (match_dup 1) (match_dup 2)))]
+ "ix86_binary_operator_ok (PLUS, <MODE>mode, operands)"
+ "add{<imodesuffix>}\t{%2, %0|%0, %2}"
[(set_attr "type" "alu")
(set_attr "mode" "<MODE>")])
-(define_insn "*<plusminus_insn>si3_zext_cc_overflow"
+(define_insn "*addsi3_zext_cc_overflow"
[(set (reg:CCC FLAGS_REG)
(compare:CCC
- (plusminus:SI
- (match_operand:SI 1 "nonimmediate_operand" "<comm>0")
+ (plus:SI
+ (match_operand:SI 1 "nonimmediate_operand" "%0")
(match_operand:SI 2 "x86_64_general_operand" "rme"))
(match_dup 1)))
(set (match_operand:DI 0 "register_operand" "=r")
- (zero_extend:DI (plusminus:SI (match_dup 1) (match_dup 2))))]
- "TARGET_64BIT && ix86_binary_operator_ok (<CODE>, SImode, operands)"
- "<plusminus_mnemonic>{l}\t{%2, %k0|%k0, %2}"
+ (zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))]
+ "TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands)"
+ "add{l}\t{%2, %k0|%k0, %2}"
[(set_attr "type" "alu")
(set_attr "mode" "SI")])
@@ -8012,7 +8026,18 @@
(const_int 0)))
(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,rm")
(and:DI (match_dup 1) (match_dup 2)))]
- "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)
+ "TARGET_64BIT
+ && ix86_match_ccmode
+ (insn,
+ /* If we are going to emit andl instead of andq, and the operands[2]
+ constant might have the SImode sign bit set, make sure the sign
+ flag isn't tested, because the instruction will set the sign flag
+ based on bit 31 rather than bit 63. If it isn't CONST_INT,
+ conservatively assume it might have bit 31 set. */
+ (satisfies_constraint_Z (operands[2])
+ && (!CONST_INT_P (operands[2])
+ || val_signbit_known_set_p (SImode, INTVAL (operands[2]))))
+ ? CCZmode : CCNOmode)
&& ix86_binary_operator_ok (AND, DImode, operands)"
"@
and{l}\t{%k2, %k0|%k0, %k2}
@@ -17569,7 +17594,13 @@
(define_insn "trap"
[(trap_if (const_int 1) (const_int 6))]
""
- { return ASM_SHORT "0x0b0f"; }
+{
+#ifdef HAVE_AS_IX86_UD2
+ return "ud2";
+#else
+ return ASM_SHORT "0x0b0f";
+#endif
+}
[(set_attr "length" "2")])
(define_expand "prefetch"
diff --git a/gcc-4.8/gcc/config/i386/sse.md b/gcc-4.8/gcc/config/i386/sse.md
index 05cf7f9a0..8b44e1d9e 100644
--- a/gcc-4.8/gcc/config/i386/sse.md
+++ b/gcc-4.8/gcc/config/i386/sse.md
@@ -605,6 +605,7 @@
}
[(set_attr "type" "ssemov")
(set_attr "movu" "1")
+ (set_attr "ssememalign" "8")
(set_attr "prefix" "maybe_vex")
(set (attr "mode")
(cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
@@ -634,6 +635,7 @@
}
[(set_attr "type" "ssemov")
(set_attr "movu" "1")
+ (set_attr "ssememalign" "8")
(set_attr "prefix" "maybe_vex")
(set (attr "mode")
(cond [(ior (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
@@ -663,6 +665,7 @@
}
[(set_attr "type" "ssemov")
(set_attr "movu" "1")
+ (set_attr "ssememalign" "8")
(set (attr "prefix_data16")
(if_then_else
(match_test "TARGET_AVX")
@@ -696,6 +699,7 @@
}
[(set_attr "type" "ssemov")
(set_attr "movu" "1")
+ (set_attr "ssememalign" "8")
(set (attr "prefix_data16")
(if_then_else
(match_test "TARGET_AVX")
@@ -721,6 +725,7 @@
"%vlddqu\t{%1, %0|%0, %1}"
[(set_attr "type" "ssemov")
(set_attr "movu" "1")
+ (set_attr "ssememalign" "8")
(set (attr "prefix_data16")
(if_then_else
(match_test "TARGET_AVX")
@@ -1001,6 +1006,7 @@
vrcpss\t{%1, %2, %0|%0, %2, %1}"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "sse")
+ (set_attr "ssememalign" "32")
(set_attr "atom_sse_attr" "rcp")
(set_attr "btver2_sse_attr" "rcp")
(set_attr "prefix" "orig,vex")
@@ -1089,6 +1095,7 @@
vrsqrtss\t{%1, %2, %0|%0, %2, %1}"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "sse")
+ (set_attr "ssememalign" "32")
(set_attr "prefix" "orig,vex")
(set_attr "mode" "SF")])
@@ -2844,6 +2851,7 @@
"%vcvtdq2pd\t{%1, %0|%0, %q1}"
[(set_attr "type" "ssecvt")
(set_attr "prefix" "maybe_vex")
+ (set_attr "ssememalign" "64")
(set_attr "mode" "V2DF")])
(define_insn "avx_cvtpd2dq256"
@@ -3572,6 +3580,7 @@
%vmovhps\t{%2, %0|%0, %2}"
[(set_attr "isa" "noavx,avx,noavx,avx,*")
(set_attr "type" "ssemov")
+ (set_attr "ssememalign" "64")
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
(set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
@@ -3617,6 +3626,7 @@
%vmovlps\t{%2, %H0|%H0, %2}"
[(set_attr "isa" "noavx,avx,noavx,avx,*")
(set_attr "type" "ssemov")
+ (set_attr "ssememalign" "64")
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
(set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
@@ -3941,6 +3951,7 @@
%vmovhlps\t{%1, %d0|%d0, %1}
%vmovlps\t{%H1, %d0|%d0, %H1}"
[(set_attr "type" "ssemov")
+ (set_attr "ssememalign" "64")
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "V2SF,V4SF,V2SF")])
@@ -3980,6 +3991,7 @@
%vmovlps\t{%2, %H0|%H0, %2}"
[(set_attr "isa" "noavx,avx,noavx,avx,*")
(set_attr "type" "ssemov")
+ (set_attr "ssememalign" "64")
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
(set_attr "mode" "V2SF,V2SF,V4SF,V4SF,V2SF")])
@@ -4033,6 +4045,7 @@
%vmovlps\t{%2, %0|%0, %2}"
[(set_attr "isa" "noavx,avx,noavx,avx,*")
(set_attr "type" "sseshuf,sseshuf,ssemov,ssemov,ssemov")
+ (set_attr "ssememalign" "64")
(set_attr "length_immediate" "1,1,*,*,*")
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
(set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
@@ -4643,6 +4656,7 @@
%vmovhpd\t{%1, %0|%0, %1}"
[(set_attr "isa" "noavx,avx,sse3,noavx,avx,*")
(set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
+ (set_attr "ssememalign" "64")
(set_attr "prefix_data16" "*,*,*,1,*,1")
(set_attr "prefix" "orig,vex,maybe_vex,orig,vex,maybe_vex")
(set_attr "mode" "V2DF,V2DF,DF,V1DF,V1DF,V1DF")])
@@ -4744,6 +4758,7 @@
%vmovlpd\t{%2, %H0|%H0, %2}"
[(set_attr "isa" "noavx,avx,sse3,noavx,avx,*")
(set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
+ (set_attr "ssememalign" "64")
(set_attr "prefix_data16" "*,*,*,1,*,1")
(set_attr "prefix" "orig,vex,maybe_vex,orig,vex,maybe_vex")
(set_attr "mode" "V2DF,V2DF,DF,V1DF,V1DF,V1DF")])
@@ -4982,6 +4997,7 @@
movhlps\t{%1, %0|%0, %1}
movlps\t{%H1, %0|%0, %H1}"
[(set_attr "type" "ssemov")
+ (set_attr "ssememalign" "64")
(set_attr "mode" "V2SF,V4SF,V2SF")])
;; Avoid combining registers from different units in a single alternative,
@@ -5077,6 +5093,7 @@
#"
[(set_attr "isa" "noavx,avx,noavx,avx,*,*,*")
(set_attr "type" "ssemov,ssemov,sselog,sselog,ssemov,fmov,imov")
+ (set_attr "ssememalign" "64")
(set_attr "prefix_data16" "1,*,*,*,*,*,*")
(set_attr "prefix" "orig,vex,orig,vex,*,*,*")
(set_attr "mode" "V1DF,V1DF,V2DF,V2DF,DF,DF,DF")])
@@ -5145,6 +5162,7 @@
(const_string "imov")
]
(const_string "ssemov")))
+ (set_attr "ssememalign" "64")
(set_attr "prefix_data16" "*,1,*,*,*,*,1,*,*,*,*")
(set_attr "length_immediate" "*,*,*,*,*,1,*,*,*,*,*")
(set_attr "prefix" "maybe_vex,orig,vex,orig,vex,orig,orig,vex,*,*,*")
@@ -5189,6 +5207,7 @@
(const_string "1")
(const_string "*")))
(set_attr "length_immediate" "*,*,*,*,*,1,*,*,*")
+ (set_attr "ssememalign" "64")
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex,orig,orig,vex,maybe_vex")
(set_attr "mode" "DF,DF,V1DF,V1DF,V1DF,V2DF,V1DF,V1DF,V1DF")])
@@ -8736,6 +8755,7 @@
"TARGET_SSE4_1"
"%vpmov<extsuffix>bw\t{%1, %0|%0, %q1}"
[(set_attr "type" "ssemov")
+ (set_attr "ssememalign" "64")
(set_attr "prefix_extra" "1")
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "TI")])
@@ -8766,6 +8786,7 @@
"TARGET_SSE4_1"
"%vpmov<extsuffix>bd\t{%1, %0|%0, %k1}"
[(set_attr "type" "ssemov")
+ (set_attr "ssememalign" "32")
(set_attr "prefix_extra" "1")
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "TI")])
@@ -8791,6 +8812,7 @@
"TARGET_SSE4_1"
"%vpmov<extsuffix>wd\t{%1, %0|%0, %q1}"
[(set_attr "type" "ssemov")
+ (set_attr "ssememalign" "64")
(set_attr "prefix_extra" "1")
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "TI")])
@@ -8818,6 +8840,7 @@
"TARGET_SSE4_1"
"%vpmov<extsuffix>bq\t{%1, %0|%0, %w1}"
[(set_attr "type" "ssemov")
+ (set_attr "ssememalign" "16")
(set_attr "prefix_extra" "1")
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "TI")])
@@ -8845,6 +8868,7 @@
"TARGET_SSE4_1"
"%vpmov<extsuffix>wq\t{%1, %0|%0, %k1}"
[(set_attr "type" "ssemov")
+ (set_attr "ssememalign" "32")
(set_attr "prefix_extra" "1")
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "TI")])
@@ -8868,6 +8892,7 @@
"TARGET_SSE4_1"
"%vpmov<extsuffix>dq\t{%1, %0|%0, %q1}"
[(set_attr "type" "ssemov")
+ (set_attr "ssememalign" "64")
(set_attr "prefix_extra" "1")
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "TI")])
@@ -9151,6 +9176,7 @@
[(set_attr "type" "sselog")
(set_attr "prefix_data16" "1")
(set_attr "prefix_extra" "1")
+ (set_attr "ssememalign" "8")
(set_attr "length_immediate" "1")
(set_attr "memory" "none,load")
(set_attr "mode" "TI")])
@@ -9213,6 +9239,7 @@
[(set_attr "type" "sselog")
(set_attr "prefix_data16" "1")
(set_attr "prefix_extra" "1")
+ (set_attr "ssememalign" "8")
(set_attr "length_immediate" "1")
(set_attr "memory" "load")
(set_attr "mode" "TI")])
@@ -9240,6 +9267,7 @@
(set_attr "prefix_data16" "1")
(set_attr "prefix_extra" "1")
(set_attr "prefix" "maybe_vex")
+ (set_attr "ssememalign" "8")
(set_attr "length_immediate" "1")
(set_attr "btver2_decode" "vector")
(set_attr "memory" "none,load")
@@ -9267,6 +9295,7 @@
[(set_attr "type" "sselog")
(set_attr "prefix_data16" "1")
(set_attr "prefix_extra" "1")
+ (set_attr "ssememalign" "8")
(set_attr "length_immediate" "1")
(set_attr "prefix" "maybe_vex")
(set_attr "btver2_decode" "vector")
@@ -9293,6 +9322,7 @@
[(set_attr "type" "sselog")
(set_attr "prefix_data16" "1")
(set_attr "prefix_extra" "1")
+ (set_attr "ssememalign" "8")
(set_attr "length_immediate" "1")
(set_attr "memory" "none,load,none,load")
(set_attr "btver2_decode" "vector,vector,vector,vector")
@@ -9346,6 +9376,7 @@
[(set_attr "type" "sselog")
(set_attr "prefix_data16" "1")
(set_attr "prefix_extra" "1")
+ (set_attr "ssememalign" "8")
(set_attr "length_immediate" "1")
(set_attr "memory" "none,load")
(set_attr "mode" "TI")])
@@ -9399,6 +9430,7 @@
[(set_attr "type" "sselog")
(set_attr "prefix_data16" "1")
(set_attr "prefix_extra" "1")
+ (set_attr "ssememalign" "8")
(set_attr "length_immediate" "1")
(set_attr "memory" "load")
(set_attr "mode" "TI")])
@@ -9421,6 +9453,7 @@
[(set_attr "type" "sselog")
(set_attr "prefix_data16" "1")
(set_attr "prefix_extra" "1")
+ (set_attr "ssememalign" "8")
(set_attr "length_immediate" "1")
(set_attr "prefix" "maybe_vex")
(set_attr "memory" "none,load")
@@ -9445,6 +9478,7 @@
[(set_attr "type" "sselog")
(set_attr "prefix_data16" "1")
(set_attr "prefix_extra" "1")
+ (set_attr "ssememalign" "8")
(set_attr "length_immediate" "1")
(set_attr "prefix" "maybe_vex")
(set_attr "memory" "none,load")
@@ -9469,6 +9503,7 @@
[(set_attr "type" "sselog")
(set_attr "prefix_data16" "1")
(set_attr "prefix_extra" "1")
+ (set_attr "ssememalign" "8")
(set_attr "length_immediate" "1")
(set_attr "memory" "none,load,none,load")
(set_attr "prefix" "maybe_vex")
@@ -10213,21 +10248,18 @@
[(set_attr "type" "ssecvt1")
(set_attr "mode" "<MODE>")])
-;; scalar insns
(define_expand "xop_vmfrcz<mode>2"
[(set (match_operand:VF_128 0 "register_operand")
(vec_merge:VF_128
(unspec:VF_128
[(match_operand:VF_128 1 "nonimmediate_operand")]
UNSPEC_FRCZ)
- (match_dup 3)
+ (match_dup 2)
(const_int 1)))]
"TARGET_XOP"
-{
- operands[3] = CONST0_RTX (<MODE>mode);
-})
+ "operands[2] = CONST0_RTX (<MODE>mode);")
-(define_insn "*xop_vmfrcz_<mode>"
+(define_insn "*xop_vmfrcz<mode>2"
[(set (match_operand:VF_128 0 "register_operand" "=x")
(vec_merge:VF_128
(unspec:VF_128
diff --git a/gcc-4.8/gcc/config/i386/t-rtems b/gcc-4.8/gcc/config/i386/t-rtems
index 6161ec100..fef4c22e9 100644
--- a/gcc-4.8/gcc/config/i386/t-rtems
+++ b/gcc-4.8/gcc/config/i386/t-rtems
@@ -17,11 +17,10 @@
# <http://www.gnu.org/licenses/>.
#
-MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \
-msoft-float
+MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro msoft-float
MULTILIB_DIRNAMES= m486 mpentium mpentiumpro soft-float
-MULTILIB_MATCHES = msoft-float=mno-m80387
-MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon
+MULTILIB_MATCHES = msoft-float=mno-80387
+MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?athlon
MULTILIB_EXCEPTIONS = \
mtune=pentium/*msoft-float* \
mtune=pentiumpro/*msoft-float*
diff --git a/gcc-4.8/gcc/config/i386/winnt.c b/gcc-4.8/gcc/config/i386/winnt.c
index 7e7c1555a..1e49a461a 100644
--- a/gcc-4.8/gcc/config/i386/winnt.c
+++ b/gcc-4.8/gcc/config/i386/winnt.c
@@ -547,8 +547,9 @@ i386_pe_asm_named_section (const char *name, unsigned int flags,
sets 'discard' characteristic, rather than telling linker
to warn of size or content mismatch, so do the same. */
bool discard = (flags & SECTION_CODE)
- || lookup_attribute ("selectany",
- DECL_ATTRIBUTES (decl));
+ || (TREE_CODE (decl) != IDENTIFIER_NODE
+ && lookup_attribute ("selectany",
+ DECL_ATTRIBUTES (decl)));
fprintf (asm_out_file, "\t.linkonce %s\n",
(discard ? "discard" : "same_size"));
}
diff --git a/gcc-4.8/gcc/config/i386/xopintrin.h b/gcc-4.8/gcc/config/i386/xopintrin.h
index 66b0f0de5..d2a99a167 100644
--- a/gcc-4.8/gcc/config/i386/xopintrin.h
+++ b/gcc-4.8/gcc/config/i386/xopintrin.h
@@ -745,13 +745,17 @@ _mm_frcz_pd (__m128d __A)
extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_frcz_ss (__m128 __A, __m128 __B)
{
- return (__m128) __builtin_ia32_vfrczss ((__v4sf)__A, (__v4sf)__B);
+ return (__m128) __builtin_ia32_movss ((__v4sf)__A,
+ (__v4sf)
+ __builtin_ia32_vfrczss ((__v4sf)__B));
}
extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_frcz_sd (__m128d __A, __m128d __B)
{
- return (__m128d) __builtin_ia32_vfrczsd ((__v2df)__A, (__v2df)__B);
+ return (__m128d) __builtin_ia32_movsd ((__v2df)__A,
+ (__v2df)
+ __builtin_ia32_vfrczsd ((__v2df)__B));
}
extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
diff --git a/gcc-4.8/gcc/config/m68k/m68k.c b/gcc-4.8/gcc/config/m68k/m68k.c
index 5e3236fa8..a662bed81 100644
--- a/gcc-4.8/gcc/config/m68k/m68k.c
+++ b/gcc-4.8/gcc/config/m68k/m68k.c
@@ -3325,12 +3325,12 @@ handle_move_double (rtx operands[2],
latehalf[1] = adjust_address (operands[1], SImode, 0);
}
- /* If insn is effectively movd N(sp),-(sp) then we will do the
- high word first. We should use the adjusted operand 1 (which is N+4(sp))
- for the low word as well, to compensate for the first decrement of sp. */
+ /* If insn is effectively movd N(REG),-(REG) then we will do the high
+ word first. We should use the adjusted operand 1 (which is N+4(REG))
+ for the low word as well, to compensate for the first decrement of
+ REG. */
if (optype0 == PUSHOP
- && REGNO (XEXP (XEXP (operands[0], 0), 0)) == STACK_POINTER_REGNUM
- && reg_overlap_mentioned_p (stack_pointer_rtx, operands[1]))
+ && reg_overlap_mentioned_p (XEXP (XEXP (operands[0], 0), 0), operands[1]))
operands[1] = middlehalf[1] = latehalf[1];
/* For (set (reg:DI N) (mem:DI ... (reg:SI N) ...)),
diff --git a/gcc-4.8/gcc/config/microblaze/microblaze.c b/gcc-4.8/gcc/config/microblaze/microblaze.c
index c121c2bae..914246bd5 100644
--- a/gcc-4.8/gcc/config/microblaze/microblaze.c
+++ b/gcc-4.8/gcc/config/microblaze/microblaze.c
@@ -1609,21 +1609,28 @@ static int
microblaze_version_to_int (const char *version)
{
const char *p, *v;
- const char *tmpl = "vX.YY.Z";
+ const char *tmpl = "vXX.YY.Z";
int iver = 0;
p = version;
v = tmpl;
- while (*v)
+ while (*p)
{
if (*v == 'X')
{ /* Looking for major */
+ if (*p == '.')
+ {
+ *v++;
+ }
+ else
+ {
if (!(*p >= '0' && *p <= '9'))
return -1;
iver += (int) (*p - '0');
iver *= 10;
}
+ }
else if (*v == 'Y')
{ /* Looking for minor */
if (!(*p >= '0' && *p <= '9'))
@@ -3064,6 +3071,73 @@ expand_pic_symbol_ref (enum machine_mode mode ATTRIBUTE_UNUSED, rtx op)
return result;
}
+static void
+microblaze_asm_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
+ HOST_WIDE_INT delta, HOST_WIDE_INT vcall_offset,
+ tree function)
+{
+ rtx this_rtx, insn, funexp;
+
+ reload_completed = 1;
+ epilogue_completed = 1;
+
+ /* Mark the end of the (empty) prologue. */
+ emit_note (NOTE_INSN_PROLOGUE_END);
+
+ /* Find the "this" pointer. If the function returns a structure,
+ the structure return pointer is in MB_ABI_FIRST_ARG_REGNUM. */
+ if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)), function))
+ this_rtx = gen_rtx_REG (Pmode, (MB_ABI_FIRST_ARG_REGNUM + 1));
+ else
+ this_rtx = gen_rtx_REG (Pmode, MB_ABI_FIRST_ARG_REGNUM);
+
+ /* Apply the constant offset, if required. */
+ if (delta)
+ emit_insn (gen_addsi3 (this_rtx, this_rtx, GEN_INT (delta)));
+
+ /* Apply the offset from the vtable, if required. */
+ if (vcall_offset)
+ {
+ rtx vcall_offset_rtx = GEN_INT (vcall_offset);
+ rtx temp1 = gen_rtx_REG (Pmode, MB_ABI_TEMP1_REGNUM);
+
+ emit_move_insn (temp1, gen_rtx_MEM (Pmode, this_rtx));
+
+ rtx loc = gen_rtx_PLUS (Pmode, temp1, vcall_offset_rtx);
+ emit_move_insn (temp1, gen_rtx_MEM (Pmode, loc));
+
+ emit_insn (gen_addsi3 (this_rtx, this_rtx, temp1));
+ }
+
+ /* Generate a tail call to the target function. */
+ if (!TREE_USED (function))
+ {
+ assemble_external (function);
+ TREE_USED (function) = 1;
+ }
+
+ funexp = XEXP (DECL_RTL (function), 0);
+ rtx temp2 = gen_rtx_REG (Pmode, MB_ABI_TEMP2_REGNUM);
+
+ if (flag_pic)
+ emit_move_insn (temp2, expand_pic_symbol_ref (Pmode, funexp));
+ else
+ emit_move_insn (temp2, funexp);
+
+ emit_insn (gen_indirect_jump (temp2));
+
+ /* Run just enough of rest_of_compilation. This sequence was
+ "borrowed" from rs6000.c. */
+ insn = get_insns ();
+ shorten_branches (insn);
+ final_start_function (insn, file, 1);
+ final (insn, file, 1);
+ final_end_function ();
+
+ reload_completed = 0;
+ epilogue_completed = 0;
+}
+
bool
microblaze_expand_move (enum machine_mode mode, rtx operands[])
{
@@ -3234,65 +3308,45 @@ microblaze_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
emit_move_insn (mem, fnaddr);
}
-/* Emit instruction to perform compare.
- cmp is (compare_op op0 op1). */
-static rtx
-microblaze_emit_compare (enum machine_mode mode, rtx cmp, enum rtx_code *cmp_code)
+/* Generate conditional branch -- first, generate test condition,
+ second, generate correct branch instruction. */
+
+void
+microblaze_expand_conditional_branch (enum machine_mode mode, rtx operands[])
{
- rtx cmp_op0 = XEXP (cmp, 0);
- rtx cmp_op1 = XEXP (cmp, 1);
+ enum rtx_code code = GET_CODE (operands[0]);
+ rtx cmp_op0 = operands[1];
+ rtx cmp_op1 = operands[2];
+ rtx label1 = operands[3];
rtx comp_reg = gen_reg_rtx (SImode);
- enum rtx_code code = *cmp_code;
+ rtx condition;
gcc_assert ((GET_CODE (cmp_op0) == REG) || (GET_CODE (cmp_op0) == SUBREG));
/* If comparing against zero, just test source reg. */
if (cmp_op1 == const0_rtx)
- return cmp_op0;
+ {
+ comp_reg = cmp_op0;
+ condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp_reg, const0_rtx);
+ emit_jump_insn (gen_condjump (condition, label1));
+ }
- if (code == EQ || code == NE)
+ else if (code == EQ || code == NE)
{
/* Use xor for equal/not-equal comparison. */
emit_insn (gen_xorsi3 (comp_reg, cmp_op0, cmp_op1));
+ condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp_reg, const0_rtx);
+ emit_jump_insn (gen_condjump (condition, label1));
}
- else if (code == GT || code == GTU || code == LE || code == LEU)
- {
- /* MicroBlaze compare is not symmetrical. */
- /* Swap argument order. */
- cmp_op1 = force_reg (mode, cmp_op1);
- if (code == GT || code == LE)
- emit_insn (gen_signed_compare (comp_reg, cmp_op0, cmp_op1));
else
- emit_insn (gen_unsigned_compare (comp_reg, cmp_op0, cmp_op1));
- /* Translate test condition. */
- *cmp_code = swap_condition (code);
- }
- else /* if (code == GE || code == GEU || code == LT || code == LTU) */
{
+ /* Generate compare and branch in single instruction. */
cmp_op1 = force_reg (mode, cmp_op1);
- if (code == GE || code == LT)
- emit_insn (gen_signed_compare (comp_reg, cmp_op1, cmp_op0));
- else
- emit_insn (gen_unsigned_compare (comp_reg, cmp_op1, cmp_op0));
+ condition = gen_rtx_fmt_ee (code, mode, cmp_op0, cmp_op1);
+ emit_jump_insn (gen_branch_compare(condition, cmp_op0, cmp_op1, label1));
}
-
- return comp_reg;
}
-/* Generate conditional branch -- first, generate test condition,
- second, generate correct branch instruction. */
-
-void
-microblaze_expand_conditional_branch (enum machine_mode mode, rtx operands[])
-{
- enum rtx_code code = GET_CODE (operands[0]);
- rtx comp;
- rtx condition;
-
- comp = microblaze_emit_compare (mode, operands[0], &code);
- condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp, const0_rtx);
- emit_jump_insn (gen_condjump (condition, operands[3]));
-}
void
microblaze_expand_conditional_branch_sf (rtx operands[])
@@ -3501,6 +3555,12 @@ microblaze_legitimate_constant_p (enum machine_mode mode ATTRIBUTE_UNUSED, rtx x
#undef TARGET_SECONDARY_RELOAD
#define TARGET_SECONDARY_RELOAD microblaze_secondary_reload
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK microblaze_asm_output_mi_thunk
+
+#undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
+#define TARGET_ASM_CAN_OUTPUT_MI_THUNK hook_bool_const_tree_hwi_hwi_const_tree_true
+
#undef TARGET_SCHED_ADJUST_COST
#define TARGET_SCHED_ADJUST_COST microblaze_adjust_cost
diff --git a/gcc-4.8/gcc/config/microblaze/microblaze.h b/gcc-4.8/gcc/config/microblaze/microblaze.h
index bc4d9a128..34c87c980 100644
--- a/gcc-4.8/gcc/config/microblaze/microblaze.h
+++ b/gcc-4.8/gcc/config/microblaze/microblaze.h
@@ -213,6 +213,12 @@ extern enum pipeline_type microblaze_pipe;
#define STRICT_ALIGNMENT 1
#define PCC_BITFIELD_TYPE_MATTERS 1
+#undef SIZE_TYPE
+#define SIZE_TYPE "unsigned int"
+
+#undef PTRDIFF_TYPE
+#define PTRDIFF_TYPE "int"
+
#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
((TREE_CODE (EXP) == STRING_CST || TREE_CODE (EXP) == CONSTRUCTOR) \
&& (ALIGN) < BITS_PER_WORD \
@@ -407,9 +413,6 @@ extern enum reg_class microblaze_regno_to_class[];
|| GET_MODE (X) == VOIDmode) \
? (GR_REGS) : (CLASS))))
-#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \
- (GET_MODE_CLASS (MODE) == MODE_INT)
-
/* Stack layout; function entry, exit and calling. */
#define STACK_GROWS_DOWNWARD
diff --git a/gcc-4.8/gcc/config/microblaze/microblaze.md b/gcc-4.8/gcc/config/microblaze/microblaze.md
index 3618cad52..f1913b3c1 100644
--- a/gcc-4.8/gcc/config/microblaze/microblaze.md
+++ b/gcc-4.8/gcc/config/microblaze/microblaze.md
@@ -74,7 +74,7 @@
;; bshift Shift operations
(define_attr "type"
- "unknown,branch,jump,call,load,store,move,arith,darith,imul,idiv,icmp,multi,nop,no_delay_arith,no_delay_load,no_delay_store,no_delay_imul,no_delay_move,bshift,fadd,frsub,fmul,fdiv,fcmp,fsl,fsqrt,fcvt"
+ "unknown,branch,jump,call,load,store,move,arith,darith,imul,idiv,icmp,multi,nop,no_delay_arith,no_delay_load,no_delay_store,no_delay_imul,no_delay_move,bshift,fadd,frsub,fmul,fdiv,fcmp,fsl,fsqrt,fcvt,trap"
(const_string "unknown"))
;; Main data type used by the insn
@@ -365,7 +365,8 @@
[(set (match_operand:HI 0 "register_operand" "=r")
(bswap:HI (match_operand:HI 1 "register_operand" "r")))]
"TARGET_REORDER"
- "swaph %0, %1"
+ "swapb %0, %1
+ swaph %0, %0"
)
;;----------------------------------------------------------------
@@ -1118,6 +1119,18 @@
}
)
+;;Load and store reverse
+(define_insn "movsi4_rev"
+ [(set (match_operand:SI 0 "reg_or_mem_operand" "=r,Q")
+ (bswap:SI (match_operand:SF 1 "reg_or_mem_operand" "Q,r")))]
+ "TARGET_REORDER"
+ "@
+ lwr\t%0,%y1,r0
+ swr\t%1,%y0,r0"
+ [(set_attr "type" "load,store")
+ (set_attr "mode" "SI")
+ (set_attr "length" "4,4")])
+
;; 32-bit floating point moves
(define_expand "movsf"
@@ -1472,7 +1485,7 @@
(set_attr "length" "124")]
)
-(define_insn "*ashlri_reg"
+(define_insn "*ashrsi_reg"
[(set (match_operand:SI 0 "register_operand" "=&d")
(ashiftrt:SI (match_operand:SI 1 "register_operand" "d")
(match_operand:SI 2 "register_operand" "d")))]
@@ -1561,7 +1574,7 @@
(set_attr "length" "124")]
)
-(define_insn "*lshlri_reg"
+(define_insn "*lshrsi_reg"
[(set (match_operand:SI 0 "register_operand" "=&d")
(lshiftrt:SI (match_operand:SI 1 "register_operand" "d")
(match_operand:SI 2 "register_operand" "d")))]
@@ -1622,34 +1635,12 @@
(set_attr "length" "4")]
)
-(define_insn "signed_compare"
- [(set (match_operand:SI 0 "register_operand" "=d")
- (unspec
- [(match_operand:SI 1 "register_operand" "d")
- (match_operand:SI 2 "register_operand" "d")] UNSPEC_CMP))]
- ""
- "cmp\t%0,%1,%2"
- [(set_attr "type" "arith")
- (set_attr "mode" "SI")
- (set_attr "length" "4")])
-
-(define_insn "unsigned_compare"
- [(set (match_operand:SI 0 "register_operand" "=d")
- (unspec
- [(match_operand:SI 1 "register_operand" "d")
- (match_operand:SI 2 "register_operand" "d")] UNSPEC_CMPU))]
- ""
- "cmpu\t%0,%1,%2"
- [(set_attr "type" "arith")
- (set_attr "mode" "SI")
- (set_attr "length" "4")])
-
;;----------------------------------------------------------------
;; Setting a register from an floating point comparison.
;;----------------------------------------------------------------
(define_insn "cstoresf4"
[(set (match_operand:SI 0 "register_operand" "=r")
- (match_operator 1 "comparison_operator"
+ (match_operator:SI 1 "ordered_comparison_operator"
[(match_operand:SF 2 "register_operand" "r")
(match_operand:SF 3 "register_operand" "r")]))]
"TARGET_HARD_FLOAT"
@@ -1678,7 +1669,7 @@
(define_expand "cbranchsf4"
[(set (pc)
- (if_then_else (match_operator 0 "comparison_operator"
+ (if_then_else (match_operator 0 "ordered_comparison_operator"
[(match_operand:SF 1 "register_operand")
(match_operand:SF 2 "register_operand")])
(label_ref (match_operand 3 ""))
@@ -1717,6 +1708,47 @@
(set_attr "length" "4")]
)
+(define_insn "branch_compare"
+ [(set (pc)
+ (if_then_else (match_operator:SI 0 "cmp_op"
+ [(match_operand:SI 1 "register_operand" "d")
+ (match_operand:SI 2 "register_operand" "d")
+ ])
+ (label_ref (match_operand 3))
+ (pc)))
+ (clobber(reg:SI R_TMP))]
+ ""
+ {
+ operands[4] = gen_rtx_REG (SImode, MB_ABI_ASM_TEMP_REGNUM);
+ enum rtx_code code = GET_CODE (operands[0]);
+
+ if (code == GT || code == LE)
+ {
+ output_asm_insn ("cmp\tr18,%z1,%z2", operands);
+ code = swap_condition (code);
+ }
+ else if (code == GTU || code == LEU)
+ {
+ output_asm_insn ("cmpu\tr18,%z1,%z2", operands);
+ code = swap_condition (code);
+ }
+ else if (code == GE || code == LT)
+ {
+ output_asm_insn ("cmp\tr18,%z2,%z1", operands);
+ }
+ else if (code == GEU || code == LTU)
+ {
+ output_asm_insn ("cmpu\tr18,%z2,%z1", operands);
+ }
+
+ operands[0] = gen_rtx_fmt_ee (signed_condition (code), SImode, operands[4], const0_rtx);
+ return "b%C0i%?\tr18,%3";
+ }
+ [(set_attr "type" "branch")
+ (set_attr "mode" "none")
+ (set_attr "length" "12")]
+)
+
;;----------------------------------------------------------------
;; Unconditional branches
;;----------------------------------------------------------------
@@ -2201,6 +2233,14 @@
(set_attr "mode" "none")
(set_attr "length" "4")])
+;; Trap instruction pattern for __builtin_trap. Same as the glibc ABORT_INSTRUCTION
+(define_insn "trap"
+ [(trap_if (const_int 1) (const_int 0))]
+ ""
+ "brki\tr0,-1"
+ [(set_attr "type" "trap")]
+)
+
;; The insn to set GOT. The hardcoded number "8" accounts for $pc difference
;; between "mfs" and "addik" instructions.
(define_insn "set_got"
diff --git a/gcc-4.8/gcc/config/microblaze/predicates.md b/gcc-4.8/gcc/config/microblaze/predicates.md
index 5fd1bd403..905d46a9d 100644
--- a/gcc-4.8/gcc/config/microblaze/predicates.md
+++ b/gcc-4.8/gcc/config/microblaze/predicates.md
@@ -85,6 +85,10 @@
(ior (match_operand 0 "const_0_operand")
(match_operand 0 "register_operand")))
+(define_predicate "reg_or_mem_operand"
+ (ior (match_operand 0 "memory_operand")
+ (match_operand 0 "register_operand")))
+
;; Return if the operand is either the PC or a label_ref.
(define_special_predicate "pc_or_label_operand"
(ior (match_code "pc,label_ref")
@@ -119,3 +123,7 @@
;; Test for valid PIC call operand
(define_predicate "call_insn_plt_operand"
(match_test "PLT_ADDR_P (op)"))
+
+;; Return if the code of this rtx pattern is a comparison.
+(define_predicate "cmp_op"
+ (match_code "gt,ge,gtu,geu,lt,le,ltu,leu"))
diff --git a/gcc-4.8/gcc/config/mips/driver-native.c b/gcc-4.8/gcc/config/mips/driver-native.c
index 8b7ed5b55..758efa9a4 100644
--- a/gcc-4.8/gcc/config/mips/driver-native.c
+++ b/gcc-4.8/gcc/config/mips/driver-native.c
@@ -58,11 +58,17 @@ host_detect_local_cpu (int argc, const char **argv)
if (strncmp (buf, "cpu model", sizeof ("cpu model") - 1) == 0)
{
if (strstr (buf, "Godson2 V0.2") != NULL
- || strstr (buf, "Loongson-2 V0.2") != NULL)
+ || strstr (buf, "Loongson-2 V0.2") != NULL
+ || strstr (buf, "Loongson-2E") != NULL)
cpu = "loongson2e";
else if (strstr (buf, "Godson2 V0.3") != NULL
- || strstr (buf, "Loongson-2 V0.3") != NULL)
+ || strstr (buf, "Loongson-2 V0.3") != NULL
+ || strstr (buf, "Loongson-2F") != NULL)
cpu = "loongson2f";
+ else if (strstr (buf, "Godson3 V0.5") != NULL
+ || strstr (buf, "Loongson-3 V0.5") != NULL
+ || strstr (buf, "Loongson-3A") != NULL)
+ cpu = "loongson3a";
else if (strstr (buf, "SiByte SB1") != NULL)
cpu = "sb1";
else if (strstr (buf, "R5000") != NULL)
diff --git a/gcc-4.8/gcc/config/mips/mips.c b/gcc-4.8/gcc/config/mips/mips.c
index 252e82848..41c5d6b6b 100644
--- a/gcc-4.8/gcc/config/mips/mips.c
+++ b/gcc-4.8/gcc/config/mips/mips.c
@@ -3560,17 +3560,6 @@ mips_set_reg_reg_cost (enum machine_mode mode)
}
}
-/* Return the cost of an operand X that can be trucated for free.
- SPEED says whether we're optimizing for size or speed. */
-
-static int
-mips_truncated_op_cost (rtx x, bool speed)
-{
- if (GET_CODE (x) == TRUNCATE)
- x = XEXP (x, 0);
- return set_src_cost (x, speed);
-}
-
/* Implement TARGET_RTX_COSTS. */
static bool
@@ -3951,13 +3940,12 @@ mips_rtx_costs (rtx x, int code, int outer_code, int opno ATTRIBUTE_UNUSED,
case ZERO_EXTEND:
if (outer_code == SET
&& ISA_HAS_BADDU
+ && (GET_CODE (XEXP (x, 0)) == TRUNCATE
+ || GET_CODE (XEXP (x, 0)) == SUBREG)
&& GET_MODE (XEXP (x, 0)) == QImode
- && GET_CODE (XEXP (x, 0)) == PLUS)
+ && GET_CODE (XEXP (XEXP (x, 0), 0)) == PLUS)
{
- rtx plus = XEXP (x, 0);
- *total = (COSTS_N_INSNS (1)
- + mips_truncated_op_cost (XEXP (plus, 0), speed)
- + mips_truncated_op_cost (XEXP (plus, 1), speed));
+ *total = set_src_cost (XEXP (XEXP (x, 0), 0), speed);
return true;
}
*total = mips_zero_extend_cost (mode, XEXP (x, 0));
@@ -8057,7 +8045,7 @@ mips_print_operand (FILE *file, rtx op, int letter)
case 't':
{
int truth = (code == NE) == (letter == 'T');
- fputc ("zfnt"[truth * 2 + (GET_MODE (op) == CCmode)], file);
+ fputc ("zfnt"[truth * 2 + ST_REG_P (REGNO (XEXP (op, 0)))], file);
}
break;
diff --git a/gcc-4.8/gcc/config/mips/mips.h b/gcc-4.8/gcc/config/mips/mips.h
index 819571c1a..183d96d0a 100644
--- a/gcc-4.8/gcc/config/mips/mips.h
+++ b/gcc-4.8/gcc/config/mips/mips.h
@@ -946,6 +946,11 @@ struct mips_cpu_info {
|| TARGET_SMARTMIPS) \
&& !TARGET_MIPS16)
+/* ISA has the WSBH (word swap bytes within halfwords) instruction.
+ 64-bit targets also provide DSBH and DSHD. */
+#define ISA_HAS_WSBH ((ISA_MIPS32R2 || ISA_MIPS64R2) \
+ && !TARGET_MIPS16)
+
/* ISA has data prefetch instructions. This controls use of 'pref'. */
#define ISA_HAS_PREFETCH ((ISA_MIPS4 \
|| TARGET_LOONGSON_2EF \
diff --git a/gcc-4.8/gcc/config/mips/mips.md b/gcc-4.8/gcc/config/mips/mips.md
index ddc4e7c3a..f1ff03a4d 100644
--- a/gcc-4.8/gcc/config/mips/mips.md
+++ b/gcc-4.8/gcc/config/mips/mips.md
@@ -73,6 +73,11 @@
UNSPEC_STORE_LEFT
UNSPEC_STORE_RIGHT
+ ;; Integer operations that are too cumbersome to describe directly.
+ UNSPEC_WSBH
+ UNSPEC_DSBH
+ UNSPEC_DSHD
+
;; Floating-point moves.
UNSPEC_LOAD_LOW
UNSPEC_LOAD_HIGH
@@ -1292,20 +1297,32 @@
;; Combiner patterns for unsigned byte-add.
-(define_insn "*baddu_si"
+(define_insn "*baddu_si_eb"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (zero_extend:SI
+ (subreg:QI
+ (plus:SI (match_operand:SI 1 "register_operand" "d")
+ (match_operand:SI 2 "register_operand" "d")) 3)))]
+ "ISA_HAS_BADDU && BYTES_BIG_ENDIAN"
+ "baddu\\t%0,%1,%2"
+ [(set_attr "alu_type" "add")])
+
+(define_insn "*baddu_si_el"
[(set (match_operand:SI 0 "register_operand" "=d")
(zero_extend:SI
- (plus:QI (match_operand:QI 1 "register_operand" "d")
- (match_operand:QI 2 "register_operand" "d"))))]
- "ISA_HAS_BADDU"
+ (subreg:QI
+ (plus:SI (match_operand:SI 1 "register_operand" "d")
+ (match_operand:SI 2 "register_operand" "d")) 0)))]
+ "ISA_HAS_BADDU && !BYTES_BIG_ENDIAN"
"baddu\\t%0,%1,%2"
[(set_attr "alu_type" "add")])
(define_insn "*baddu_di<mode>"
[(set (match_operand:GPR 0 "register_operand" "=d")
(zero_extend:GPR
- (plus:QI (truncate:QI (match_operand:DI 1 "register_operand" "d"))
- (truncate:QI (match_operand:DI 2 "register_operand" "d")))))]
+ (truncate:QI
+ (plus:DI (match_operand:DI 1 "register_operand" "d")
+ (match_operand:DI 2 "register_operand" "d")))))]
"ISA_HAS_BADDU && TARGET_64BIT"
"baddu\\t%0,%1,%2"
[(set_attr "alu_type" "add")])
@@ -5365,6 +5382,56 @@
}
[(set_attr "type" "shift")
(set_attr "mode" "<MODE>")])
+
+(define_insn "bswaphi2"
+ [(set (match_operand:HI 0 "register_operand" "=d")
+ (bswap:HI (match_operand:HI 1 "register_operand" "d")))]
+ "ISA_HAS_WSBH"
+ "wsbh\t%0,%1"
+ [(set_attr "type" "shift")])
+
+(define_insn_and_split "bswapsi2"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (bswap:SI (match_operand:SI 1 "register_operand" "d")))]
+ "ISA_HAS_WSBH && ISA_HAS_ROR"
+ "#"
+ ""
+ [(set (match_dup 0) (unspec:SI [(match_dup 1)] UNSPEC_WSBH))
+ (set (match_dup 0) (rotatert:SI (match_dup 0) (const_int 16)))]
+ ""
+ [(set_attr "length" "8")])
+
+(define_insn_and_split "bswapdi2"
+ [(set (match_operand:DI 0 "register_operand" "=d")
+ (bswap:DI (match_operand:DI 1 "register_operand" "d")))]
+ "TARGET_64BIT && ISA_HAS_WSBH"
+ "#"
+ ""
+ [(set (match_dup 0) (unspec:DI [(match_dup 1)] UNSPEC_DSBH))
+ (set (match_dup 0) (unspec:DI [(match_dup 0)] UNSPEC_DSHD))]
+ ""
+ [(set_attr "length" "8")])
+
+(define_insn "wsbh"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:SI 1 "register_operand" "d")] UNSPEC_WSBH))]
+ "ISA_HAS_WSBH"
+ "wsbh\t%0,%1"
+ [(set_attr "type" "shift")])
+
+(define_insn "dsbh"
+ [(set (match_operand:DI 0 "register_operand" "=d")
+ (unspec:DI [(match_operand:DI 1 "register_operand" "d")] UNSPEC_DSBH))]
+ "TARGET_64BIT && ISA_HAS_WSBH"
+ "dsbh\t%0,%1"
+ [(set_attr "type" "shift")])
+
+(define_insn "dshd"
+ [(set (match_operand:DI 0 "register_operand" "=d")
+ (unspec:DI [(match_operand:DI 1 "register_operand" "d")] UNSPEC_DSHD))]
+ "TARGET_64BIT && ISA_HAS_WSBH"
+ "dshd\t%0,%1"
+ [(set_attr "type" "shift")])
;;
;; ....................
diff --git a/gcc-4.8/gcc/config/pa/pa.c b/gcc-4.8/gcc/config/pa/pa.c
index 87ef8fbbc..760385834 100644
--- a/gcc-4.8/gcc/config/pa/pa.c
+++ b/gcc-4.8/gcc/config/pa/pa.c
@@ -912,9 +912,12 @@ static rtx
legitimize_tls_address (rtx addr)
{
rtx ret, insn, tmp, t1, t2, tp;
- enum tls_model model = SYMBOL_REF_TLS_MODEL (addr);
- switch (model)
+ /* Currently, we can't handle anything but a SYMBOL_REF. */
+ if (GET_CODE (addr) != SYMBOL_REF)
+ return addr;
+
+ switch (SYMBOL_REF_TLS_MODEL (addr))
{
case TLS_MODEL_GLOBAL_DYNAMIC:
tmp = gen_reg_rtx (Pmode);
@@ -1035,7 +1038,7 @@ hppa_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
&& !REG_POINTER (XEXP (x, 1)))
return gen_rtx_PLUS (Pmode, XEXP (x, 1), XEXP (x, 0));
- if (PA_SYMBOL_REF_TLS_P (x))
+ if (pa_tls_referenced_p (x))
return legitimize_tls_address (x);
else if (flag_pic)
return legitimize_pic_address (x, mode, gen_reg_rtx (Pmode));
@@ -1916,9 +1919,10 @@ pa_emit_move_sequence (rtx *operands, enum machine_mode mode, rtx scratch_reg)
not consider them legitimate constants. Loop optimizations can
call the emit_move_xxx with one as a source. */
if ((GET_CODE (operand1) != HIGH && immediate_operand (operand1, mode))
- || function_label_operand (operand1, VOIDmode)
|| (GET_CODE (operand1) == HIGH
- && symbolic_operand (XEXP (operand1, 0), mode)))
+ && symbolic_operand (XEXP (operand1, 0), mode))
+ || function_label_operand (operand1, VOIDmode)
+ || pa_tls_referenced_p (operand1))
{
int ishighonly = 0;
@@ -2625,14 +2629,14 @@ pa_output_move_double (rtx *operands)
if (optype0 == REGOP)
latehalf[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
else if (optype0 == OFFSOP)
- latehalf[0] = adjust_address (operands[0], SImode, 4);
+ latehalf[0] = adjust_address_nv (operands[0], SImode, 4);
else
latehalf[0] = operands[0];
if (optype1 == REGOP)
latehalf[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
else if (optype1 == OFFSOP)
- latehalf[1] = adjust_address (operands[1], SImode, 4);
+ latehalf[1] = adjust_address_nv (operands[1], SImode, 4);
else if (optype1 == CNSTOP)
split_double (operands[1], &operands[1], &latehalf[1]);
else
@@ -7539,7 +7543,7 @@ pa_attr_length_millicode_call (rtx insn)
if (!TARGET_LONG_CALLS && distance < MAX_PCREL17F_OFFSET)
return 8;
- if (TARGET_LONG_ABS_CALL && !flag_pic)
+ if (!flag_pic)
return 12;
return 24;
@@ -8104,7 +8108,8 @@ pa_attr_length_indirect_call (rtx insn)
return 12;
if (TARGET_FAST_INDIRECT_CALLS
- || (!TARGET_PORTABLE_RUNTIME
+ || (!TARGET_LONG_CALLS
+ && !TARGET_PORTABLE_RUNTIME
&& ((TARGET_PA_20 && !TARGET_SOM && distance < 7600000)
|| distance < MAX_PCREL17F_OFFSET)))
return 8;
@@ -10397,7 +10402,7 @@ pa_legitimate_constant_p (enum machine_mode mode, rtx x)
/* TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC are not
legitimate constants. The other variants can't be handled by
the move patterns after reload starts. */
- if (PA_SYMBOL_REF_TLS_P (x))
+ if (pa_tls_referenced_p (x))
return false;
if (TARGET_64BIT && GET_CODE (x) == CONST_DOUBLE)
@@ -10522,13 +10527,13 @@ pa_legitimate_address_p (enum machine_mode mode, rtx x, bool strict)
/* When INT14_OK_STRICT is false, a secondary reload is needed
to adjust the displacement of SImode and DImode floating point
- instructions. So, we return false when STRICT is true. We
+ instructions but this may fail when the register also needs
+ reloading. So, we return false when STRICT is true. We
also reject long displacements for float mode addresses since
the majority of accesses will use floating point instructions
that don't support 14-bit offsets. */
if (!INT14_OK_STRICT
- && reload_in_progress
- && strict
+ && (strict || !(reload_in_progress || reload_completed))
&& mode != QImode
&& mode != HImode)
return false;
@@ -10588,8 +10593,7 @@ pa_legitimate_address_p (enum machine_mode mode, rtx x, bool strict)
return true;
if (!INT14_OK_STRICT
- && reload_in_progress
- && strict
+ && (strict || !(reload_in_progress || reload_completed))
&& mode != QImode
&& mode != HImode)
return false;
diff --git a/gcc-4.8/gcc/config/pa/pa.h b/gcc-4.8/gcc/config/pa/pa.h
index 620768fb0..16fa8c54b 100644
--- a/gcc-4.8/gcc/config/pa/pa.h
+++ b/gcc-4.8/gcc/config/pa/pa.h
@@ -784,9 +784,9 @@ extern int may_call_alloca;
#define MAX_REGS_PER_ADDRESS 2
-/* Non-TLS symbolic references. */
-#define PA_SYMBOL_REF_TLS_P(RTX) \
- (GET_CODE (RTX) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (RTX) != 0)
+/* TLS symbolic reference. */
+#define PA_SYMBOL_REF_TLS_P(X) \
+ (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (X) != 0)
/* Recognize any constant value that is a valid address except
for symbolic addresses. We get better CSE by rejecting them
@@ -796,7 +796,8 @@ extern int may_call_alloca;
#define CONSTANT_ADDRESS_P(X) \
((GET_CODE (X) == LABEL_REF \
|| (GET_CODE (X) == SYMBOL_REF && !SYMBOL_REF_TLS_MODEL (X)) \
- || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST \
+ || GET_CODE (X) == CONST_INT \
+ || (GET_CODE (X) == CONST && !pa_tls_referenced_p (X)) \
|| GET_CODE (X) == HIGH) \
&& (reload_in_progress || reload_completed \
|| ! pa_symbolic_expression_p (X)))
diff --git a/gcc-4.8/gcc/config/rs6000/altivec.h b/gcc-4.8/gcc/config/rs6000/altivec.h
index fd6d07f50..f101751f6 100644
--- a/gcc-4.8/gcc/config/rs6000/altivec.h
+++ b/gcc-4.8/gcc/config/rs6000/altivec.h
@@ -319,6 +319,56 @@
#define vec_sqrt __builtin_vec_sqrt
#define vec_vsx_ld __builtin_vec_vsx_ld
#define vec_vsx_st __builtin_vec_vsx_st
+
+/* Note, xxsldi and xxpermdi were added as __builtin_vsx_<xxx> functions
+ instead of __builtin_vec_<xxx> */
+#define vec_xxsldwi __builtin_vsx_xxsldwi
+#define vec_xxpermdi __builtin_vsx_xxpermdi
+#endif
+
+#ifdef _ARCH_PWR8
+/* Vector additions added in ISA 2.07. */
+#define vec_eqv __builtin_vec_eqv
+#define vec_nand __builtin_vec_nand
+#define vec_orc __builtin_vec_orc
+#define vec_vaddcuq __builtin_vec_vaddcuq
+#define vec_vaddudm __builtin_vec_vaddudm
+#define vec_vadduqm __builtin_vec_vadduqm
+#define vec_vbpermq __builtin_vec_vbpermq
+#define vec_vclz __builtin_vec_vclz
+#define vec_vclzb __builtin_vec_vclzb
+#define vec_vclzd __builtin_vec_vclzd
+#define vec_vclzh __builtin_vec_vclzh
+#define vec_vclzw __builtin_vec_vclzw
+#define vec_vaddecuq __builtin_vec_vaddecuq
+#define vec_vaddeuqm __builtin_vec_vaddeuqm
+#define vec_vsubecuq __builtin_vec_vsubecuq
+#define vec_vsubeuqm __builtin_vec_vsubeuqm
+#define vec_vgbbd __builtin_vec_vgbbd
+#define vec_vmaxsd __builtin_vec_vmaxsd
+#define vec_vmaxud __builtin_vec_vmaxud
+#define vec_vminsd __builtin_vec_vminsd
+#define vec_vminud __builtin_vec_vminud
+#define vec_vmrgew __builtin_vec_vmrgew
+#define vec_vmrgow __builtin_vec_vmrgow
+#define vec_vpksdss __builtin_vec_vpksdss
+#define vec_vpksdus __builtin_vec_vpksdus
+#define vec_vpkudum __builtin_vec_vpkudum
+#define vec_vpkudus __builtin_vec_vpkudus
+#define vec_vpopcnt __builtin_vec_vpopcnt
+#define vec_vpopcntb __builtin_vec_vpopcntb
+#define vec_vpopcntd __builtin_vec_vpopcntd
+#define vec_vpopcnth __builtin_vec_vpopcnth
+#define vec_vpopcntw __builtin_vec_vpopcntw
+#define vec_vrld __builtin_vec_vrld
+#define vec_vsld __builtin_vec_vsld
+#define vec_vsrad __builtin_vec_vsrad
+#define vec_vsrd __builtin_vec_vsrd
+#define vec_vsubcuq __builtin_vec_vsubcuq
+#define vec_vsubudm __builtin_vec_vsubudm
+#define vec_vsubuqm __builtin_vec_vsubuqm
+#define vec_vupkhsw __builtin_vec_vupkhsw
+#define vec_vupklsw __builtin_vec_vupklsw
#endif
/* Predicates.
diff --git a/gcc-4.8/gcc/config/rs6000/altivec.md b/gcc-4.8/gcc/config/rs6000/altivec.md
index 1b0b5c3fb..f13b5ceb3 100644
--- a/gcc-4.8/gcc/config/rs6000/altivec.md
+++ b/gcc-4.8/gcc/config/rs6000/altivec.md
@@ -41,15 +41,12 @@
UNSPEC_VMULOSB
UNSPEC_VMULOUH
UNSPEC_VMULOSH
- UNSPEC_VPKUHUM
- UNSPEC_VPKUWUM
UNSPEC_VPKPX
- UNSPEC_VPKSHSS
- UNSPEC_VPKSWSS
- UNSPEC_VPKUHUS
- UNSPEC_VPKSHUS
- UNSPEC_VPKUWUS
- UNSPEC_VPKSWUS
+ UNSPEC_VPACK_SIGN_SIGN_SAT
+ UNSPEC_VPACK_SIGN_UNS_SAT
+ UNSPEC_VPACK_UNS_UNS_SAT
+ UNSPEC_VPACK_UNS_UNS_MOD
+ UNSPEC_VPACK_UNS_UNS_MOD_DIRECT
UNSPEC_VSLV4SI
UNSPEC_VSLO
UNSPEC_VSR
@@ -71,12 +68,12 @@
UNSPEC_VLOGEFP
UNSPEC_VEXPTEFP
UNSPEC_VLSDOI
- UNSPEC_VUPKHSB
+ UNSPEC_VUNPACK_HI_SIGN
+ UNSPEC_VUNPACK_LO_SIGN
+ UNSPEC_VUNPACK_HI_SIGN_DIRECT
+ UNSPEC_VUNPACK_LO_SIGN_DIRECT
UNSPEC_VUPKHPX
- UNSPEC_VUPKHSH
- UNSPEC_VUPKLSB
UNSPEC_VUPKLPX
- UNSPEC_VUPKLSH
UNSPEC_DST
UNSPEC_DSTT
UNSPEC_DSTST
@@ -134,6 +131,21 @@
UNSPEC_VUPKLS_V4SF
UNSPEC_VUPKHU_V4SF
UNSPEC_VUPKLU_V4SF
+ UNSPEC_VGBBD
+ UNSPEC_VMRGH_DIRECT
+ UNSPEC_VMRGL_DIRECT
+ UNSPEC_VSPLT_DIRECT
+ UNSPEC_VSUMSWS_DIRECT
+ UNSPEC_VADDCUQ
+ UNSPEC_VADDEUQM
+ UNSPEC_VADDECUQ
+ UNSPEC_VSUBCUQ
+ UNSPEC_VSUBEUQM
+ UNSPEC_VSUBECUQ
+ UNSPEC_VBPERMQ
+ UNSPEC_BCDADD
+ UNSPEC_BCDSUB
+ UNSPEC_BCD_OVERFLOW
])
(define_c_enum "unspecv"
@@ -146,6 +158,8 @@
;; Vec int modes
(define_mode_iterator VI [V4SI V8HI V16QI])
+;; Like VI, but add ISA 2.07 integer vector ops
+(define_mode_iterator VI2 [V4SI V8HI V16QI V2DI])
;; Short vec in modes
(define_mode_iterator VIshort [V8HI V16QI])
;; Vec float modes
@@ -154,13 +168,24 @@
(define_mode_iterator V [V4SI V8HI V16QI V4SF])
;; Vec modes for move/logical/permute ops, include vector types for move not
;; otherwise handled by altivec (v2df, v2di, ti)
-(define_mode_iterator VM [V4SI V8HI V16QI V4SF V2DF V2DI TI])
+(define_mode_iterator VM [V4SI V8HI V16QI V4SF V2DF V2DI V1TI TI])
;; Like VM, except don't do TImode
-(define_mode_iterator VM2 [V4SI V8HI V16QI V4SF V2DF V2DI])
-
-(define_mode_attr VI_char [(V4SI "w") (V8HI "h") (V16QI "b")])
-(define_mode_attr VI_scalar [(V4SI "SI") (V8HI "HI") (V16QI "QI")])
+(define_mode_iterator VM2 [V4SI V8HI V16QI V4SF V2DF V2DI V1TI])
+
+(define_mode_attr VI_char [(V2DI "d") (V4SI "w") (V8HI "h") (V16QI "b")])
+(define_mode_attr VI_scalar [(V2DI "DI") (V4SI "SI") (V8HI "HI") (V16QI "QI")])
+(define_mode_attr VI_unit [(V16QI "VECTOR_UNIT_ALTIVEC_P (V16QImode)")
+ (V8HI "VECTOR_UNIT_ALTIVEC_P (V8HImode)")
+ (V4SI "VECTOR_UNIT_ALTIVEC_P (V4SImode)")
+ (V2DI "VECTOR_UNIT_P8_VECTOR_P (V2DImode)")
+ (V1TI "VECTOR_UNIT_ALTIVEC_P (V1TImode)")])
+
+;; Vector pack/unpack
+(define_mode_iterator VP [V2DI V4SI V8HI])
+(define_mode_attr VP_small [(V2DI "V4SI") (V4SI "V8HI") (V8HI "V16QI")])
+(define_mode_attr VP_small_lc [(V2DI "v4si") (V4SI "v8hi") (V8HI "v16qi")])
+(define_mode_attr VU_char [(V2DI "w") (V4SI "h") (V8HI "b")])
;; Vector move instructions.
(define_insn "*altivec_mov<mode>"
@@ -378,10 +403,10 @@
;; add
(define_insn "add<mode>3"
- [(set (match_operand:VI 0 "register_operand" "=v")
- (plus:VI (match_operand:VI 1 "register_operand" "v")
- (match_operand:VI 2 "register_operand" "v")))]
- "TARGET_ALTIVEC"
+ [(set (match_operand:VI2 0 "register_operand" "=v")
+ (plus:VI2 (match_operand:VI2 1 "register_operand" "v")
+ (match_operand:VI2 2 "register_operand" "v")))]
+ "<VI_unit>"
"vaddu<VI_char>m %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -398,7 +423,7 @@
(unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
(match_operand:V4SI 2 "register_operand" "v")]
UNSPEC_VADDCUW))]
- "TARGET_ALTIVEC"
+ "VECTOR_UNIT_ALTIVEC_P (V4SImode)"
"vaddcuw %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -408,7 +433,7 @@
(match_operand:VI 2 "register_operand" "v")]
UNSPEC_VADDU))
(set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))]
- "TARGET_ALTIVEC"
+ "<VI_unit>"
"vaddu<VI_char>s %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -418,16 +443,16 @@
(match_operand:VI 2 "register_operand" "v")]
UNSPEC_VADDS))
(set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))]
- "TARGET_ALTIVEC"
+ "VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
"vadds<VI_char>s %0,%1,%2"
[(set_attr "type" "vecsimple")])
;; sub
(define_insn "sub<mode>3"
- [(set (match_operand:VI 0 "register_operand" "=v")
- (minus:VI (match_operand:VI 1 "register_operand" "v")
- (match_operand:VI 2 "register_operand" "v")))]
- "TARGET_ALTIVEC"
+ [(set (match_operand:VI2 0 "register_operand" "=v")
+ (minus:VI2 (match_operand:VI2 1 "register_operand" "v")
+ (match_operand:VI2 2 "register_operand" "v")))]
+ "<VI_unit>"
"vsubu<VI_char>m %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -444,7 +469,7 @@
(unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
(match_operand:V4SI 2 "register_operand" "v")]
UNSPEC_VSUBCUW))]
- "TARGET_ALTIVEC"
+ "VECTOR_UNIT_ALTIVEC_P (V4SImode)"
"vsubcuw %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -454,7 +479,7 @@
(match_operand:VI 2 "register_operand" "v")]
UNSPEC_VSUBU))
(set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))]
- "TARGET_ALTIVEC"
+ "VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
"vsubu<VI_char>s %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -464,7 +489,7 @@
(match_operand:VI 2 "register_operand" "v")]
UNSPEC_VSUBS))
(set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))]
- "TARGET_ALTIVEC"
+ "VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
"vsubs<VI_char>s %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -483,7 +508,7 @@
(unspec:VI [(match_operand:VI 1 "register_operand" "v")
(match_operand:VI 2 "register_operand" "v")]
UNSPEC_VAVGS))]
- "TARGET_ALTIVEC"
+ "VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
"vavgs<VI_char> %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -492,31 +517,31 @@
(unspec:V4SI [(match_operand:V4SF 1 "register_operand" "v")
(match_operand:V4SF 2 "register_operand" "v")]
UNSPEC_VCMPBFP))]
- "TARGET_ALTIVEC"
+ "VECTOR_UNIT_ALTIVEC_P (V4SImode)"
"vcmpbfp %0,%1,%2"
[(set_attr "type" "veccmp")])
(define_insn "*altivec_eq<mode>"
- [(set (match_operand:VI 0 "altivec_register_operand" "=v")
- (eq:VI (match_operand:VI 1 "altivec_register_operand" "v")
- (match_operand:VI 2 "altivec_register_operand" "v")))]
- "TARGET_ALTIVEC"
+ [(set (match_operand:VI2 0 "altivec_register_operand" "=v")
+ (eq:VI2 (match_operand:VI2 1 "altivec_register_operand" "v")
+ (match_operand:VI2 2 "altivec_register_operand" "v")))]
+ "<VI_unit>"
"vcmpequ<VI_char> %0,%1,%2"
[(set_attr "type" "veccmp")])
(define_insn "*altivec_gt<mode>"
- [(set (match_operand:VI 0 "altivec_register_operand" "=v")
- (gt:VI (match_operand:VI 1 "altivec_register_operand" "v")
- (match_operand:VI 2 "altivec_register_operand" "v")))]
- "TARGET_ALTIVEC"
+ [(set (match_operand:VI2 0 "altivec_register_operand" "=v")
+ (gt:VI2 (match_operand:VI2 1 "altivec_register_operand" "v")
+ (match_operand:VI2 2 "altivec_register_operand" "v")))]
+ "<VI_unit>"
"vcmpgts<VI_char> %0,%1,%2"
[(set_attr "type" "veccmp")])
(define_insn "*altivec_gtu<mode>"
- [(set (match_operand:VI 0 "altivec_register_operand" "=v")
- (gtu:VI (match_operand:VI 1 "altivec_register_operand" "v")
- (match_operand:VI 2 "altivec_register_operand" "v")))]
- "TARGET_ALTIVEC"
+ [(set (match_operand:VI2 0 "altivec_register_operand" "=v")
+ (gtu:VI2 (match_operand:VI2 1 "altivec_register_operand" "v")
+ (match_operand:VI2 2 "altivec_register_operand" "v")))]
+ "<VI_unit>"
"vcmpgtu<VI_char> %0,%1,%2"
[(set_attr "type" "veccmp")])
@@ -642,7 +667,7 @@
convert_move (small_swap, swap, 0);
low_product = gen_reg_rtx (V4SImode);
- emit_insn (gen_vec_widen_umult_odd_v8hi (low_product, one, two));
+ emit_insn (gen_altivec_vmulouh (low_product, one, two));
high_product = gen_reg_rtx (V4SImode);
emit_insn (gen_altivec_vmsumuhm (high_product, one, small_swap, zero));
@@ -666,13 +691,22 @@
rtx high = gen_reg_rtx (V4SImode);
rtx low = gen_reg_rtx (V4SImode);
- emit_insn (gen_vec_widen_smult_even_v8hi (even, operands[1], operands[2]));
- emit_insn (gen_vec_widen_smult_odd_v8hi (odd, operands[1], operands[2]));
-
- emit_insn (gen_altivec_vmrghw (high, even, odd));
- emit_insn (gen_altivec_vmrglw (low, even, odd));
-
- emit_insn (gen_altivec_vpkuwum (operands[0], high, low));
+ if (BYTES_BIG_ENDIAN)
+ {
+ emit_insn (gen_altivec_vmulesh (even, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmulosh (odd, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrghw_direct (high, even, odd));
+ emit_insn (gen_altivec_vmrglw_direct (low, even, odd));
+ emit_insn (gen_altivec_vpkuwum_direct (operands[0], high, low));
+ }
+ else
+ {
+ emit_insn (gen_altivec_vmulosh (even, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmulesh (odd, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrghw_direct (high, odd, even));
+ emit_insn (gen_altivec_vmrglw_direct (low, odd, even));
+ emit_insn (gen_altivec_vpkuwum_direct (operands[0], low, high));
+ }
DONE;
}")
@@ -744,18 +778,18 @@
;; max
(define_insn "umax<mode>3"
- [(set (match_operand:VI 0 "register_operand" "=v")
- (umax:VI (match_operand:VI 1 "register_operand" "v")
- (match_operand:VI 2 "register_operand" "v")))]
- "TARGET_ALTIVEC"
+ [(set (match_operand:VI2 0 "register_operand" "=v")
+ (umax:VI2 (match_operand:VI2 1 "register_operand" "v")
+ (match_operand:VI2 2 "register_operand" "v")))]
+ "<VI_unit>"
"vmaxu<VI_char> %0,%1,%2"
[(set_attr "type" "vecsimple")])
(define_insn "smax<mode>3"
- [(set (match_operand:VI 0 "register_operand" "=v")
- (smax:VI (match_operand:VI 1 "register_operand" "v")
- (match_operand:VI 2 "register_operand" "v")))]
- "TARGET_ALTIVEC"
+ [(set (match_operand:VI2 0 "register_operand" "=v")
+ (smax:VI2 (match_operand:VI2 1 "register_operand" "v")
+ (match_operand:VI2 2 "register_operand" "v")))]
+ "<VI_unit>"
"vmaxs<VI_char> %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -768,18 +802,18 @@
[(set_attr "type" "veccmp")])
(define_insn "umin<mode>3"
- [(set (match_operand:VI 0 "register_operand" "=v")
- (umin:VI (match_operand:VI 1 "register_operand" "v")
- (match_operand:VI 2 "register_operand" "v")))]
- "TARGET_ALTIVEC"
+ [(set (match_operand:VI2 0 "register_operand" "=v")
+ (umin:VI2 (match_operand:VI2 1 "register_operand" "v")
+ (match_operand:VI2 2 "register_operand" "v")))]
+ "<VI_unit>"
"vminu<VI_char> %0,%1,%2"
[(set_attr "type" "vecsimple")])
(define_insn "smin<mode>3"
- [(set (match_operand:VI 0 "register_operand" "=v")
- (smin:VI (match_operand:VI 1 "register_operand" "v")
- (match_operand:VI 2 "register_operand" "v")))]
- "TARGET_ALTIVEC"
+ [(set (match_operand:VI2 0 "register_operand" "=v")
+ (smin:VI2 (match_operand:VI2 1 "register_operand" "v")
+ (match_operand:VI2 2 "register_operand" "v")))]
+ "<VI_unit>"
"vmins<VI_char> %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -823,7 +857,39 @@
"vmladduhm %0,%1,%2,%3"
[(set_attr "type" "veccomplex")])
-(define_insn "altivec_vmrghb"
+(define_expand "altivec_vmrghb"
+ [(use (match_operand:V16QI 0 "register_operand" ""))
+ (use (match_operand:V16QI 1 "register_operand" ""))
+ (use (match_operand:V16QI 2 "register_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ rtvec v;
+ rtx x;
+
+ /* Special handling for LE with -maltivec=be. */
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ {
+ v = gen_rtvec (16, GEN_INT (8), GEN_INT (24), GEN_INT (9), GEN_INT (25),
+ GEN_INT (10), GEN_INT (26), GEN_INT (11), GEN_INT (27),
+ GEN_INT (12), GEN_INT (28), GEN_INT (13), GEN_INT (29),
+ GEN_INT (14), GEN_INT (30), GEN_INT (15), GEN_INT (31));
+ x = gen_rtx_VEC_CONCAT (V32QImode, operands[2], operands[1]);
+ }
+ else
+ {
+ v = gen_rtvec (16, GEN_INT (0), GEN_INT (16), GEN_INT (1), GEN_INT (17),
+ GEN_INT (2), GEN_INT (18), GEN_INT (3), GEN_INT (19),
+ GEN_INT (4), GEN_INT (20), GEN_INT (5), GEN_INT (21),
+ GEN_INT (6), GEN_INT (22), GEN_INT (7), GEN_INT (23));
+ x = gen_rtx_VEC_CONCAT (V32QImode, operands[1], operands[2]);
+ }
+
+ x = gen_rtx_VEC_SELECT (V16QImode, x, gen_rtx_PARALLEL (VOIDmode, v));
+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));
+ DONE;
+})
+
+(define_insn "*altivec_vmrghb_internal"
[(set (match_operand:V16QI 0 "register_operand" "=v")
(vec_select:V16QI
(vec_concat:V32QI
@@ -838,10 +904,52 @@
(const_int 6) (const_int 22)
(const_int 7) (const_int 23)])))]
"TARGET_ALTIVEC"
+{
+ if (BYTES_BIG_ENDIAN)
+ return "vmrghb %0,%1,%2";
+ else
+ return "vmrglb %0,%2,%1";
+}
+ [(set_attr "type" "vecperm")])
+
+(define_insn "altivec_vmrghb_direct"
+ [(set (match_operand:V16QI 0 "register_operand" "=v")
+ (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
+ (match_operand:V16QI 2 "register_operand" "v")]
+ UNSPEC_VMRGH_DIRECT))]
+ "TARGET_ALTIVEC"
"vmrghb %0,%1,%2"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vmrghh"
+(define_expand "altivec_vmrghh"
+ [(use (match_operand:V8HI 0 "register_operand" ""))
+ (use (match_operand:V8HI 1 "register_operand" ""))
+ (use (match_operand:V8HI 2 "register_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ rtvec v;
+ rtx x;
+
+ /* Special handling for LE with -maltivec=be. */
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ {
+ v = gen_rtvec (8, GEN_INT (4), GEN_INT (12), GEN_INT (5), GEN_INT (13),
+ GEN_INT (6), GEN_INT (14), GEN_INT (7), GEN_INT (15));
+ x = gen_rtx_VEC_CONCAT (V16HImode, operands[2], operands[1]);
+ }
+ else
+ {
+ v = gen_rtvec (8, GEN_INT (0), GEN_INT (8), GEN_INT (1), GEN_INT (9),
+ GEN_INT (2), GEN_INT (10), GEN_INT (3), GEN_INT (11));
+ x = gen_rtx_VEC_CONCAT (V16HImode, operands[1], operands[2]);
+ }
+
+ x = gen_rtx_VEC_SELECT (V8HImode, x, gen_rtx_PARALLEL (VOIDmode, v));
+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));
+ DONE;
+})
+
+(define_insn "*altivec_vmrghh_internal"
[(set (match_operand:V8HI 0 "register_operand" "=v")
(vec_select:V8HI
(vec_concat:V16HI
@@ -852,10 +960,50 @@
(const_int 2) (const_int 10)
(const_int 3) (const_int 11)])))]
"TARGET_ALTIVEC"
+{
+ if (BYTES_BIG_ENDIAN)
+ return "vmrghh %0,%1,%2";
+ else
+ return "vmrglh %0,%2,%1";
+}
+ [(set_attr "type" "vecperm")])
+
+(define_insn "altivec_vmrghh_direct"
+ [(set (match_operand:V8HI 0 "register_operand" "=v")
+ (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v")
+ (match_operand:V8HI 2 "register_operand" "v")]
+ UNSPEC_VMRGH_DIRECT))]
+ "TARGET_ALTIVEC"
"vmrghh %0,%1,%2"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vmrghw"
+(define_expand "altivec_vmrghw"
+ [(use (match_operand:V4SI 0 "register_operand" ""))
+ (use (match_operand:V4SI 1 "register_operand" ""))
+ (use (match_operand:V4SI 2 "register_operand" ""))]
+ "VECTOR_MEM_ALTIVEC_P (V4SImode)"
+{
+ rtvec v;
+ rtx x;
+
+ /* Special handling for LE with -maltivec=be. */
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ {
+ v = gen_rtvec (4, GEN_INT (2), GEN_INT (6), GEN_INT (3), GEN_INT (7));
+ x = gen_rtx_VEC_CONCAT (V8SImode, operands[2], operands[1]);
+ }
+ else
+ {
+ v = gen_rtvec (4, GEN_INT (0), GEN_INT (4), GEN_INT (1), GEN_INT (5));
+ x = gen_rtx_VEC_CONCAT (V8SImode, operands[1], operands[2]);
+ }
+
+ x = gen_rtx_VEC_SELECT (V4SImode, x, gen_rtx_PARALLEL (VOIDmode, v));
+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));
+ DONE;
+})
+
+(define_insn "*altivec_vmrghw_internal"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(vec_select:V4SI
(vec_concat:V8SI
@@ -864,6 +1012,20 @@
(parallel [(const_int 0) (const_int 4)
(const_int 1) (const_int 5)])))]
"VECTOR_MEM_ALTIVEC_P (V4SImode)"
+{
+ if (BYTES_BIG_ENDIAN)
+ return "vmrghw %0,%1,%2";
+ else
+ return "vmrglw %0,%2,%1";
+}
+ [(set_attr "type" "vecperm")])
+
+(define_insn "altivec_vmrghw_direct"
+ [(set (match_operand:V4SI 0 "register_operand" "=v")
+ (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V4SI 2 "register_operand" "v")]
+ UNSPEC_VMRGH_DIRECT))]
+ "TARGET_ALTIVEC"
"vmrghw %0,%1,%2"
[(set_attr "type" "vecperm")])
@@ -876,10 +1038,47 @@
(parallel [(const_int 0) (const_int 4)
(const_int 1) (const_int 5)])))]
"VECTOR_MEM_ALTIVEC_P (V4SFmode)"
- "vmrghw %0,%1,%2"
+{
+ if (BYTES_BIG_ENDIAN)
+ return "vmrghw %0,%1,%2";
+ else
+ return "vmrglw %0,%2,%1";
+}
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vmrglb"
+(define_expand "altivec_vmrglb"
+ [(use (match_operand:V16QI 0 "register_operand" ""))
+ (use (match_operand:V16QI 1 "register_operand" ""))
+ (use (match_operand:V16QI 2 "register_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ rtvec v;
+ rtx x;
+
+ /* Special handling for LE with -maltivec=be. */
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ {
+ v = gen_rtvec (16, GEN_INT (0), GEN_INT (16), GEN_INT (1), GEN_INT (17),
+ GEN_INT (2), GEN_INT (18), GEN_INT (3), GEN_INT (19),
+ GEN_INT (4), GEN_INT (20), GEN_INT (5), GEN_INT (21),
+ GEN_INT (6), GEN_INT (22), GEN_INT (7), GEN_INT (23));
+ x = gen_rtx_VEC_CONCAT (V32QImode, operands[2], operands[1]);
+ }
+ else
+ {
+ v = gen_rtvec (16, GEN_INT (8), GEN_INT (24), GEN_INT (9), GEN_INT (25),
+ GEN_INT (10), GEN_INT (26), GEN_INT (11), GEN_INT (27),
+ GEN_INT (12), GEN_INT (28), GEN_INT (13), GEN_INT (29),
+ GEN_INT (14), GEN_INT (30), GEN_INT (15), GEN_INT (31));
+ x = gen_rtx_VEC_CONCAT (V32QImode, operands[1], operands[2]);
+ }
+
+ x = gen_rtx_VEC_SELECT (V16QImode, x, gen_rtx_PARALLEL (VOIDmode, v));
+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));
+ DONE;
+})
+
+(define_insn "*altivec_vmrglb_internal"
[(set (match_operand:V16QI 0 "register_operand" "=v")
(vec_select:V16QI
(vec_concat:V32QI
@@ -894,10 +1093,52 @@
(const_int 14) (const_int 30)
(const_int 15) (const_int 31)])))]
"TARGET_ALTIVEC"
+{
+ if (BYTES_BIG_ENDIAN)
+ return "vmrglb %0,%1,%2";
+ else
+ return "vmrghb %0,%2,%1";
+}
+ [(set_attr "type" "vecperm")])
+
+(define_insn "altivec_vmrglb_direct"
+ [(set (match_operand:V16QI 0 "register_operand" "=v")
+ (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
+ (match_operand:V16QI 2 "register_operand" "v")]
+ UNSPEC_VMRGL_DIRECT))]
+ "TARGET_ALTIVEC"
"vmrglb %0,%1,%2"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vmrglh"
+(define_expand "altivec_vmrglh"
+ [(use (match_operand:V8HI 0 "register_operand" ""))
+ (use (match_operand:V8HI 1 "register_operand" ""))
+ (use (match_operand:V8HI 2 "register_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ rtvec v;
+ rtx x;
+
+ /* Special handling for LE with -maltivec=be. */
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ {
+ v = gen_rtvec (8, GEN_INT (0), GEN_INT (8), GEN_INT (1), GEN_INT (9),
+ GEN_INT (2), GEN_INT (10), GEN_INT (3), GEN_INT (11));
+ x = gen_rtx_VEC_CONCAT (V16HImode, operands[2], operands[1]);
+ }
+ else
+ {
+ v = gen_rtvec (8, GEN_INT (4), GEN_INT (12), GEN_INT (5), GEN_INT (13),
+ GEN_INT (6), GEN_INT (14), GEN_INT (7), GEN_INT (15));
+ x = gen_rtx_VEC_CONCAT (V16HImode, operands[1], operands[2]);
+ }
+
+ x = gen_rtx_VEC_SELECT (V8HImode, x, gen_rtx_PARALLEL (VOIDmode, v));
+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));
+ DONE;
+})
+
+(define_insn "*altivec_vmrglh_internal"
[(set (match_operand:V8HI 0 "register_operand" "=v")
(vec_select:V8HI
(vec_concat:V16HI
@@ -908,10 +1149,50 @@
(const_int 6) (const_int 14)
(const_int 7) (const_int 15)])))]
"TARGET_ALTIVEC"
+{
+ if (BYTES_BIG_ENDIAN)
+ return "vmrglh %0,%1,%2";
+ else
+ return "vmrghh %0,%2,%1";
+}
+ [(set_attr "type" "vecperm")])
+
+(define_insn "altivec_vmrglh_direct"
+ [(set (match_operand:V8HI 0 "register_operand" "=v")
+ (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v")
+ (match_operand:V8HI 2 "register_operand" "v")]
+ UNSPEC_VMRGL_DIRECT))]
+ "TARGET_ALTIVEC"
"vmrglh %0,%1,%2"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vmrglw"
+(define_expand "altivec_vmrglw"
+ [(use (match_operand:V4SI 0 "register_operand" ""))
+ (use (match_operand:V4SI 1 "register_operand" ""))
+ (use (match_operand:V4SI 2 "register_operand" ""))]
+ "VECTOR_MEM_ALTIVEC_P (V4SImode)"
+{
+ rtvec v;
+ rtx x;
+
+ /* Special handling for LE with -maltivec=be. */
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ {
+ v = gen_rtvec (4, GEN_INT (0), GEN_INT (4), GEN_INT (1), GEN_INT (5));
+ x = gen_rtx_VEC_CONCAT (V8SImode, operands[2], operands[1]);
+ }
+ else
+ {
+ v = gen_rtvec (4, GEN_INT (2), GEN_INT (6), GEN_INT (3), GEN_INT (7));
+ x = gen_rtx_VEC_CONCAT (V8SImode, operands[1], operands[2]);
+ }
+
+ x = gen_rtx_VEC_SELECT (V4SImode, x, gen_rtx_PARALLEL (VOIDmode, v));
+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));
+ DONE;
+})
+
+(define_insn "*altivec_vmrglw_internal"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(vec_select:V4SI
(vec_concat:V8SI
@@ -920,6 +1201,20 @@
(parallel [(const_int 2) (const_int 6)
(const_int 3) (const_int 7)])))]
"VECTOR_MEM_ALTIVEC_P (V4SImode)"
+{
+ if (BYTES_BIG_ENDIAN)
+ return "vmrglw %0,%1,%2";
+ else
+ return "vmrghw %0,%2,%1";
+}
+ [(set_attr "type" "vecperm")])
+
+(define_insn "altivec_vmrglw_direct"
+ [(set (match_operand:V4SI 0 "register_operand" "=v")
+ (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V4SI 2 "register_operand" "v")]
+ UNSPEC_VMRGL_DIRECT))]
+ "TARGET_ALTIVEC"
"vmrglw %0,%1,%2"
[(set_attr "type" "vecperm")])
@@ -932,10 +1227,154 @@
(parallel [(const_int 2) (const_int 6)
(const_int 3) (const_int 7)])))]
"VECTOR_MEM_ALTIVEC_P (V4SFmode)"
- "vmrglw %0,%1,%2"
+{
+ if (BYTES_BIG_ENDIAN)
+ return "vmrglw %0,%1,%2";
+ else
+ return "vmrghw %0,%2,%1";
+}
+ [(set_attr "type" "vecperm")])
+
+;; Power8 vector merge even/odd
+(define_insn "p8_vmrgew"
+ [(set (match_operand:V4SI 0 "register_operand" "=v")
+ (vec_select:V4SI
+ (vec_concat:V8SI
+ (match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V4SI 2 "register_operand" "v"))
+ (parallel [(const_int 0) (const_int 4)
+ (const_int 2) (const_int 6)])))]
+ "TARGET_P8_VECTOR"
+{
+ if (BYTES_BIG_ENDIAN)
+ return "vmrgew %0,%1,%2";
+ else
+ return "vmrgow %0,%2,%1";
+}
[(set_attr "type" "vecperm")])
-(define_insn "vec_widen_umult_even_v16qi"
+(define_insn "p8_vmrgow"
+ [(set (match_operand:V4SI 0 "register_operand" "=v")
+ (vec_select:V4SI
+ (vec_concat:V8SI
+ (match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V4SI 2 "register_operand" "v"))
+ (parallel [(const_int 1) (const_int 5)
+ (const_int 3) (const_int 7)])))]
+ "TARGET_P8_VECTOR"
+{
+ if (BYTES_BIG_ENDIAN)
+ return "vmrgow %0,%1,%2";
+ else
+ return "vmrgew %0,%2,%1";
+}
+ [(set_attr "type" "vecperm")])
+
+(define_expand "vec_widen_umult_even_v16qi"
+ [(use (match_operand:V8HI 0 "register_operand" ""))
+ (use (match_operand:V16QI 1 "register_operand" ""))
+ (use (match_operand:V16QI 2 "register_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ if (VECTOR_ELT_ORDER_BIG)
+ emit_insn (gen_altivec_vmuleub (operands[0], operands[1], operands[2]));
+ else
+ emit_insn (gen_altivec_vmuloub (operands[0], operands[1], operands[2]));
+ DONE;
+})
+
+(define_expand "vec_widen_smult_even_v16qi"
+ [(use (match_operand:V8HI 0 "register_operand" ""))
+ (use (match_operand:V16QI 1 "register_operand" ""))
+ (use (match_operand:V16QI 2 "register_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ if (VECTOR_ELT_ORDER_BIG)
+ emit_insn (gen_altivec_vmulesb (operands[0], operands[1], operands[2]));
+ else
+ emit_insn (gen_altivec_vmulosb (operands[0], operands[1], operands[2]));
+ DONE;
+})
+
+(define_expand "vec_widen_umult_even_v8hi"
+ [(use (match_operand:V4SI 0 "register_operand" ""))
+ (use (match_operand:V8HI 1 "register_operand" ""))
+ (use (match_operand:V8HI 2 "register_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ if (VECTOR_ELT_ORDER_BIG)
+ emit_insn (gen_altivec_vmuleuh (operands[0], operands[1], operands[2]));
+ else
+ emit_insn (gen_altivec_vmulouh (operands[0], operands[1], operands[2]));
+ DONE;
+})
+
+(define_expand "vec_widen_smult_even_v8hi"
+ [(use (match_operand:V4SI 0 "register_operand" ""))
+ (use (match_operand:V8HI 1 "register_operand" ""))
+ (use (match_operand:V8HI 2 "register_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ if (VECTOR_ELT_ORDER_BIG)
+ emit_insn (gen_altivec_vmulesh (operands[0], operands[1], operands[2]));
+ else
+ emit_insn (gen_altivec_vmulosh (operands[0], operands[1], operands[2]));
+ DONE;
+})
+
+(define_expand "vec_widen_umult_odd_v16qi"
+ [(use (match_operand:V8HI 0 "register_operand" ""))
+ (use (match_operand:V16QI 1 "register_operand" ""))
+ (use (match_operand:V16QI 2 "register_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ if (VECTOR_ELT_ORDER_BIG)
+ emit_insn (gen_altivec_vmuloub (operands[0], operands[1], operands[2]));
+ else
+ emit_insn (gen_altivec_vmuleub (operands[0], operands[1], operands[2]));
+ DONE;
+})
+
+(define_expand "vec_widen_smult_odd_v16qi"
+ [(use (match_operand:V8HI 0 "register_operand" ""))
+ (use (match_operand:V16QI 1 "register_operand" ""))
+ (use (match_operand:V16QI 2 "register_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ if (VECTOR_ELT_ORDER_BIG)
+ emit_insn (gen_altivec_vmulosb (operands[0], operands[1], operands[2]));
+ else
+ emit_insn (gen_altivec_vmulesb (operands[0], operands[1], operands[2]));
+ DONE;
+})
+
+(define_expand "vec_widen_umult_odd_v8hi"
+ [(use (match_operand:V4SI 0 "register_operand" ""))
+ (use (match_operand:V8HI 1 "register_operand" ""))
+ (use (match_operand:V8HI 2 "register_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ if (VECTOR_ELT_ORDER_BIG)
+ emit_insn (gen_altivec_vmulouh (operands[0], operands[1], operands[2]));
+ else
+ emit_insn (gen_altivec_vmuleuh (operands[0], operands[1], operands[2]));
+ DONE;
+})
+
+(define_expand "vec_widen_smult_odd_v8hi"
+ [(use (match_operand:V4SI 0 "register_operand" ""))
+ (use (match_operand:V8HI 1 "register_operand" ""))
+ (use (match_operand:V8HI 2 "register_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ if (VECTOR_ELT_ORDER_BIG)
+ emit_insn (gen_altivec_vmulosh (operands[0], operands[1], operands[2]));
+ else
+ emit_insn (gen_altivec_vmulesh (operands[0], operands[1], operands[2]));
+ DONE;
+})
+
+(define_insn "altivec_vmuleub"
[(set (match_operand:V8HI 0 "register_operand" "=v")
(unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")
(match_operand:V16QI 2 "register_operand" "v")]
@@ -944,43 +1383,25 @@
"vmuleub %0,%1,%2"
[(set_attr "type" "veccomplex")])
-(define_insn "vec_widen_smult_even_v16qi"
+(define_insn "altivec_vmuloub"
[(set (match_operand:V8HI 0 "register_operand" "=v")
(unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")
(match_operand:V16QI 2 "register_operand" "v")]
- UNSPEC_VMULESB))]
- "TARGET_ALTIVEC"
- "vmulesb %0,%1,%2"
- [(set_attr "type" "veccomplex")])
-
-(define_insn "vec_widen_umult_even_v8hi"
- [(set (match_operand:V4SI 0 "register_operand" "=v")
- (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")
- (match_operand:V8HI 2 "register_operand" "v")]
- UNSPEC_VMULEUH))]
- "TARGET_ALTIVEC"
- "vmuleuh %0,%1,%2"
- [(set_attr "type" "veccomplex")])
-
-(define_insn "vec_widen_smult_even_v8hi"
- [(set (match_operand:V4SI 0 "register_operand" "=v")
- (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")
- (match_operand:V8HI 2 "register_operand" "v")]
- UNSPEC_VMULESH))]
+ UNSPEC_VMULOUB))]
"TARGET_ALTIVEC"
- "vmulesh %0,%1,%2"
+ "vmuloub %0,%1,%2"
[(set_attr "type" "veccomplex")])
-(define_insn "vec_widen_umult_odd_v16qi"
+(define_insn "altivec_vmulesb"
[(set (match_operand:V8HI 0 "register_operand" "=v")
(unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")
(match_operand:V16QI 2 "register_operand" "v")]
- UNSPEC_VMULOUB))]
+ UNSPEC_VMULESB))]
"TARGET_ALTIVEC"
- "vmuloub %0,%1,%2"
+ "vmulesb %0,%1,%2"
[(set_attr "type" "veccomplex")])
-(define_insn "vec_widen_smult_odd_v16qi"
+(define_insn "altivec_vmulosb"
[(set (match_operand:V8HI 0 "register_operand" "=v")
(unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")
(match_operand:V16QI 2 "register_operand" "v")]
@@ -989,7 +1410,16 @@
"vmulosb %0,%1,%2"
[(set_attr "type" "veccomplex")])
-(define_insn "vec_widen_umult_odd_v8hi"
+(define_insn "altivec_vmuleuh"
+ [(set (match_operand:V4SI 0 "register_operand" "=v")
+ (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")
+ (match_operand:V8HI 2 "register_operand" "v")]
+ UNSPEC_VMULEUH))]
+ "TARGET_ALTIVEC"
+ "vmuleuh %0,%1,%2"
+ [(set_attr "type" "veccomplex")])
+
+(define_insn "altivec_vmulouh"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")
(match_operand:V8HI 2 "register_operand" "v")]
@@ -998,158 +1428,121 @@
"vmulouh %0,%1,%2"
[(set_attr "type" "veccomplex")])
-(define_insn "vec_widen_smult_odd_v8hi"
+(define_insn "altivec_vmulesh"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")
(match_operand:V8HI 2 "register_operand" "v")]
- UNSPEC_VMULOSH))]
+ UNSPEC_VMULESH))]
"TARGET_ALTIVEC"
- "vmulosh %0,%1,%2"
+ "vmulesh %0,%1,%2"
[(set_attr "type" "veccomplex")])
-
-;; logical ops. Have the logical ops follow the memory ops in
-;; terms of whether to prefer VSX or Altivec
-
-(define_insn "*altivec_and<mode>3"
- [(set (match_operand:VM 0 "register_operand" "=v")
- (and:VM (match_operand:VM 1 "register_operand" "v")
- (match_operand:VM 2 "register_operand" "v")))]
- "VECTOR_MEM_ALTIVEC_P (<MODE>mode)"
- "vand %0,%1,%2"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*altivec_ior<mode>3"
- [(set (match_operand:VM 0 "register_operand" "=v")
- (ior:VM (match_operand:VM 1 "register_operand" "v")
- (match_operand:VM 2 "register_operand" "v")))]
- "VECTOR_MEM_ALTIVEC_P (<MODE>mode)"
- "vor %0,%1,%2"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*altivec_xor<mode>3"
- [(set (match_operand:VM 0 "register_operand" "=v")
- (xor:VM (match_operand:VM 1 "register_operand" "v")
- (match_operand:VM 2 "register_operand" "v")))]
- "VECTOR_MEM_ALTIVEC_P (<MODE>mode)"
- "vxor %0,%1,%2"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*altivec_one_cmpl<mode>2"
- [(set (match_operand:VM 0 "register_operand" "=v")
- (not:VM (match_operand:VM 1 "register_operand" "v")))]
- "VECTOR_MEM_ALTIVEC_P (<MODE>mode)"
- "vnor %0,%1,%1"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*altivec_nor<mode>3"
- [(set (match_operand:VM 0 "register_operand" "=v")
- (not:VM (ior:VM (match_operand:VM 1 "register_operand" "v")
- (match_operand:VM 2 "register_operand" "v"))))]
- "VECTOR_MEM_ALTIVEC_P (<MODE>mode)"
- "vnor %0,%1,%2"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*altivec_andc<mode>3"
- [(set (match_operand:VM 0 "register_operand" "=v")
- (and:VM (not:VM (match_operand:VM 2 "register_operand" "v"))
- (match_operand:VM 1 "register_operand" "v")))]
- "VECTOR_MEM_ALTIVEC_P (<MODE>mode)"
- "vandc %0,%1,%2"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "altivec_vpkuhum"
- [(set (match_operand:V16QI 0 "register_operand" "=v")
- (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v")
+(define_insn "altivec_vmulosh"
+ [(set (match_operand:V4SI 0 "register_operand" "=v")
+ (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")
(match_operand:V8HI 2 "register_operand" "v")]
- UNSPEC_VPKUHUM))]
+ UNSPEC_VMULOSH))]
"TARGET_ALTIVEC"
- "vpkuhum %0,%1,%2"
- [(set_attr "type" "vecperm")])
+ "vmulosh %0,%1,%2"
+ [(set_attr "type" "veccomplex")])
-(define_insn "altivec_vpkuwum"
- [(set (match_operand:V8HI 0 "register_operand" "=v")
- (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V4SI 2 "register_operand" "v")]
- UNSPEC_VPKUWUM))]
- "TARGET_ALTIVEC"
- "vpkuwum %0,%1,%2"
- [(set_attr "type" "vecperm")])
+;; Vector pack/unpack
(define_insn "altivec_vpkpx"
[(set (match_operand:V8HI 0 "register_operand" "=v")
(unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v")
(match_operand:V4SI 2 "register_operand" "v")]
UNSPEC_VPKPX))]
"TARGET_ALTIVEC"
- "vpkpx %0,%1,%2"
+ "*
+ {
+ if (VECTOR_ELT_ORDER_BIG)
+ return \"vpkpx %0,%1,%2\";
+ else
+ return \"vpkpx %0,%2,%1\";
+ }"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vpkshss"
- [(set (match_operand:V16QI 0 "register_operand" "=v")
- (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v")
- (match_operand:V8HI 2 "register_operand" "v")]
- UNSPEC_VPKSHSS))
- (set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))]
- "TARGET_ALTIVEC"
- "vpkshss %0,%1,%2"
+(define_insn "altivec_vpks<VI_char>ss"
+ [(set (match_operand:<VP_small> 0 "register_operand" "=v")
+ (unspec:<VP_small> [(match_operand:VP 1 "register_operand" "v")
+ (match_operand:VP 2 "register_operand" "v")]
+ UNSPEC_VPACK_SIGN_SIGN_SAT))]
+ "<VI_unit>"
+ "*
+ {
+ if (VECTOR_ELT_ORDER_BIG)
+ return \"vpks<VI_char>ss %0,%1,%2\";
+ else
+ return \"vpks<VI_char>ss %0,%2,%1\";
+ }"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vpkswss"
- [(set (match_operand:V8HI 0 "register_operand" "=v")
- (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V4SI 2 "register_operand" "v")]
- UNSPEC_VPKSWSS))
- (set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))]
- "TARGET_ALTIVEC"
- "vpkswss %0,%1,%2"
+(define_insn "altivec_vpks<VI_char>us"
+ [(set (match_operand:<VP_small> 0 "register_operand" "=v")
+ (unspec:<VP_small> [(match_operand:VP 1 "register_operand" "v")
+ (match_operand:VP 2 "register_operand" "v")]
+ UNSPEC_VPACK_SIGN_UNS_SAT))]
+ "<VI_unit>"
+ "*
+ {
+ if (VECTOR_ELT_ORDER_BIG)
+ return \"vpks<VI_char>us %0,%1,%2\";
+ else
+ return \"vpks<VI_char>us %0,%2,%1\";
+ }"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vpkuhus"
- [(set (match_operand:V16QI 0 "register_operand" "=v")
- (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v")
- (match_operand:V8HI 2 "register_operand" "v")]
- UNSPEC_VPKUHUS))
- (set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))]
- "TARGET_ALTIVEC"
- "vpkuhus %0,%1,%2"
+(define_insn "altivec_vpku<VI_char>us"
+ [(set (match_operand:<VP_small> 0 "register_operand" "=v")
+ (unspec:<VP_small> [(match_operand:VP 1 "register_operand" "v")
+ (match_operand:VP 2 "register_operand" "v")]
+ UNSPEC_VPACK_UNS_UNS_SAT))]
+ "<VI_unit>"
+ "*
+ {
+ if (VECTOR_ELT_ORDER_BIG)
+ return \"vpku<VI_char>us %0,%1,%2\";
+ else
+ return \"vpku<VI_char>us %0,%2,%1\";
+ }"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vpkshus"
- [(set (match_operand:V16QI 0 "register_operand" "=v")
- (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v")
- (match_operand:V8HI 2 "register_operand" "v")]
- UNSPEC_VPKSHUS))
- (set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))]
- "TARGET_ALTIVEC"
- "vpkshus %0,%1,%2"
+(define_insn "altivec_vpku<VI_char>um"
+ [(set (match_operand:<VP_small> 0 "register_operand" "=v")
+ (unspec:<VP_small> [(match_operand:VP 1 "register_operand" "v")
+ (match_operand:VP 2 "register_operand" "v")]
+ UNSPEC_VPACK_UNS_UNS_MOD))]
+ "<VI_unit>"
+ "*
+ {
+ if (VECTOR_ELT_ORDER_BIG)
+ return \"vpku<VI_char>um %0,%1,%2\";
+ else
+ return \"vpku<VI_char>um %0,%2,%1\";
+ }"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vpkuwus"
- [(set (match_operand:V8HI 0 "register_operand" "=v")
- (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V4SI 2 "register_operand" "v")]
- UNSPEC_VPKUWUS))
- (set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))]
- "TARGET_ALTIVEC"
- "vpkuwus %0,%1,%2"
- [(set_attr "type" "vecperm")])
-
-(define_insn "altivec_vpkswus"
- [(set (match_operand:V8HI 0 "register_operand" "=v")
- (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V4SI 2 "register_operand" "v")]
- UNSPEC_VPKSWUS))
- (set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))]
- "TARGET_ALTIVEC"
- "vpkswus %0,%1,%2"
+(define_insn "altivec_vpku<VI_char>um_direct"
+ [(set (match_operand:<VP_small> 0 "register_operand" "=v")
+ (unspec:<VP_small> [(match_operand:VP 1 "register_operand" "v")
+ (match_operand:VP 2 "register_operand" "v")]
+ UNSPEC_VPACK_UNS_UNS_MOD_DIRECT))]
+ "<VI_unit>"
+ "*
+ {
+ if (BYTES_BIG_ENDIAN)
+ return \"vpku<VI_char>um %0,%1,%2\";
+ else
+ return \"vpku<VI_char>um %0,%2,%1\";
+ }"
[(set_attr "type" "vecperm")])
(define_insn "*altivec_vrl<VI_char>"
- [(set (match_operand:VI 0 "register_operand" "=v")
- (rotate:VI (match_operand:VI 1 "register_operand" "v")
- (match_operand:VI 2 "register_operand" "v")))]
- "TARGET_ALTIVEC"
+ [(set (match_operand:VI2 0 "register_operand" "=v")
+ (rotate:VI2 (match_operand:VI2 1 "register_operand" "v")
+ (match_operand:VI2 2 "register_operand" "v")))]
+ "<VI_unit>"
"vrl<VI_char> %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -1172,26 +1565,26 @@
[(set_attr "type" "vecperm")])
(define_insn "*altivec_vsl<VI_char>"
- [(set (match_operand:VI 0 "register_operand" "=v")
- (ashift:VI (match_operand:VI 1 "register_operand" "v")
- (match_operand:VI 2 "register_operand" "v")))]
- "TARGET_ALTIVEC"
+ [(set (match_operand:VI2 0 "register_operand" "=v")
+ (ashift:VI2 (match_operand:VI2 1 "register_operand" "v")
+ (match_operand:VI2 2 "register_operand" "v")))]
+ "<VI_unit>"
"vsl<VI_char> %0,%1,%2"
[(set_attr "type" "vecsimple")])
(define_insn "*altivec_vsr<VI_char>"
- [(set (match_operand:VI 0 "register_operand" "=v")
- (lshiftrt:VI (match_operand:VI 1 "register_operand" "v")
- (match_operand:VI 2 "register_operand" "v")))]
- "TARGET_ALTIVEC"
+ [(set (match_operand:VI2 0 "register_operand" "=v")
+ (lshiftrt:VI2 (match_operand:VI2 1 "register_operand" "v")
+ (match_operand:VI2 2 "register_operand" "v")))]
+ "<VI_unit>"
"vsr<VI_char> %0,%1,%2"
[(set_attr "type" "vecsimple")])
(define_insn "*altivec_vsra<VI_char>"
- [(set (match_operand:VI 0 "register_operand" "=v")
- (ashiftrt:VI (match_operand:VI 1 "register_operand" "v")
- (match_operand:VI 2 "register_operand" "v")))]
- "TARGET_ALTIVEC"
+ [(set (match_operand:VI2 0 "register_operand" "=v")
+ (ashiftrt:VI2 (match_operand:VI2 1 "register_operand" "v")
+ (match_operand:VI2 2 "register_operand" "v")))]
+ "<VI_unit>"
"vsra<VI_char> %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -1233,64 +1626,242 @@
"vsum4s<VI_char>s %0,%1,%2"
[(set_attr "type" "veccomplex")])
+;; FIXME: For the following two patterns, the scratch should only be
+;; allocated for !VECTOR_ELT_ORDER_BIG, and the instructions should
+;; be emitted separately.
(define_insn "altivec_vsum2sws"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
(match_operand:V4SI 2 "register_operand" "v")]
UNSPEC_VSUM2SWS))
- (set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))]
+ (set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))
+ (clobber (match_scratch:V4SI 3 "=v"))]
"TARGET_ALTIVEC"
- "vsum2sws %0,%1,%2"
- [(set_attr "type" "veccomplex")])
+{
+ if (VECTOR_ELT_ORDER_BIG)
+ return "vsum2sws %0,%1,%2";
+ else
+ return "vsldoi %3,%2,%2,12\n\tvsum2sws %3,%1,%3\n\tvsldoi %0,%3,%3,4";
+}
+ [(set_attr "type" "veccomplex")
+ (set (attr "length")
+ (if_then_else
+ (match_test "VECTOR_ELT_ORDER_BIG")
+ (const_string "4")
+ (const_string "12")))])
(define_insn "altivec_vsumsws"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
(match_operand:V4SI 2 "register_operand" "v")]
UNSPEC_VSUMSWS))
+ (set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))
+ (clobber (match_scratch:V4SI 3 "=v"))]
+ "TARGET_ALTIVEC"
+{
+ if (VECTOR_ELT_ORDER_BIG)
+ return "vsumsws %0,%1,%2";
+ else
+ return "vspltw %3,%2,0\n\tvsumsws %3,%1,%3\n\tvsldoi %0,%3,%3,12";
+}
+ [(set_attr "type" "veccomplex")
+ (set (attr "length")
+ (if_then_else
+ (match_test "(VECTOR_ELT_ORDER_BIG)")
+ (const_string "4")
+ (const_string "12")))])
+
+(define_insn "altivec_vsumsws_direct"
+ [(set (match_operand:V4SI 0 "register_operand" "=v")
+ (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V4SI 2 "register_operand" "v")]
+ UNSPEC_VSUMSWS_DIRECT))
(set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))]
"TARGET_ALTIVEC"
"vsumsws %0,%1,%2"
[(set_attr "type" "veccomplex")])
-(define_insn "altivec_vspltb"
+(define_expand "altivec_vspltb"
+ [(use (match_operand:V16QI 0 "register_operand" ""))
+ (use (match_operand:V16QI 1 "register_operand" ""))
+ (use (match_operand:QI 2 "u5bit_cint_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ rtvec v;
+ rtx x;
+
+ /* Special handling for LE with -maltivec=be. We have to reflect
+ the actual selected index for the splat in the RTL. */
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ operands[2] = GEN_INT (15 - INTVAL (operands[2]));
+
+ v = gen_rtvec (1, operands[2]);
+ x = gen_rtx_VEC_SELECT (QImode, operands[1], gen_rtx_PARALLEL (VOIDmode, v));
+ x = gen_rtx_VEC_DUPLICATE (V16QImode, x);
+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));
+ DONE;
+})
+
+(define_insn "*altivec_vspltb_internal"
[(set (match_operand:V16QI 0 "register_operand" "=v")
(vec_duplicate:V16QI
(vec_select:QI (match_operand:V16QI 1 "register_operand" "v")
(parallel
[(match_operand:QI 2 "u5bit_cint_operand" "")]))))]
"TARGET_ALTIVEC"
+{
+ /* For true LE, this adjusts the selected index. For LE with
+ -maltivec=be, this reverses what was done in the define_expand
+ because the instruction already has big-endian bias. */
+ if (!BYTES_BIG_ENDIAN)
+ operands[2] = GEN_INT (15 - INTVAL (operands[2]));
+
+ return "vspltb %0,%1,%2";
+}
+ [(set_attr "type" "vecperm")])
+
+(define_insn "altivec_vspltb_direct"
+ [(set (match_operand:V16QI 0 "register_operand" "=v")
+ (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
+ (match_operand:QI 2 "u5bit_cint_operand" "i")]
+ UNSPEC_VSPLT_DIRECT))]
+ "TARGET_ALTIVEC"
"vspltb %0,%1,%2"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vsplth"
+(define_expand "altivec_vsplth"
+ [(use (match_operand:V8HI 0 "register_operand" ""))
+ (use (match_operand:V8HI 1 "register_operand" ""))
+ (use (match_operand:QI 2 "u5bit_cint_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ rtvec v;
+ rtx x;
+
+ /* Special handling for LE with -maltivec=be. We have to reflect
+ the actual selected index for the splat in the RTL. */
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ operands[2] = GEN_INT (7 - INTVAL (operands[2]));
+
+ v = gen_rtvec (1, operands[2]);
+ x = gen_rtx_VEC_SELECT (HImode, operands[1], gen_rtx_PARALLEL (VOIDmode, v));
+ x = gen_rtx_VEC_DUPLICATE (V8HImode, x);
+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));
+ DONE;
+})
+
+(define_insn "*altivec_vsplth_internal"
[(set (match_operand:V8HI 0 "register_operand" "=v")
(vec_duplicate:V8HI
(vec_select:HI (match_operand:V8HI 1 "register_operand" "v")
(parallel
[(match_operand:QI 2 "u5bit_cint_operand" "")]))))]
"TARGET_ALTIVEC"
+{
+ /* For true LE, this adjusts the selected index. For LE with
+ -maltivec=be, this reverses what was done in the define_expand
+ because the instruction already has big-endian bias. */
+ if (!BYTES_BIG_ENDIAN)
+ operands[2] = GEN_INT (7 - INTVAL (operands[2]));
+
+ return "vsplth %0,%1,%2";
+}
+ [(set_attr "type" "vecperm")])
+
+(define_insn "altivec_vsplth_direct"
+ [(set (match_operand:V8HI 0 "register_operand" "=v")
+ (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v")
+ (match_operand:QI 2 "u5bit_cint_operand" "i")]
+ UNSPEC_VSPLT_DIRECT))]
+ "TARGET_ALTIVEC"
"vsplth %0,%1,%2"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vspltw"
+(define_expand "altivec_vspltw"
+ [(use (match_operand:V4SI 0 "register_operand" ""))
+ (use (match_operand:V4SI 1 "register_operand" ""))
+ (use (match_operand:QI 2 "u5bit_cint_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ rtvec v;
+ rtx x;
+
+ /* Special handling for LE with -maltivec=be. We have to reflect
+ the actual selected index for the splat in the RTL. */
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ operands[2] = GEN_INT (3 - INTVAL (operands[2]));
+
+ v = gen_rtvec (1, operands[2]);
+ x = gen_rtx_VEC_SELECT (SImode, operands[1], gen_rtx_PARALLEL (VOIDmode, v));
+ x = gen_rtx_VEC_DUPLICATE (V4SImode, x);
+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));
+ DONE;
+})
+
+(define_insn "*altivec_vspltw_internal"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(vec_duplicate:V4SI
(vec_select:SI (match_operand:V4SI 1 "register_operand" "v")
(parallel
[(match_operand:QI 2 "u5bit_cint_operand" "i")]))))]
"TARGET_ALTIVEC"
+{
+ /* For true LE, this adjusts the selected index. For LE with
+ -maltivec=be, this reverses what was done in the define_expand
+ because the instruction already has big-endian bias. */
+ if (!BYTES_BIG_ENDIAN)
+ operands[2] = GEN_INT (3 - INTVAL (operands[2]));
+
+ return "vspltw %0,%1,%2";
+}
+ [(set_attr "type" "vecperm")])
+
+(define_insn "altivec_vspltw_direct"
+ [(set (match_operand:V4SI 0 "register_operand" "=v")
+ (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:QI 2 "u5bit_cint_operand" "i")]
+ UNSPEC_VSPLT_DIRECT))]
+ "TARGET_ALTIVEC"
"vspltw %0,%1,%2"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vspltsf"
+(define_expand "altivec_vspltsf"
+ [(use (match_operand:V4SF 0 "register_operand" ""))
+ (use (match_operand:V4SF 1 "register_operand" ""))
+ (use (match_operand:QI 2 "u5bit_cint_operand" ""))]
+ "TARGET_ALTIVEC"
+{
+ rtvec v;
+ rtx x;
+
+ /* Special handling for LE with -maltivec=be. We have to reflect
+ the actual selected index for the splat in the RTL. */
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ operands[2] = GEN_INT (3 - INTVAL (operands[2]));
+
+ v = gen_rtvec (1, operands[2]);
+ x = gen_rtx_VEC_SELECT (SFmode, operands[1], gen_rtx_PARALLEL (VOIDmode, v));
+ x = gen_rtx_VEC_DUPLICATE (V4SFmode, x);
+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));
+ DONE;
+})
+
+(define_insn "*altivec_vspltsf_internal"
[(set (match_operand:V4SF 0 "register_operand" "=v")
(vec_duplicate:V4SF
(vec_select:SF (match_operand:V4SF 1 "register_operand" "v")
(parallel
[(match_operand:QI 2 "u5bit_cint_operand" "i")]))))]
"VECTOR_UNIT_ALTIVEC_P (V4SFmode)"
- "vspltw %0,%1,%2"
+{
+ /* For true LE, this adjusts the selected index. For LE with
+ -maltivec=be, this reverses what was done in the define_expand
+ because the instruction already has big-endian bias. */
+ if (!BYTES_BIG_ENDIAN)
+ operands[2] = GEN_INT (3 - INTVAL (operands[2]));
+
+ return "vspltw %0,%1,%2";
+}
[(set_attr "type" "vecperm")])
(define_insn "altivec_vspltis<VI_char>"
@@ -1308,7 +1879,22 @@
"vrfiz %0,%1"
[(set_attr "type" "vecfloat")])
-(define_insn "altivec_vperm_<mode>"
+(define_expand "altivec_vperm_<mode>"
+ [(set (match_operand:VM 0 "register_operand" "=v")
+ (unspec:VM [(match_operand:VM 1 "register_operand" "v")
+ (match_operand:VM 2 "register_operand" "v")
+ (match_operand:V16QI 3 "register_operand" "v")]
+ UNSPEC_VPERM))]
+ "TARGET_ALTIVEC"
+{
+ if (!VECTOR_ELT_ORDER_BIG)
+ {
+ altivec_expand_vec_perm_le (operands);
+ DONE;
+ }
+})
+
+(define_insn "*altivec_vperm_<mode>_internal"
[(set (match_operand:VM 0 "register_operand" "=v")
(unspec:VM [(match_operand:VM 1 "register_operand" "v")
(match_operand:VM 2 "register_operand" "v")
@@ -1318,7 +1904,22 @@
"vperm %0,%1,%2,%3"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vperm_<mode>_uns"
+(define_expand "altivec_vperm_<mode>_uns"
+ [(set (match_operand:VM 0 "register_operand" "=v")
+ (unspec:VM [(match_operand:VM 1 "register_operand" "v")
+ (match_operand:VM 2 "register_operand" "v")
+ (match_operand:V16QI 3 "register_operand" "v")]
+ UNSPEC_VPERM_UNS))]
+ "TARGET_ALTIVEC"
+{
+ if (!VECTOR_ELT_ORDER_BIG)
+ {
+ altivec_expand_vec_perm_le (operands);
+ DONE;
+ }
+})
+
+(define_insn "*altivec_vperm_<mode>_uns_internal"
[(set (match_operand:VM 0 "register_operand" "=v")
(unspec:VM [(match_operand:VM 1 "register_operand" "v")
(match_operand:VM 2 "register_operand" "v")
@@ -1335,7 +1936,12 @@
(match_operand:V16QI 3 "register_operand" "")]
UNSPEC_VPERM))]
"TARGET_ALTIVEC"
- "")
+{
+ if (!BYTES_BIG_ENDIAN) {
+ altivec_expand_vec_perm_le (operands);
+ DONE;
+ }
+})
(define_expand "vec_perm_constv16qi"
[(match_operand:V16QI 0 "register_operand" "")
@@ -1476,89 +2082,109 @@
"vsldoi %0,%1,%2,%3"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vupkhsb"
- [(set (match_operand:V8HI 0 "register_operand" "=v")
- (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")]
- UNSPEC_VUPKHSB))]
- "TARGET_ALTIVEC"
- "vupkhsb %0,%1"
+(define_insn "altivec_vupkhs<VU_char>"
+ [(set (match_operand:VP 0 "register_operand" "=v")
+ (unspec:VP [(match_operand:<VP_small> 1 "register_operand" "v")]
+ UNSPEC_VUNPACK_HI_SIGN))]
+ "<VI_unit>"
+{
+ if (VECTOR_ELT_ORDER_BIG)
+ return "vupkhs<VU_char> %0,%1";
+ else
+ return "vupkls<VU_char> %0,%1";
+}
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vupkhpx"
- [(set (match_operand:V4SI 0 "register_operand" "=v")
- (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")]
- UNSPEC_VUPKHPX))]
- "TARGET_ALTIVEC"
- "vupkhpx %0,%1"
+(define_insn "*altivec_vupkhs<VU_char>_direct"
+ [(set (match_operand:VP 0 "register_operand" "=v")
+ (unspec:VP [(match_operand:<VP_small> 1 "register_operand" "v")]
+ UNSPEC_VUNPACK_HI_SIGN_DIRECT))]
+ "<VI_unit>"
+ "vupkhs<VU_char> %0,%1"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vupkhsh"
- [(set (match_operand:V4SI 0 "register_operand" "=v")
- (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")]
- UNSPEC_VUPKHSH))]
- "TARGET_ALTIVEC"
- "vupkhsh %0,%1"
+(define_insn "altivec_vupkls<VU_char>"
+ [(set (match_operand:VP 0 "register_operand" "=v")
+ (unspec:VP [(match_operand:<VP_small> 1 "register_operand" "v")]
+ UNSPEC_VUNPACK_LO_SIGN))]
+ "<VI_unit>"
+{
+ if (VECTOR_ELT_ORDER_BIG)
+ return "vupkls<VU_char> %0,%1";
+ else
+ return "vupkhs<VU_char> %0,%1";
+}
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vupklsb"
- [(set (match_operand:V8HI 0 "register_operand" "=v")
- (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")]
- UNSPEC_VUPKLSB))]
- "TARGET_ALTIVEC"
- "vupklsb %0,%1"
+(define_insn "*altivec_vupkls<VU_char>_direct"
+ [(set (match_operand:VP 0 "register_operand" "=v")
+ (unspec:VP [(match_operand:<VP_small> 1 "register_operand" "v")]
+ UNSPEC_VUNPACK_LO_SIGN_DIRECT))]
+ "<VI_unit>"
+ "vupkls<VU_char> %0,%1"
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vupklpx"
+(define_insn "altivec_vupkhpx"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")]
- UNSPEC_VUPKLPX))]
+ UNSPEC_VUPKHPX))]
"TARGET_ALTIVEC"
- "vupklpx %0,%1"
+{
+ if (VECTOR_ELT_ORDER_BIG)
+ return "vupkhpx %0,%1";
+ else
+ return "vupklpx %0,%1";
+}
[(set_attr "type" "vecperm")])
-(define_insn "altivec_vupklsh"
+(define_insn "altivec_vupklpx"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")]
- UNSPEC_VUPKLSH))]
+ UNSPEC_VUPKLPX))]
"TARGET_ALTIVEC"
- "vupklsh %0,%1"
+{
+ if (VECTOR_ELT_ORDER_BIG)
+ return "vupklpx %0,%1";
+ else
+ return "vupkhpx %0,%1";
+}
[(set_attr "type" "vecperm")])
;; Compare vectors producing a vector result and a predicate, setting CR6 to
;; indicate a combined status
(define_insn "*altivec_vcmpequ<VI_char>_p"
[(set (reg:CC 74)
- (unspec:CC [(eq:CC (match_operand:VI 1 "register_operand" "v")
- (match_operand:VI 2 "register_operand" "v"))]
+ (unspec:CC [(eq:CC (match_operand:VI2 1 "register_operand" "v")
+ (match_operand:VI2 2 "register_operand" "v"))]
UNSPEC_PREDICATE))
- (set (match_operand:VI 0 "register_operand" "=v")
- (eq:VI (match_dup 1)
+ (set (match_operand:VI2 0 "register_operand" "=v")
+ (eq:VI2 (match_dup 1)
(match_dup 2)))]
- "VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
+ "<VI_unit>"
"vcmpequ<VI_char>. %0,%1,%2"
[(set_attr "type" "veccmp")])
(define_insn "*altivec_vcmpgts<VI_char>_p"
[(set (reg:CC 74)
- (unspec:CC [(gt:CC (match_operand:VI 1 "register_operand" "v")
- (match_operand:VI 2 "register_operand" "v"))]
+ (unspec:CC [(gt:CC (match_operand:VI2 1 "register_operand" "v")
+ (match_operand:VI2 2 "register_operand" "v"))]
UNSPEC_PREDICATE))
- (set (match_operand:VI 0 "register_operand" "=v")
- (gt:VI (match_dup 1)
+ (set (match_operand:VI2 0 "register_operand" "=v")
+ (gt:VI2 (match_dup 1)
(match_dup 2)))]
- "VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
+ "<VI_unit>"
"vcmpgts<VI_char>. %0,%1,%2"
[(set_attr "type" "veccmp")])
(define_insn "*altivec_vcmpgtu<VI_char>_p"
[(set (reg:CC 74)
- (unspec:CC [(gtu:CC (match_operand:VI 1 "register_operand" "v")
- (match_operand:VI 2 "register_operand" "v"))]
+ (unspec:CC [(gtu:CC (match_operand:VI2 1 "register_operand" "v")
+ (match_operand:VI2 2 "register_operand" "v"))]
UNSPEC_PREDICATE))
- (set (match_operand:VI 0 "register_operand" "=v")
- (gtu:VI (match_dup 1)
+ (set (match_operand:VI2 0 "register_operand" "=v")
+ (gtu:VI2 (match_dup 1)
(match_dup 2)))]
- "VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
+ "<VI_unit>"
"vcmpgtu<VI_char>. %0,%1,%2"
[(set_attr "type" "veccmp")])
@@ -1710,7 +2336,21 @@
;; Parallel some of the LVE* and STV*'s with unspecs because some have
;; identical rtl but different instructions-- and gcc gets confused.
-(define_insn "altivec_lve<VI_char>x"
+(define_expand "altivec_lve<VI_char>x"
+ [(parallel
+ [(set (match_operand:VI 0 "register_operand" "=v")
+ (match_operand:VI 1 "memory_operand" "Z"))
+ (unspec [(const_int 0)] UNSPEC_LVE)])]
+ "TARGET_ALTIVEC"
+{
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ {
+ altivec_expand_lvx_be (operands[0], operands[1], <MODE>mode, UNSPEC_LVE);
+ DONE;
+ }
+})
+
+(define_insn "*altivec_lve<VI_char>x_internal"
[(parallel
[(set (match_operand:VI 0 "register_operand" "=v")
(match_operand:VI 1 "memory_operand" "Z"))
@@ -1728,16 +2368,44 @@
"lvewx %0,%y1"
[(set_attr "type" "vecload")])
-(define_insn "altivec_lvxl"
+(define_expand "altivec_lvxl_<mode>"
[(parallel
- [(set (match_operand:V4SI 0 "register_operand" "=v")
- (match_operand:V4SI 1 "memory_operand" "Z"))
+ [(set (match_operand:VM2 0 "register_operand" "=v")
+ (match_operand:VM2 1 "memory_operand" "Z"))
(unspec [(const_int 0)] UNSPEC_SET_VSCR)])]
"TARGET_ALTIVEC"
- "lvxl %0,%y1"
+{
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ {
+ altivec_expand_lvx_be (operands[0], operands[1], <MODE>mode, UNSPEC_SET_VSCR);
+ DONE;
+ }
+})
+
+(define_insn "*altivec_lvxl_<mode>_internal"
+ [(parallel
+ [(set (match_operand:VM2 0 "register_operand" "=v")
+ (match_operand:VM2 1 "memory_operand" "Z"))
+ (unspec [(const_int 0)] UNSPEC_SET_VSCR)])]
+ "TARGET_ALTIVEC"
+ "lvx %0,%y1"
[(set_attr "type" "vecload")])
-(define_insn "altivec_lvx_<mode>"
+(define_expand "altivec_lvx_<mode>"
+ [(parallel
+ [(set (match_operand:VM2 0 "register_operand" "=v")
+ (match_operand:VM2 1 "memory_operand" "Z"))
+ (unspec [(const_int 0)] UNSPEC_LVX)])]
+ "TARGET_ALTIVEC"
+{
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ {
+ altivec_expand_lvx_be (operands[0], operands[1], <MODE>mode, UNSPEC_LVX);
+ DONE;
+ }
+})
+
+(define_insn "*altivec_lvx_<mode>_internal"
[(parallel
[(set (match_operand:VM2 0 "register_operand" "=v")
(match_operand:VM2 1 "memory_operand" "Z"))
@@ -1746,7 +2414,21 @@
"lvx %0,%y1"
[(set_attr "type" "vecload")])
-(define_insn "altivec_stvx_<mode>"
+(define_expand "altivec_stvx_<mode>"
+ [(parallel
+ [(set (match_operand:VM2 0 "memory_operand" "=Z")
+ (match_operand:VM2 1 "register_operand" "v"))
+ (unspec [(const_int 0)] UNSPEC_STVX)])]
+ "TARGET_ALTIVEC"
+{
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ {
+ altivec_expand_stvx_be (operands[0], operands[1], <MODE>mode, UNSPEC_STVX);
+ DONE;
+ }
+})
+
+(define_insn "*altivec_stvx_<mode>_internal"
[(parallel
[(set (match_operand:VM2 0 "memory_operand" "=Z")
(match_operand:VM2 1 "register_operand" "v"))
@@ -1755,16 +2437,42 @@
"stvx %1,%y0"
[(set_attr "type" "vecstore")])
-(define_insn "altivec_stvxl"
+(define_expand "altivec_stvxl_<mode>"
[(parallel
- [(set (match_operand:V4SI 0 "memory_operand" "=Z")
- (match_operand:V4SI 1 "register_operand" "v"))
+ [(set (match_operand:VM2 0 "memory_operand" "=Z")
+ (match_operand:VM2 1 "register_operand" "v"))
+ (unspec [(const_int 0)] UNSPEC_STVXL)])]
+ "TARGET_ALTIVEC"
+{
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ {
+ altivec_expand_stvx_be (operands[0], operands[1], <MODE>mode, UNSPEC_STVXL);
+ DONE;
+ }
+})
+
+(define_insn "*altivec_stvxl_<mode>_internal"
+ [(parallel
+ [(set (match_operand:VM2 0 "memory_operand" "=Z")
+ (match_operand:VM2 1 "register_operand" "v"))
(unspec [(const_int 0)] UNSPEC_STVXL)])]
"TARGET_ALTIVEC"
"stvxl %1,%y0"
[(set_attr "type" "vecstore")])
-(define_insn "altivec_stve<VI_char>x"
+(define_expand "altivec_stve<VI_char>x"
+ [(set (match_operand:<VI_scalar> 0 "memory_operand" "=Z")
+ (unspec:<VI_scalar> [(match_operand:VI 1 "register_operand" "v")] UNSPEC_STVE))]
+ "TARGET_ALTIVEC"
+{
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ {
+ altivec_expand_stvex_be (operands[0], operands[1], <MODE>mode, UNSPEC_STVE);
+ DONE;
+ }
+})
+
+(define_insn "*altivec_stve<VI_char>x_internal"
[(set (match_operand:<VI_scalar> 0 "memory_operand" "=Z")
(unspec:<VI_scalar> [(match_operand:VI 1 "register_operand" "v")] UNSPEC_STVE))]
"TARGET_ALTIVEC"
@@ -1779,20 +2487,28 @@
[(set_attr "type" "vecstore")])
;; Generate
-;; vspltis? SCRATCH0,0
+;; xxlxor/vxor SCRATCH0,SCRATCH0,SCRATCH0
;; vsubu?m SCRATCH2,SCRATCH1,%1
;; vmaxs? %0,%1,SCRATCH2"
(define_expand "abs<mode>2"
- [(set (match_dup 2) (vec_duplicate:VI (const_int 0)))
- (set (match_dup 3)
- (minus:VI (match_dup 2)
- (match_operand:VI 1 "register_operand" "v")))
- (set (match_operand:VI 0 "register_operand" "=v")
- (smax:VI (match_dup 1) (match_dup 3)))]
- "TARGET_ALTIVEC"
+ [(set (match_dup 2) (match_dup 3))
+ (set (match_dup 4)
+ (minus:VI2 (match_dup 2)
+ (match_operand:VI2 1 "register_operand" "v")))
+ (set (match_operand:VI2 0 "register_operand" "=v")
+ (smax:VI2 (match_dup 1) (match_dup 4)))]
+ "<VI_unit>"
{
- operands[2] = gen_reg_rtx (GET_MODE (operands[0]));
- operands[3] = gen_reg_rtx (GET_MODE (operands[0]));
+ int i, n_elt = GET_MODE_NUNITS (<MODE>mode);
+ rtvec v = rtvec_alloc (n_elt);
+
+ /* Create an all 0 constant. */
+ for (i = 0; i < n_elt; ++i)
+ RTVEC_ELT (v, i) = const0_rtx;
+
+ operands[2] = gen_reg_rtx (<MODE>mode);
+ operands[3] = gen_rtx_CONST_VECTOR (<MODE>mode, v);
+ operands[4] = gen_reg_rtx (<MODE>mode);
})
;; Generate
@@ -1844,7 +2560,7 @@
emit_insn (gen_altivec_vspltisw (vzero, const0_rtx));
emit_insn (gen_altivec_vsum4s<VI_char>s (vtmp1, operands[1], vzero));
- emit_insn (gen_altivec_vsumsws (dest, vtmp1, vzero));
+ emit_insn (gen_altivec_vsumsws_direct (dest, vtmp1, vzero));
DONE;
})
@@ -1860,7 +2576,7 @@
emit_insn (gen_altivec_vspltisw (vzero, const0_rtx));
emit_insn (gen_altivec_vsum4ubs (vtmp1, operands[1], vzero));
- emit_insn (gen_altivec_vsumsws (dest, vtmp1, vzero));
+ emit_insn (gen_altivec_vsumsws_direct (dest, vtmp1, vzero));
DONE;
})
@@ -1950,49 +2666,19 @@
DONE;
}")
-(define_expand "vec_unpacks_hi_v16qi"
- [(set (match_operand:V8HI 0 "register_operand" "=v")
- (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")]
- UNSPEC_VUPKHSB))]
- "TARGET_ALTIVEC"
- "
-{
- emit_insn (gen_altivec_vupkhsb (operands[0], operands[1]));
- DONE;
-}")
-
-(define_expand "vec_unpacks_hi_v8hi"
- [(set (match_operand:V4SI 0 "register_operand" "=v")
- (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")]
- UNSPEC_VUPKHSH))]
- "TARGET_ALTIVEC"
- "
-{
- emit_insn (gen_altivec_vupkhsh (operands[0], operands[1]));
- DONE;
-}")
-
-(define_expand "vec_unpacks_lo_v16qi"
- [(set (match_operand:V8HI 0 "register_operand" "=v")
- (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")]
- UNSPEC_VUPKLSB))]
- "TARGET_ALTIVEC"
- "
-{
- emit_insn (gen_altivec_vupklsb (operands[0], operands[1]));
- DONE;
-}")
+(define_expand "vec_unpacks_hi_<VP_small_lc>"
+ [(set (match_operand:VP 0 "register_operand" "=v")
+ (unspec:VP [(match_operand:<VP_small> 1 "register_operand" "v")]
+ UNSPEC_VUNPACK_HI_SIGN_DIRECT))]
+ "<VI_unit>"
+ "")
-(define_expand "vec_unpacks_lo_v8hi"
- [(set (match_operand:V4SI 0 "register_operand" "=v")
- (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")]
- UNSPEC_VUPKLSH))]
- "TARGET_ALTIVEC"
- "
-{
- emit_insn (gen_altivec_vupklsh (operands[0], operands[1]));
- DONE;
-}")
+(define_expand "vec_unpacks_lo_<VP_small_lc>"
+ [(set (match_operand:VP 0 "register_operand" "=v")
+ (unspec:VP [(match_operand:<VP_small> 1 "register_operand" "v")]
+ UNSPEC_VUNPACK_LO_SIGN_DIRECT))]
+ "<VI_unit>"
+ "")
(define_insn "vperm_v8hiv4si"
[(set (match_operand:V4SI 0 "register_operand" "=v")
@@ -2025,25 +2711,26 @@
rtx vzero = gen_reg_rtx (V8HImode);
rtx mask = gen_reg_rtx (V16QImode);
rtvec v = rtvec_alloc (16);
+ bool be = BYTES_BIG_ENDIAN;
emit_insn (gen_altivec_vspltish (vzero, const0_rtx));
- RTVEC_ELT (v, 0) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 1) = gen_rtx_CONST_INT (QImode, 0);
- RTVEC_ELT (v, 2) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 3) = gen_rtx_CONST_INT (QImode, 1);
- RTVEC_ELT (v, 4) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 5) = gen_rtx_CONST_INT (QImode, 2);
- RTVEC_ELT (v, 6) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 7) = gen_rtx_CONST_INT (QImode, 3);
- RTVEC_ELT (v, 8) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 9) = gen_rtx_CONST_INT (QImode, 4);
- RTVEC_ELT (v, 10) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 11) = gen_rtx_CONST_INT (QImode, 5);
- RTVEC_ELT (v, 12) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 13) = gen_rtx_CONST_INT (QImode, 6);
- RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, 7);
+ RTVEC_ELT (v, 0) = gen_rtx_CONST_INT (QImode, be ? 16 : 7);
+ RTVEC_ELT (v, 1) = gen_rtx_CONST_INT (QImode, be ? 0 : 16);
+ RTVEC_ELT (v, 2) = gen_rtx_CONST_INT (QImode, be ? 16 : 6);
+ RTVEC_ELT (v, 3) = gen_rtx_CONST_INT (QImode, be ? 1 : 16);
+ RTVEC_ELT (v, 4) = gen_rtx_CONST_INT (QImode, be ? 16 : 5);
+ RTVEC_ELT (v, 5) = gen_rtx_CONST_INT (QImode, be ? 2 : 16);
+ RTVEC_ELT (v, 6) = gen_rtx_CONST_INT (QImode, be ? 16 : 4);
+ RTVEC_ELT (v, 7) = gen_rtx_CONST_INT (QImode, be ? 3 : 16);
+ RTVEC_ELT (v, 8) = gen_rtx_CONST_INT (QImode, be ? 16 : 3);
+ RTVEC_ELT (v, 9) = gen_rtx_CONST_INT (QImode, be ? 4 : 16);
+ RTVEC_ELT (v, 10) = gen_rtx_CONST_INT (QImode, be ? 16 : 2);
+ RTVEC_ELT (v, 11) = gen_rtx_CONST_INT (QImode, be ? 5 : 16);
+ RTVEC_ELT (v, 12) = gen_rtx_CONST_INT (QImode, be ? 16 : 1);
+ RTVEC_ELT (v, 13) = gen_rtx_CONST_INT (QImode, be ? 6 : 16);
+ RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, be ? 16 : 0);
+ RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, be ? 7 : 16);
emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_vperm_v16qiv8hi (operands[0], operands[1], vzero, mask));
@@ -2060,25 +2747,26 @@
rtx vzero = gen_reg_rtx (V4SImode);
rtx mask = gen_reg_rtx (V16QImode);
rtvec v = rtvec_alloc (16);
+ bool be = BYTES_BIG_ENDIAN;
emit_insn (gen_altivec_vspltisw (vzero, const0_rtx));
- RTVEC_ELT (v, 0) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 1) = gen_rtx_CONST_INT (QImode, 17);
- RTVEC_ELT (v, 2) = gen_rtx_CONST_INT (QImode, 0);
- RTVEC_ELT (v, 3) = gen_rtx_CONST_INT (QImode, 1);
- RTVEC_ELT (v, 4) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 5) = gen_rtx_CONST_INT (QImode, 17);
- RTVEC_ELT (v, 6) = gen_rtx_CONST_INT (QImode, 2);
- RTVEC_ELT (v, 7) = gen_rtx_CONST_INT (QImode, 3);
- RTVEC_ELT (v, 8) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 9) = gen_rtx_CONST_INT (QImode, 17);
- RTVEC_ELT (v, 10) = gen_rtx_CONST_INT (QImode, 4);
- RTVEC_ELT (v, 11) = gen_rtx_CONST_INT (QImode, 5);
- RTVEC_ELT (v, 12) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 13) = gen_rtx_CONST_INT (QImode, 17);
- RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, 6);
- RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, 7);
+ RTVEC_ELT (v, 0) = gen_rtx_CONST_INT (QImode, be ? 16 : 7);
+ RTVEC_ELT (v, 1) = gen_rtx_CONST_INT (QImode, be ? 17 : 6);
+ RTVEC_ELT (v, 2) = gen_rtx_CONST_INT (QImode, be ? 0 : 17);
+ RTVEC_ELT (v, 3) = gen_rtx_CONST_INT (QImode, be ? 1 : 16);
+ RTVEC_ELT (v, 4) = gen_rtx_CONST_INT (QImode, be ? 16 : 5);
+ RTVEC_ELT (v, 5) = gen_rtx_CONST_INT (QImode, be ? 17 : 4);
+ RTVEC_ELT (v, 6) = gen_rtx_CONST_INT (QImode, be ? 2 : 17);
+ RTVEC_ELT (v, 7) = gen_rtx_CONST_INT (QImode, be ? 3 : 16);
+ RTVEC_ELT (v, 8) = gen_rtx_CONST_INT (QImode, be ? 16 : 3);
+ RTVEC_ELT (v, 9) = gen_rtx_CONST_INT (QImode, be ? 17 : 2);
+ RTVEC_ELT (v, 10) = gen_rtx_CONST_INT (QImode, be ? 4 : 17);
+ RTVEC_ELT (v, 11) = gen_rtx_CONST_INT (QImode, be ? 5 : 16);
+ RTVEC_ELT (v, 12) = gen_rtx_CONST_INT (QImode, be ? 16 : 1);
+ RTVEC_ELT (v, 13) = gen_rtx_CONST_INT (QImode, be ? 17 : 0);
+ RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, be ? 6 : 17);
+ RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, be ? 7 : 16);
emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_vperm_v8hiv4si (operands[0], operands[1], vzero, mask));
@@ -2095,25 +2783,26 @@
rtx vzero = gen_reg_rtx (V8HImode);
rtx mask = gen_reg_rtx (V16QImode);
rtvec v = rtvec_alloc (16);
+ bool be = BYTES_BIG_ENDIAN;
emit_insn (gen_altivec_vspltish (vzero, const0_rtx));
- RTVEC_ELT (v, 0) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 1) = gen_rtx_CONST_INT (QImode, 8);
- RTVEC_ELT (v, 2) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 3) = gen_rtx_CONST_INT (QImode, 9);
- RTVEC_ELT (v, 4) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 5) = gen_rtx_CONST_INT (QImode, 10);
- RTVEC_ELT (v, 6) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 7) = gen_rtx_CONST_INT (QImode, 11);
- RTVEC_ELT (v, 8) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 9) = gen_rtx_CONST_INT (QImode, 12);
- RTVEC_ELT (v, 10) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 11) = gen_rtx_CONST_INT (QImode, 13);
- RTVEC_ELT (v, 12) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 13) = gen_rtx_CONST_INT (QImode, 14);
- RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, 15);
+ RTVEC_ELT (v, 0) = gen_rtx_CONST_INT (QImode, be ? 16 : 15);
+ RTVEC_ELT (v, 1) = gen_rtx_CONST_INT (QImode, be ? 8 : 16);
+ RTVEC_ELT (v, 2) = gen_rtx_CONST_INT (QImode, be ? 16 : 14);
+ RTVEC_ELT (v, 3) = gen_rtx_CONST_INT (QImode, be ? 9 : 16);
+ RTVEC_ELT (v, 4) = gen_rtx_CONST_INT (QImode, be ? 16 : 13);
+ RTVEC_ELT (v, 5) = gen_rtx_CONST_INT (QImode, be ? 10 : 16);
+ RTVEC_ELT (v, 6) = gen_rtx_CONST_INT (QImode, be ? 16 : 12);
+ RTVEC_ELT (v, 7) = gen_rtx_CONST_INT (QImode, be ? 11 : 16);
+ RTVEC_ELT (v, 8) = gen_rtx_CONST_INT (QImode, be ? 16 : 11);
+ RTVEC_ELT (v, 9) = gen_rtx_CONST_INT (QImode, be ? 12 : 16);
+ RTVEC_ELT (v, 10) = gen_rtx_CONST_INT (QImode, be ? 16 : 10);
+ RTVEC_ELT (v, 11) = gen_rtx_CONST_INT (QImode, be ? 13 : 16);
+ RTVEC_ELT (v, 12) = gen_rtx_CONST_INT (QImode, be ? 16 : 9);
+ RTVEC_ELT (v, 13) = gen_rtx_CONST_INT (QImode, be ? 14 : 16);
+ RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, be ? 16 : 8);
+ RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, be ? 15 : 16);
emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_vperm_v16qiv8hi (operands[0], operands[1], vzero, mask));
@@ -2130,25 +2819,26 @@
rtx vzero = gen_reg_rtx (V4SImode);
rtx mask = gen_reg_rtx (V16QImode);
rtvec v = rtvec_alloc (16);
+ bool be = BYTES_BIG_ENDIAN;
emit_insn (gen_altivec_vspltisw (vzero, const0_rtx));
- RTVEC_ELT (v, 0) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 1) = gen_rtx_CONST_INT (QImode, 17);
- RTVEC_ELT (v, 2) = gen_rtx_CONST_INT (QImode, 8);
- RTVEC_ELT (v, 3) = gen_rtx_CONST_INT (QImode, 9);
- RTVEC_ELT (v, 4) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 5) = gen_rtx_CONST_INT (QImode, 17);
- RTVEC_ELT (v, 6) = gen_rtx_CONST_INT (QImode, 10);
- RTVEC_ELT (v, 7) = gen_rtx_CONST_INT (QImode, 11);
- RTVEC_ELT (v, 8) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 9) = gen_rtx_CONST_INT (QImode, 17);
- RTVEC_ELT (v, 10) = gen_rtx_CONST_INT (QImode, 12);
- RTVEC_ELT (v, 11) = gen_rtx_CONST_INT (QImode, 13);
- RTVEC_ELT (v, 12) = gen_rtx_CONST_INT (QImode, 16);
- RTVEC_ELT (v, 13) = gen_rtx_CONST_INT (QImode, 17);
- RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, 14);
- RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, 15);
+ RTVEC_ELT (v, 0) = gen_rtx_CONST_INT (QImode, be ? 16 : 15);
+ RTVEC_ELT (v, 1) = gen_rtx_CONST_INT (QImode, be ? 17 : 14);
+ RTVEC_ELT (v, 2) = gen_rtx_CONST_INT (QImode, be ? 8 : 17);
+ RTVEC_ELT (v, 3) = gen_rtx_CONST_INT (QImode, be ? 9 : 16);
+ RTVEC_ELT (v, 4) = gen_rtx_CONST_INT (QImode, be ? 16 : 13);
+ RTVEC_ELT (v, 5) = gen_rtx_CONST_INT (QImode, be ? 17 : 12);
+ RTVEC_ELT (v, 6) = gen_rtx_CONST_INT (QImode, be ? 10 : 17);
+ RTVEC_ELT (v, 7) = gen_rtx_CONST_INT (QImode, be ? 11 : 16);
+ RTVEC_ELT (v, 8) = gen_rtx_CONST_INT (QImode, be ? 16 : 11);
+ RTVEC_ELT (v, 9) = gen_rtx_CONST_INT (QImode, be ? 17 : 10);
+ RTVEC_ELT (v, 10) = gen_rtx_CONST_INT (QImode, be ? 12 : 17);
+ RTVEC_ELT (v, 11) = gen_rtx_CONST_INT (QImode, be ? 13 : 16);
+ RTVEC_ELT (v, 12) = gen_rtx_CONST_INT (QImode, be ? 16 : 9);
+ RTVEC_ELT (v, 13) = gen_rtx_CONST_INT (QImode, be ? 17 : 8);
+ RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, be ? 14 : 17);
+ RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, be ? 15 : 16);
emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_vperm_v8hiv4si (operands[0], operands[1], vzero, mask));
@@ -2166,9 +2856,18 @@
rtx ve = gen_reg_rtx (V8HImode);
rtx vo = gen_reg_rtx (V8HImode);
- emit_insn (gen_vec_widen_umult_even_v16qi (ve, operands[1], operands[2]));
- emit_insn (gen_vec_widen_umult_odd_v16qi (vo, operands[1], operands[2]));
- emit_insn (gen_altivec_vmrghh (operands[0], ve, vo));
+ if (BYTES_BIG_ENDIAN)
+ {
+ emit_insn (gen_altivec_vmuleub (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmuloub (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrghh_direct (operands[0], ve, vo));
+ }
+ else
+ {
+ emit_insn (gen_altivec_vmuloub (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmuleub (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrghh_direct (operands[0], vo, ve));
+ }
DONE;
}")
@@ -2183,9 +2882,18 @@
rtx ve = gen_reg_rtx (V8HImode);
rtx vo = gen_reg_rtx (V8HImode);
- emit_insn (gen_vec_widen_umult_even_v16qi (ve, operands[1], operands[2]));
- emit_insn (gen_vec_widen_umult_odd_v16qi (vo, operands[1], operands[2]));
- emit_insn (gen_altivec_vmrglh (operands[0], ve, vo));
+ if (BYTES_BIG_ENDIAN)
+ {
+ emit_insn (gen_altivec_vmuleub (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmuloub (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrglh_direct (operands[0], ve, vo));
+ }
+ else
+ {
+ emit_insn (gen_altivec_vmuloub (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmuleub (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrglh_direct (operands[0], vo, ve));
+ }
DONE;
}")
@@ -2200,9 +2908,18 @@
rtx ve = gen_reg_rtx (V8HImode);
rtx vo = gen_reg_rtx (V8HImode);
- emit_insn (gen_vec_widen_smult_even_v16qi (ve, operands[1], operands[2]));
- emit_insn (gen_vec_widen_smult_odd_v16qi (vo, operands[1], operands[2]));
- emit_insn (gen_altivec_vmrghh (operands[0], ve, vo));
+ if (BYTES_BIG_ENDIAN)
+ {
+ emit_insn (gen_altivec_vmulesb (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmulosb (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrghh_direct (operands[0], ve, vo));
+ }
+ else
+ {
+ emit_insn (gen_altivec_vmulosb (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmulesb (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrghh_direct (operands[0], vo, ve));
+ }
DONE;
}")
@@ -2217,9 +2934,18 @@
rtx ve = gen_reg_rtx (V8HImode);
rtx vo = gen_reg_rtx (V8HImode);
- emit_insn (gen_vec_widen_smult_even_v16qi (ve, operands[1], operands[2]));
- emit_insn (gen_vec_widen_smult_odd_v16qi (vo, operands[1], operands[2]));
- emit_insn (gen_altivec_vmrglh (operands[0], ve, vo));
+ if (BYTES_BIG_ENDIAN)
+ {
+ emit_insn (gen_altivec_vmulesb (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmulosb (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrglh_direct (operands[0], ve, vo));
+ }
+ else
+ {
+ emit_insn (gen_altivec_vmulosb (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmulesb (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrglh_direct (operands[0], vo, ve));
+ }
DONE;
}")
@@ -2234,9 +2960,18 @@
rtx ve = gen_reg_rtx (V4SImode);
rtx vo = gen_reg_rtx (V4SImode);
- emit_insn (gen_vec_widen_umult_even_v8hi (ve, operands[1], operands[2]));
- emit_insn (gen_vec_widen_umult_odd_v8hi (vo, operands[1], operands[2]));
- emit_insn (gen_altivec_vmrghw (operands[0], ve, vo));
+ if (BYTES_BIG_ENDIAN)
+ {
+ emit_insn (gen_altivec_vmuleuh (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmulouh (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrghw_direct (operands[0], ve, vo));
+ }
+ else
+ {
+ emit_insn (gen_altivec_vmulouh (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmuleuh (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrghw_direct (operands[0], vo, ve));
+ }
DONE;
}")
@@ -2251,9 +2986,18 @@
rtx ve = gen_reg_rtx (V4SImode);
rtx vo = gen_reg_rtx (V4SImode);
- emit_insn (gen_vec_widen_umult_even_v8hi (ve, operands[1], operands[2]));
- emit_insn (gen_vec_widen_umult_odd_v8hi (vo, operands[1], operands[2]));
- emit_insn (gen_altivec_vmrglw (operands[0], ve, vo));
+ if (BYTES_BIG_ENDIAN)
+ {
+ emit_insn (gen_altivec_vmuleuh (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmulouh (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrglw_direct (operands[0], ve, vo));
+ }
+ else
+ {
+ emit_insn (gen_altivec_vmulouh (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmuleuh (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrglw_direct (operands[0], vo, ve));
+ }
DONE;
}")
@@ -2268,9 +3012,18 @@
rtx ve = gen_reg_rtx (V4SImode);
rtx vo = gen_reg_rtx (V4SImode);
- emit_insn (gen_vec_widen_smult_even_v8hi (ve, operands[1], operands[2]));
- emit_insn (gen_vec_widen_smult_odd_v8hi (vo, operands[1], operands[2]));
- emit_insn (gen_altivec_vmrghw (operands[0], ve, vo));
+ if (BYTES_BIG_ENDIAN)
+ {
+ emit_insn (gen_altivec_vmulesh (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmulosh (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrghw_direct (operands[0], ve, vo));
+ }
+ else
+ {
+ emit_insn (gen_altivec_vmulosh (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmulesh (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrghw_direct (operands[0], vo, ve));
+ }
DONE;
}")
@@ -2285,35 +3038,28 @@
rtx ve = gen_reg_rtx (V4SImode);
rtx vo = gen_reg_rtx (V4SImode);
- emit_insn (gen_vec_widen_smult_even_v8hi (ve, operands[1], operands[2]));
- emit_insn (gen_vec_widen_smult_odd_v8hi (vo, operands[1], operands[2]));
- emit_insn (gen_altivec_vmrglw (operands[0], ve, vo));
- DONE;
-}")
-
-(define_expand "vec_pack_trunc_v8hi"
- [(set (match_operand:V16QI 0 "register_operand" "=v")
- (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v")
- (match_operand:V8HI 2 "register_operand" "v")]
- UNSPEC_VPKUHUM))]
- "TARGET_ALTIVEC"
- "
-{
- emit_insn (gen_altivec_vpkuhum (operands[0], operands[1], operands[2]));
+ if (BYTES_BIG_ENDIAN)
+ {
+ emit_insn (gen_altivec_vmulesh (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmulosh (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrglw_direct (operands[0], ve, vo));
+ }
+ else
+ {
+ emit_insn (gen_altivec_vmulosh (ve, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmulesh (vo, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmrglw_direct (operands[0], vo, ve));
+ }
DONE;
}")
-(define_expand "vec_pack_trunc_v4si"
- [(set (match_operand:V8HI 0 "register_operand" "=v")
- (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V4SI 2 "register_operand" "v")]
- UNSPEC_VPKUWUM))]
- "TARGET_ALTIVEC"
- "
-{
- emit_insn (gen_altivec_vpkuwum (operands[0], operands[1], operands[2]));
- DONE;
-}")
+(define_expand "vec_pack_trunc_<mode>"
+ [(set (match_operand:<VP_small> 0 "register_operand" "=v")
+ (unspec:<VP_small> [(match_operand:VP 1 "register_operand" "v")
+ (match_operand:VP 2 "register_operand" "v")]
+ UNSPEC_VPACK_UNS_UNS_MOD))]
+ "<VI_unit>"
+ "")
(define_expand "altivec_negv4sf2"
[(use (match_operand:V4SF 0 "register_operand" ""))
@@ -2460,3 +3206,243 @@
emit_insn (gen_altivec_vcfux (operands[0], tmp, const0_rtx));
DONE;
}")
+
+
+;; Power8 vector instructions encoded as Altivec instructions
+
+;; Vector count leading zeros
+(define_insn "*p8v_clz<mode>2"
+ [(set (match_operand:VI2 0 "register_operand" "=v")
+ (clz:VI2 (match_operand:VI2 1 "register_operand" "v")))]
+ "TARGET_P8_VECTOR"
+ "vclz<wd> %0,%1"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+;; Vector population count
+(define_insn "*p8v_popcount<mode>2"
+ [(set (match_operand:VI2 0 "register_operand" "=v")
+ (popcount:VI2 (match_operand:VI2 1 "register_operand" "v")))]
+ "TARGET_P8_VECTOR"
+ "vpopcnt<wd> %0,%1"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+;; Vector Gather Bits by Bytes by Doubleword
+(define_insn "p8v_vgbbd"
+ [(set (match_operand:V16QI 0 "register_operand" "=v")
+ (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")]
+ UNSPEC_VGBBD))]
+ "TARGET_P8_VECTOR"
+ "vgbbd %0,%1"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+
+;; 128-bit binary integer arithmetic
+;; We have a special container type (V1TImode) to allow operations using the
+;; ISA 2.07 128-bit binary support to target the VMX/altivec registers without
+;; having to worry about the register allocator deciding GPRs are better.
+
+(define_insn "altivec_vadduqm"
+ [(set (match_operand:V1TI 0 "register_operand" "=v")
+ (plus:V1TI (match_operand:V1TI 1 "register_operand" "v")
+ (match_operand:V1TI 2 "register_operand" "v")))]
+ "TARGET_VADDUQM"
+ "vadduqm %0,%1,%2"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+(define_insn "altivec_vaddcuq"
+ [(set (match_operand:V1TI 0 "register_operand" "=v")
+ (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "v")
+ (match_operand:V1TI 2 "register_operand" "v")]
+ UNSPEC_VADDCUQ))]
+ "TARGET_VADDUQM"
+ "vaddcuq %0,%1,%2"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+(define_insn "altivec_vsubuqm"
+ [(set (match_operand:V1TI 0 "register_operand" "=v")
+ (minus:V1TI (match_operand:V1TI 1 "register_operand" "v")
+ (match_operand:V1TI 2 "register_operand" "v")))]
+ "TARGET_VADDUQM"
+ "vsubuqm %0,%1,%2"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+(define_insn "altivec_vsubcuq"
+ [(set (match_operand:V1TI 0 "register_operand" "=v")
+ (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "v")
+ (match_operand:V1TI 2 "register_operand" "v")]
+ UNSPEC_VSUBCUQ))]
+ "TARGET_VADDUQM"
+ "vsubcuq %0,%1,%2"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+(define_insn "altivec_vaddeuqm"
+ [(set (match_operand:V1TI 0 "register_operand" "=v")
+ (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "v")
+ (match_operand:V1TI 2 "register_operand" "v")
+ (match_operand:V1TI 3 "register_operand" "v")]
+ UNSPEC_VADDEUQM))]
+ "TARGET_VADDUQM"
+ "vaddeuqm %0,%1,%2,%3"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+(define_insn "altivec_vaddecuq"
+ [(set (match_operand:V1TI 0 "register_operand" "=v")
+ (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "v")
+ (match_operand:V1TI 2 "register_operand" "v")
+ (match_operand:V1TI 3 "register_operand" "v")]
+ UNSPEC_VADDECUQ))]
+ "TARGET_VADDUQM"
+ "vaddecuq %0,%1,%2,%3"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+(define_insn "altivec_vsubeuqm"
+ [(set (match_operand:V1TI 0 "register_operand" "=v")
+ (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "v")
+ (match_operand:V1TI 2 "register_operand" "v")
+ (match_operand:V1TI 3 "register_operand" "v")]
+ UNSPEC_VSUBEUQM))]
+ "TARGET_VADDUQM"
+ "vsubeuqm %0,%1,%2,%3"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+(define_insn "altivec_vsubecuq"
+ [(set (match_operand:V1TI 0 "register_operand" "=v")
+ (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "v")
+ (match_operand:V1TI 2 "register_operand" "v")
+ (match_operand:V1TI 3 "register_operand" "v")]
+ UNSPEC_VSUBECUQ))]
+ "TARGET_VADDUQM"
+ "vsubecuq %0,%1,%2,%3"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+;; We use V2DI as the output type to simplify converting the permute
+;; bits into an integer
+(define_insn "altivec_vbpermq"
+ [(set (match_operand:V2DI 0 "register_operand" "=v")
+ (unspec:V2DI [(match_operand:V16QI 1 "register_operand" "v")
+ (match_operand:V16QI 2 "register_operand" "v")]
+ UNSPEC_VBPERMQ))]
+ "TARGET_P8_VECTOR"
+ "vbpermq %0,%1,%2"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+;; Decimal Integer operations
+(define_int_iterator UNSPEC_BCD_ADD_SUB [UNSPEC_BCDADD UNSPEC_BCDSUB])
+
+(define_int_attr bcd_add_sub [(UNSPEC_BCDADD "add")
+ (UNSPEC_BCDSUB "sub")])
+
+(define_code_iterator BCD_TEST [eq lt gt unordered])
+
+(define_insn "bcd<bcd_add_sub>"
+ [(set (match_operand:V1TI 0 "register_operand" "")
+ (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "")
+ (match_operand:V1TI 2 "register_operand" "")
+ (match_operand:QI 3 "const_0_to_1_operand" "")]
+ UNSPEC_BCD_ADD_SUB))
+ (clobber (reg:CCFP 74))]
+ "TARGET_P8_VECTOR"
+ "bcd<bcd_add_sub>. %0,%1,%2,%3"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+;; Use a floating point type (V2DFmode) for the compare to set CR6 so that we
+;; can use the unordered test for BCD nans and add/subtracts that overflow. An
+;; UNORDERED test on an integer type (like V1TImode) is not defined. The type
+;; probably should be one that can go in the VMX (Altivec) registers, so we
+;; can't use DDmode or DFmode.
+(define_insn "*bcd<bcd_add_sub>_test"
+ [(set (reg:CCFP 74)
+ (compare:CCFP
+ (unspec:V2DF [(match_operand:V1TI 1 "register_operand" "v")
+ (match_operand:V1TI 2 "register_operand" "v")
+ (match_operand:QI 3 "const_0_to_1_operand" "i")]
+ UNSPEC_BCD_ADD_SUB)
+ (match_operand:V2DF 4 "zero_constant" "j")))
+ (clobber (match_scratch:V1TI 0 "=v"))]
+ "TARGET_P8_VECTOR"
+ "bcd<bcd_add_sub>. %0,%1,%2,%3"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+(define_insn "*bcd<bcd_add_sub>_test2"
+ [(set (match_operand:V1TI 0 "register_operand" "=v")
+ (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "v")
+ (match_operand:V1TI 2 "register_operand" "v")
+ (match_operand:QI 3 "const_0_to_1_operand" "i")]
+ UNSPEC_BCD_ADD_SUB))
+ (set (reg:CCFP 74)
+ (compare:CCFP
+ (unspec:V2DF [(match_dup 1)
+ (match_dup 2)
+ (match_dup 3)]
+ UNSPEC_BCD_ADD_SUB)
+ (match_operand:V2DF 4 "zero_constant" "j")))]
+ "TARGET_P8_VECTOR"
+ "bcd<bcd_add_sub>. %0,%1,%2,%3"
+ [(set_attr "length" "4")
+ (set_attr "type" "vecsimple")])
+
+(define_expand "bcd<bcd_add_sub>_<code>"
+ [(parallel [(set (reg:CCFP 74)
+ (compare:CCFP
+ (unspec:V2DF [(match_operand:V1TI 1 "register_operand" "")
+ (match_operand:V1TI 2 "register_operand" "")
+ (match_operand:QI 3 "const_0_to_1_operand" "")]
+ UNSPEC_BCD_ADD_SUB)
+ (match_dup 4)))
+ (clobber (match_scratch:V1TI 5 ""))])
+ (set (match_operand:SI 0 "register_operand" "")
+ (BCD_TEST:SI (reg:CCFP 74)
+ (const_int 0)))]
+ "TARGET_P8_VECTOR"
+{
+ operands[4] = CONST0_RTX (V2DFmode);
+})
+
+;; Peephole2 pattern to combine a bcdadd/bcdsub that calculates the value and
+;; the bcdadd/bcdsub that tests the value. The combiner won't work since
+;; CR6 is a hard coded register. Unfortunately, all of the Altivec predicate
+;; support is hard coded to use the fixed register CR6 instead of creating
+;; a register class for CR6.
+
+(define_peephole2
+ [(parallel [(set (match_operand:V1TI 0 "register_operand" "")
+ (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "")
+ (match_operand:V1TI 2 "register_operand" "")
+ (match_operand:QI 3 "const_0_to_1_operand" "")]
+ UNSPEC_BCD_ADD_SUB))
+ (clobber (reg:CCFP 74))])
+ (parallel [(set (reg:CCFP 74)
+ (compare:CCFP
+ (unspec:V2DF [(match_dup 1)
+ (match_dup 2)
+ (match_dup 3)]
+ UNSPEC_BCD_ADD_SUB)
+ (match_operand:V2DF 4 "zero_constant" "")))
+ (clobber (match_operand:V1TI 5 "register_operand" ""))])]
+ "TARGET_P8_VECTOR"
+ [(parallel [(set (match_dup 0)
+ (unspec:V1TI [(match_dup 1)
+ (match_dup 2)
+ (match_dup 3)]
+ UNSPEC_BCD_ADD_SUB))
+ (set (reg:CCFP 74)
+ (compare:CCFP
+ (unspec:V2DF [(match_dup 1)
+ (match_dup 2)
+ (match_dup 3)]
+ UNSPEC_BCD_ADD_SUB)
+ (match_dup 4)))])])
diff --git a/gcc-4.8/gcc/config/rs6000/constraints.md b/gcc-4.8/gcc/config/rs6000/constraints.md
index ccb61edce..4467b9e3d 100644
--- a/gcc-4.8/gcc/config/rs6000/constraints.md
+++ b/gcc-4.8/gcc/config/rs6000/constraints.md
@@ -52,21 +52,61 @@
"@internal")
;; Use w as a prefix to add VSX modes
-;; vector double (V2DF)
+;; any VSX register
+(define_register_constraint "wa" "rs6000_constraints[RS6000_CONSTRAINT_wa]"
+ "Any VSX register if the -mvsx option was used or NO_REGS.")
+
(define_register_constraint "wd" "rs6000_constraints[RS6000_CONSTRAINT_wd]"
- "@internal")
+ "VSX vector register to hold vector double data or NO_REGS.")
-;; vector float (V4SF)
(define_register_constraint "wf" "rs6000_constraints[RS6000_CONSTRAINT_wf]"
- "@internal")
+ "VSX vector register to hold vector float data or NO_REGS.")
+
+(define_register_constraint "wg" "rs6000_constraints[RS6000_CONSTRAINT_wg]"
+ "If -mmfpgpr was used, a floating point register or NO_REGS.")
+
+(define_register_constraint "wl" "rs6000_constraints[RS6000_CONSTRAINT_wl]"
+ "Floating point register if the LFIWAX instruction is enabled or NO_REGS.")
+
+(define_register_constraint "wm" "rs6000_constraints[RS6000_CONSTRAINT_wm]"
+ "VSX register if direct move instructions are enabled, or NO_REGS.")
+
+;; NO_REGs register constraint, used to merge mov{sd,sf}, since movsd can use
+;; direct move directly, and movsf can't to move between the register sets.
+;; There is a mode_attr that resolves to wm for SDmode and wn for SFmode
+(define_register_constraint "wn" "NO_REGS" "No register (NO_REGS).")
+
+(define_register_constraint "wr" "rs6000_constraints[RS6000_CONSTRAINT_wr]"
+ "General purpose register if 64-bit instructions are enabled or NO_REGS.")
-;; scalar double (DF)
(define_register_constraint "ws" "rs6000_constraints[RS6000_CONSTRAINT_ws]"
- "@internal")
+ "VSX vector register to hold scalar double values or NO_REGS.")
-;; any VSX register
-(define_register_constraint "wa" "rs6000_constraints[RS6000_CONSTRAINT_wa]"
- "@internal")
+(define_register_constraint "wt" "rs6000_constraints[RS6000_CONSTRAINT_wt]"
+ "VSX vector register to hold 128 bit integer or NO_REGS.")
+
+(define_register_constraint "wu" "rs6000_constraints[RS6000_CONSTRAINT_wu]"
+ "Altivec register to use for float/32-bit int loads/stores or NO_REGS.")
+
+(define_register_constraint "wv" "rs6000_constraints[RS6000_CONSTRAINT_wv]"
+ "Altivec register to use for double loads/stores or NO_REGS.")
+
+(define_register_constraint "ww" "rs6000_constraints[RS6000_CONSTRAINT_ww]"
+ "FP or VSX register to perform float operations under -mvsx or NO_REGS.")
+
+(define_register_constraint "wx" "rs6000_constraints[RS6000_CONSTRAINT_wx]"
+ "Floating point register if the STFIWX instruction is enabled or NO_REGS.")
+
+(define_register_constraint "wy" "rs6000_constraints[RS6000_CONSTRAINT_wy]"
+ "VSX vector register to hold scalar float values or NO_REGS.")
+
+(define_register_constraint "wz" "rs6000_constraints[RS6000_CONSTRAINT_wz]"
+ "Floating point register if the LFIWZX instruction is enabled or NO_REGS.")
+
+;; Lq/stq validates the address for load/store quad
+(define_memory_constraint "wQ"
+ "Memory operand suitable for the load/store quad instructions"
+ (match_operand 0 "quad_memory_operand"))
;; Altivec style load/store that ignores the bottom bits of the address
(define_memory_constraint "wZ"
diff --git a/gcc-4.8/gcc/config/rs6000/crypto.md b/gcc-4.8/gcc/config/rs6000/crypto.md
new file mode 100644
index 000000000..9f7e4a1b2
--- /dev/null
+++ b/gcc-4.8/gcc/config/rs6000/crypto.md
@@ -0,0 +1,101 @@
+;; Cryptographic instructions added in ISA 2.07
+;; Copyright (C) 2012-2013 Free Software Foundation, Inc.
+;; Contributed by Michael Meissner (meissner@linux.vnet.ibm.com)
+
+;; This file is part of GCC.
+
+;; GCC is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 3, or (at your
+;; option) any later version.
+
+;; GCC is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+;; License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING3. If not see
+;; <http://www.gnu.org/licenses/>.
+
+(define_c_enum "unspec"
+ [UNSPEC_VCIPHER
+ UNSPEC_VNCIPHER
+ UNSPEC_VCIPHERLAST
+ UNSPEC_VNCIPHERLAST
+ UNSPEC_VSBOX
+ UNSPEC_VSHASIGMA
+ UNSPEC_VPERMXOR
+ UNSPEC_VPMSUM])
+
+;; Iterator for VPMSUM/VPERMXOR
+(define_mode_iterator CR_mode [V16QI V8HI V4SI V2DI])
+
+(define_mode_attr CR_char [(V16QI "b")
+ (V8HI "h")
+ (V4SI "w")
+ (V2DI "d")])
+
+;; Iterator for VSHASIGMAD/VSHASIGMAW
+(define_mode_iterator CR_hash [V4SI V2DI])
+
+;; Iterator for the other crypto functions
+(define_int_iterator CR_code [UNSPEC_VCIPHER
+ UNSPEC_VNCIPHER
+ UNSPEC_VCIPHERLAST
+ UNSPEC_VNCIPHERLAST])
+
+(define_int_attr CR_insn [(UNSPEC_VCIPHER "vcipher")
+ (UNSPEC_VNCIPHER "vncipher")
+ (UNSPEC_VCIPHERLAST "vcipherlast")
+ (UNSPEC_VNCIPHERLAST "vncipherlast")])
+
+;; 2 operand crypto instructions
+(define_insn "crypto_<CR_insn>"
+ [(set (match_operand:V2DI 0 "register_operand" "=v")
+ (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "v")
+ (match_operand:V2DI 2 "register_operand" "v")]
+ CR_code))]
+ "TARGET_CRYPTO"
+ "<CR_insn> %0,%1,%2"
+ [(set_attr "type" "crypto")])
+
+(define_insn "crypto_vpmsum<CR_char>"
+ [(set (match_operand:CR_mode 0 "register_operand" "=v")
+ (unspec:CR_mode [(match_operand:CR_mode 1 "register_operand" "v")
+ (match_operand:CR_mode 2 "register_operand" "v")]
+ UNSPEC_VPMSUM))]
+ "TARGET_CRYPTO"
+ "vpmsum<CR_char> %0,%1,%2"
+ [(set_attr "type" "crypto")])
+
+;; 3 operand crypto instructions
+(define_insn "crypto_vpermxor_<mode>"
+ [(set (match_operand:CR_mode 0 "register_operand" "=v")
+ (unspec:CR_mode [(match_operand:CR_mode 1 "register_operand" "v")
+ (match_operand:CR_mode 2 "register_operand" "v")
+ (match_operand:CR_mode 3 "register_operand" "v")]
+ UNSPEC_VPERMXOR))]
+ "TARGET_CRYPTO"
+ "vpermxor %0,%1,%2,%3"
+ [(set_attr "type" "crypto")])
+
+;; 1 operand crypto instruction
+(define_insn "crypto_vsbox"
+ [(set (match_operand:V2DI 0 "register_operand" "=v")
+ (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "v")]
+ UNSPEC_VSBOX))]
+ "TARGET_CRYPTO"
+ "vsbox %0,%1"
+ [(set_attr "type" "crypto")])
+
+;; Hash crypto instructions
+(define_insn "crypto_vshasigma<CR_char>"
+ [(set (match_operand:CR_hash 0 "register_operand" "=v")
+ (unspec:CR_hash [(match_operand:CR_hash 1 "register_operand" "v")
+ (match_operand:SI 2 "const_0_to_1_operand" "n")
+ (match_operand:SI 3 "const_0_to_15_operand" "n")]
+ UNSPEC_VSHASIGMA))]
+ "TARGET_CRYPTO"
+ "vshasigma<CR_char> %0,%1,%2,%3"
+ [(set_attr "type" "crypto")])
diff --git a/gcc-4.8/gcc/config/rs6000/darwin.h b/gcc-4.8/gcc/config/rs6000/darwin.h
index 9d92d2af4..0cf2f4c34 100644
--- a/gcc-4.8/gcc/config/rs6000/darwin.h
+++ b/gcc-4.8/gcc/config/rs6000/darwin.h
@@ -205,7 +205,8 @@ extern int darwin_emit_branch_islands;
"v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", \
"vrsave", "vscr", \
"spe_acc", "spefscr", \
- "sfp" \
+ "sfp", \
+ "tfhar", "tfiar", "texasr" \
}
/* This outputs NAME to FILE. */
diff --git a/gcc-4.8/gcc/config/rs6000/dfp.md b/gcc-4.8/gcc/config/rs6000/dfp.md
index 040bae490..a3c09390a 100644
--- a/gcc-4.8/gcc/config/rs6000/dfp.md
+++ b/gcc-4.8/gcc/config/rs6000/dfp.md
@@ -29,77 +29,6 @@
])
-(define_expand "movsd"
- [(set (match_operand:SD 0 "nonimmediate_operand" "")
- (match_operand:SD 1 "any_operand" ""))]
- "TARGET_HARD_FLOAT && TARGET_FPRS"
- "{ rs6000_emit_move (operands[0], operands[1], SDmode); DONE; }")
-
-(define_split
- [(set (match_operand:SD 0 "gpc_reg_operand" "")
- (match_operand:SD 1 "const_double_operand" ""))]
- "reload_completed
- && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
- || (GET_CODE (operands[0]) == SUBREG
- && GET_CODE (SUBREG_REG (operands[0])) == REG
- && REGNO (SUBREG_REG (operands[0])) <= 31))"
- [(set (match_dup 2) (match_dup 3))]
- "
-{
- long l;
- REAL_VALUE_TYPE rv;
-
- REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
- REAL_VALUE_TO_TARGET_DECIMAL32 (rv, l);
-
- if (! TARGET_POWERPC64)
- operands[2] = operand_subword (operands[0], 0, 0, SDmode);
- else
- operands[2] = gen_lowpart (SImode, operands[0]);
-
- operands[3] = gen_int_mode (l, SImode);
-}")
-
-(define_insn "movsd_hardfloat"
- [(set (match_operand:SD 0 "nonimmediate_operand" "=r,r,m,f,*c*l,!r,*h,!r,!r")
- (match_operand:SD 1 "input_operand" "r,m,r,f,r,h,0,G,Fn"))]
- "(gpc_reg_operand (operands[0], SDmode)
- || gpc_reg_operand (operands[1], SDmode))
- && (TARGET_HARD_FLOAT && TARGET_FPRS)"
- "@
- mr %0,%1
- lwz%U1%X1 %0,%1
- stw%U0%X0 %1,%0
- fmr %0,%1
- mt%0 %1
- mf%1 %0
- nop
- #
- #"
- [(set_attr "type" "*,load,store,fp,mtjmpr,mfjmpr,*,*,*")
- (set_attr "length" "4,4,4,4,4,4,4,4,8")])
-
-(define_insn "movsd_softfloat"
- [(set (match_operand:SD 0 "nonimmediate_operand" "=r,cl,r,r,m,r,r,r,r,r,*h")
- (match_operand:SD 1 "input_operand" "r,r,h,m,r,I,L,R,G,Fn,0"))]
- "(gpc_reg_operand (operands[0], SDmode)
- || gpc_reg_operand (operands[1], SDmode))
- && (TARGET_SOFT_FLOAT || !TARGET_FPRS)"
- "@
- mr %0,%1
- mt%0 %1
- mf%1 %0
- lwz%U1%X1 %0,%1
- stw%U0%X0 %1,%0
- li %0,%1
- lis %0,%v1
- la %0,%a1
- #
- #
- nop"
- [(set_attr "type" "*,mtjmpr,mfjmpr,load,store,*,*,*,*,*,*")
- (set_attr "length" "4,4,4,4,4,4,4,4,4,8,4")])
-
(define_insn "movsd_store"
[(set (match_operand:DD 0 "nonimmediate_operand" "=m")
(unspec:DD [(match_operand:SD 1 "input_operand" "d")]
@@ -108,7 +37,14 @@
|| gpc_reg_operand (operands[1], SDmode))
&& TARGET_HARD_FLOAT && TARGET_FPRS"
"stfd%U0%X0 %1,%0"
- [(set_attr "type" "fpstore")
+ [(set (attr "type")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_u")
+ (const_string "fpstore"))))
(set_attr "length" "4")])
(define_insn "movsd_load"
@@ -119,7 +55,14 @@
|| gpc_reg_operand (operands[1], DDmode))
&& TARGET_HARD_FLOAT && TARGET_FPRS"
"lfd%U1%X1 %0,%1"
- [(set_attr "type" "fpload")
+ [(set (attr "type")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_u")
+ (const_string "fpload"))))
(set_attr "length" "4")])
;; Hardware support for decimal floating point operations.
@@ -182,211 +125,6 @@
"fnabs %0,%1"
[(set_attr "type" "fp")])
-(define_expand "movdd"
- [(set (match_operand:DD 0 "nonimmediate_operand" "")
- (match_operand:DD 1 "any_operand" ""))]
- ""
- "{ rs6000_emit_move (operands[0], operands[1], DDmode); DONE; }")
-
-(define_split
- [(set (match_operand:DD 0 "gpc_reg_operand" "")
- (match_operand:DD 1 "const_int_operand" ""))]
- "! TARGET_POWERPC64 && reload_completed
- && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
- || (GET_CODE (operands[0]) == SUBREG
- && GET_CODE (SUBREG_REG (operands[0])) == REG
- && REGNO (SUBREG_REG (operands[0])) <= 31))"
- [(set (match_dup 2) (match_dup 4))
- (set (match_dup 3) (match_dup 1))]
- "
-{
- int endian = (WORDS_BIG_ENDIAN == 0);
- HOST_WIDE_INT value = INTVAL (operands[1]);
-
- operands[2] = operand_subword (operands[0], endian, 0, DDmode);
- operands[3] = operand_subword (operands[0], 1 - endian, 0, DDmode);
-#if HOST_BITS_PER_WIDE_INT == 32
- operands[4] = (value & 0x80000000) ? constm1_rtx : const0_rtx;
-#else
- operands[4] = GEN_INT (value >> 32);
- operands[1] = GEN_INT (((value & 0xffffffff) ^ 0x80000000) - 0x80000000);
-#endif
-}")
-
-(define_split
- [(set (match_operand:DD 0 "gpc_reg_operand" "")
- (match_operand:DD 1 "const_double_operand" ""))]
- "! TARGET_POWERPC64 && reload_completed
- && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
- || (GET_CODE (operands[0]) == SUBREG
- && GET_CODE (SUBREG_REG (operands[0])) == REG
- && REGNO (SUBREG_REG (operands[0])) <= 31))"
- [(set (match_dup 2) (match_dup 4))
- (set (match_dup 3) (match_dup 5))]
- "
-{
- int endian = (WORDS_BIG_ENDIAN == 0);
- long l[2];
- REAL_VALUE_TYPE rv;
-
- REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
- REAL_VALUE_TO_TARGET_DECIMAL64 (rv, l);
-
- operands[2] = operand_subword (operands[0], endian, 0, DDmode);
- operands[3] = operand_subword (operands[0], 1 - endian, 0, DDmode);
- operands[4] = gen_int_mode (l[endian], SImode);
- operands[5] = gen_int_mode (l[1 - endian], SImode);
-}")
-
-(define_split
- [(set (match_operand:DD 0 "gpc_reg_operand" "")
- (match_operand:DD 1 "const_double_operand" ""))]
- "TARGET_POWERPC64 && reload_completed
- && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
- || (GET_CODE (operands[0]) == SUBREG
- && GET_CODE (SUBREG_REG (operands[0])) == REG
- && REGNO (SUBREG_REG (operands[0])) <= 31))"
- [(set (match_dup 2) (match_dup 3))]
- "
-{
- int endian = (WORDS_BIG_ENDIAN == 0);
- long l[2];
- REAL_VALUE_TYPE rv;
-#if HOST_BITS_PER_WIDE_INT >= 64
- HOST_WIDE_INT val;
-#endif
-
- REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
- REAL_VALUE_TO_TARGET_DECIMAL64 (rv, l);
-
- operands[2] = gen_lowpart (DImode, operands[0]);
- /* HIGHPART is lower memory address when WORDS_BIG_ENDIAN. */
-#if HOST_BITS_PER_WIDE_INT >= 64
- val = ((HOST_WIDE_INT)(unsigned long)l[endian] << 32
- | ((HOST_WIDE_INT)(unsigned long)l[1 - endian]));
-
- operands[3] = gen_int_mode (val, DImode);
-#else
- operands[3] = immed_double_const (l[1 - endian], l[endian], DImode);
-#endif
-}")
-
-;; Don't have reload use general registers to load a constant. First,
-;; it might not work if the output operand is the equivalent of
-;; a non-offsettable memref, but also it is less efficient than loading
-;; the constant into an FP register, since it will probably be used there.
-;; The "??" is a kludge until we can figure out a more reasonable way
-;; of handling these non-offsettable values.
-(define_insn "*movdd_hardfloat32"
- [(set (match_operand:DD 0 "nonimmediate_operand" "=!r,??r,m,d,d,m,!r,!r,!r")
- (match_operand:DD 1 "input_operand" "r,m,r,d,m,d,G,H,F"))]
- "! TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS
- && (gpc_reg_operand (operands[0], DDmode)
- || gpc_reg_operand (operands[1], DDmode))"
- "*
-{
- switch (which_alternative)
- {
- default:
- gcc_unreachable ();
- case 0:
- case 1:
- case 2:
- return \"#\";
- case 3:
- return \"fmr %0,%1\";
- case 4:
- return \"lfd%U1%X1 %0,%1\";
- case 5:
- return \"stfd%U0%X0 %1,%0\";
- case 6:
- case 7:
- case 8:
- return \"#\";
- }
-}"
- [(set_attr "type" "two,load,store,fp,fpload,fpstore,*,*,*")
- (set_attr "length" "8,16,16,4,4,4,8,12,16")])
-
-(define_insn "*movdd_softfloat32"
- [(set (match_operand:DD 0 "nonimmediate_operand" "=r,r,m,r,r,r")
- (match_operand:DD 1 "input_operand" "r,m,r,G,H,F"))]
- "! TARGET_POWERPC64 && (TARGET_SOFT_FLOAT || !TARGET_FPRS)
- && (gpc_reg_operand (operands[0], DDmode)
- || gpc_reg_operand (operands[1], DDmode))"
- "#"
- [(set_attr "type" "two,load,store,*,*,*")
- (set_attr "length" "8,8,8,8,12,16")])
-
-; ld/std require word-aligned displacements -> 'Y' constraint.
-; List Y->r and r->Y before r->r for reload.
-(define_insn "*movdd_hardfloat64_mfpgpr"
- [(set (match_operand:DD 0 "nonimmediate_operand" "=Y,r,!r,d,d,m,*c*l,!r,*h,!r,!r,!r,r,d")
- (match_operand:DD 1 "input_operand" "r,Y,r,d,m,d,r,h,0,G,H,F,d,r"))]
- "TARGET_POWERPC64 && TARGET_MFPGPR && TARGET_HARD_FLOAT && TARGET_FPRS
- && (gpc_reg_operand (operands[0], DDmode)
- || gpc_reg_operand (operands[1], DDmode))"
- "@
- std%U0%X0 %1,%0
- ld%U1%X1 %0,%1
- mr %0,%1
- fmr %0,%1
- lfd%U1%X1 %0,%1
- stfd%U0%X0 %1,%0
- mt%0 %1
- mf%1 %0
- nop
- #
- #
- #
- mftgpr %0,%1
- mffgpr %0,%1"
- [(set_attr "type" "store,load,*,fp,fpload,fpstore,mtjmpr,mfjmpr,*,*,*,*,mftgpr,mffgpr")
- (set_attr "length" "4,4,4,4,4,4,4,4,4,8,12,16,4,4")])
-
-; ld/std require word-aligned displacements -> 'Y' constraint.
-; List Y->r and r->Y before r->r for reload.
-(define_insn "*movdd_hardfloat64"
- [(set (match_operand:DD 0 "nonimmediate_operand" "=Y,r,!r,d,d,m,*c*l,!r,*h,!r,!r,!r")
- (match_operand:DD 1 "input_operand" "r,Y,r,d,m,d,r,h,0,G,H,F"))]
- "TARGET_POWERPC64 && !TARGET_MFPGPR && TARGET_HARD_FLOAT && TARGET_FPRS
- && (gpc_reg_operand (operands[0], DDmode)
- || gpc_reg_operand (operands[1], DDmode))"
- "@
- std%U0%X0 %1,%0
- ld%U1%X1 %0,%1
- mr %0,%1
- fmr %0,%1
- lfd%U1%X1 %0,%1
- stfd%U0%X0 %1,%0
- mt%0 %1
- mf%1 %0
- nop
- #
- #
- #"
- [(set_attr "type" "store,load,*,fp,fpload,fpstore,mtjmpr,mfjmpr,*,*,*,*")
- (set_attr "length" "4,4,4,4,4,4,4,4,4,8,12,16")])
-
-(define_insn "*movdd_softfloat64"
- [(set (match_operand:DD 0 "nonimmediate_operand" "=r,Y,r,cl,r,r,r,r,*h")
- (match_operand:DD 1 "input_operand" "Y,r,r,r,h,G,H,F,0"))]
- "TARGET_POWERPC64 && (TARGET_SOFT_FLOAT || !TARGET_FPRS)
- && (gpc_reg_operand (operands[0], DDmode)
- || gpc_reg_operand (operands[1], DDmode))"
- "@
- ld%U1%X1 %0,%1
- std%U0%X0 %1,%0
- mr %0,%1
- mt%0 %1
- mf%1 %0
- #
- #
- #
- nop"
- [(set_attr "type" "load,store,*,mtjmpr,mfjmpr,*,*,*,*")
- (set_attr "length" "4,4,4,4,4,8,12,16,4")])
-
(define_expand "negtd2"
[(set (match_operand:TD 0 "gpc_reg_operand" "")
(neg:TD (match_operand:TD 1 "gpc_reg_operand" "")))]
@@ -410,39 +148,24 @@
"")
(define_insn "*abstd2_fpr"
- [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
- (abs:TD (match_operand:TD 1 "gpc_reg_operand" "d")))]
+ [(set (match_operand:TD 0 "gpc_reg_operand" "=d,d")
+ (abs:TD (match_operand:TD 1 "gpc_reg_operand" "0,d")))]
"TARGET_HARD_FLOAT && TARGET_FPRS"
- "fabs %0,%1"
- [(set_attr "type" "fp")])
+ "@
+ fabs %0,%1
+ fabs %0,%1\;fmr %L0,%L1"
+ [(set_attr "type" "fp")
+ (set_attr "length" "4,8")])
(define_insn "*nabstd2_fpr"
- [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
- (neg:TD (abs:TD (match_operand:TD 1 "gpc_reg_operand" "d"))))]
- "TARGET_HARD_FLOAT && TARGET_FPRS"
- "fnabs %0,%1"
- [(set_attr "type" "fp")])
-
-(define_expand "movtd"
- [(set (match_operand:TD 0 "general_operand" "")
- (match_operand:TD 1 "any_operand" ""))]
+ [(set (match_operand:TD 0 "gpc_reg_operand" "=d,d")
+ (neg:TD (abs:TD (match_operand:TD 1 "gpc_reg_operand" "0,d"))))]
"TARGET_HARD_FLOAT && TARGET_FPRS"
- "{ rs6000_emit_move (operands[0], operands[1], TDmode); DONE; }")
-
-; It's important to list the Y->r and r->Y moves before r->r because
-; otherwise reload, given m->r, will try to pick r->r and reload it,
-; which doesn't make progress.
-(define_insn_and_split "*movtd_internal"
- [(set (match_operand:TD 0 "nonimmediate_operand" "=m,d,d,Y,r,r")
- (match_operand:TD 1 "input_operand" "d,m,d,r,YGHF,r"))]
- "TARGET_HARD_FLOAT && TARGET_FPRS
- && (gpc_reg_operand (operands[0], TDmode)
- || gpc_reg_operand (operands[1], TDmode))"
- "#"
- "&& reload_completed"
- [(pc)]
-{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; }
- [(set_attr "length" "8,8,8,20,20,16")])
+ "@
+ fnabs %0,%1
+ fnabs %0,%1\;fmr %L0,%L1"
+ [(set_attr "type" "fp")
+ (set_attr "length" "4,8")])
;; Hardware support for decimal floating point operations.
@@ -599,3 +322,72 @@
"TARGET_DFP"
"dctfixq %0,%1"
[(set_attr "type" "fp")])
+
+
+;; Decimal builtin support
+
+(define_c_enum "unspec"
+ [UNSPEC_DDEDPD
+ UNSPEC_DENBCD
+ UNSPEC_DXEX
+ UNSPEC_DIEX
+ UNSPEC_DSCLI
+ UNSPEC_DSCRI])
+
+(define_mode_iterator D64_D128 [DD TD])
+
+(define_mode_attr dfp_suffix [(DD "")
+ (TD "q")])
+
+(define_insn "dfp_ddedpd_<mode>"
+ [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
+ (unspec:D64_D128 [(match_operand:QI 1 "const_0_to_3_operand" "i")
+ (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
+ UNSPEC_DDEDPD))]
+ "TARGET_DFP"
+ "ddedpd<dfp_suffix> %1,%0,%2"
+ [(set_attr "type" "fp")])
+
+(define_insn "dfp_denbcd_<mode>"
+ [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
+ (unspec:D64_D128 [(match_operand:QI 1 "const_0_to_1_operand" "i")
+ (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
+ UNSPEC_DENBCD))]
+ "TARGET_DFP"
+ "denbcd<dfp_suffix> %1,%0,%2"
+ [(set_attr "type" "fp")])
+
+(define_insn "dfp_dxex_<mode>"
+ [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
+ (unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")]
+ UNSPEC_DXEX))]
+ "TARGET_DFP"
+ "dxex<dfp_suffix> %0,%1"
+ [(set_attr "type" "fp")])
+
+(define_insn "dfp_diex_<mode>"
+ [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
+ (unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")
+ (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
+ UNSPEC_DXEX))]
+ "TARGET_DFP"
+ "diex<dfp_suffix> %0,%1,%2"
+ [(set_attr "type" "fp")])
+
+(define_insn "dfp_dscli_<mode>"
+ [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
+ (unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")
+ (match_operand:QI 2 "immediate_operand" "i")]
+ UNSPEC_DSCLI))]
+ "TARGET_DFP"
+ "dscli<dfp_suffix> %0,%1,%2"
+ [(set_attr "type" "fp")])
+
+(define_insn "dfp_dscri_<mode>"
+ [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
+ (unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")
+ (match_operand:QI 2 "immediate_operand" "i")]
+ UNSPEC_DSCRI))]
+ "TARGET_DFP"
+ "dscri<dfp_suffix> %0,%1,%2"
+ [(set_attr "type" "fp")])
diff --git a/gcc-4.8/gcc/config/rs6000/htm.md b/gcc-4.8/gcc/config/rs6000/htm.md
new file mode 100644
index 000000000..e8ec91aef
--- /dev/null
+++ b/gcc-4.8/gcc/config/rs6000/htm.md
@@ -0,0 +1,366 @@
+;; Hardware Transactional Memory (HTM) patterns.
+;; Copyright (C) 2013 Free Software Foundation, Inc.
+;; Contributed by Peter Bergner <bergner@vnet.ibm.com>.
+
+;; This file is part of GCC.
+
+;; GCC is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 3, or (at your
+;; option) any later version.
+
+;; GCC is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+;; License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING3. If not see
+;; <http://www.gnu.org/licenses/>.
+
+(define_constants
+ [(TFHAR_SPR 128)
+ (TFIAR_SPR 129)
+ (TEXASR_SPR 130)
+ (TEXASRU_SPR 131)
+ (MAX_HTM_OPERANDS 4)
+ ])
+
+;;
+;; UNSPEC_VOLATILE usage
+;;
+
+(define_c_enum "unspecv"
+ [UNSPECV_HTM_TABORT
+ UNSPECV_HTM_TABORTDC
+ UNSPECV_HTM_TABORTDCI
+ UNSPECV_HTM_TABORTWC
+ UNSPECV_HTM_TABORTWCI
+ UNSPECV_HTM_TBEGIN
+ UNSPECV_HTM_TCHECK
+ UNSPECV_HTM_TEND
+ UNSPECV_HTM_TRECHKPT
+ UNSPECV_HTM_TRECLAIM
+ UNSPECV_HTM_TSR
+ UNSPECV_HTM_MFSPR
+ UNSPECV_HTM_MTSPR
+ ])
+
+
+(define_expand "tabort"
+ [(set (match_dup 2)
+ (unspec_volatile:CC [(match_operand:SI 1 "int_reg_operand" "")]
+ UNSPECV_HTM_TABORT))
+ (set (match_dup 3)
+ (eq:SI (match_dup 2)
+ (const_int 0)))
+ (set (match_operand:SI 0 "int_reg_operand" "")
+ (minus:SI (const_int 1) (match_dup 3)))]
+ "TARGET_HTM"
+{
+ operands[2] = gen_rtx_REG (CCmode, CR0_REGNO);
+ operands[3] = gen_reg_rtx (SImode);
+})
+
+(define_insn "*tabort_internal"
+ [(set (match_operand:CC 1 "cc_reg_operand" "=x")
+ (unspec_volatile:CC [(match_operand:SI 0 "int_reg_operand" "r")]
+ UNSPECV_HTM_TABORT))]
+ "TARGET_HTM"
+ "tabort. %0"
+ [(set_attr "type" "htm")
+ (set_attr "length" "4")])
+
+(define_expand "tabortdc"
+ [(set (match_dup 4)
+ (unspec_volatile:CC [(match_operand 1 "u5bit_cint_operand" "n")
+ (match_operand:SI 2 "gpc_reg_operand" "r")
+ (match_operand:SI 3 "gpc_reg_operand" "r")]
+ UNSPECV_HTM_TABORTDC))
+ (set (match_dup 5)
+ (eq:SI (match_dup 4)
+ (const_int 0)))
+ (set (match_operand:SI 0 "int_reg_operand" "")
+ (minus:SI (const_int 1) (match_dup 5)))]
+ "TARGET_HTM"
+{
+ operands[4] = gen_rtx_REG (CCmode, CR0_REGNO);
+ operands[5] = gen_reg_rtx (SImode);
+})
+
+(define_insn "*tabortdc_internal"
+ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
+ (unspec_volatile:CC [(match_operand 0 "u5bit_cint_operand" "n")
+ (match_operand:SI 1 "gpc_reg_operand" "r")
+ (match_operand:SI 2 "gpc_reg_operand" "r")]
+ UNSPECV_HTM_TABORTDC))]
+ "TARGET_HTM"
+ "tabortdc. %0,%1,%2"
+ [(set_attr "type" "htm")
+ (set_attr "length" "4")])
+
+(define_expand "tabortdci"
+ [(set (match_dup 4)
+ (unspec_volatile:CC [(match_operand 1 "u5bit_cint_operand" "n")
+ (match_operand:SI 2 "gpc_reg_operand" "r")
+ (match_operand 3 "s5bit_cint_operand" "n")]
+ UNSPECV_HTM_TABORTDCI))
+ (set (match_dup 5)
+ (eq:SI (match_dup 4)
+ (const_int 0)))
+ (set (match_operand:SI 0 "int_reg_operand" "")
+ (minus:SI (const_int 1) (match_dup 5)))]
+ "TARGET_HTM"
+{
+ operands[4] = gen_rtx_REG (CCmode, CR0_REGNO);
+ operands[5] = gen_reg_rtx (SImode);
+})
+
+(define_insn "*tabortdci_internal"
+ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
+ (unspec_volatile:CC [(match_operand 0 "u5bit_cint_operand" "n")
+ (match_operand:SI 1 "gpc_reg_operand" "r")
+ (match_operand 2 "s5bit_cint_operand" "n")]
+ UNSPECV_HTM_TABORTDCI))]
+ "TARGET_HTM"
+ "tabortdci. %0,%1,%2"
+ [(set_attr "type" "htm")
+ (set_attr "length" "4")])
+
+(define_expand "tabortwc"
+ [(set (match_dup 4)
+ (unspec_volatile:CC [(match_operand 1 "u5bit_cint_operand" "n")
+ (match_operand:SI 2 "gpc_reg_operand" "r")
+ (match_operand:SI 3 "gpc_reg_operand" "r")]
+ UNSPECV_HTM_TABORTWC))
+ (set (match_dup 5)
+ (eq:SI (match_dup 4)
+ (const_int 0)))
+ (set (match_operand:SI 0 "int_reg_operand" "")
+ (minus:SI (const_int 1) (match_dup 5)))]
+ "TARGET_HTM"
+{
+ operands[4] = gen_rtx_REG (CCmode, CR0_REGNO);
+ operands[5] = gen_reg_rtx (SImode);
+})
+
+(define_insn "*tabortwc_internal"
+ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
+ (unspec_volatile:CC [(match_operand 0 "u5bit_cint_operand" "n")
+ (match_operand:SI 1 "gpc_reg_operand" "r")
+ (match_operand:SI 2 "gpc_reg_operand" "r")]
+ UNSPECV_HTM_TABORTWC))]
+ "TARGET_HTM"
+ "tabortwc. %0,%1,%2"
+ [(set_attr "type" "htm")
+ (set_attr "length" "4")])
+
+(define_expand "tabortwci"
+ [(set (match_dup 4)
+ (unspec_volatile:CC [(match_operand 1 "u5bit_cint_operand" "n")
+ (match_operand:SI 2 "gpc_reg_operand" "r")
+ (match_operand 3 "s5bit_cint_operand" "n")]
+ UNSPECV_HTM_TABORTWCI))
+ (set (match_dup 5)
+ (eq:SI (match_dup 4)
+ (const_int 0)))
+ (set (match_operand:SI 0 "int_reg_operand" "")
+ (minus:SI (const_int 1) (match_dup 5)))]
+ "TARGET_HTM"
+{
+ operands[4] = gen_rtx_REG (CCmode, CR0_REGNO);
+ operands[5] = gen_reg_rtx (SImode);
+})
+
+(define_expand "ttest"
+ [(set (match_dup 1)
+ (unspec_volatile:CC [(const_int 0)
+ (reg:SI 0)
+ (const_int 0)]
+ UNSPECV_HTM_TABORTWCI))
+ (set (subreg:CC (match_dup 2) 0) (match_dup 1))
+ (set (match_dup 3) (lshiftrt:SI (match_dup 2) (const_int 24)))
+ (parallel [(set (match_operand:SI 0 "int_reg_operand" "")
+ (and:SI (match_dup 3) (const_int 15)))
+ (clobber (scratch:CC))])]
+ "TARGET_HTM"
+{
+ operands[1] = gen_rtx_REG (CCmode, CR0_REGNO);
+ operands[2] = gen_reg_rtx (SImode);
+ operands[3] = gen_reg_rtx (SImode);
+})
+
+(define_insn "*tabortwci_internal"
+ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
+ (unspec_volatile:CC [(match_operand 0 "u5bit_cint_operand" "n")
+ (match_operand:SI 1 "gpc_reg_operand" "r")
+ (match_operand 2 "s5bit_cint_operand" "n")]
+ UNSPECV_HTM_TABORTWCI))]
+ "TARGET_HTM"
+ "tabortwci. %0,%1,%2"
+ [(set_attr "type" "htm")
+ (set_attr "length" "4")])
+
+(define_expand "tbegin"
+ [(set (match_dup 2)
+ (unspec_volatile:CC [(match_operand 1 "const_0_to_1_operand" "n")]
+ UNSPECV_HTM_TBEGIN))
+ (set (match_dup 3)
+ (eq:SI (match_dup 2)
+ (const_int 0)))
+ (set (match_operand:SI 0 "int_reg_operand" "")
+ (minus:SI (const_int 1) (match_dup 3)))]
+ "TARGET_HTM"
+{
+ operands[2] = gen_rtx_REG (CCmode, CR0_REGNO);
+ operands[3] = gen_reg_rtx (SImode);
+})
+
+(define_insn "*tbegin_internal"
+ [(set (match_operand:CC 1 "cc_reg_operand" "=x")
+ (unspec_volatile:CC [(match_operand 0 "const_0_to_1_operand" "n")]
+ UNSPECV_HTM_TBEGIN))]
+ "TARGET_HTM"
+ "tbegin. %0"
+ [(set_attr "type" "htm")
+ (set_attr "length" "4")])
+
+(define_expand "tcheck"
+ [(set (match_dup 2)
+ (unspec_volatile:CC [(match_operand 1 "u3bit_cint_operand" "n")]
+ UNSPECV_HTM_TCHECK))
+ (set (match_dup 3)
+ (eq:SI (match_dup 2)
+ (const_int 0)))
+ (set (match_operand:SI 0 "int_reg_operand" "")
+ (minus:SI (const_int 1) (match_dup 3)))]
+ "TARGET_HTM"
+{
+ operands[2] = gen_rtx_REG (CCmode, CR0_REGNO);
+ operands[3] = gen_reg_rtx (SImode);
+})
+
+(define_insn "*tcheck_internal"
+ [(set (match_operand:CC 1 "cc_reg_operand" "=x")
+ (unspec_volatile:CC [(match_operand 0 "u3bit_cint_operand" "n")]
+ UNSPECV_HTM_TCHECK))]
+ "TARGET_HTM"
+ "tcheck. %0"
+ [(set_attr "type" "htm")
+ (set_attr "length" "4")])
+
+(define_expand "tend"
+ [(set (match_dup 2)
+ (unspec_volatile:CC [(match_operand 1 "const_0_to_1_operand" "n")]
+ UNSPECV_HTM_TEND))
+ (set (match_dup 3)
+ (eq:SI (match_dup 2)
+ (const_int 0)))
+ (set (match_operand:SI 0 "int_reg_operand" "")
+ (minus:SI (const_int 1) (match_dup 3)))]
+ "TARGET_HTM"
+{
+ operands[2] = gen_rtx_REG (CCmode, CR0_REGNO);
+ operands[3] = gen_reg_rtx (SImode);
+})
+
+(define_insn "*tend_internal"
+ [(set (match_operand:CC 1 "cc_reg_operand" "=x")
+ (unspec_volatile:CC [(match_operand 0 "const_0_to_1_operand" "n")]
+ UNSPECV_HTM_TEND))]
+ "TARGET_HTM"
+ "tend. %0"
+ [(set_attr "type" "htm")
+ (set_attr "length" "4")])
+
+(define_expand "trechkpt"
+ [(set (match_dup 1)
+ (unspec_volatile:CC [(const_int 0)]
+ UNSPECV_HTM_TRECHKPT))
+ (set (match_dup 2)
+ (eq:SI (match_dup 1)
+ (const_int 0)))
+ (set (match_operand:SI 0 "int_reg_operand" "")
+ (minus:SI (const_int 1) (match_dup 2)))]
+ "TARGET_HTM"
+{
+ operands[1] = gen_rtx_REG (CCmode, CR0_REGNO);
+ operands[2] = gen_reg_rtx (SImode);
+})
+
+(define_insn "*trechkpt_internal"
+ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
+ (unspec_volatile:CC [(const_int 0)]
+ UNSPECV_HTM_TRECHKPT))]
+ "TARGET_HTM"
+ "trechkpt."
+ [(set_attr "type" "htm")
+ (set_attr "length" "4")])
+
+(define_expand "treclaim"
+ [(set (match_dup 2)
+ (unspec_volatile:CC [(match_operand:SI 1 "gpc_reg_operand" "r")]
+ UNSPECV_HTM_TRECLAIM))
+ (set (match_dup 3)
+ (eq:SI (match_dup 2)
+ (const_int 0)))
+ (set (match_operand:SI 0 "int_reg_operand" "")
+ (minus:SI (const_int 1) (match_dup 3)))]
+ "TARGET_HTM"
+{
+ operands[2] = gen_rtx_REG (CCmode, CR0_REGNO);
+ operands[3] = gen_reg_rtx (SImode);
+})
+
+(define_insn "*treclaim_internal"
+ [(set (match_operand:CC 1 "cc_reg_operand" "=x")
+ (unspec_volatile:CC [(match_operand:SI 0 "gpc_reg_operand" "r")]
+ UNSPECV_HTM_TRECLAIM))]
+ "TARGET_HTM"
+ "treclaim. %0"
+ [(set_attr "type" "htm")
+ (set_attr "length" "4")])
+
+(define_expand "tsr"
+ [(set (match_dup 2)
+ (unspec_volatile:CC [(match_operand 1 "const_0_to_1_operand" "n")]
+ UNSPECV_HTM_TSR))
+ (set (match_dup 3)
+ (eq:SI (match_dup 2)
+ (const_int 0)))
+ (set (match_operand:SI 0 "int_reg_operand" "")
+ (minus:SI (const_int 1) (match_dup 3)))]
+ "TARGET_HTM"
+{
+ operands[2] = gen_rtx_REG (CCmode, CR0_REGNO);
+ operands[3] = gen_reg_rtx (SImode);
+})
+
+(define_insn "*tsr_internal"
+ [(set (match_operand:CC 1 "cc_reg_operand" "=x")
+ (unspec_volatile:CC [(match_operand 0 "const_0_to_1_operand" "n")]
+ UNSPECV_HTM_TSR))]
+ "TARGET_HTM"
+ "tsr. %0"
+ [(set_attr "type" "htm")
+ (set_attr "length" "4")])
+
+(define_insn "htm_mfspr_<mode>"
+ [(set (match_operand:P 0 "gpc_reg_operand" "=r")
+ (unspec_volatile:P [(match_operand 1 "u10bit_cint_operand" "n")
+ (match_operand:P 2 "htm_spr_reg_operand" "")]
+ UNSPECV_HTM_MFSPR))]
+ "TARGET_HTM"
+ "mfspr %0,%1";
+ [(set_attr "type" "htm")
+ (set_attr "length" "4")])
+
+(define_insn "htm_mtspr_<mode>"
+ [(set (match_operand:P 2 "htm_spr_reg_operand" "")
+ (unspec_volatile:P [(match_operand:P 0 "gpc_reg_operand" "r")
+ (match_operand 1 "u10bit_cint_operand" "n")]
+ UNSPECV_HTM_MTSPR))]
+ "TARGET_HTM"
+ "mtspr %1,%0";
+ [(set_attr "type" "htm")
+ (set_attr "length" "4")])
diff --git a/gcc-4.8/gcc/config/rs6000/htmintrin.h b/gcc-4.8/gcc/config/rs6000/htmintrin.h
new file mode 100644
index 000000000..212cc92f8
--- /dev/null
+++ b/gcc-4.8/gcc/config/rs6000/htmintrin.h
@@ -0,0 +1,131 @@
+/* Hardware Transactional Memory (HTM) intrinsics.
+ Copyright (C) 2013 Free Software Foundation, Inc.
+ Contributed by Peter Bergner <bergner@vnet.ibm.com>.
+
+ This file is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3 of the License, or (at your option)
+ any later version.
+
+ This file is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef __HTM__
+# error "HTM instruction set not enabled"
+#endif /* __HTM__ */
+
+#ifndef _HTMINTRIN_H
+#define _HTMINTRIN_H
+
+#include <stdint.h>
+
+typedef uint64_t texasr_t;
+typedef uint32_t texasru_t;
+typedef uint32_t texasrl_t;
+typedef uintptr_t tfiar_t;
+typedef uintptr_t tfhar_t;
+
+#define _HTM_STATE(CR0) ((CR0 >> 1) & 0x3)
+#define _HTM_NONTRANSACTIONAL 0x0
+#define _HTM_SUSPENDED 0x1
+#define _HTM_TRANSACTIONAL 0x2
+
+/* The following macros use the IBM bit numbering for BITNUM
+ as used in the ISA documentation. */
+
+#define _TEXASR_EXTRACT_BITS(TEXASR,BITNUM,SIZE) \
+ (((TEXASR) >> (63-(BITNUM))) & ((1<<(SIZE))-1))
+#define _TEXASRU_EXTRACT_BITS(TEXASR,BITNUM,SIZE) \
+ (((TEXASR) >> (31-(BITNUM))) & ((1<<(SIZE))-1))
+
+#define _TEXASR_FAILURE_CODE(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 7, 8)
+#define _TEXASRU_FAILURE_CODE(TEXASRU) \
+ _TEXASRU_EXTRACT_BITS(TEXASRU, 7, 8)
+
+#define _TEXASR_FAILURE_PERSISTENT(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 7, 1)
+#define _TEXASRU_FAILURE_PERSISTENT(TEXASRU) \
+ _TEXASRU_EXTRACT_BITS(TEXASRU, 7, 1)
+
+#define _TEXASR_DISALLOWED(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 8, 1)
+#define _TEXASRU_DISALLOWED(TEXASRU) \
+ _TEXASRU_EXTRACT_BITS(TEXASRU, 8, 1)
+
+#define _TEXASR_NESTING_OVERFLOW(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 9, 1)
+#define _TEXASRU_NESTING_OVERFLOW(TEXASRU) \
+ _TEXASRU_EXTRACT_BITS(TEXASRU, 9, 1)
+
+#define _TEXASR_FOOTPRINT_OVERFLOW(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 10, 1)
+#define _TEXASRU_FOOTPRINT_OVERFLOW(TEXASRU) \
+ _TEXASRU_EXTRACT_BITS(TEXASRU, 10, 1)
+
+#define _TEXASR_SELF_INDUCED_CONFLICT(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 11, 1)
+#define _TEXASRU_SELF_INDUCED_CONFLICT(TEXASRU) \
+ _TEXASRU_EXTRACT_BITS(TEXASRU, 11, 1)
+
+#define _TEXASR_NON_TRANSACTIONAL_CONFLICT(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 12, 1)
+#define _TEXASRU_NON_TRANSACTIONAL_CONFLICT(TEXASRU) \
+ _TEXASRU_EXTRACT_BITS(TEXASRU, 12, 1)
+
+#define _TEXASR_TRANSACTION_CONFLICT(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 13, 1)
+#define _TEXASRU_TRANSACTION_CONFLICT(TEXASRU) \
+ _TEXASRU_EXTRACT_BITS(TEXASRU, 13, 1)
+
+#define _TEXASR_TRANSLATION_INVALIDATION_CONFLICT(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 14, 1)
+#define _TEXASRU_TRANSLATION_INVALIDATION_CONFLICT(TEXASRU) \
+ _TEXASRU_EXTRACT_BITS(TEXASRU, 14, 1)
+
+#define _TEXASR_IMPLEMENTAION_SPECIFIC(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 15, 1)
+#define _TEXASRU_IMPLEMENTAION_SPECIFIC(TEXASRU) \
+ _TEXASRU_EXTRACT_BITS(TEXASRU, 15, 1)
+
+#define _TEXASR_INSTRUCTION_FETCH_CONFLICT(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 16, 1)
+#define _TEXASRU_INSTRUCTION_FETCH_CONFLICT(TEXASRU) \
+ _TEXASRU_EXTRACT_BITS(TEXASRU, 16, 1)
+
+#define _TEXASR_ABORT(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 31, 1)
+#define _TEXASRU_ABORT(TEXASRU) \
+ _TEXASRU_EXTRACT_BITS(TEXASRU, 31, 1)
+
+
+#define _TEXASR_SUSPENDED(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 32, 1)
+
+#define _TEXASR_PRIVILEGE(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 35, 2)
+
+#define _TEXASR_FAILURE_SUMMARY(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 36, 1)
+
+#define _TEXASR_TFIAR_EXACT(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 37, 1)
+
+#define _TEXASR_ROT(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 38, 1)
+
+#define _TEXASR_TRANSACTION_LEVEL(TEXASR) \
+ _TEXASR_EXTRACT_BITS(TEXASR, 63, 12)
+
+#endif /* _HTMINTRIN_H */
diff --git a/gcc-4.8/gcc/config/rs6000/htmxlintrin.h b/gcc-4.8/gcc/config/rs6000/htmxlintrin.h
new file mode 100644
index 000000000..3908229d5
--- /dev/null
+++ b/gcc-4.8/gcc/config/rs6000/htmxlintrin.h
@@ -0,0 +1,213 @@
+/* XL compiler Hardware Transactional Memory (HTM) execution intrinsics.
+ Copyright (C) 2013 Free Software Foundation, Inc.
+ Contributed by Peter Bergner <bergner@vnet.ibm.com>.
+
+ This file is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3 of the License, or (at your option)
+ any later version.
+
+ This file is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef __HTM__
+# error "HTM instruction set not enabled"
+#endif /* __HTM__ */
+
+#ifndef _HTMXLINTRIN_H
+#define _HTMXLINTRIN_H
+
+#include <stdint.h>
+#include <htmintrin.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define _TEXASR_PTR(TM_BUF) \
+ ((texasr_t *)((TM_BUF)+0))
+#define _TEXASRU_PTR(TM_BUF) \
+ ((texasru_t *)((TM_BUF)+0))
+#define _TEXASRL_PTR(TM_BUF) \
+ ((texasrl_t *)((TM_BUF)+4))
+#define _TFIAR_PTR(TM_BUF) \
+ ((tfiar_t *)((TM_BUF)+8))
+
+typedef char TM_buff_type[16];
+
+/* Compatibility macro with s390. This macro can be used to determine
+ whether a transaction was successfully started from the __TM_begin()
+ and __TM_simple_begin() intrinsic functions below. */
+#define _HTM_TBEGIN_STARTED 1
+
+extern __inline long
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_simple_begin (void)
+{
+ if (__builtin_expect (__builtin_tbegin (0), 1))
+ return _HTM_TBEGIN_STARTED;
+ return 0;
+}
+
+extern __inline long
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_begin (void* const TM_buff)
+{
+ *_TEXASRL_PTR (TM_buff) = 0;
+ if (__builtin_expect (__builtin_tbegin (0), 1))
+ return _HTM_TBEGIN_STARTED;
+#ifdef __powerpc64__
+ *_TEXASR_PTR (TM_buff) = __builtin_get_texasr ();
+#else
+ *_TEXASRU_PTR (TM_buff) = __builtin_get_texasru ();
+ *_TEXASRL_PTR (TM_buff) = __builtin_get_texasr ();
+#endif
+ *_TFIAR_PTR (TM_buff) = __builtin_get_tfiar ();
+ return 0;
+}
+
+extern __inline long
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_end (void)
+{
+ if (__builtin_expect (__builtin_tend (0), 1))
+ return 1;
+ return 0;
+}
+
+extern __inline void
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_abort (void)
+{
+ __builtin_tabort (0);
+}
+
+extern __inline void
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_named_abort (unsigned char const code)
+{
+ __builtin_tabort (code);
+}
+
+extern __inline void
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_resume (void)
+{
+ __builtin_tresume ();
+}
+
+extern __inline void
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_suspend (void)
+{
+ __builtin_tsuspend ();
+}
+
+extern __inline long
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_is_user_abort (void* const TM_buff)
+{
+ texasru_t texasru = *_TEXASRU_PTR (TM_buff);
+ return _TEXASRU_ABORT (texasru);
+}
+
+extern __inline long
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
+{
+ texasru_t texasru = *_TEXASRU_PTR (TM_buff);
+
+ *code = _TEXASRU_FAILURE_CODE (texasru);
+ return _TEXASRU_ABORT (texasru);
+}
+
+extern __inline long
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_is_illegal (void* const TM_buff)
+{
+ texasru_t texasru = *_TEXASRU_PTR (TM_buff);
+ return _TEXASRU_DISALLOWED (texasru);
+}
+
+extern __inline long
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_is_footprint_exceeded (void* const TM_buff)
+{
+ texasru_t texasru = *_TEXASRU_PTR (TM_buff);
+ return _TEXASRU_FOOTPRINT_OVERFLOW (texasru);
+}
+
+extern __inline long
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_nesting_depth (void* const TM_buff)
+{
+ texasrl_t texasrl;
+
+ if (_HTM_STATE (__builtin_ttest ()) == _HTM_NONTRANSACTIONAL)
+ {
+ texasrl = *_TEXASRL_PTR (TM_buff);
+ if (!_TEXASR_FAILURE_SUMMARY (texasrl))
+ texasrl = 0;
+ }
+ else
+ texasrl = (texasrl_t) __builtin_get_texasr ();
+
+ return _TEXASR_TRANSACTION_LEVEL (texasrl);
+}
+
+extern __inline long
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_is_nested_too_deep(void* const TM_buff)
+{
+ texasru_t texasru = *_TEXASRU_PTR (TM_buff);
+ return _TEXASRU_NESTING_OVERFLOW (texasru);
+}
+
+extern __inline long
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_is_conflict(void* const TM_buff)
+{
+ texasru_t texasru = *_TEXASRU_PTR (TM_buff);
+ /* Return TEXASR bits 11 (Self-Induced Conflict) through
+ 14 (Translation Invalidation Conflict). */
+ return (_TEXASRU_EXTRACT_BITS (texasru, 14, 4)) ? 1 : 0;
+}
+
+extern __inline long
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_is_failure_persistent(void* const TM_buff)
+{
+ texasru_t texasru = *_TEXASRU_PTR (TM_buff);
+ return _TEXASRU_FAILURE_PERSISTENT (texasru);
+}
+
+extern __inline long
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_failure_address(void* const TM_buff)
+{
+ return *_TFIAR_PTR (TM_buff);
+}
+
+extern __inline long long
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+__TM_failure_code(void* const TM_buff)
+{
+ return *_TEXASR_PTR (TM_buff);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _HTMXLINTRIN_H */
diff --git a/gcc-4.8/gcc/config/rs6000/linux64.h b/gcc-4.8/gcc/config/rs6000/linux64.h
index 3f280581f..fe860adf2 100644
--- a/gcc-4.8/gcc/config/rs6000/linux64.h
+++ b/gcc-4.8/gcc/config/rs6000/linux64.h
@@ -25,9 +25,6 @@
#ifndef RS6000_BI_ARCH
-#undef DEFAULT_ABI
-#define DEFAULT_ABI ABI_AIX
-
#undef TARGET_64BIT
#define TARGET_64BIT 1
@@ -74,7 +71,11 @@ extern int dot_symbols;
#undef PROCESSOR_DEFAULT
#define PROCESSOR_DEFAULT PROCESSOR_POWER7
#undef PROCESSOR_DEFAULT64
+#ifdef LINUX64_DEFAULT_ABI_ELFv2
+#define PROCESSOR_DEFAULT64 PROCESSOR_POWER8
+#else
#define PROCESSOR_DEFAULT64 PROCESSOR_POWER7
+#endif
/* We don't need to generate entries in .fixup, except when
-mrelocatable or -mrelocatable-lib is given. */
@@ -88,6 +89,12 @@ extern int dot_symbols;
#define INVALID_64BIT "-m%s not supported in this configuration"
#define INVALID_32BIT INVALID_64BIT
+#ifdef LINUX64_DEFAULT_ABI_ELFv2
+#define ELFv2_ABI_CHECK (rs6000_elf_abi != 1)
+#else
+#define ELFv2_ABI_CHECK (rs6000_elf_abi == 2)
+#endif
+
#undef SUBSUBTARGET_OVERRIDE_OPTIONS
#define SUBSUBTARGET_OVERRIDE_OPTIONS \
do \
@@ -102,6 +109,12 @@ extern int dot_symbols;
error (INVALID_64BIT, "call"); \
} \
dot_symbols = !strcmp (rs6000_abi_name, "aixdesc"); \
+ if (ELFv2_ABI_CHECK) \
+ { \
+ rs6000_current_abi = ABI_ELFv2; \
+ if (dot_symbols) \
+ error ("-mcall-aixdesc incompatible with -mabi=elfv2"); \
+ } \
if (rs6000_isa_flags & OPTION_MASK_RELOCATABLE) \
{ \
rs6000_isa_flags &= ~OPTION_MASK_RELOCATABLE; \
@@ -136,7 +149,10 @@ extern int dot_symbols;
SET_CMODEL (CMODEL_MEDIUM); \
if (rs6000_current_cmodel != CMODEL_SMALL) \
{ \
- TARGET_NO_FP_IN_TOC = 0; \
+ if (!global_options_set.x_TARGET_NO_FP_IN_TOC) \
+ TARGET_NO_FP_IN_TOC \
+ = rs6000_current_cmodel == CMODEL_MEDIUM; \
+ if (!global_options_set.x_TARGET_NO_SUM_IN_TOC) \
TARGET_NO_SUM_IN_TOC = 0; \
} \
} \
@@ -351,7 +367,11 @@ extern int dot_symbols;
#define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld64.so.1"
+#ifdef LINUX64_DEFAULT_ABI_ELFv2
+#define GLIBC_DYNAMIC_LINKER64 "%{mabi=elfv1:/lib64/ld64.so.1;:/lib64/ld64.so.2}"
+#else
+#define GLIBC_DYNAMIC_LINKER64 "%{mabi=elfv2:/lib64/ld64.so.2;:/lib64/ld64.so.1}"
+#endif
#define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
#define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
#if DEFAULT_LIBC == LIBC_UCLIBC
diff --git a/gcc-4.8/gcc/config/rs6000/option-defaults.h b/gcc-4.8/gcc/config/rs6000/option-defaults.h
index 2d7e36a61..0d7ba1ea3 100644
--- a/gcc-4.8/gcc/config/rs6000/option-defaults.h
+++ b/gcc-4.8/gcc/config/rs6000/option-defaults.h
@@ -54,6 +54,7 @@
--with-float is ignored if -mhard-float or -msoft-float are
specified. */
#define OPTION_DEFAULT_SPECS \
+ {"abi", "%{!mabi=elfv*:-mabi=%(VALUE)}" }, \
{"tune", "%{!mtune=*:%{!mcpu=*:-mtune=%(VALUE)}}" }, \
{"tune_32", "%{" OPT_ARCH32 ":%{!mtune=*:%{!mcpu=*:-mtune=%(VALUE)}}}" }, \
{"tune_64", "%{" OPT_ARCH64 ":%{!mtune=*:%{!mcpu=*:-mtune=%(VALUE)}}}" }, \
diff --git a/gcc-4.8/gcc/config/rs6000/power8.md b/gcc-4.8/gcc/config/rs6000/power8.md
new file mode 100644
index 000000000..83bf71974
--- /dev/null
+++ b/gcc-4.8/gcc/config/rs6000/power8.md
@@ -0,0 +1,373 @@
+;; Scheduling description for IBM POWER8 processor.
+;; Copyright (C) 2013 Free Software Foundation, Inc.
+;;
+;; Contributed by Pat Haugen (pthaugen@us.ibm.com).
+
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 3, or (at your
+;; option) any later version.
+;;
+;; GCC is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+;; License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING3. If not see
+;; <http://www.gnu.org/licenses/>.
+
+(define_automaton "power8fxu,power8lsu,power8vsu,power8misc")
+
+(define_cpu_unit "fxu0_power8,fxu1_power8" "power8fxu")
+(define_cpu_unit "lu0_power8,lu1_power8" "power8lsu")
+(define_cpu_unit "lsu0_power8,lsu1_power8" "power8lsu")
+(define_cpu_unit "vsu0_power8,vsu1_power8" "power8vsu")
+(define_cpu_unit "bpu_power8,cru_power8" "power8misc")
+(define_cpu_unit "du0_power8,du1_power8,du2_power8,du3_power8,du4_power8,\
+ du5_power8,du6_power8" "power8misc")
+
+
+; Dispatch group reservations
+(define_reservation "DU_any_power8"
+ "du0_power8|du1_power8|du2_power8|du3_power8|du4_power8|\
+ du5_power8")
+
+; 2-way Cracked instructions go in slots 0-1
+; (can also have a second in slots 3-4 if insns are adjacent)
+(define_reservation "DU_cracked_power8"
+ "du0_power8+du1_power8")
+
+; Insns that are first in group
+(define_reservation "DU_first_power8"
+ "du0_power8")
+
+; Insns that are first and last in group
+(define_reservation "DU_both_power8"
+ "du0_power8+du1_power8+du2_power8+du3_power8+du4_power8+\
+ du5_power8+du6_power8")
+
+; Dispatch slots are allocated in order conforming to program order.
+(absence_set "du0_power8" "du1_power8,du2_power8,du3_power8,du4_power8,\
+ du5_power8,du6_power8")
+(absence_set "du1_power8" "du2_power8,du3_power8,du4_power8,du5_power8,\
+ du6_power8")
+(absence_set "du2_power8" "du3_power8,du4_power8,du5_power8,du6_power8")
+(absence_set "du3_power8" "du4_power8,du5_power8,du6_power8")
+(absence_set "du4_power8" "du5_power8,du6_power8")
+(absence_set "du5_power8" "du6_power8")
+
+
+; Execution unit reservations
+(define_reservation "FXU_power8"
+ "fxu0_power8|fxu1_power8")
+
+(define_reservation "LU_power8"
+ "lu0_power8|lu1_power8")
+
+(define_reservation "LSU_power8"
+ "lsu0_power8|lsu1_power8")
+
+(define_reservation "LU_or_LSU_power8"
+ "lu0_power8|lu1_power8|lsu0_power8|lsu1_power8")
+
+(define_reservation "VSU_power8"
+ "vsu0_power8|vsu1_power8")
+
+
+; LS Unit
+(define_insn_reservation "power8-load" 3
+ (and (eq_attr "type" "load")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,LU_or_LSU_power8")
+
+(define_insn_reservation "power8-load-update" 3
+ (and (eq_attr "type" "load_u,load_ux")
+ (eq_attr "cpu" "power8"))
+ "DU_cracked_power8,LU_or_LSU_power8+FXU_power8")
+
+(define_insn_reservation "power8-load-ext" 3
+ (and (eq_attr "type" "load_ext")
+ (eq_attr "cpu" "power8"))
+ "DU_cracked_power8,LU_or_LSU_power8,FXU_power8")
+
+(define_insn_reservation "power8-load-ext-update" 3
+ (and (eq_attr "type" "load_ext_u,load_ext_ux")
+ (eq_attr "cpu" "power8"))
+ "DU_both_power8,LU_or_LSU_power8+FXU_power8,FXU_power8")
+
+(define_insn_reservation "power8-fpload" 5
+ (and (eq_attr "type" "fpload,vecload")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,LU_power8")
+
+(define_insn_reservation "power8-fpload-update" 5
+ (and (eq_attr "type" "fpload_u,fpload_ux")
+ (eq_attr "cpu" "power8"))
+ "DU_cracked_power8,LU_power8+FXU_power8")
+
+(define_insn_reservation "power8-store" 5 ; store-forwarding latency
+ (and (eq_attr "type" "store,store_u")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,LSU_power8+LU_power8")
+
+(define_insn_reservation "power8-store-update-indexed" 5
+ (and (eq_attr "type" "store_ux")
+ (eq_attr "cpu" "power8"))
+ "DU_cracked_power8,LSU_power8+LU_power8")
+
+(define_insn_reservation "power8-fpstore" 5
+ (and (eq_attr "type" "fpstore")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,LSU_power8+VSU_power8")
+
+(define_insn_reservation "power8-fpstore-update" 5
+ (and (eq_attr "type" "fpstore_u,fpstore_ux")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,LSU_power8+VSU_power8")
+
+(define_insn_reservation "power8-vecstore" 5
+ (and (eq_attr "type" "vecstore")
+ (eq_attr "cpu" "power8"))
+ "DU_cracked_power8,LSU_power8+VSU_power8")
+
+(define_insn_reservation "power8-larx" 3
+ (and (eq_attr "type" "load_l")
+ (eq_attr "cpu" "power8"))
+ "DU_both_power8,LU_or_LSU_power8")
+
+(define_insn_reservation "power8-stcx" 10
+ (and (eq_attr "type" "store_c")
+ (eq_attr "cpu" "power8"))
+ "DU_both_power8,LSU_power8+LU_power8")
+
+(define_insn_reservation "power8-sync" 1
+ (and (eq_attr "type" "sync,isync")
+ (eq_attr "cpu" "power8"))
+ "DU_both_power8,LSU_power8")
+
+
+; FX Unit
+(define_insn_reservation "power8-1cyc" 1
+ (and (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\
+ var_shift_rotate,exts,isel")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,FXU_power8")
+
+; Extra cycle to LU/LSU
+(define_bypass 2 "power8-1cyc"
+ "power8-load*,power8-fpload*,power8-store*,power8-fpstore*,\
+ power8-vecstore,power8-larx,power8-stcx")
+; "power8-load,power8-load-update,power8-load-ext,\
+; power8-load-ext-update,power8-fpload,power8-fpload-update,\
+; power8-store,power8-store-update,power8-store-update-indexed,\
+; power8-fpstore,power8-fpstore-update,power8-vecstore,\
+; power8-larx,power8-stcx")
+
+(define_insn_reservation "power8-2cyc" 2
+ (and (eq_attr "type" "cntlz,popcnt")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,FXU_power8")
+
+(define_insn_reservation "power8-two" 2
+ (and (eq_attr "type" "two")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8+DU_any_power8,FXU_power8,FXU_power8")
+
+(define_insn_reservation "power8-three" 3
+ (and (eq_attr "type" "three")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8+DU_any_power8+DU_any_power8,FXU_power8,FXU_power8,FXU_power8")
+
+; cmp - Normal compare insns
+(define_insn_reservation "power8-cmp" 2
+ (and (eq_attr "type" "cmp")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,FXU_power8")
+
+; fast_compare : add./and./nor./etc
+(define_insn_reservation "power8-fast-compare" 2
+ (and (eq_attr "type" "fast_compare")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,FXU_power8")
+
+; compare : rldicl./exts./etc
+; delayed_compare : rlwinm./slwi./etc
+; var_delayed_compare : rlwnm./slw./etc
+(define_insn_reservation "power8-compare" 2
+ (and (eq_attr "type" "compare,delayed_compare,var_delayed_compare")
+ (eq_attr "cpu" "power8"))
+ "DU_cracked_power8,FXU_power8,FXU_power8")
+
+; Extra cycle to LU/LSU
+(define_bypass 3 "power8-fast-compare,power8-compare"
+ "power8-load*,power8-fpload*,power8-store*,power8-fpstore*,\
+ power8-vecstore,power8-larx,power8-stcx")
+
+; 5 cycle CR latency
+(define_bypass 5 "power8-fast-compare,power8-compare"
+ "power8-crlogical,power8-mfcr,power8-mfcrf,power8-branch")
+
+(define_insn_reservation "power8-mul" 4
+ (and (eq_attr "type" "imul,imul2,imul3,lmul")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,FXU_power8")
+
+(define_insn_reservation "power8-mul-compare" 4
+ (and (eq_attr "type" "imul_compare,lmul_compare")
+ (eq_attr "cpu" "power8"))
+ "DU_cracked_power8,FXU_power8")
+
+; Extra cycle to LU/LSU
+(define_bypass 5 "power8-mul,power8-mul-compare"
+ "power8-load*,power8-fpload*,power8-store*,power8-fpstore*,\
+ power8-vecstore,power8-larx,power8-stcx")
+
+; 7 cycle CR latency
+(define_bypass 7 "power8-mul,power8-mul-compare"
+ "power8-crlogical,power8-mfcr,power8-mfcrf,power8-branch")
+
+; FXU divides are not pipelined
+(define_insn_reservation "power8-idiv" 37
+ (and (eq_attr "type" "idiv")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,fxu0_power8*37|fxu1_power8*37")
+
+(define_insn_reservation "power8-ldiv" 68
+ (and (eq_attr "type" "ldiv")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,fxu0_power8*68|fxu1_power8*68")
+
+(define_insn_reservation "power8-mtjmpr" 5
+ (and (eq_attr "type" "mtjmpr")
+ (eq_attr "cpu" "power8"))
+ "DU_first_power8,FXU_power8")
+
+; Should differentiate between 1 cr field and > 1 since mtocrf is not microcode
+(define_insn_reservation "power8-mtcr" 3
+ (and (eq_attr "type" "mtcr")
+ (eq_attr "cpu" "power8"))
+ "DU_both_power8,FXU_power8")
+
+
+; CR Unit
+(define_insn_reservation "power8-mfjmpr" 5
+ (and (eq_attr "type" "mfjmpr")
+ (eq_attr "cpu" "power8"))
+ "DU_first_power8,cru_power8+FXU_power8")
+
+(define_insn_reservation "power8-crlogical" 3
+ (and (eq_attr "type" "cr_logical,delayed_cr")
+ (eq_attr "cpu" "power8"))
+ "DU_first_power8,cru_power8")
+
+(define_insn_reservation "power8-mfcr" 5
+ (and (eq_attr "type" "mfcr")
+ (eq_attr "cpu" "power8"))
+ "DU_both_power8,cru_power8")
+
+(define_insn_reservation "power8-mfcrf" 3
+ (and (eq_attr "type" "mfcrf")
+ (eq_attr "cpu" "power8"))
+ "DU_first_power8,cru_power8")
+
+
+; BR Unit
+; Branches take dispatch slot 7, but reserve any remaining prior slots to
+; prevent other insns from grabbing them once this is assigned.
+(define_insn_reservation "power8-branch" 3
+ (and (eq_attr "type" "jmpreg,branch")
+ (eq_attr "cpu" "power8"))
+ "(du6_power8\
+ |du5_power8+du6_power8\
+ |du4_power8+du5_power8+du6_power8\
+ |du3_power8+du4_power8+du5_power8+du6_power8\
+ |du2_power8+du3_power8+du4_power8+du5_power8+du6_power8\
+ |du1_power8+du2_power8+du3_power8+du4_power8+du5_power8+du6_power8\
+ |du0_power8+du1_power8+du2_power8+du3_power8+du4_power8+du5_power8+\
+ du6_power8),bpu_power8")
+
+; Branch updating LR/CTR feeding mf[lr|ctr]
+(define_bypass 4 "power8-branch" "power8-mfjmpr")
+
+
+; VS Unit (includes FP/VSX/VMX/DFP/Crypto)
+(define_insn_reservation "power8-fp" 6
+ (and (eq_attr "type" "fp,dmul")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,VSU_power8")
+
+; Additional 3 cycles for any CR result
+(define_bypass 9 "power8-fp" "power8-crlogical,power8-mfcr*,power8-branch")
+
+(define_insn_reservation "power8-fpcompare" 8
+ (and (eq_attr "type" "fpcompare")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,VSU_power8")
+
+(define_insn_reservation "power8-sdiv" 27
+ (and (eq_attr "type" "sdiv")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,VSU_power8")
+
+(define_insn_reservation "power8-ddiv" 33
+ (and (eq_attr "type" "ddiv")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,VSU_power8")
+
+(define_insn_reservation "power8-sqrt" 32
+ (and (eq_attr "type" "ssqrt")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,VSU_power8")
+
+(define_insn_reservation "power8-dsqrt" 44
+ (and (eq_attr "type" "dsqrt")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,VSU_power8")
+
+(define_insn_reservation "power8-vecsimple" 2
+ (and (eq_attr "type" "vecperm,vecsimple,veccmp")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,VSU_power8")
+
+(define_insn_reservation "power8-vecnormal" 6
+ (and (eq_attr "type" "vecfloat,vecdouble")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,VSU_power8")
+
+(define_bypass 7 "power8-vecnormal"
+ "power8-vecsimple,power8-veccomplex,power8-fpstore*,\
+ power8-vecstore")
+
+(define_insn_reservation "power8-veccomplex" 7
+ (and (eq_attr "type" "veccomplex")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,VSU_power8")
+
+(define_insn_reservation "power8-vecfdiv" 25
+ (and (eq_attr "type" "vecfdiv")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,VSU_power8")
+
+(define_insn_reservation "power8-vecdiv" 31
+ (and (eq_attr "type" "vecdiv")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,VSU_power8")
+
+(define_insn_reservation "power8-mffgpr" 5
+ (and (eq_attr "type" "mffgpr")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,VSU_power8")
+
+(define_insn_reservation "power8-mftgpr" 6
+ (and (eq_attr "type" "mftgpr")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,VSU_power8")
+
+(define_insn_reservation "power8-crypto" 7
+ (and (eq_attr "type" "crypto")
+ (eq_attr "cpu" "power8"))
+ "DU_any_power8,VSU_power8")
+
diff --git a/gcc-4.8/gcc/config/rs6000/ppc-asm.h b/gcc-4.8/gcc/config/rs6000/ppc-asm.h
index db490b6c9..8108efd07 100644
--- a/gcc-4.8/gcc/config/rs6000/ppc-asm.h
+++ b/gcc-4.8/gcc/config/rs6000/ppc-asm.h
@@ -256,7 +256,30 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
* the real function with one or two leading periods respectively.
*/
-#if defined (__powerpc64__)
+#if defined(__powerpc64__) && _CALL_ELF == 2
+
+/* Defining "toc" above breaks @toc in assembler code. */
+#undef toc
+
+#define FUNC_NAME(name) GLUE(__USER_LABEL_PREFIX__,name)
+#define JUMP_TARGET(name) FUNC_NAME(name)
+#define FUNC_START(name) \
+ .type FUNC_NAME(name),@function; \
+ .globl FUNC_NAME(name); \
+FUNC_NAME(name): \
+0: addis 2,12,(.TOC.-0b)@ha; \
+ addi 2,2,(.TOC.-0b)@l; \
+ .localentry FUNC_NAME(name),.-FUNC_NAME(name)
+
+#define HIDDEN_FUNC(name) \
+ FUNC_START(name) \
+ .hidden FUNC_NAME(name);
+
+#define FUNC_END(name) \
+ .size FUNC_NAME(name),.-FUNC_NAME(name)
+
+#elif defined (__powerpc64__)
+
#define FUNC_NAME(name) GLUE(.,name)
#define JUMP_TARGET(name) FUNC_NAME(name)
#define FUNC_START(name) \
diff --git a/gcc-4.8/gcc/config/rs6000/predicates.md b/gcc-4.8/gcc/config/rs6000/predicates.md
index 07944db10..0659e066e 100644
--- a/gcc-4.8/gcc/config/rs6000/predicates.md
+++ b/gcc-4.8/gcc/config/rs6000/predicates.md
@@ -124,6 +124,11 @@
(and (match_code "const_int")
(match_test "INTVAL (op) >= -16 && INTVAL (op) <= 15")))
+;; Return 1 if op is a unsigned 3-bit constant integer.
+(define_predicate "u3bit_cint_operand"
+ (and (match_code "const_int")
+ (match_test "INTVAL (op) >= 0 && INTVAL (op) <= 7")))
+
;; Return 1 if op is a unsigned 5-bit constant integer.
(define_predicate "u5bit_cint_operand"
(and (match_code "const_int")
@@ -135,6 +140,11 @@
(and (match_code "const_int")
(match_test "INTVAL (op) >= -128 && INTVAL (op) <= 127")))
+;; Return 1 if op is a unsigned 10-bit constant integer.
+(define_predicate "u10bit_cint_operand"
+ (and (match_code "const_int")
+ (match_test "INTVAL (op) >= 0 && INTVAL (op) <= 1023")))
+
;; Return 1 if op is a constant integer that can fit in a D field.
(define_predicate "short_cint_operand"
(and (match_code "const_int")
@@ -161,11 +171,21 @@
(and (match_code "const_int")
(match_test "IN_RANGE (INTVAL (op), 0, 1)")))
+;; Match op = 0..3.
+(define_predicate "const_0_to_3_operand"
+ (and (match_code "const_int")
+ (match_test "IN_RANGE (INTVAL (op), 0, 3)")))
+
;; Match op = 2 or op = 3.
(define_predicate "const_2_to_3_operand"
(and (match_code "const_int")
(match_test "IN_RANGE (INTVAL (op), 2, 3)")))
+;; Match op = 0..15
+(define_predicate "const_0_to_15_operand"
+ (and (match_code "const_int")
+ (match_test "IN_RANGE (INTVAL (op), 0, 15)")))
+
;; Return 1 if op is a register that is not special.
(define_predicate "gpc_reg_operand"
(match_operand 0 "register_operand")
@@ -182,9 +202,95 @@
if (REGNO (op) >= ARG_POINTER_REGNUM && !CA_REGNO_P (REGNO (op)))
return 1;
+ if (TARGET_VSX && VSX_REGNO_P (REGNO (op)))
+ return 1;
+
return INT_REGNO_P (REGNO (op)) || FP_REGNO_P (REGNO (op));
})
+;; Return 1 if op is a general purpose register. Unlike gpc_reg_operand, don't
+;; allow floating point or vector registers.
+(define_predicate "int_reg_operand"
+ (match_operand 0 "register_operand")
+{
+ if ((TARGET_E500_DOUBLE || TARGET_SPE) && invalid_e500_subreg (op, mode))
+ return 0;
+
+ if (GET_CODE (op) == SUBREG)
+ op = SUBREG_REG (op);
+
+ if (!REG_P (op))
+ return 0;
+
+ if (REGNO (op) >= FIRST_PSEUDO_REGISTER)
+ return 1;
+
+ return INT_REGNO_P (REGNO (op));
+})
+
+;; Like int_reg_operand, but only return true for base registers
+(define_predicate "base_reg_operand"
+ (match_operand 0 "int_reg_operand")
+{
+ if (GET_CODE (op) == SUBREG)
+ op = SUBREG_REG (op);
+
+ if (!REG_P (op))
+ return 0;
+
+ return (REGNO (op) != FIRST_GPR_REGNO);
+})
+
+;; Return 1 if op is a HTM specific SPR register.
+(define_predicate "htm_spr_reg_operand"
+ (match_operand 0 "register_operand")
+{
+ if (!TARGET_HTM)
+ return 0;
+
+ if (GET_CODE (op) == SUBREG)
+ op = SUBREG_REG (op);
+
+ if (!REG_P (op))
+ return 0;
+
+ switch (REGNO (op))
+ {
+ case TFHAR_REGNO:
+ case TFIAR_REGNO:
+ case TEXASR_REGNO:
+ return 1;
+ default:
+ break;
+ }
+
+ /* Unknown SPR. */
+ return 0;
+})
+
+;; Return 1 if op is a general purpose register that is an even register
+;; which suitable for a load/store quad operation
+(define_predicate "quad_int_reg_operand"
+ (match_operand 0 "register_operand")
+{
+ HOST_WIDE_INT r;
+
+ if (!TARGET_QUAD_MEMORY && !TARGET_QUAD_MEMORY_ATOMIC)
+ return 0;
+
+ if (GET_CODE (op) == SUBREG)
+ op = SUBREG_REG (op);
+
+ if (!REG_P (op))
+ return 0;
+
+ r = REGNO (op);
+ if (r >= FIRST_PSEUDO_REGISTER)
+ return 1;
+
+ return (INT_REGNO_P (r) && ((r & 1) == 0));
+})
+
;; Return 1 if op is a register that is a condition register field.
(define_predicate "cc_reg_operand"
(match_operand 0 "register_operand")
@@ -315,6 +421,11 @@
&& CONST_DOUBLE_HIGH (op) == 0")
(match_operand 0 "gpc_reg_operand"))))
+;; Like reg_or_logical_cint_operand, but allow vsx registers
+(define_predicate "vsx_reg_or_cint_operand"
+ (ior (match_operand 0 "vsx_register_operand")
+ (match_operand 0 "reg_or_logical_cint_operand")))
+
;; Return 1 if operand is a CONST_DOUBLE that can be set in a register
;; with no more than one instruction per word.
(define_predicate "easy_fp_constant"
@@ -333,6 +444,11 @@
&& mode != DImode)
return 1;
+ /* The constant 0.0 is easy under VSX. */
+ if ((mode == SFmode || mode == DFmode || mode == SDmode || mode == DDmode)
+ && VECTOR_UNIT_VSX_P (DFmode) && op == CONST0_RTX (mode))
+ return 1;
+
if (DECIMAL_FLOAT_MODE_P (mode))
return 0;
@@ -521,6 +637,55 @@
(and (match_operand 0 "memory_operand")
(match_test "offsettable_nonstrict_memref_p (op)")))
+;; Return 1 if the operand is suitable for load/store quad memory.
+;; This predicate only checks for non-atomic loads/stores (not lqarx/stqcx).
+(define_predicate "quad_memory_operand"
+ (match_code "mem")
+{
+ rtx addr, op0, op1;
+ int ret;
+
+ if (!TARGET_QUAD_MEMORY && !TARGET_SYNC_TI)
+ ret = 0;
+
+ else if (!memory_operand (op, mode))
+ ret = 0;
+
+ else if (GET_MODE_SIZE (GET_MODE (op)) != 16)
+ ret = 0;
+
+ else if (MEM_ALIGN (op) < 128)
+ ret = 0;
+
+ else
+ {
+ addr = XEXP (op, 0);
+ if (int_reg_operand (addr, Pmode))
+ ret = 1;
+
+ else if (GET_CODE (addr) != PLUS)
+ ret = 0;
+
+ else
+ {
+ op0 = XEXP (addr, 0);
+ op1 = XEXP (addr, 1);
+ ret = (int_reg_operand (op0, Pmode)
+ && GET_CODE (op1) == CONST_INT
+ && IN_RANGE (INTVAL (op1), -32768, 32767)
+ && (INTVAL (op1) & 15) == 0);
+ }
+ }
+
+ if (TARGET_DEBUG_ADDR)
+ {
+ fprintf (stderr, "\nquad_memory_operand, ret = %s\n", ret ? "true" : "false");
+ debug_rtx (op);
+ }
+
+ return ret;
+})
+
;; Return 1 if the operand is an indexed or indirect memory operand.
(define_predicate "indexed_or_indirect_operand"
(match_code "mem")
@@ -535,6 +700,19 @@
return indexed_or_indirect_address (op, mode);
})
+;; Like indexed_or_indirect_operand, but also allow a GPR register if direct
+;; moves are supported.
+(define_predicate "reg_or_indexed_operand"
+ (match_code "mem,reg")
+{
+ if (MEM_P (op))
+ return indexed_or_indirect_operand (op, mode);
+ else if (TARGET_DIRECT_MOVE)
+ return register_operand (op, mode);
+ return
+ 0;
+})
+
;; Return 1 if the operand is an indexed or indirect memory operand with an
;; AND -16 in it, used to recognize when we need to switch to Altivec loads
;; to realign loops instead of VSX (altivec silently ignores the bottom bits,
@@ -560,6 +738,28 @@
&& REG_P (XEXP (op, 1)))")
(match_operand 0 "address_operand")))
+;; Return 1 if the operand is an index-form address.
+(define_special_predicate "indexed_address"
+ (match_test "(GET_CODE (op) == PLUS
+ && REG_P (XEXP (op, 0))
+ && REG_P (XEXP (op, 1)))"))
+
+;; Return 1 if the operand is a MEM with an update-form address. This may
+;; also include update-indexed form.
+(define_special_predicate "update_address_mem"
+ (match_test "(MEM_P (op)
+ && (GET_CODE (XEXP (op, 0)) == PRE_INC
+ || GET_CODE (XEXP (op, 0)) == PRE_DEC
+ || GET_CODE (XEXP (op, 0)) == PRE_MODIFY))"))
+
+;; Return 1 if the operand is a MEM with an update-indexed-form address. Note
+;; that PRE_INC/PRE_DEC will always be non-indexed (i.e. non X-form) since the
+;; increment is based on the mode size and will therefor always be a const.
+(define_special_predicate "update_indexed_address_mem"
+ (match_test "(MEM_P (op)
+ && GET_CODE (XEXP (op, 0)) == PRE_MODIFY
+ && indexed_address (XEXP (XEXP (op, 0), 1), mode))"))
+
;; Used for the destination of the fix_truncdfsi2 expander.
;; If stfiwx will be used, the result goes to memory; otherwise,
;; we're going to emit a store and a load of a subreg, so the dest is a
@@ -883,7 +1083,8 @@
(and (match_code "symbol_ref")
(match_test "(DEFAULT_ABI != ABI_AIX || SYMBOL_REF_FUNCTION_P (op))
&& ((SYMBOL_REF_LOCAL_P (op)
- && (DEFAULT_ABI != ABI_AIX
+ && ((DEFAULT_ABI != ABI_AIX
+ && DEFAULT_ABI != ABI_ELFv2)
|| !SYMBOL_REF_EXTERNAL_P (op)))
|| (op == XEXP (DECL_RTL (current_function_decl),
0)))")))
@@ -1364,6 +1565,26 @@
return 1;
})
+;; Return 1 if OP is valid for crsave insn, known to be a PARALLEL.
+(define_predicate "crsave_operation"
+ (match_code "parallel")
+{
+ int count = XVECLEN (op, 0);
+ int i;
+
+ for (i = 1; i < count; i++)
+ {
+ rtx exp = XVECEXP (op, 0, i);
+
+ if (GET_CODE (exp) != USE
+ || GET_CODE (XEXP (exp, 0)) != REG
+ || GET_MODE (XEXP (exp, 0)) != CCmode
+ || ! CR_REGNO_P (REGNO (XEXP (exp, 0))))
+ return 0;
+ }
+ return 1;
+})
+
;; Return 1 if OP is valid for lmw insn, known to be a PARALLEL.
(define_predicate "lmw_operation"
(match_code "parallel")
@@ -1534,3 +1755,99 @@
return GET_CODE (op) == UNSPEC && XINT (op, 1) == UNSPEC_TOCREL;
})
+
+;; Match the first insn (addis) in fusing the combination of addis and loads to
+;; GPR registers on power8.
+(define_predicate "fusion_gpr_addis"
+ (match_code "const_int,high,plus")
+{
+ HOST_WIDE_INT value;
+ rtx int_const;
+
+ if (GET_CODE (op) == HIGH)
+ return 1;
+
+ if (CONST_INT_P (op))
+ int_const = op;
+
+ else if (GET_CODE (op) == PLUS
+ && base_reg_operand (XEXP (op, 0), Pmode)
+ && CONST_INT_P (XEXP (op, 1)))
+ int_const = XEXP (op, 1);
+
+ else
+ return 0;
+
+ /* Power8 currently will only do the fusion if the top 11 bits of the addis
+ value are all 1's or 0's. */
+ value = INTVAL (int_const);
+ if ((value & (HOST_WIDE_INT)0xffff) != 0)
+ return 0;
+
+ if ((value & (HOST_WIDE_INT)0xffff0000) == 0)
+ return 0;
+
+ return (IN_RANGE (value >> 16, -32, 31));
+})
+
+;; Match the second insn (lbz, lhz, lwz, ld) in fusing the combination of addis
+;; and loads to GPR registers on power8.
+(define_predicate "fusion_gpr_mem_load"
+ (match_code "mem,sign_extend,zero_extend")
+{
+ rtx addr;
+
+ /* Handle sign/zero extend. */
+ if (GET_CODE (op) == ZERO_EXTEND
+ || (TARGET_P8_FUSION_SIGN && GET_CODE (op) == SIGN_EXTEND))
+ {
+ op = XEXP (op, 0);
+ mode = GET_MODE (op);
+ }
+
+ if (!MEM_P (op))
+ return 0;
+
+ switch (mode)
+ {
+ case QImode:
+ case HImode:
+ case SImode:
+ break;
+
+ case DImode:
+ if (!TARGET_POWERPC64)
+ return 0;
+ break;
+
+ default:
+ return 0;
+ }
+
+ addr = XEXP (op, 0);
+ if (GET_CODE (addr) == PLUS)
+ {
+ rtx base = XEXP (addr, 0);
+ rtx offset = XEXP (addr, 1);
+
+ return (base_reg_operand (base, GET_MODE (base))
+ && satisfies_constraint_I (offset));
+ }
+
+ else if (GET_CODE (addr) == LO_SUM)
+ {
+ rtx base = XEXP (addr, 0);
+ rtx offset = XEXP (addr, 1);
+
+ if (!base_reg_operand (base, GET_MODE (base)))
+ return 0;
+
+ else if (TARGET_XCOFF || (TARGET_ELF && TARGET_POWERPC64))
+ return small_toc_ref (offset, GET_MODE (offset));
+
+ else if (TARGET_ELF && !TARGET_POWERPC64)
+ return CONSTANT_P (offset);
+ }
+
+ return 0;
+})
diff --git a/gcc-4.8/gcc/config/rs6000/rs6000-builtin.def b/gcc-4.8/gcc/config/rs6000/rs6000-builtin.def
index a545fe3e4..45446290b 100644
--- a/gcc-4.8/gcc/config/rs6000/rs6000-builtin.def
+++ b/gcc-4.8/gcc/config/rs6000/rs6000-builtin.def
@@ -30,7 +30,8 @@
RS6000_BUILTIN_A -- ABS builtins
RS6000_BUILTIN_D -- DST builtins
RS6000_BUILTIN_E -- SPE EVSEL builtins.
- RS6000_BUILTIN_P -- Altivec and VSX predicate builtins
+ RS6000_BUILTIN_H -- HTM builtins
+ RS6000_BUILTIN_P -- Altivec, VSX, ISA 2.07 vector predicate builtins
RS6000_BUILTIN_Q -- Paired floating point VSX predicate builtins
RS6000_BUILTIN_S -- SPE predicate builtins
RS6000_BUILTIN_X -- special builtins
@@ -66,6 +67,10 @@
#error "RS6000_BUILTIN_E is not defined."
#endif
+#ifndef RS6000_BUILTIN_H
+ #error "RS6000_BUILTIN_H is not defined."
+#endif
+
#ifndef RS6000_BUILTIN_P
#error "RS6000_BUILTIN_P is not defined."
#endif
@@ -301,6 +306,174 @@
| RS6000_BTC_SPECIAL), \
CODE_FOR_nothing) /* ICODE */
+/* ISA 2.07 (power8) vector convenience macros. */
+/* For the instructions that are encoded as altivec instructions use
+ __builtin_altivec_ as the builtin name. */
+#define BU_P8V_AV_1(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_1 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_altivec_" NAME, /* NAME */ \
+ RS6000_BTM_P8_VECTOR, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_UNARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_P8V_AV_2(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_2 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_altivec_" NAME, /* NAME */ \
+ RS6000_BTM_P8_VECTOR, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_BINARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_P8V_AV_3(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_3 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_altivec_" NAME, /* NAME */ \
+ RS6000_BTM_P8_VECTOR, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_TERNARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_P8V_AV_P(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_P (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_altivec_" NAME, /* NAME */ \
+ RS6000_BTM_P8_VECTOR, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_PREDICATE), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+/* For the instructions encoded as VSX instructions use __builtin_vsx as the
+ builtin name. */
+#define BU_P8V_VSX_1(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_1 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_vsx_" NAME, /* NAME */ \
+ RS6000_BTM_P8_VECTOR, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_UNARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_P8V_OVERLOAD_1(ENUM, NAME) \
+ RS6000_BUILTIN_1 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
+ "__builtin_vec_" NAME, /* NAME */ \
+ RS6000_BTM_P8_VECTOR, /* MASK */ \
+ (RS6000_BTC_OVERLOADED /* ATTR */ \
+ | RS6000_BTC_UNARY), \
+ CODE_FOR_nothing) /* ICODE */
+
+#define BU_P8V_OVERLOAD_2(ENUM, NAME) \
+ RS6000_BUILTIN_2 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
+ "__builtin_vec_" NAME, /* NAME */ \
+ RS6000_BTM_P8_VECTOR, /* MASK */ \
+ (RS6000_BTC_OVERLOADED /* ATTR */ \
+ | RS6000_BTC_BINARY), \
+ CODE_FOR_nothing) /* ICODE */
+
+#define BU_P8V_OVERLOAD_3(ENUM, NAME) \
+ RS6000_BUILTIN_3 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
+ "__builtin_vec_" NAME, /* NAME */ \
+ RS6000_BTM_P8_VECTOR, /* MASK */ \
+ (RS6000_BTC_OVERLOADED /* ATTR */ \
+ | RS6000_BTC_TERNARY), \
+ CODE_FOR_nothing) /* ICODE */
+
+/* Crypto convenience macros. */
+#define BU_CRYPTO_1(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_1 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_crypto_" NAME, /* NAME */ \
+ RS6000_BTM_CRYPTO, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_UNARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_CRYPTO_2(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_crypto_" NAME, /* NAME */ \
+ RS6000_BTM_CRYPTO, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_BINARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_CRYPTO_3(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_crypto_" NAME, /* NAME */ \
+ RS6000_BTM_CRYPTO, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_TERNARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_CRYPTO_OVERLOAD_1(ENUM, NAME) \
+ RS6000_BUILTIN_1 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_crypto_" NAME, /* NAME */ \
+ RS6000_BTM_CRYPTO, /* MASK */ \
+ (RS6000_BTC_OVERLOADED /* ATTR */ \
+ | RS6000_BTC_UNARY), \
+ CODE_FOR_nothing) /* ICODE */
+
+#define BU_CRYPTO_OVERLOAD_2(ENUM, NAME) \
+ RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_crypto_" NAME, /* NAME */ \
+ RS6000_BTM_CRYPTO, /* MASK */ \
+ (RS6000_BTC_OVERLOADED /* ATTR */ \
+ | RS6000_BTC_BINARY), \
+ CODE_FOR_nothing) /* ICODE */
+
+#define BU_CRYPTO_OVERLOAD_3(ENUM, NAME) \
+ RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_crypto_" NAME, /* NAME */ \
+ RS6000_BTM_CRYPTO, /* MASK */ \
+ (RS6000_BTC_OVERLOADED /* ATTR */ \
+ | RS6000_BTC_TERNARY), \
+ CODE_FOR_nothing) /* ICODE */
+
+/* HTM convenience macros. */
+#define BU_HTM_0(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_" NAME, /* NAME */ \
+ RS6000_BTM_HTM, /* MASK */ \
+ RS6000_BTC_ ## ATTR, /* ATTR */ \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_HTM_1(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_" NAME, /* NAME */ \
+ RS6000_BTM_HTM, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_UNARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_HTM_2(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_" NAME, /* NAME */ \
+ RS6000_BTM_HTM, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_BINARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_HTM_3(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_" NAME, /* NAME */ \
+ RS6000_BTM_HTM, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_TERNARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_HTM_SPR0(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_" NAME, /* NAME */ \
+ RS6000_BTM_HTM, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_SPR), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_HTM_SPR1(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_" NAME, /* NAME */ \
+ RS6000_BTM_HTM, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_UNARY \
+ | RS6000_BTC_SPR \
+ | RS6000_BTC_VOID), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
/* SPE convenience macros. */
#define BU_SPE_1(ENUM, NAME, ATTR, ICODE) \
RS6000_BUILTIN_1 (SPE_BUILTIN_ ## ENUM, /* ENUM */ \
@@ -397,6 +570,75 @@
MASK, /* MASK */ \
(ATTR | RS6000_BTC_SPECIAL), /* ATTR */ \
CODE_FOR_nothing) /* ICODE */
+
+
+/* Decimal floating point builtins for instructions. */
+#define BU_DFP_MISC_1(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_" NAME, /* NAME */ \
+ RS6000_BTM_DFP, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_UNARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_DFP_MISC_2(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_" NAME, /* NAME */ \
+ RS6000_BTM_DFP, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_BINARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+
+/* Miscellaneous builtins for instructions added in ISA 2.06. These
+ instructions don't require either the DFP or VSX options, just the basic ISA
+ 2.06 (popcntd) enablement since they operate on general purpose
+ registers. */
+#define BU_P7_MISC_1(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_" NAME, /* NAME */ \
+ RS6000_BTM_POPCNTD, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_UNARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_P7_MISC_2(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_" NAME, /* NAME */ \
+ RS6000_BTM_POPCNTD, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_BINARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+
+/* Miscellaneous builtins for instructions added in ISA 2.07. These
+ instructions do require the ISA 2.07 vector support, but they aren't vector
+ instructions. */
+#define BU_P8V_MISC_3(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_3 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_" NAME, /* NAME */ \
+ RS6000_BTM_P8_VECTOR, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_TERNARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+/* Miscellaneous builtins. */
+#define BU_MISC_1(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_" NAME, /* NAME */ \
+ RS6000_BTM_HARD_FLOAT, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_UNARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
+#define BU_MISC_2(ENUM, NAME, ATTR, ICODE) \
+ RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
+ "__builtin_" NAME, /* NAME */ \
+ RS6000_BTM_HARD_FLOAT, /* MASK */ \
+ (RS6000_BTC_ ## ATTR /* ATTR */ \
+ | RS6000_BTC_BINARY), \
+ CODE_FOR_ ## ICODE) /* ICODE */
+
#endif
/* Insure 0 is not a legitimate index. */
@@ -414,12 +656,14 @@ BU_ALTIVEC_3 (VMSUMSHM, "vmsumshm", CONST, altivec_vmsumshm)
BU_ALTIVEC_3 (VMSUMUHS, "vmsumuhs", SAT, altivec_vmsumuhs)
BU_ALTIVEC_3 (VMSUMSHS, "vmsumshs", SAT, altivec_vmsumshs)
BU_ALTIVEC_3 (VNMSUBFP, "vnmsubfp", FP, nfmsv4sf4)
+BU_ALTIVEC_3 (VPERM_1TI, "vperm_1ti", CONST, altivec_vperm_v1ti)
BU_ALTIVEC_3 (VPERM_2DF, "vperm_2df", CONST, altivec_vperm_v2df)
BU_ALTIVEC_3 (VPERM_2DI, "vperm_2di", CONST, altivec_vperm_v2di)
BU_ALTIVEC_3 (VPERM_4SF, "vperm_4sf", CONST, altivec_vperm_v4sf)
BU_ALTIVEC_3 (VPERM_4SI, "vperm_4si", CONST, altivec_vperm_v4si)
BU_ALTIVEC_3 (VPERM_8HI, "vperm_8hi", CONST, altivec_vperm_v8hi)
BU_ALTIVEC_3 (VPERM_16QI, "vperm_16qi", CONST, altivec_vperm_v16qi_uns)
+BU_ALTIVEC_3 (VPERM_1TI_UNS, "vperm_1ti_uns", CONST, altivec_vperm_v1ti_uns)
BU_ALTIVEC_3 (VPERM_2DI_UNS, "vperm_2di_uns", CONST, altivec_vperm_v2di_uns)
BU_ALTIVEC_3 (VPERM_4SI_UNS, "vperm_4si_uns", CONST, altivec_vperm_v4si_uns)
BU_ALTIVEC_3 (VPERM_8HI_UNS, "vperm_8hi_uns", CONST, altivec_vperm_v8hi_uns)
@@ -430,10 +674,12 @@ BU_ALTIVEC_3 (VSEL_8HI, "vsel_8hi", CONST, vector_select_v8hi)
BU_ALTIVEC_3 (VSEL_16QI, "vsel_16qi", CONST, vector_select_v16qi)
BU_ALTIVEC_3 (VSEL_2DF, "vsel_2df", CONST, vector_select_v2df)
BU_ALTIVEC_3 (VSEL_2DI, "vsel_2di", CONST, vector_select_v2di)
+BU_ALTIVEC_3 (VSEL_1TI, "vsel_1ti", CONST, vector_select_v1ti)
BU_ALTIVEC_3 (VSEL_4SI_UNS, "vsel_4si_uns", CONST, vector_select_v4si_uns)
BU_ALTIVEC_3 (VSEL_8HI_UNS, "vsel_8hi_uns", CONST, vector_select_v8hi_uns)
BU_ALTIVEC_3 (VSEL_16QI_UNS, "vsel_16qi_uns", CONST, vector_select_v16qi_uns)
BU_ALTIVEC_3 (VSEL_2DI_UNS, "vsel_2di_uns", CONST, vector_select_v2di_uns)
+BU_ALTIVEC_3 (VSEL_1TI_UNS, "vsel_1ti_uns", CONST, vector_select_v1ti_uns)
BU_ALTIVEC_3 (VSLDOI_16QI, "vsldoi_16qi", CONST, altivec_vsldoi_v16qi)
BU_ALTIVEC_3 (VSLDOI_8HI, "vsldoi_8hi", CONST, altivec_vsldoi_v8hi)
BU_ALTIVEC_3 (VSLDOI_4SI, "vsldoi_4si", CONST, altivec_vsldoi_v4si)
@@ -626,6 +872,8 @@ BU_ALTIVEC_X (ST_INTERNAL_2df, "st_internal_4sf", MEM)
BU_ALTIVEC_X (LD_INTERNAL_2df, "ld_internal_2df", MEM)
BU_ALTIVEC_X (ST_INTERNAL_2di, "st_internal_2di", MEM)
BU_ALTIVEC_X (LD_INTERNAL_2di, "ld_internal_2di", MEM)
+BU_ALTIVEC_X (ST_INTERNAL_1ti, "st_internal_1ti", MEM)
+BU_ALTIVEC_X (LD_INTERNAL_1ti, "ld_internal_1ti", MEM)
BU_ALTIVEC_X (MTVSCR, "mtvscr", MISC)
BU_ALTIVEC_X (MFVSCR, "mfvscr", MISC)
BU_ALTIVEC_X (DSSALL, "dssall", MISC)
@@ -636,8 +884,26 @@ BU_ALTIVEC_X (LVEBX, "lvebx", MEM)
BU_ALTIVEC_X (LVEHX, "lvehx", MEM)
BU_ALTIVEC_X (LVEWX, "lvewx", MEM)
BU_ALTIVEC_X (LVXL, "lvxl", MEM)
+BU_ALTIVEC_X (LVXL_V2DF, "lvxl_v2df", MEM)
+BU_ALTIVEC_X (LVXL_V2DI, "lvxl_v2di", MEM)
+BU_ALTIVEC_X (LVXL_V4SF, "lvxl_v4sf", MEM)
+BU_ALTIVEC_X (LVXL_V4SI, "lvxl_v4si", MEM)
+BU_ALTIVEC_X (LVXL_V8HI, "lvxl_v8hi", MEM)
+BU_ALTIVEC_X (LVXL_V16QI, "lvxl_v16qi", MEM)
BU_ALTIVEC_X (LVX, "lvx", MEM)
+BU_ALTIVEC_X (LVX_V2DF, "lvx_v2df", MEM)
+BU_ALTIVEC_X (LVX_V2DI, "lvx_v2di", MEM)
+BU_ALTIVEC_X (LVX_V4SF, "lvx_v4sf", MEM)
+BU_ALTIVEC_X (LVX_V4SI, "lvx_v4si", MEM)
+BU_ALTIVEC_X (LVX_V8HI, "lvx_v8hi", MEM)
+BU_ALTIVEC_X (LVX_V16QI, "lvx_v16qi", MEM)
BU_ALTIVEC_X (STVX, "stvx", MEM)
+BU_ALTIVEC_X (STVX_V2DF, "stvx_v2df", MEM)
+BU_ALTIVEC_X (STVX_V2DI, "stvx_v2di", MEM)
+BU_ALTIVEC_X (STVX_V4SF, "stvx_v4sf", MEM)
+BU_ALTIVEC_X (STVX_V4SI, "stvx_v4si", MEM)
+BU_ALTIVEC_X (STVX_V8HI, "stvx_v8hi", MEM)
+BU_ALTIVEC_X (STVX_V16QI, "stvx_v16qi", MEM)
BU_ALTIVEC_C (LVLX, "lvlx", MEM)
BU_ALTIVEC_C (LVLXL, "lvlxl", MEM)
BU_ALTIVEC_C (LVRX, "lvrx", MEM)
@@ -646,6 +912,12 @@ BU_ALTIVEC_X (STVEBX, "stvebx", MEM)
BU_ALTIVEC_X (STVEHX, "stvehx", MEM)
BU_ALTIVEC_X (STVEWX, "stvewx", MEM)
BU_ALTIVEC_X (STVXL, "stvxl", MEM)
+BU_ALTIVEC_X (STVXL_V2DF, "stvxl_v2df", MEM)
+BU_ALTIVEC_X (STVXL_V2DI, "stvxl_v2di", MEM)
+BU_ALTIVEC_X (STVXL_V4SF, "stvxl_v4sf", MEM)
+BU_ALTIVEC_X (STVXL_V4SI, "stvxl_v4si", MEM)
+BU_ALTIVEC_X (STVXL_V8HI, "stvxl_v8hi", MEM)
+BU_ALTIVEC_X (STVXL_V16QI, "stvxl_v16qi", MEM)
BU_ALTIVEC_C (STVLX, "stvlx", MEM)
BU_ALTIVEC_C (STVLXL, "stvlxl", MEM)
BU_ALTIVEC_C (STVRX, "stvrx", MEM)
@@ -904,34 +1176,40 @@ BU_VSX_3 (XVMSUBDP, "xvmsubdp", CONST, fmsv2df4)
BU_VSX_3 (XVNMADDDP, "xvnmadddp", CONST, nfmav2df4)
BU_VSX_3 (XVNMSUBDP, "xvnmsubdp", CONST, nfmsv2df4)
+BU_VSX_3 (XXSEL_1TI, "xxsel_1ti", CONST, vector_select_v1ti)
BU_VSX_3 (XXSEL_2DI, "xxsel_2di", CONST, vector_select_v2di)
BU_VSX_3 (XXSEL_2DF, "xxsel_2df", CONST, vector_select_v2df)
BU_VSX_3 (XXSEL_4SF, "xxsel_4sf", CONST, vector_select_v4sf)
BU_VSX_3 (XXSEL_4SI, "xxsel_4si", CONST, vector_select_v4si)
BU_VSX_3 (XXSEL_8HI, "xxsel_8hi", CONST, vector_select_v8hi)
BU_VSX_3 (XXSEL_16QI, "xxsel_16qi", CONST, vector_select_v16qi)
+BU_VSX_3 (XXSEL_1TI_UNS, "xxsel_1ti_uns", CONST, vector_select_v1ti_uns)
BU_VSX_3 (XXSEL_2DI_UNS, "xxsel_2di_uns", CONST, vector_select_v2di_uns)
BU_VSX_3 (XXSEL_4SI_UNS, "xxsel_4si_uns", CONST, vector_select_v4si_uns)
BU_VSX_3 (XXSEL_8HI_UNS, "xxsel_8hi_uns", CONST, vector_select_v8hi_uns)
BU_VSX_3 (XXSEL_16QI_UNS, "xxsel_16qi_uns", CONST, vector_select_v16qi_uns)
+BU_VSX_3 (VPERM_1TI, "vperm_1ti", CONST, altivec_vperm_v1ti)
BU_VSX_3 (VPERM_2DI, "vperm_2di", CONST, altivec_vperm_v2di)
BU_VSX_3 (VPERM_2DF, "vperm_2df", CONST, altivec_vperm_v2df)
BU_VSX_3 (VPERM_4SF, "vperm_4sf", CONST, altivec_vperm_v4sf)
BU_VSX_3 (VPERM_4SI, "vperm_4si", CONST, altivec_vperm_v4si)
BU_VSX_3 (VPERM_8HI, "vperm_8hi", CONST, altivec_vperm_v8hi)
BU_VSX_3 (VPERM_16QI, "vperm_16qi", CONST, altivec_vperm_v16qi)
+BU_VSX_3 (VPERM_1TI_UNS, "vperm_1ti_uns", CONST, altivec_vperm_v1ti_uns)
BU_VSX_3 (VPERM_2DI_UNS, "vperm_2di_uns", CONST, altivec_vperm_v2di_uns)
BU_VSX_3 (VPERM_4SI_UNS, "vperm_4si_uns", CONST, altivec_vperm_v4si_uns)
BU_VSX_3 (VPERM_8HI_UNS, "vperm_8hi_uns", CONST, altivec_vperm_v8hi_uns)
BU_VSX_3 (VPERM_16QI_UNS, "vperm_16qi_uns", CONST, altivec_vperm_v16qi_uns)
+BU_VSX_3 (XXPERMDI_1TI, "xxpermdi_1ti", CONST, vsx_xxpermdi_v1ti)
BU_VSX_3 (XXPERMDI_2DF, "xxpermdi_2df", CONST, vsx_xxpermdi_v2df)
BU_VSX_3 (XXPERMDI_2DI, "xxpermdi_2di", CONST, vsx_xxpermdi_v2di)
BU_VSX_3 (XXPERMDI_4SF, "xxpermdi_4sf", CONST, vsx_xxpermdi_v4sf)
BU_VSX_3 (XXPERMDI_4SI, "xxpermdi_4si", CONST, vsx_xxpermdi_v4si)
BU_VSX_3 (XXPERMDI_8HI, "xxpermdi_8hi", CONST, vsx_xxpermdi_v8hi)
BU_VSX_3 (XXPERMDI_16QI, "xxpermdi_16qi", CONST, vsx_xxpermdi_v16qi)
+BU_VSX_3 (SET_1TI, "set_1ti", CONST, vsx_set_v1ti)
BU_VSX_3 (SET_2DF, "set_2df", CONST, vsx_set_v2df)
BU_VSX_3 (SET_2DI, "set_2di", CONST, vsx_set_v2di)
BU_VSX_3 (XXSLDWI_2DI, "xxsldwi_2di", CONST, vsx_xxsldwi_v2di)
@@ -1012,7 +1290,7 @@ BU_VSX_1 (XVTSQRTSP_FG, "xvtsqrtsp_fg", CONST, vsx_tsqrtv4sf2_fg)
BU_VSX_1 (XVRESP, "xvresp", CONST, vsx_frev4sf2)
BU_VSX_1 (XSCVDPSP, "xscvdpsp", CONST, vsx_xscvdpsp)
-BU_VSX_1 (XSCVSPDP, "xscvspdp", CONST, vsx_xscvdpsp)
+BU_VSX_1 (XSCVSPDP, "xscvspdp", CONST, vsx_xscvspdp)
BU_VSX_1 (XVCVDPSP, "xvcvdpsp", CONST, vsx_xvcvdpsp)
BU_VSX_1 (XVCVSPDP, "xvcvspdp", CONST, vsx_xvcvspdp)
BU_VSX_1 (XSTSQRTDP_FE, "xstsqrtdp_fe", CONST, vsx_tsqrtdf2_fe)
@@ -1052,9 +1330,9 @@ BU_VSX_1 (XVRSPIZ, "xvrspiz", CONST, vsx_btruncv4sf2)
BU_VSX_1 (XSRDPI, "xsrdpi", CONST, vsx_xsrdpi)
BU_VSX_1 (XSRDPIC, "xsrdpic", CONST, vsx_xsrdpic)
-BU_VSX_1 (XSRDPIM, "xsrdpim", CONST, vsx_floordf2)
-BU_VSX_1 (XSRDPIP, "xsrdpip", CONST, vsx_ceildf2)
-BU_VSX_1 (XSRDPIZ, "xsrdpiz", CONST, vsx_btruncdf2)
+BU_VSX_1 (XSRDPIM, "xsrdpim", CONST, floordf2)
+BU_VSX_1 (XSRDPIP, "xsrdpip", CONST, ceildf2)
+BU_VSX_1 (XSRDPIZ, "xsrdpiz", CONST, btruncdf2)
/* VSX predicate functions. */
BU_VSX_P (XVCMPEQSP_P, "xvcmpeqsp_p", CONST, vector_eq_v4sf_p)
@@ -1066,6 +1344,7 @@ BU_VSX_P (XVCMPGTDP_P, "xvcmpgtdp_p", CONST, vector_gt_v2df_p)
/* VSX builtins that are handled as special cases. */
BU_VSX_X (LXSDX, "lxsdx", MEM)
+BU_VSX_X (LXVD2X_V1TI, "lxvd2x_v1ti", MEM)
BU_VSX_X (LXVD2X_V2DF, "lxvd2x_v2df", MEM)
BU_VSX_X (LXVD2X_V2DI, "lxvd2x_v2di", MEM)
BU_VSX_X (LXVDSX, "lxvdsx", MEM)
@@ -1074,6 +1353,7 @@ BU_VSX_X (LXVW4X_V4SI, "lxvw4x_v4si", MEM)
BU_VSX_X (LXVW4X_V8HI, "lxvw4x_v8hi", MEM)
BU_VSX_X (LXVW4X_V16QI, "lxvw4x_v16qi", MEM)
BU_VSX_X (STXSDX, "stxsdx", MEM)
+BU_VSX_X (STXVD2X_V1TI, "stxsdx_v1ti", MEM)
BU_VSX_X (STXVD2X_V2DF, "stxsdx_v2df", MEM)
BU_VSX_X (STXVD2X_V2DI, "stxsdx_v2di", MEM)
BU_VSX_X (STXVW4X_V4SF, "stxsdx_v4sf", MEM)
@@ -1104,10 +1384,13 @@ BU_VSX_X (XSNMADDMDP, "xsnmaddmdp", FP)
BU_VSX_X (XSNMSUBADP, "xsnmsubadp", FP)
BU_VSX_X (XSNMSUBMDP, "xsnmsubmdp", FP)
BU_VSX_X (XSSUBDP, "xssubdp", FP)
+BU_VSX_X (VEC_INIT_V1TI, "vec_init_v1ti", CONST)
BU_VSX_X (VEC_INIT_V2DF, "vec_init_v2df", CONST)
BU_VSX_X (VEC_INIT_V2DI, "vec_init_v2di", CONST)
+BU_VSX_X (VEC_SET_V1TI, "vec_set_v1ti", CONST)
BU_VSX_X (VEC_SET_V2DF, "vec_set_v2df", CONST)
BU_VSX_X (VEC_SET_V2DI, "vec_set_v2di", CONST)
+BU_VSX_X (VEC_EXT_V1TI, "vec_ext_v1ti", CONST)
BU_VSX_X (VEC_EXT_V2DF, "vec_ext_v2df", CONST)
BU_VSX_X (VEC_EXT_V2DI, "vec_ext_v2di", CONST)
@@ -1132,6 +1415,249 @@ BU_VSX_OVERLOAD_2 (XXSPLTW, "xxspltw")
BU_VSX_OVERLOAD_X (LD, "ld")
BU_VSX_OVERLOAD_X (ST, "st")
+/* 1 argument VSX instructions added in ISA 2.07. */
+BU_P8V_VSX_1 (XSCVSPDPN, "xscvspdpn", CONST, vsx_xscvspdpn)
+BU_P8V_VSX_1 (XSCVDPSPN, "xscvdpspn", CONST, vsx_xscvdpspn)
+
+/* 1 argument altivec instructions added in ISA 2.07. */
+BU_P8V_AV_1 (ABS_V2DI, "abs_v2di", CONST, absv2di2)
+BU_P8V_AV_1 (VUPKHSW, "vupkhsw", CONST, altivec_vupkhsw)
+BU_P8V_AV_1 (VUPKLSW, "vupklsw", CONST, altivec_vupklsw)
+BU_P8V_AV_1 (VCLZB, "vclzb", CONST, clzv16qi2)
+BU_P8V_AV_1 (VCLZH, "vclzh", CONST, clzv8hi2)
+BU_P8V_AV_1 (VCLZW, "vclzw", CONST, clzv4si2)
+BU_P8V_AV_1 (VCLZD, "vclzd", CONST, clzv2di2)
+BU_P8V_AV_1 (VPOPCNTB, "vpopcntb", CONST, popcountv16qi2)
+BU_P8V_AV_1 (VPOPCNTH, "vpopcnth", CONST, popcountv8hi2)
+BU_P8V_AV_1 (VPOPCNTW, "vpopcntw", CONST, popcountv4si2)
+BU_P8V_AV_1 (VPOPCNTD, "vpopcntd", CONST, popcountv2di2)
+BU_P8V_AV_1 (VGBBD, "vgbbd", CONST, p8v_vgbbd)
+
+/* 2 argument altivec instructions added in ISA 2.07. */
+BU_P8V_AV_2 (VADDCUQ, "vaddcuq", CONST, altivec_vaddcuq)
+BU_P8V_AV_2 (VADDUDM, "vaddudm", CONST, addv2di3)
+BU_P8V_AV_2 (VADDUQM, "vadduqm", CONST, altivec_vadduqm)
+BU_P8V_AV_2 (VMINSD, "vminsd", CONST, sminv2di3)
+BU_P8V_AV_2 (VMAXSD, "vmaxsd", CONST, smaxv2di3)
+BU_P8V_AV_2 (VMINUD, "vminud", CONST, uminv2di3)
+BU_P8V_AV_2 (VMAXUD, "vmaxud", CONST, umaxv2di3)
+BU_P8V_AV_2 (VMRGEW, "vmrgew", CONST, p8_vmrgew)
+BU_P8V_AV_2 (VMRGOW, "vmrgow", CONST, p8_vmrgow)
+BU_P8V_AV_2 (VBPERMQ, "vbpermq", CONST, altivec_vbpermq)
+BU_P8V_AV_2 (VPKUDUM, "vpkudum", CONST, altivec_vpkudum)
+BU_P8V_AV_2 (VPKSDSS, "vpksdss", CONST, altivec_vpksdss)
+BU_P8V_AV_2 (VPKUDUS, "vpkudus", CONST, altivec_vpkudus)
+BU_P8V_AV_2 (VPKSDUS, "vpksdus", CONST, altivec_vpksdus)
+BU_P8V_AV_2 (VRLD, "vrld", CONST, vrotlv2di3)
+BU_P8V_AV_2 (VSLD, "vsld", CONST, vashlv2di3)
+BU_P8V_AV_2 (VSRD, "vsrd", CONST, vlshrv2di3)
+BU_P8V_AV_2 (VSRAD, "vsrad", CONST, vashrv2di3)
+BU_P8V_AV_2 (VSUBCUQ, "vsubcuq", CONST, altivec_vsubcuq)
+BU_P8V_AV_2 (VSUBUDM, "vsubudm", CONST, subv2di3)
+BU_P8V_AV_2 (VSUBUQM, "vsubuqm", CONST, altivec_vsubuqm)
+
+BU_P8V_AV_2 (EQV_V16QI, "eqv_v16qi", CONST, eqvv16qi3)
+BU_P8V_AV_2 (EQV_V8HI, "eqv_v8hi", CONST, eqvv8hi3)
+BU_P8V_AV_2 (EQV_V4SI, "eqv_v4si", CONST, eqvv4si3)
+BU_P8V_AV_2 (EQV_V2DI, "eqv_v2di", CONST, eqvv2di3)
+BU_P8V_AV_2 (EQV_V1TI, "eqv_v1ti", CONST, eqvv1ti3)
+BU_P8V_AV_2 (EQV_V4SF, "eqv_v4sf", CONST, eqvv4sf3)
+BU_P8V_AV_2 (EQV_V2DF, "eqv_v2df", CONST, eqvv2df3)
+
+BU_P8V_AV_2 (NAND_V16QI, "nand_v16qi", CONST, nandv16qi3)
+BU_P8V_AV_2 (NAND_V8HI, "nand_v8hi", CONST, nandv8hi3)
+BU_P8V_AV_2 (NAND_V4SI, "nand_v4si", CONST, nandv4si3)
+BU_P8V_AV_2 (NAND_V2DI, "nand_v2di", CONST, nandv2di3)
+BU_P8V_AV_2 (NAND_V1TI, "nand_v1ti", CONST, nandv1ti3)
+BU_P8V_AV_2 (NAND_V4SF, "nand_v4sf", CONST, nandv4sf3)
+BU_P8V_AV_2 (NAND_V2DF, "nand_v2df", CONST, nandv2df3)
+
+BU_P8V_AV_2 (ORC_V16QI, "orc_v16qi", CONST, orcv16qi3)
+BU_P8V_AV_2 (ORC_V8HI, "orc_v8hi", CONST, orcv8hi3)
+BU_P8V_AV_2 (ORC_V4SI, "orc_v4si", CONST, orcv4si3)
+BU_P8V_AV_2 (ORC_V2DI, "orc_v2di", CONST, orcv2di3)
+BU_P8V_AV_2 (ORC_V1TI, "orc_v1ti", CONST, orcv1ti3)
+BU_P8V_AV_2 (ORC_V4SF, "orc_v4sf", CONST, orcv4sf3)
+BU_P8V_AV_2 (ORC_V2DF, "orc_v2df", CONST, orcv2df3)
+
+/* 3 argument altivec instructions added in ISA 2.07. */
+BU_P8V_AV_3 (VADDEUQM, "vaddeuqm", CONST, altivec_vaddeuqm)
+BU_P8V_AV_3 (VADDECUQ, "vaddecuq", CONST, altivec_vaddecuq)
+BU_P8V_AV_3 (VSUBEUQM, "vsubeuqm", CONST, altivec_vsubeuqm)
+BU_P8V_AV_3 (VSUBECUQ, "vsubecuq", CONST, altivec_vsubecuq)
+
+/* Vector comparison instructions added in ISA 2.07. */
+BU_P8V_AV_2 (VCMPEQUD, "vcmpequd", CONST, vector_eqv2di)
+BU_P8V_AV_2 (VCMPGTSD, "vcmpgtsd", CONST, vector_gtv2di)
+BU_P8V_AV_2 (VCMPGTUD, "vcmpgtud", CONST, vector_gtuv2di)
+
+/* Vector comparison predicate instructions added in ISA 2.07. */
+BU_P8V_AV_P (VCMPEQUD_P, "vcmpequd_p", CONST, vector_eq_v2di_p)
+BU_P8V_AV_P (VCMPGTSD_P, "vcmpgtsd_p", CONST, vector_gt_v2di_p)
+BU_P8V_AV_P (VCMPGTUD_P, "vcmpgtud_p", CONST, vector_gtu_v2di_p)
+
+/* ISA 2.07 vector overloaded 1 argument functions. */
+BU_P8V_OVERLOAD_1 (VUPKHSW, "vupkhsw")
+BU_P8V_OVERLOAD_1 (VUPKLSW, "vupklsw")
+BU_P8V_OVERLOAD_1 (VCLZ, "vclz")
+BU_P8V_OVERLOAD_1 (VCLZB, "vclzb")
+BU_P8V_OVERLOAD_1 (VCLZH, "vclzh")
+BU_P8V_OVERLOAD_1 (VCLZW, "vclzw")
+BU_P8V_OVERLOAD_1 (VCLZD, "vclzd")
+BU_P8V_OVERLOAD_1 (VPOPCNT, "vpopcnt")
+BU_P8V_OVERLOAD_1 (VPOPCNTB, "vpopcntb")
+BU_P8V_OVERLOAD_1 (VPOPCNTH, "vpopcnth")
+BU_P8V_OVERLOAD_1 (VPOPCNTW, "vpopcntw")
+BU_P8V_OVERLOAD_1 (VPOPCNTD, "vpopcntd")
+BU_P8V_OVERLOAD_1 (VGBBD, "vgbbd")
+
+/* ISA 2.07 vector overloaded 2 argument functions. */
+BU_P8V_OVERLOAD_2 (EQV, "eqv")
+BU_P8V_OVERLOAD_2 (NAND, "nand")
+BU_P8V_OVERLOAD_2 (ORC, "orc")
+BU_P8V_OVERLOAD_2 (VADDCUQ, "vaddcuq")
+BU_P8V_OVERLOAD_2 (VADDUDM, "vaddudm")
+BU_P8V_OVERLOAD_2 (VADDUQM, "vadduqm")
+BU_P8V_OVERLOAD_2 (VBPERMQ, "vbpermq")
+BU_P8V_OVERLOAD_2 (VMAXSD, "vmaxsd")
+BU_P8V_OVERLOAD_2 (VMAXUD, "vmaxud")
+BU_P8V_OVERLOAD_2 (VMINSD, "vminsd")
+BU_P8V_OVERLOAD_2 (VMINUD, "vminud")
+BU_P8V_OVERLOAD_2 (VMRGEW, "vmrgew")
+BU_P8V_OVERLOAD_2 (VMRGOW, "vmrgow")
+BU_P8V_OVERLOAD_2 (VPKSDSS, "vpksdss")
+BU_P8V_OVERLOAD_2 (VPKSDUS, "vpksdus")
+BU_P8V_OVERLOAD_2 (VPKUDUM, "vpkudum")
+BU_P8V_OVERLOAD_2 (VPKUDUS, "vpkudus")
+BU_P8V_OVERLOAD_2 (VRLD, "vrld")
+BU_P8V_OVERLOAD_2 (VSLD, "vsld")
+BU_P8V_OVERLOAD_2 (VSRAD, "vsrad")
+BU_P8V_OVERLOAD_2 (VSRD, "vsrd")
+BU_P8V_OVERLOAD_2 (VSUBCUQ, "vsubcuq")
+BU_P8V_OVERLOAD_2 (VSUBUDM, "vsubudm")
+BU_P8V_OVERLOAD_2 (VSUBUQM, "vsubuqm")
+
+/* ISA 2.07 vector overloaded 3 argument functions. */
+BU_P8V_OVERLOAD_3 (VADDECUQ, "vaddecuq")
+BU_P8V_OVERLOAD_3 (VADDEUQM, "vaddeuqm")
+BU_P8V_OVERLOAD_3 (VSUBECUQ, "vsubecuq")
+BU_P8V_OVERLOAD_3 (VSUBEUQM, "vsubeuqm")
+
+
+/* 2 argument extended divide functions added in ISA 2.06. */
+BU_P7_MISC_2 (DIVWE, "divwe", CONST, dive_si)
+BU_P7_MISC_2 (DIVWEO, "divweo", CONST, diveo_si)
+BU_P7_MISC_2 (DIVWEU, "divweu", CONST, diveu_si)
+BU_P7_MISC_2 (DIVWEUO, "divweuo", CONST, diveuo_si)
+BU_P7_MISC_2 (DIVDE, "divde", CONST, dive_di)
+BU_P7_MISC_2 (DIVDEO, "divdeo", CONST, diveo_di)
+BU_P7_MISC_2 (DIVDEU, "divdeu", CONST, diveu_di)
+BU_P7_MISC_2 (DIVDEUO, "divdeuo", CONST, diveuo_di)
+
+/* 1 argument DFP (decimal floating point) functions added in ISA 2.05. */
+BU_DFP_MISC_1 (DXEX, "dxex", CONST, dfp_dxex_dd)
+BU_DFP_MISC_1 (DXEXQ, "dxexq", CONST, dfp_dxex_td)
+
+/* 2 argument DFP (decimal floating point) functions added in ISA 2.05. */
+BU_DFP_MISC_2 (DDEDPD, "ddedpd", CONST, dfp_ddedpd_dd)
+BU_DFP_MISC_2 (DDEDPDQ, "ddedpdq", CONST, dfp_ddedpd_td)
+BU_DFP_MISC_2 (DENBCD, "denbcd", CONST, dfp_denbcd_dd)
+BU_DFP_MISC_2 (DENBCDQ, "denbcdq", CONST, dfp_denbcd_td)
+BU_DFP_MISC_2 (DIEX, "diex", CONST, dfp_diex_dd)
+BU_DFP_MISC_2 (DIEXQ, "diexq", CONST, dfp_diex_td)
+BU_DFP_MISC_2 (DSCLI, "dscli", CONST, dfp_dscli_dd)
+BU_DFP_MISC_2 (DSCLIQ, "dscliq", CONST, dfp_dscli_td)
+BU_DFP_MISC_2 (DSCRI, "dscri", CONST, dfp_dscri_dd)
+BU_DFP_MISC_2 (DSCRIQ, "dscriq", CONST, dfp_dscri_td)
+
+/* 1 argument BCD functions added in ISA 2.06. */
+BU_P7_MISC_1 (CDTBCD, "cdtbcd", CONST, cdtbcd)
+BU_P7_MISC_1 (CBCDTD, "cbcdtd", CONST, cbcdtd)
+
+/* 2 argument BCD functions added in ISA 2.06. */
+BU_P7_MISC_2 (ADDG6S, "addg6s", CONST, addg6s)
+
+/* 3 argument BCD functions added in ISA 2.07. */
+BU_P8V_MISC_3 (BCDADD, "bcdadd", CONST, bcdadd)
+BU_P8V_MISC_3 (BCDADD_LT, "bcdadd_lt", CONST, bcdadd_lt)
+BU_P8V_MISC_3 (BCDADD_EQ, "bcdadd_eq", CONST, bcdadd_eq)
+BU_P8V_MISC_3 (BCDADD_GT, "bcdadd_gt", CONST, bcdadd_gt)
+BU_P8V_MISC_3 (BCDADD_OV, "bcdadd_ov", CONST, bcdadd_unordered)
+BU_P8V_MISC_3 (BCDSUB, "bcdsub", CONST, bcdsub)
+BU_P8V_MISC_3 (BCDSUB_LT, "bcdsub_lt", CONST, bcdsub_lt)
+BU_P8V_MISC_3 (BCDSUB_EQ, "bcdsub_eq", CONST, bcdsub_eq)
+BU_P8V_MISC_3 (BCDSUB_GT, "bcdsub_gt", CONST, bcdsub_gt)
+BU_P8V_MISC_3 (BCDSUB_OV, "bcdsub_ov", CONST, bcdsub_unordered)
+
+/* 2 argument pack/unpack 128-bit floating point types. */
+BU_DFP_MISC_2 (PACK_TD, "pack_dec128", CONST, packtd)
+BU_DFP_MISC_2 (UNPACK_TD, "unpack_dec128", CONST, unpacktd)
+
+BU_MISC_2 (PACK_TF, "pack_longdouble", CONST, packtf)
+BU_MISC_2 (UNPACK_TF, "unpack_longdouble", CONST, unpacktf)
+BU_MISC_1 (UNPACK_TF_0, "longdouble_dw0", CONST, unpacktf_0)
+BU_MISC_1 (UNPACK_TF_1, "longdouble_dw1", CONST, unpacktf_1)
+
+BU_P7_MISC_2 (PACK_V1TI, "pack_vector_int128", CONST, packv1ti)
+BU_P7_MISC_2 (UNPACK_V1TI, "unpack_vector_int128", CONST, unpackv1ti)
+
+
+/* 1 argument crypto functions. */
+BU_CRYPTO_1 (VSBOX, "vsbox", CONST, crypto_vsbox)
+
+/* 2 argument crypto functions. */
+BU_CRYPTO_2 (VCIPHER, "vcipher", CONST, crypto_vcipher)
+BU_CRYPTO_2 (VCIPHERLAST, "vcipherlast", CONST, crypto_vcipherlast)
+BU_CRYPTO_2 (VNCIPHER, "vncipher", CONST, crypto_vncipher)
+BU_CRYPTO_2 (VNCIPHERLAST, "vncipherlast", CONST, crypto_vncipherlast)
+BU_CRYPTO_2 (VPMSUMB, "vpmsumb", CONST, crypto_vpmsumb)
+BU_CRYPTO_2 (VPMSUMH, "vpmsumh", CONST, crypto_vpmsumh)
+BU_CRYPTO_2 (VPMSUMW, "vpmsumw", CONST, crypto_vpmsumw)
+BU_CRYPTO_2 (VPMSUMD, "vpmsumd", CONST, crypto_vpmsumd)
+
+/* 3 argument crypto functions. */
+BU_CRYPTO_3 (VPERMXOR_V2DI, "vpermxor_v2di", CONST, crypto_vpermxor_v2di)
+BU_CRYPTO_3 (VPERMXOR_V4SI, "vpermxor_v4si", CONST, crypto_vpermxor_v4si)
+BU_CRYPTO_3 (VPERMXOR_V8HI, "vpermxor_v8hi", CONST, crypto_vpermxor_v8hi)
+BU_CRYPTO_3 (VPERMXOR_V16QI, "vpermxor_v16qi", CONST, crypto_vpermxor_v16qi)
+BU_CRYPTO_3 (VSHASIGMAW, "vshasigmaw", CONST, crypto_vshasigmaw)
+BU_CRYPTO_3 (VSHASIGMAD, "vshasigmad", CONST, crypto_vshasigmad)
+
+/* 2 argument crypto overloaded functions. */
+BU_CRYPTO_OVERLOAD_2 (VPMSUM, "vpmsum")
+
+/* 3 argument crypto overloaded functions. */
+BU_CRYPTO_OVERLOAD_3 (VPERMXOR, "vpermxor")
+BU_CRYPTO_OVERLOAD_3 (VSHASIGMA, "vshasigma")
+
+
+/* HTM functions. */
+BU_HTM_1 (TABORT, "tabort", MISC, tabort)
+BU_HTM_3 (TABORTDC, "tabortdc", MISC, tabortdc)
+BU_HTM_3 (TABORTDCI, "tabortdci", MISC, tabortdci)
+BU_HTM_3 (TABORTWC, "tabortwc", MISC, tabortwc)
+BU_HTM_3 (TABORTWCI, "tabortwci", MISC, tabortwci)
+BU_HTM_1 (TBEGIN, "tbegin", MISC, tbegin)
+BU_HTM_1 (TCHECK, "tcheck", MISC, tcheck)
+BU_HTM_1 (TEND, "tend", MISC, tend)
+BU_HTM_0 (TENDALL, "tendall", MISC, tend)
+BU_HTM_0 (TRECHKPT, "trechkpt", MISC, trechkpt)
+BU_HTM_1 (TRECLAIM, "treclaim", MISC, treclaim)
+BU_HTM_0 (TRESUME, "tresume", MISC, tsr)
+BU_HTM_0 (TSUSPEND, "tsuspend", MISC, tsr)
+BU_HTM_1 (TSR, "tsr", MISC, tsr)
+BU_HTM_0 (TTEST, "ttest", MISC, ttest)
+
+BU_HTM_SPR0 (GET_TFHAR, "get_tfhar", MISC, nothing)
+BU_HTM_SPR1 (SET_TFHAR, "set_tfhar", MISC, nothing)
+BU_HTM_SPR0 (GET_TFIAR, "get_tfiar", MISC, nothing)
+BU_HTM_SPR1 (SET_TFIAR, "set_tfiar", MISC, nothing)
+BU_HTM_SPR0 (GET_TEXASR, "get_texasr", MISC, nothing)
+BU_HTM_SPR1 (SET_TEXASR, "set_texasr", MISC, nothing)
+BU_HTM_SPR0 (GET_TEXASRU, "get_texasru", MISC, nothing)
+BU_HTM_SPR1 (SET_TEXASRU, "set_texasru", MISC, nothing)
+
+
/* 3 argument paired floating point builtins. */
BU_PAIRED_3 (MSUB, "msub", FP, fmsv2sf4)
BU_PAIRED_3 (MADD, "madd", FP, fmav2sf4)
diff --git a/gcc-4.8/gcc/config/rs6000/rs6000-c.c b/gcc-4.8/gcc/config/rs6000/rs6000-c.c
index a4f66ba8f..9cb6387b9 100644
--- a/gcc-4.8/gcc/config/rs6000/rs6000-c.c
+++ b/gcc-4.8/gcc/config/rs6000/rs6000-c.c
@@ -90,6 +90,8 @@ static GTY(()) tree pixel_keyword;
static GTY(()) tree __bool_keyword;
static GTY(()) tree bool_keyword;
static GTY(()) tree _Bool_keyword;
+static GTY(()) tree __int128_type;
+static GTY(()) tree __uint128_type;
/* Preserved across calls. */
static tree expand_bool_pixel;
@@ -122,9 +124,10 @@ altivec_categorize_keyword (const cpp_token *tok)
static void
init_vector_keywords (void)
{
- /* Keywords without two leading underscores are context-sensitive,
- and hence implemented as conditional macros, controlled by the
- rs6000_macro_to_expand() function below. */
+ /* Keywords without two leading underscores are context-sensitive, and hence
+ implemented as conditional macros, controlled by the
+ rs6000_macro_to_expand() function below. If we have ISA 2.07 64-bit
+ support, record the __int128_t and __uint128_t types. */
__vector_keyword = get_identifier ("__vector");
C_CPP_HASHNODE (__vector_keyword)->flags |= NODE_CONDITIONAL;
@@ -146,6 +149,12 @@ init_vector_keywords (void)
_Bool_keyword = get_identifier ("_Bool");
C_CPP_HASHNODE (_Bool_keyword)->flags |= NODE_CONDITIONAL;
+
+ if (TARGET_VADDUQM)
+ {
+ __int128_type = get_identifier ("__int128_t");
+ __uint128_type = get_identifier ("__uint128_t");
+ }
}
/* Called to decide whether a conditional macro should be expanded.
@@ -221,7 +230,8 @@ rs6000_macro_to_expand (cpp_reader *pfile, const cpp_token *tok)
|| rid_code == RID_SHORT || rid_code == RID_SIGNED
|| rid_code == RID_INT || rid_code == RID_CHAR
|| rid_code == RID_FLOAT
- || (rid_code == RID_DOUBLE && TARGET_VSX))
+ || (rid_code == RID_DOUBLE && TARGET_VSX)
+ || (rid_code == RID_INT128 && TARGET_VADDUQM))
{
expand_this = C_CPP_HASHNODE (__vector_keyword);
/* If the next keyword is bool or pixel, it
@@ -248,6 +258,13 @@ rs6000_macro_to_expand (cpp_reader *pfile, const cpp_token *tok)
expand_bool_pixel = __bool_keyword;
}
}
+
+ /* Support vector __int128_t, but we don't need to worry about bool
+ or pixel on this type. */
+ else if (TARGET_VADDUQM
+ && (ident == C_CPP_HASHNODE (__int128_type)
+ || ident == C_CPP_HASHNODE (__uint128_type)))
+ expand_this = C_CPP_HASHNODE (__vector_keyword);
}
}
else if (expand_bool_pixel && ident == C_CPP_HASHNODE (__pixel_keyword))
@@ -315,6 +332,8 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags,
rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR6X");
if ((flags & OPTION_MASK_POPCNTD) != 0)
rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR7");
+ if ((flags & OPTION_MASK_DIRECT_MOVE) != 0)
+ rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR8");
if ((flags & OPTION_MASK_SOFT_FLOAT) != 0)
rs6000_define_or_undefine_macro (define_p, "_SOFT_FLOAT");
if ((flags & OPTION_MASK_RECIP_PRECISION) != 0)
@@ -331,6 +350,16 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags,
}
if ((flags & OPTION_MASK_VSX) != 0)
rs6000_define_or_undefine_macro (define_p, "__VSX__");
+ if ((flags & OPTION_MASK_HTM) != 0)
+ rs6000_define_or_undefine_macro (define_p, "__HTM__");
+ if ((flags & OPTION_MASK_P8_VECTOR) != 0)
+ rs6000_define_or_undefine_macro (define_p, "__POWER8_VECTOR__");
+ if ((flags & OPTION_MASK_QUAD_MEMORY) != 0)
+ rs6000_define_or_undefine_macro (define_p, "__QUAD_MEMORY__");
+ if ((flags & OPTION_MASK_QUAD_MEMORY_ATOMIC) != 0)
+ rs6000_define_or_undefine_macro (define_p, "__QUAD_MEMORY_ATOMIC__");
+ if ((flags & OPTION_MASK_CRYPTO) != 0)
+ rs6000_define_or_undefine_macro (define_p, "__CRYPTO__");
/* options from the builtin masks. */
if ((bu_mask & RS6000_BTM_SPE) != 0)
@@ -453,6 +482,10 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfile)
case ABI_AIX:
builtin_define ("_CALL_AIXDESC");
builtin_define ("_CALL_AIX");
+ builtin_define ("_CALL_ELF=1");
+ break;
+ case ABI_ELFv2:
+ builtin_define ("_CALL_ELF=2");
break;
case ABI_DARWIN:
builtin_define ("_CALL_DARWIN");
@@ -465,6 +498,13 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfile)
if (TARGET_SOFT_FLOAT || !TARGET_FPRS)
builtin_define ("__NO_FPRS__");
+ /* Whether aggregates passed by value are aligned to a 16 byte boundary
+ if their alignment is 16 bytes or larger. */
+ if ((TARGET_MACHO && rs6000_darwin64_abi)
+ || DEFAULT_ABI == ABI_ELFv2
+ || (DEFAULT_ABI == ABI_AIX && !rs6000_compat_align_parm))
+ builtin_define ("__STRUCT_PARM_ALIGN__=16");
+
/* Generate defines for Xilinx FPU. */
if (rs6000_xilinx_fpu)
{
@@ -505,6 +545,8 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_V8HI, RS6000_BTI_V8HI, 0, 0 },
{ ALTIVEC_BUILTIN_VEC_ABS, ALTIVEC_BUILTIN_ABS_V4SI,
RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0, 0 },
+ { ALTIVEC_BUILTIN_VEC_ABS, P8V_BUILTIN_ABS_V2DI,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0, 0 },
{ ALTIVEC_BUILTIN_VEC_ABS, ALTIVEC_BUILTIN_ABS_V4SF,
RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0, 0 },
{ ALTIVEC_BUILTIN_VEC_ABS, VSX_BUILTIN_XVABSDP,
@@ -577,12 +619,20 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_V4SI, RS6000_BTI_V8HI, 0, 0 },
{ ALTIVEC_BUILTIN_VEC_UNPACKH, ALTIVEC_BUILTIN_VUPKHSH,
RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V8HI, 0, 0 },
+ { ALTIVEC_BUILTIN_VEC_UNPACKH, P8V_BUILTIN_VUPKHSW,
+ RS6000_BTI_V2DI, RS6000_BTI_V4SI, 0, 0 },
+ { ALTIVEC_BUILTIN_VEC_UNPACKH, P8V_BUILTIN_VUPKHSW,
+ RS6000_BTI_bool_V2DI, RS6000_BTI_bool_V4SI, 0, 0 },
{ ALTIVEC_BUILTIN_VEC_UNPACKH, ALTIVEC_BUILTIN_VUPKHPX,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_pixel_V8HI, 0, 0 },
{ ALTIVEC_BUILTIN_VEC_VUPKHSH, ALTIVEC_BUILTIN_VUPKHSH,
RS6000_BTI_V4SI, RS6000_BTI_V8HI, 0, 0 },
{ ALTIVEC_BUILTIN_VEC_VUPKHSH, ALTIVEC_BUILTIN_VUPKHSH,
RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V8HI, 0, 0 },
+ { ALTIVEC_BUILTIN_VEC_VUPKHSH, P8V_BUILTIN_VUPKHSW,
+ RS6000_BTI_V2DI, RS6000_BTI_V4SI, 0, 0 },
+ { ALTIVEC_BUILTIN_VEC_VUPKHSH, P8V_BUILTIN_VUPKHSW,
+ RS6000_BTI_bool_V2DI, RS6000_BTI_bool_V4SI, 0, 0 },
{ ALTIVEC_BUILTIN_VEC_VUPKHPX, ALTIVEC_BUILTIN_VUPKHPX,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V8HI, 0, 0 },
{ ALTIVEC_BUILTIN_VEC_VUPKHPX, ALTIVEC_BUILTIN_VUPKHPX,
@@ -601,6 +651,10 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_V4SI, RS6000_BTI_V8HI, 0, 0 },
{ ALTIVEC_BUILTIN_VEC_UNPACKL, ALTIVEC_BUILTIN_VUPKLSH,
RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V8HI, 0, 0 },
+ { ALTIVEC_BUILTIN_VEC_UNPACKL, P8V_BUILTIN_VUPKLSW,
+ RS6000_BTI_V2DI, RS6000_BTI_V4SI, 0, 0 },
+ { ALTIVEC_BUILTIN_VEC_UNPACKL, P8V_BUILTIN_VUPKLSW,
+ RS6000_BTI_bool_V2DI, RS6000_BTI_bool_V4SI, 0, 0 },
{ ALTIVEC_BUILTIN_VEC_VUPKLPX, ALTIVEC_BUILTIN_VUPKLPX,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V8HI, 0, 0 },
{ ALTIVEC_BUILTIN_VEC_VUPKLPX, ALTIVEC_BUILTIN_VUPKLPX,
@@ -651,10 +705,27 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_bool_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_ADD, ALTIVEC_BUILTIN_VADDUWM,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_ADD, P8V_BUILTIN_VADDUDM,
+ RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_ADD, P8V_BUILTIN_VADDUDM,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_ADD, P8V_BUILTIN_VADDUDM,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_ADD, P8V_BUILTIN_VADDUDM,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_ADD, P8V_BUILTIN_VADDUDM,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_ADD, P8V_BUILTIN_VADDUDM,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_ADD, ALTIVEC_BUILTIN_VADDFP,
RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
{ ALTIVEC_BUILTIN_VEC_ADD, VSX_BUILTIN_XVADDDP,
RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0 },
+ { ALTIVEC_BUILTIN_VEC_ADD, P8V_BUILTIN_VADDUQM,
+ RS6000_BTI_V1TI, RS6000_BTI_V1TI, RS6000_BTI_V1TI, 0 },
+ { ALTIVEC_BUILTIN_VEC_ADD, P8V_BUILTIN_VADDUQM,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI,
+ RS6000_BTI_unsigned_V1TI, 0 },
{ ALTIVEC_BUILTIN_VEC_VADDFP, ALTIVEC_BUILTIN_VADDFP,
RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
{ ALTIVEC_BUILTIN_VEC_VADDUWM, ALTIVEC_BUILTIN_VADDUWM,
@@ -937,6 +1008,10 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_bool_V4SI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_CMPEQ, ALTIVEC_BUILTIN_VCMPEQUW,
RS6000_BTI_bool_V4SI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_CMPEQ, P8V_BUILTIN_VCMPEQUD,
+ RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_CMPEQ, P8V_BUILTIN_VCMPEQUD,
+ RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_CMPEQ, ALTIVEC_BUILTIN_VCMPEQFP,
RS6000_BTI_bool_V4SI, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
{ ALTIVEC_BUILTIN_VEC_CMPEQ, VSX_BUILTIN_XVCMPEQDP,
@@ -975,6 +1050,10 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_bool_V4SI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_CMPGT, ALTIVEC_BUILTIN_VCMPGTSW,
RS6000_BTI_bool_V4SI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_CMPGT, P8V_BUILTIN_VCMPGTUD,
+ RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_CMPGT, P8V_BUILTIN_VCMPGTSD,
+ RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_CMPGT, ALTIVEC_BUILTIN_VCMPGTFP,
RS6000_BTI_bool_V4SI, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
{ ALTIVEC_BUILTIN_VEC_CMPGT, VSX_BUILTIN_XVCMPGTDP,
@@ -1021,6 +1100,10 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_bool_V4SI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_CMPLT, ALTIVEC_BUILTIN_VCMPGTSW,
RS6000_BTI_bool_V4SI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_CMPLT, P8V_BUILTIN_VCMPGTUD,
+ RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_CMPLT, P8V_BUILTIN_VCMPGTSD,
+ RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_CMPLT, ALTIVEC_BUILTIN_VCMPGTFP,
RS6000_BTI_bool_V4SI, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
{ ALTIVEC_BUILTIN_VEC_CMPLT, VSX_BUILTIN_XVCMPGTDP,
@@ -1045,54 +1128,54 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
{ VSX_BUILTIN_VEC_DIV, VSX_BUILTIN_XVDIVDP,
RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V2DF,
RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V2DI,
RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V2DI,
RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
~RS6000_BTI_unsigned_V2DI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V2DI,
RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V2DI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V4SF,
RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V4SF,
RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_float, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V4SI,
RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V4SI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V4SI,
RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_V4SI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V4SI,
RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_INTSI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V4SI,
RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_long, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V4SI,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V4SI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V4SI,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTSI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V4SI,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_long, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V8HI,
RS6000_BTI_bool_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V8HI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V8HI,
RS6000_BTI_pixel_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_pixel_V8HI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V8HI,
RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_V8HI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V8HI,
RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_INTHI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V8HI,
RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V8HI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V8HI,
RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTHI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V16QI,
RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V16QI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V16QI,
RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_V16QI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V16QI,
RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V16QI,
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V16QI, 0 },
- { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V16QI,
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDE, ALTIVEC_BUILTIN_LVEBX,
RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI, 0 },
@@ -1130,55 +1213,55 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI, 0 },
{ ALTIVEC_BUILTIN_VEC_LVEBX, ALTIVEC_BUILTIN_LVEBX,
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SF,
RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SF,
RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_float, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V4SI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_V4SI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_INTSI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_long, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V4SI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTSI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_long, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V8HI,
RS6000_BTI_bool_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V8HI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V8HI,
RS6000_BTI_pixel_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_pixel_V8HI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V8HI,
RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_V8HI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V8HI,
RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_INTHI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V8HI,
RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V8HI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V8HI,
RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTHI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V16QI,
RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V16QI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V16QI,
RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_V16QI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V16QI,
RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V16QI,
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI,
~RS6000_BTI_unsigned_V16QI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V16QI,
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V2DF,
RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V2DI,
RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V2DI,
RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
~RS6000_BTI_unsigned_V2DI, 0 },
- { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V2DI,
RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_LVSL, ALTIVEC_BUILTIN_LVSL,
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI, 0 },
@@ -1418,6 +1501,18 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_bool_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_MAX, ALTIVEC_BUILTIN_VMAXSW,
RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_MAX, P8V_BUILTIN_VMAXUD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_MAX, P8V_BUILTIN_VMAXUD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_MAX, P8V_BUILTIN_VMAXUD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_MAX, P8V_BUILTIN_VMAXSD,
+ RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_MAX, P8V_BUILTIN_VMAXSD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_MAX, P8V_BUILTIN_VMAXSD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_MAX, ALTIVEC_BUILTIN_VMAXFP,
RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
{ ALTIVEC_BUILTIN_VEC_MAX, VSX_BUILTIN_XVMAXDP,
@@ -1604,6 +1699,18 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_bool_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_MIN, ALTIVEC_BUILTIN_VMINSW,
RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_MIN, P8V_BUILTIN_VMINUD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_MIN, P8V_BUILTIN_VMINUD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_MIN, P8V_BUILTIN_VMINUD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_MIN, P8V_BUILTIN_VMINSD,
+ RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_MIN, P8V_BUILTIN_VMINSD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_MIN, P8V_BUILTIN_VMINSD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_MIN, ALTIVEC_BUILTIN_VMINFP,
RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
{ ALTIVEC_BUILTIN_VEC_MIN, VSX_BUILTIN_XVMINDP,
@@ -1786,6 +1893,12 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_PACK, ALTIVEC_BUILTIN_VPKUWUM,
RS6000_BTI_bool_V8HI, RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_PACK, P8V_BUILTIN_VPKUDUM,
+ RS6000_BTI_V4SI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_PACK, P8V_BUILTIN_VPKUDUM,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_PACK, P8V_BUILTIN_VPKUDUM,
+ RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V2DI, RS6000_BTI_bool_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_VPKUWUM, ALTIVEC_BUILTIN_VPKUWUM,
RS6000_BTI_V8HI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_VPKUWUM, ALTIVEC_BUILTIN_VPKUWUM,
@@ -1812,6 +1925,10 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_V8HI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_VPKUWUS, ALTIVEC_BUILTIN_VPKUWUS,
RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_PACKS, P8V_BUILTIN_VPKUDUS,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_PACKS, P8V_BUILTIN_VPKSDSS,
+ RS6000_BTI_V4SI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_VPKSHSS, ALTIVEC_BUILTIN_VPKSHSS,
RS6000_BTI_V16QI, RS6000_BTI_V8HI, RS6000_BTI_V8HI, 0 },
{ ALTIVEC_BUILTIN_VEC_VPKUHUS, ALTIVEC_BUILTIN_VPKUHUS,
@@ -1824,6 +1941,8 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_PACKSU, ALTIVEC_BUILTIN_VPKSWUS,
RS6000_BTI_unsigned_V8HI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_PACKSU, P8V_BUILTIN_VPKSDUS,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_VPKSWUS, ALTIVEC_BUILTIN_VPKSWUS,
RS6000_BTI_unsigned_V8HI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_VPKSHUS, ALTIVEC_BUILTIN_VPKSHUS,
@@ -1844,6 +1963,10 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_RL, ALTIVEC_BUILTIN_VRLW,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_RL, P8V_BUILTIN_VRLD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_RL, P8V_BUILTIN_VRLD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_VRLW, ALTIVEC_BUILTIN_VRLW,
RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_VRLW, ALTIVEC_BUILTIN_VRLW,
@@ -1868,6 +1991,10 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_SL, ALTIVEC_BUILTIN_VSLW,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_SL, P8V_BUILTIN_VSLD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_SL, P8V_BUILTIN_VSLD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_SQRT, VSX_BUILTIN_XVSQRTDP,
RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0, 0 },
{ ALTIVEC_BUILTIN_VEC_SQRT, VSX_BUILTIN_XVSQRTSP,
@@ -2032,6 +2159,10 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_SR, ALTIVEC_BUILTIN_VSRW,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_SR, P8V_BUILTIN_VSRD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_SR, P8V_BUILTIN_VSRD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_VSRW, ALTIVEC_BUILTIN_VSRW,
RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_VSRW, ALTIVEC_BUILTIN_VSRW,
@@ -2056,6 +2187,10 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_SRA, ALTIVEC_BUILTIN_VSRAW,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_SRA, P8V_BUILTIN_VSRAD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_SRA, P8V_BUILTIN_VSRD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_VSRAW, ALTIVEC_BUILTIN_VSRAW,
RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_VSRAW, ALTIVEC_BUILTIN_VSRAW,
@@ -2196,10 +2331,27 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_bool_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_SUB, ALTIVEC_BUILTIN_VSUBUWM,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_SUB, P8V_BUILTIN_VSUBUDM,
+ RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_SUB, P8V_BUILTIN_VSUBUDM,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_SUB, P8V_BUILTIN_VSUBUDM,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_SUB, P8V_BUILTIN_VSUBUDM,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_SUB, P8V_BUILTIN_VSUBUDM,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_SUB, P8V_BUILTIN_VSUBUDM,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_SUB, ALTIVEC_BUILTIN_VSUBFP,
RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
{ ALTIVEC_BUILTIN_VEC_SUB, VSX_BUILTIN_XVSUBDP,
RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0 },
+ { ALTIVEC_BUILTIN_VEC_SUB, P8V_BUILTIN_VSUBUQM,
+ RS6000_BTI_V1TI, RS6000_BTI_V1TI, RS6000_BTI_V1TI, 0 },
+ { ALTIVEC_BUILTIN_VEC_SUB, P8V_BUILTIN_VSUBUQM,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI,
+ RS6000_BTI_unsigned_V1TI, 0 },
{ ALTIVEC_BUILTIN_VEC_VSUBFP, ALTIVEC_BUILTIN_VSUBFP,
RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
{ ALTIVEC_BUILTIN_VEC_VSUBUWM, ALTIVEC_BUILTIN_VSUBUWM,
@@ -2730,63 +2882,63 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, RS6000_BTI_NOT_OPAQUE },
{ ALTIVEC_BUILTIN_VEC_SLD, ALTIVEC_BUILTIN_VSLDOI_16QI,
RS6000_BTI_bool_V16QI, RS6000_BTI_bool_V16QI, RS6000_BTI_bool_V16QI, RS6000_BTI_NOT_OPAQUE },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V2DF,
RS6000_BTI_void, RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V2DI,
RS6000_BTI_void, RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V2DI,
RS6000_BTI_void, RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
~RS6000_BTI_unsigned_V2DI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V2DI,
RS6000_BTI_void, RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI,
~RS6000_BTI_bool_V2DI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V4SF,
RS6000_BTI_void, RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V4SF,
RS6000_BTI_void, RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_float },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V4SI,
RS6000_BTI_void, RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_V4SI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V4SI,
RS6000_BTI_void, RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_INTSI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V4SI,
RS6000_BTI_void, RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V4SI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V4SI,
RS6000_BTI_void, RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTSI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V4SI,
RS6000_BTI_void, RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V4SI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V4SI,
RS6000_BTI_void, RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTSI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V4SI,
RS6000_BTI_void, RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_INTSI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V8HI,
RS6000_BTI_void, RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_V8HI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V8HI,
RS6000_BTI_void, RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_INTHI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V8HI,
RS6000_BTI_void, RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V8HI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V8HI,
RS6000_BTI_void, RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTHI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V8HI,
RS6000_BTI_void, RS6000_BTI_bool_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V8HI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V8HI,
RS6000_BTI_void, RS6000_BTI_bool_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTHI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V8HI,
RS6000_BTI_void, RS6000_BTI_bool_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_INTHI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V16QI,
RS6000_BTI_void, RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_V16QI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V16QI,
RS6000_BTI_void, RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V16QI,
RS6000_BTI_void, RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V16QI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V16QI,
RS6000_BTI_void, RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V16QI,
RS6000_BTI_void, RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V16QI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V16QI,
RS6000_BTI_void, RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V16QI,
RS6000_BTI_void, RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI },
- { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V8HI,
RS6000_BTI_void, RS6000_BTI_pixel_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_pixel_V8HI },
{ ALTIVEC_BUILTIN_VEC_STE, ALTIVEC_BUILTIN_STVEBX,
RS6000_BTI_void, RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI },
@@ -2858,64 +3010,64 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_void, RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_void },
{ ALTIVEC_BUILTIN_VEC_STVEBX, ALTIVEC_BUILTIN_STVEBX,
RS6000_BTI_void, RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_void },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V4SF,
RS6000_BTI_void, RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V4SF,
RS6000_BTI_void, RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_float },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V4SI,
RS6000_BTI_void, RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_V4SI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V4SI,
RS6000_BTI_void, RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_INTSI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V4SI,
RS6000_BTI_void, RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V4SI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V4SI,
RS6000_BTI_void, RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTSI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V4SI,
RS6000_BTI_void, RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V4SI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V4SI,
RS6000_BTI_void, RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTSI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V4SI,
RS6000_BTI_void, RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_INTSI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V8HI,
RS6000_BTI_void, RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_V8HI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V8HI,
RS6000_BTI_void, RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_INTHI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V8HI,
RS6000_BTI_void, RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V8HI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V8HI,
RS6000_BTI_void, RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTHI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V8HI,
RS6000_BTI_void, RS6000_BTI_bool_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V8HI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V8HI,
RS6000_BTI_void, RS6000_BTI_bool_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTHI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V8HI,
RS6000_BTI_void, RS6000_BTI_bool_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_INTHI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V16QI,
RS6000_BTI_void, RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_V16QI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V16QI,
RS6000_BTI_void, RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V16QI,
RS6000_BTI_void, RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V16QI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V16QI,
RS6000_BTI_void, RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V16QI,
RS6000_BTI_void, RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V16QI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V16QI,
RS6000_BTI_void, RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V16QI,
RS6000_BTI_void, RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V8HI,
RS6000_BTI_void, RS6000_BTI_pixel_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_pixel_V8HI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V2DF,
RS6000_BTI_void, RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V2DF,
RS6000_BTI_void, RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_double },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V2DI,
RS6000_BTI_void, RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V2DI,
RS6000_BTI_void, RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
~RS6000_BTI_unsigned_V2DI },
- { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL_V2DI,
RS6000_BTI_void, RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI,
~RS6000_BTI_bool_V2DI },
{ ALTIVEC_BUILTIN_VEC_STVLX, ALTIVEC_BUILTIN_STVLX,
@@ -3327,6 +3479,20 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V4SI, RS6000_BTI_V4SI },
{ ALTIVEC_BUILTIN_VEC_VCMPEQ_P, ALTIVEC_BUILTIN_VCMPEQUW_P,
RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI },
+ { ALTIVEC_BUILTIN_VEC_VCMPEQ_P, P8V_BUILTIN_VCMPEQUD_P,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI },
+ { ALTIVEC_BUILTIN_VEC_VCMPEQ_P, P8V_BUILTIN_VCMPEQUD_P,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI },
+ { ALTIVEC_BUILTIN_VEC_VCMPEQ_P, P8V_BUILTIN_VCMPEQUD_P,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI },
+ { ALTIVEC_BUILTIN_VEC_VCMPEQ_P, P8V_BUILTIN_VCMPEQUD_P,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI },
+ { ALTIVEC_BUILTIN_VEC_VCMPEQ_P, P8V_BUILTIN_VCMPEQUD_P,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI },
+ { ALTIVEC_BUILTIN_VEC_VCMPEQ_P, P8V_BUILTIN_VCMPEQUD_P,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V2DI, RS6000_BTI_V2DI },
+ { ALTIVEC_BUILTIN_VEC_VCMPEQ_P, P8V_BUILTIN_VCMPEQUD_P,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_bool_V2DI, RS6000_BTI_bool_V2DI },
{ ALTIVEC_BUILTIN_VEC_VCMPEQ_P, ALTIVEC_BUILTIN_VCMPEQFP_P,
RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V4SF, RS6000_BTI_V4SF },
{ ALTIVEC_BUILTIN_VEC_VCMPEQ_P, VSX_BUILTIN_XVCMPEQDP_P,
@@ -3372,11 +3538,509 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V4SI, RS6000_BTI_bool_V4SI },
{ ALTIVEC_BUILTIN_VEC_VCMPGE_P, ALTIVEC_BUILTIN_VCMPGTSW_P,
RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V4SI, RS6000_BTI_V4SI },
+ { ALTIVEC_BUILTIN_VEC_VCMPGE_P, P8V_BUILTIN_VCMPGTUD_P,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI },
+ { ALTIVEC_BUILTIN_VEC_VCMPGE_P, P8V_BUILTIN_VCMPGTUD_P,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI },
+ { ALTIVEC_BUILTIN_VEC_VCMPGE_P, P8V_BUILTIN_VCMPGTUD_P,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI },
+ { ALTIVEC_BUILTIN_VEC_VCMPGE_P, P8V_BUILTIN_VCMPGTSD_P,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI },
+ { ALTIVEC_BUILTIN_VEC_VCMPGE_P, P8V_BUILTIN_VCMPGTSD_P,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI },
+ { ALTIVEC_BUILTIN_VEC_VCMPGE_P, P8V_BUILTIN_VCMPGTSD_P,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V2DI, RS6000_BTI_V2DI },
{ ALTIVEC_BUILTIN_VEC_VCMPGE_P, ALTIVEC_BUILTIN_VCMPGEFP_P,
RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V4SF, RS6000_BTI_V4SF },
{ ALTIVEC_BUILTIN_VEC_VCMPGE_P, VSX_BUILTIN_XVCMPGEDP_P,
RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V2DF, RS6000_BTI_V2DF },
+ /* Power8 vector overloaded functions. */
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V16QI,
+ RS6000_BTI_V16QI, RS6000_BTI_bool_V16QI, RS6000_BTI_V16QI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V16QI,
+ RS6000_BTI_V16QI, RS6000_BTI_V16QI, RS6000_BTI_bool_V16QI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V16QI,
+ RS6000_BTI_V16QI, RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V16QI,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_bool_V16QI,
+ RS6000_BTI_unsigned_V16QI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V16QI,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI,
+ RS6000_BTI_bool_V16QI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V16QI,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI,
+ RS6000_BTI_unsigned_V16QI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V8HI,
+ RS6000_BTI_V8HI, RS6000_BTI_bool_V8HI, RS6000_BTI_V8HI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V8HI,
+ RS6000_BTI_V8HI, RS6000_BTI_V8HI, RS6000_BTI_bool_V8HI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V8HI,
+ RS6000_BTI_V8HI, RS6000_BTI_V8HI, RS6000_BTI_V8HI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V8HI,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_bool_V8HI,
+ RS6000_BTI_unsigned_V8HI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V8HI,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI,
+ RS6000_BTI_bool_V8HI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V8HI,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI,
+ RS6000_BTI_unsigned_V8HI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V4SI,
+ RS6000_BTI_V4SI, RS6000_BTI_bool_V4SI, RS6000_BTI_V4SI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V4SI,
+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_bool_V4SI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V4SI,
+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V4SI,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_bool_V4SI,
+ RS6000_BTI_unsigned_V4SI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V4SI,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI,
+ RS6000_BTI_bool_V4SI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V4SI,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI,
+ RS6000_BTI_unsigned_V4SI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V2DI,
+ RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V2DI,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V2DI,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V2DI,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI,
+ RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V2DI,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI,
+ RS6000_BTI_bool_V2DI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V2DI,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI,
+ RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V4SF,
+ RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
+ { P8V_BUILTIN_VEC_EQV, P8V_BUILTIN_EQV_V2DF,
+ RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0 },
+
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V16QI,
+ RS6000_BTI_V16QI, RS6000_BTI_bool_V16QI, RS6000_BTI_V16QI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V16QI,
+ RS6000_BTI_V16QI, RS6000_BTI_V16QI, RS6000_BTI_bool_V16QI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V16QI,
+ RS6000_BTI_V16QI, RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V16QI,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_bool_V16QI,
+ RS6000_BTI_unsigned_V16QI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V16QI,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI,
+ RS6000_BTI_bool_V16QI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V16QI,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI,
+ RS6000_BTI_unsigned_V16QI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V8HI,
+ RS6000_BTI_V8HI, RS6000_BTI_bool_V8HI, RS6000_BTI_V8HI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V8HI,
+ RS6000_BTI_V8HI, RS6000_BTI_V8HI, RS6000_BTI_bool_V8HI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V8HI,
+ RS6000_BTI_V8HI, RS6000_BTI_V8HI, RS6000_BTI_V8HI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V8HI,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_bool_V8HI,
+ RS6000_BTI_unsigned_V8HI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V8HI,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI,
+ RS6000_BTI_bool_V8HI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V8HI,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI,
+ RS6000_BTI_unsigned_V8HI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V4SI,
+ RS6000_BTI_V4SI, RS6000_BTI_bool_V4SI, RS6000_BTI_V4SI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V4SI,
+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_bool_V4SI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V4SI,
+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V4SI,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_bool_V4SI,
+ RS6000_BTI_unsigned_V4SI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V4SI,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI,
+ RS6000_BTI_bool_V4SI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V4SI,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI,
+ RS6000_BTI_unsigned_V4SI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V2DI,
+ RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V2DI,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V2DI,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V2DI,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI,
+ RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V2DI,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI,
+ RS6000_BTI_bool_V2DI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V2DI,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI,
+ RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V4SF,
+ RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
+ { P8V_BUILTIN_VEC_NAND, P8V_BUILTIN_NAND_V2DF,
+ RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0 },
+
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V16QI,
+ RS6000_BTI_V16QI, RS6000_BTI_bool_V16QI, RS6000_BTI_V16QI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V16QI,
+ RS6000_BTI_V16QI, RS6000_BTI_V16QI, RS6000_BTI_bool_V16QI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V16QI,
+ RS6000_BTI_V16QI, RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V16QI,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_bool_V16QI,
+ RS6000_BTI_unsigned_V16QI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V16QI,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI,
+ RS6000_BTI_bool_V16QI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V16QI,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI,
+ RS6000_BTI_unsigned_V16QI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V8HI,
+ RS6000_BTI_V8HI, RS6000_BTI_bool_V8HI, RS6000_BTI_V8HI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V8HI,
+ RS6000_BTI_V8HI, RS6000_BTI_V8HI, RS6000_BTI_bool_V8HI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V8HI,
+ RS6000_BTI_V8HI, RS6000_BTI_V8HI, RS6000_BTI_V8HI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V8HI,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_bool_V8HI,
+ RS6000_BTI_unsigned_V8HI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V8HI,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI,
+ RS6000_BTI_bool_V8HI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V8HI,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI,
+ RS6000_BTI_unsigned_V8HI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V4SI,
+ RS6000_BTI_V4SI, RS6000_BTI_bool_V4SI, RS6000_BTI_V4SI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V4SI,
+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_bool_V4SI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V4SI,
+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V4SI,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_bool_V4SI,
+ RS6000_BTI_unsigned_V4SI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V4SI,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI,
+ RS6000_BTI_bool_V4SI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V4SI,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI,
+ RS6000_BTI_unsigned_V4SI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V2DI,
+ RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V2DI,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V2DI,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V2DI,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI,
+ RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V2DI,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI,
+ RS6000_BTI_bool_V2DI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V2DI,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI,
+ RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V4SF,
+ RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
+ { P8V_BUILTIN_VEC_ORC, P8V_BUILTIN_ORC_V2DF,
+ RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0 },
+
+ { P8V_BUILTIN_VEC_VADDCUQ, P8V_BUILTIN_VADDCUQ,
+ RS6000_BTI_V1TI, RS6000_BTI_V1TI, RS6000_BTI_V1TI, 0 },
+ { P8V_BUILTIN_VEC_VADDCUQ, P8V_BUILTIN_VADDCUQ,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI,
+ RS6000_BTI_unsigned_V1TI, 0 },
+
+ { P8V_BUILTIN_VEC_VADDUDM, P8V_BUILTIN_VADDUDM,
+ RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VADDUDM, P8V_BUILTIN_VADDUDM,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VADDUDM, P8V_BUILTIN_VADDUDM,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VADDUDM, P8V_BUILTIN_VADDUDM,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VADDUDM, P8V_BUILTIN_VADDUDM,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VADDUDM, P8V_BUILTIN_VADDUDM,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VADDUQM, P8V_BUILTIN_VADDUQM,
+ RS6000_BTI_V1TI, RS6000_BTI_V1TI, RS6000_BTI_V1TI, 0 },
+ { P8V_BUILTIN_VEC_VADDUQM, P8V_BUILTIN_VADDUQM,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI,
+ RS6000_BTI_unsigned_V1TI, 0 },
+
+ { P8V_BUILTIN_VEC_VBPERMQ, P8V_BUILTIN_VBPERMQ,
+ RS6000_BTI_V2DI, RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0 },
+ { P8V_BUILTIN_VEC_VBPERMQ, P8V_BUILTIN_VBPERMQ,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V16QI,
+ RS6000_BTI_unsigned_V16QI, 0 },
+
+ { P8V_BUILTIN_VEC_VCLZ, P8V_BUILTIN_VCLZB,
+ RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0, 0 },
+ { P8V_BUILTIN_VEC_VCLZ, P8V_BUILTIN_VCLZB,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, 0, 0 },
+ { P8V_BUILTIN_VEC_VCLZ, P8V_BUILTIN_VCLZH,
+ RS6000_BTI_V8HI, RS6000_BTI_V8HI, 0, 0 },
+ { P8V_BUILTIN_VEC_VCLZ, P8V_BUILTIN_VCLZH,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI, 0, 0 },
+ { P8V_BUILTIN_VEC_VCLZ, P8V_BUILTIN_VCLZW,
+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0, 0 },
+ { P8V_BUILTIN_VEC_VCLZ, P8V_BUILTIN_VCLZW,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0, 0 },
+ { P8V_BUILTIN_VEC_VCLZ, P8V_BUILTIN_VCLZD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0, 0 },
+ { P8V_BUILTIN_VEC_VCLZ, P8V_BUILTIN_VCLZD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0, 0 },
+
+ { P8V_BUILTIN_VEC_VCLZB, P8V_BUILTIN_VCLZB,
+ RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0, 0 },
+ { P8V_BUILTIN_VEC_VCLZB, P8V_BUILTIN_VCLZB,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, 0, 0 },
+
+ { P8V_BUILTIN_VEC_VCLZH, P8V_BUILTIN_VCLZH,
+ RS6000_BTI_V8HI, RS6000_BTI_V8HI, 0, 0 },
+ { P8V_BUILTIN_VEC_VCLZH, P8V_BUILTIN_VCLZH,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI, 0, 0 },
+
+ { P8V_BUILTIN_VEC_VCLZW, P8V_BUILTIN_VCLZW,
+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0, 0 },
+ { P8V_BUILTIN_VEC_VCLZW, P8V_BUILTIN_VCLZW,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0, 0 },
+
+ { P8V_BUILTIN_VEC_VCLZD, P8V_BUILTIN_VCLZD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0, 0 },
+ { P8V_BUILTIN_VEC_VCLZD, P8V_BUILTIN_VCLZD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0, 0 },
+
+ { P8V_BUILTIN_VEC_VGBBD, P8V_BUILTIN_VGBBD,
+ RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0, 0 },
+ { P8V_BUILTIN_VEC_VGBBD, P8V_BUILTIN_VGBBD,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, 0, 0 },
+
+ { P8V_BUILTIN_VEC_VADDECUQ, P8V_BUILTIN_VADDECUQ,
+ RS6000_BTI_V1TI, RS6000_BTI_V1TI, RS6000_BTI_V1TI, RS6000_BTI_V1TI },
+ { P8V_BUILTIN_VEC_VADDECUQ, P8V_BUILTIN_VADDECUQ,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI },
+
+ { P8V_BUILTIN_VEC_VADDEUQM, P8V_BUILTIN_VADDEUQM,
+ RS6000_BTI_V1TI, RS6000_BTI_V1TI, RS6000_BTI_V1TI, RS6000_BTI_V1TI },
+ { P8V_BUILTIN_VEC_VADDEUQM, P8V_BUILTIN_VADDEUQM,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI },
+
+ { P8V_BUILTIN_VEC_VSUBECUQ, P8V_BUILTIN_VSUBECUQ,
+ RS6000_BTI_V1TI, RS6000_BTI_V1TI, RS6000_BTI_V1TI, RS6000_BTI_V1TI },
+ { P8V_BUILTIN_VEC_VSUBECUQ, P8V_BUILTIN_VSUBECUQ,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI },
+
+ { P8V_BUILTIN_VEC_VSUBEUQM, P8V_BUILTIN_VSUBEUQM,
+ RS6000_BTI_V1TI, RS6000_BTI_V1TI, RS6000_BTI_V1TI, RS6000_BTI_V1TI },
+ { P8V_BUILTIN_VEC_VSUBEUQM, P8V_BUILTIN_VSUBEUQM,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI },
+
+ { P8V_BUILTIN_VEC_VMINSD, P8V_BUILTIN_VMINSD,
+ RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VMINSD, P8V_BUILTIN_VMINSD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VMINSD, P8V_BUILTIN_VMINSD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VMAXSD, P8V_BUILTIN_VMAXSD,
+ RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VMAXSD, P8V_BUILTIN_VMAXSD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VMAXSD, P8V_BUILTIN_VMAXSD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VMINUD, P8V_BUILTIN_VMINUD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI,
+ RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VMINUD, P8V_BUILTIN_VMINUD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI,
+ RS6000_BTI_bool_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VMINUD, P8V_BUILTIN_VMINUD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI,
+ RS6000_BTI_unsigned_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VMAXUD, P8V_BUILTIN_VMAXUD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI,
+ RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VMAXUD, P8V_BUILTIN_VMAXUD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI,
+ RS6000_BTI_bool_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VMAXUD, P8V_BUILTIN_VMAXUD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI,
+ RS6000_BTI_unsigned_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VMRGEW, P8V_BUILTIN_VMRGEW,
+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
+ { P8V_BUILTIN_VEC_VMRGEW, P8V_BUILTIN_VMRGEW,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI,
+ RS6000_BTI_unsigned_V4SI, 0 },
+
+ { P8V_BUILTIN_VEC_VMRGOW, P8V_BUILTIN_VMRGOW,
+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
+ { P8V_BUILTIN_VEC_VMRGOW, P8V_BUILTIN_VMRGOW,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI,
+ RS6000_BTI_unsigned_V4SI, 0 },
+
+ { P8V_BUILTIN_VEC_VPOPCNT, P8V_BUILTIN_VPOPCNTB,
+ RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0, 0 },
+ { P8V_BUILTIN_VEC_VPOPCNT, P8V_BUILTIN_VPOPCNTB,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, 0, 0 },
+ { P8V_BUILTIN_VEC_VPOPCNT, P8V_BUILTIN_VPOPCNTH,
+ RS6000_BTI_V8HI, RS6000_BTI_V8HI, 0, 0 },
+ { P8V_BUILTIN_VEC_VPOPCNT, P8V_BUILTIN_VPOPCNTH,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI, 0, 0 },
+ { P8V_BUILTIN_VEC_VPOPCNT, P8V_BUILTIN_VPOPCNTW,
+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0, 0 },
+ { P8V_BUILTIN_VEC_VPOPCNT, P8V_BUILTIN_VPOPCNTW,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0, 0 },
+ { P8V_BUILTIN_VEC_VPOPCNT, P8V_BUILTIN_VPOPCNTD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0, 0 },
+ { P8V_BUILTIN_VEC_VPOPCNT, P8V_BUILTIN_VPOPCNTD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0, 0 },
+
+ { P8V_BUILTIN_VEC_VPOPCNTB, P8V_BUILTIN_VPOPCNTB,
+ RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0, 0 },
+ { P8V_BUILTIN_VEC_VPOPCNTB, P8V_BUILTIN_VPOPCNTB,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, 0, 0 },
+
+ { P8V_BUILTIN_VEC_VPOPCNTH, P8V_BUILTIN_VPOPCNTH,
+ RS6000_BTI_V8HI, RS6000_BTI_V8HI, 0, 0 },
+ { P8V_BUILTIN_VEC_VPOPCNTH, P8V_BUILTIN_VPOPCNTH,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI, 0, 0 },
+
+ { P8V_BUILTIN_VEC_VPOPCNTW, P8V_BUILTIN_VPOPCNTW,
+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0, 0 },
+ { P8V_BUILTIN_VEC_VPOPCNTW, P8V_BUILTIN_VPOPCNTW,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0, 0 },
+
+ { P8V_BUILTIN_VEC_VPOPCNTD, P8V_BUILTIN_VPOPCNTD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0, 0 },
+ { P8V_BUILTIN_VEC_VPOPCNTD, P8V_BUILTIN_VPOPCNTD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0, 0 },
+
+ { P8V_BUILTIN_VEC_VPKUDUM, P8V_BUILTIN_VPKUDUM,
+ RS6000_BTI_V4SI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VPKUDUM, P8V_BUILTIN_VPKUDUM,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VPKUDUM, P8V_BUILTIN_VPKUDUM,
+ RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V2DI, RS6000_BTI_bool_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VPKSDSS, P8V_BUILTIN_VPKSDSS,
+ RS6000_BTI_V4SI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VPKUDUS, P8V_BUILTIN_VPKUDUS,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VPKSDUS, P8V_BUILTIN_VPKSDUS,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VRLD, P8V_BUILTIN_VRLD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VRLD, P8V_BUILTIN_VRLD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VSLD, P8V_BUILTIN_VSLD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VSLD, P8V_BUILTIN_VSLD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VSRD, P8V_BUILTIN_VSRD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VSRD, P8V_BUILTIN_VSRD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VSRAD, P8V_BUILTIN_VSRAD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VSRAD, P8V_BUILTIN_VSRD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VSUBCUQ, P8V_BUILTIN_VSUBCUQ,
+ RS6000_BTI_V1TI, RS6000_BTI_V1TI, RS6000_BTI_V1TI, 0 },
+ { P8V_BUILTIN_VEC_VSUBCUQ, P8V_BUILTIN_VSUBCUQ,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI,
+ RS6000_BTI_unsigned_V1TI, 0 },
+
+ { P8V_BUILTIN_VEC_VSUBUDM, P8V_BUILTIN_VSUBUDM,
+ RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VSUBUDM, P8V_BUILTIN_VSUBUDM,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VSUBUDM, P8V_BUILTIN_VSUBUDM,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VSUBUDM, P8V_BUILTIN_VSUBUDM,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VSUBUDM, P8V_BUILTIN_VSUBUDM,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, 0 },
+ { P8V_BUILTIN_VEC_VSUBUDM, P8V_BUILTIN_VSUBUDM,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VSUBUQM, P8V_BUILTIN_VSUBUQM,
+ RS6000_BTI_V1TI, RS6000_BTI_V1TI, RS6000_BTI_V1TI, 0 },
+ { P8V_BUILTIN_VEC_VSUBUQM, P8V_BUILTIN_VSUBUQM,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI,
+ RS6000_BTI_unsigned_V1TI, 0 },
+
+ { P8V_BUILTIN_VEC_VUPKHSW, P8V_BUILTIN_VUPKHSW,
+ RS6000_BTI_V2DI, RS6000_BTI_V4SI, 0, 0 },
+ { P8V_BUILTIN_VEC_VUPKHSW, P8V_BUILTIN_VUPKHSW,
+ RS6000_BTI_bool_V2DI, RS6000_BTI_bool_V4SI, 0, 0 },
+
+ { P8V_BUILTIN_VEC_VUPKLSW, P8V_BUILTIN_VUPKLSW,
+ RS6000_BTI_V2DI, RS6000_BTI_V4SI, 0, 0 },
+ { P8V_BUILTIN_VEC_VUPKLSW, P8V_BUILTIN_VUPKLSW,
+ RS6000_BTI_bool_V2DI, RS6000_BTI_bool_V4SI, 0, 0 },
+
+ { P8V_BUILTIN_VEC_VGBBD, P8V_BUILTIN_VGBBD,
+ RS6000_BTI_V16QI, 0, 0, 0 },
+ { P8V_BUILTIN_VEC_VGBBD, P8V_BUILTIN_VGBBD,
+ RS6000_BTI_unsigned_V16QI, 0, 0, 0 },
+
+ /* Crypto builtins. */
+ { CRYPTO_BUILTIN_VPERMXOR, CRYPTO_BUILTIN_VPERMXOR_V16QI,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI },
+ { CRYPTO_BUILTIN_VPERMXOR, CRYPTO_BUILTIN_VPERMXOR_V8HI,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI },
+ { CRYPTO_BUILTIN_VPERMXOR, CRYPTO_BUILTIN_VPERMXOR_V4SI,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI },
+ { CRYPTO_BUILTIN_VPERMXOR, CRYPTO_BUILTIN_VPERMXOR_V2DI,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI },
+
+ { CRYPTO_BUILTIN_VPMSUM, CRYPTO_BUILTIN_VPMSUMB,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI,
+ RS6000_BTI_unsigned_V16QI, 0 },
+ { CRYPTO_BUILTIN_VPMSUM, CRYPTO_BUILTIN_VPMSUMH,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI,
+ RS6000_BTI_unsigned_V8HI, 0 },
+ { CRYPTO_BUILTIN_VPMSUM, CRYPTO_BUILTIN_VPMSUMW,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI,
+ RS6000_BTI_unsigned_V4SI, 0 },
+ { CRYPTO_BUILTIN_VPMSUM, CRYPTO_BUILTIN_VPMSUMD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI,
+ RS6000_BTI_unsigned_V2DI, 0 },
+
+ { CRYPTO_BUILTIN_VSHASIGMA, CRYPTO_BUILTIN_VSHASIGMAW,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI },
+ { CRYPTO_BUILTIN_VSHASIGMA, CRYPTO_BUILTIN_VSHASIGMAD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI,
+ RS6000_BTI_INTSI, RS6000_BTI_INTSI },
+
{ (enum rs6000_builtins) 0, (enum rs6000_builtins) 0, 0, 0, 0, 0 }
};
@@ -3560,6 +4224,10 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
unsigned_p = TYPE_UNSIGNED (type);
switch (TYPE_MODE (type))
{
+ case TImode:
+ type = (unsigned_p ? unsigned_V1TI_type_node : V1TI_type_node);
+ size = 1;
+ break;
case DImode:
type = (unsigned_p ? unsigned_V2DI_type_node : V2DI_type_node);
size = 2;
@@ -3591,7 +4259,7 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
return build_constructor (type, vec);
}
- /* For now use pointer tricks to do the extaction, unless we are on VSX
+ /* For now use pointer tricks to do the extraction, unless we are on VSX
extracting a double from a constant offset. */
if (fcode == ALTIVEC_BUILTIN_VEC_EXTRACT)
{
@@ -3619,6 +4287,17 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
if (!INTEGRAL_TYPE_P (TREE_TYPE (arg2)))
goto bad;
+ /* If we are targeting little-endian, but -maltivec=be has been
+ specified to override the element order, adjust the element
+ number accordingly. */
+ if (!BYTES_BIG_ENDIAN && rs6000_altivec_element_order == 2)
+ {
+ unsigned int last_elem = TYPE_VECTOR_SUBPARTS (arg1_type) - 1;
+ arg2 = fold_build2_loc (loc, MINUS_EXPR, TREE_TYPE (arg2),
+ build_int_cstu (TREE_TYPE (arg2), last_elem),
+ arg2);
+ }
+
/* If we can use the VSX xxpermdi instruction, use that for extract. */
mode = TYPE_MODE (arg1_type);
if ((mode == V2DFmode || mode == V2DImode) && VECTOR_MEM_VSX_P (mode)
@@ -3636,6 +4315,14 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
if (call)
return build_call_expr (call, 2, arg1, arg2);
}
+ else if (mode == V1TImode && VECTOR_MEM_VSX_P (mode)
+ && TREE_CODE (arg2) == INTEGER_CST
+ && TREE_INT_CST_HIGH (arg2) == 0
+ && TREE_INT_CST_LOW (arg2) == 0)
+ {
+ tree call = rs6000_builtin_decls[VSX_BUILTIN_VEC_EXT_V1TI];
+ return build_call_expr (call, 2, arg1, arg2);
+ }
/* Build *(((arg1_inner_type*)&(vector type){arg1})+arg2). */
arg1_inner_type = TREE_TYPE (arg1_type);
@@ -3666,7 +4353,7 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
return stmt;
}
- /* For now use pointer tricks to do the insertation, unless we are on VSX
+ /* For now use pointer tricks to do the insertion, unless we are on VSX
inserting a double to a constant offset.. */
if (fcode == ALTIVEC_BUILTIN_VEC_INSERT)
{
@@ -3696,6 +4383,17 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
if (!INTEGRAL_TYPE_P (TREE_TYPE (arg2)))
goto bad;
+ /* If we are targeting little-endian, but -maltivec=be has been
+ specified to override the element order, adjust the element
+ number accordingly. */
+ if (!BYTES_BIG_ENDIAN && rs6000_altivec_element_order == 2)
+ {
+ unsigned int last_elem = TYPE_VECTOR_SUBPARTS (arg1_type) - 1;
+ arg2 = fold_build2_loc (loc, MINUS_EXPR, TREE_TYPE (arg2),
+ build_int_cstu (TREE_TYPE (arg2), last_elem),
+ arg2);
+ }
+
/* If we can use the VSX xxpermdi instruction, use that for insert. */
mode = TYPE_MODE (arg1_type);
if ((mode == V2DFmode || mode == V2DImode) && VECTOR_UNIT_VSX_P (mode)
@@ -3715,6 +4413,17 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
if (call)
return build_call_expr (call, 3, arg1, arg0, arg2);
}
+ else if (mode == V1TImode && VECTOR_UNIT_VSX_P (mode)
+ && TREE_CODE (arg2) == INTEGER_CST
+ && TREE_INT_CST_HIGH (arg2) == 0
+ && TREE_INT_CST_LOW (arg2) == 0)
+ {
+ tree call = rs6000_builtin_decls[VSX_BUILTIN_VEC_SET_V1TI];
+
+ /* Note, __builtin_vec_insert_<xxx> has vector and scalar types
+ reversed. */
+ return build_call_expr (call, 3, arg1, arg0, arg2);
+ }
/* Build *(((arg1_inner_type*)&(vector type){arg1})+arg2) = arg0. */
arg1_inner_type = TREE_TYPE (arg1_type);
@@ -3824,7 +4533,8 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
&& (desc->op2 == RS6000_BTI_NOT_OPAQUE
|| rs6000_builtin_type_compatible (types[1], desc->op2))
&& (desc->op3 == RS6000_BTI_NOT_OPAQUE
- || rs6000_builtin_type_compatible (types[2], desc->op3)))
+ || rs6000_builtin_type_compatible (types[2], desc->op3))
+ && rs6000_builtin_decls[desc->overloaded_code] != NULL_TREE)
return altivec_build_resolved_builtin (args, n, desc);
bad:
diff --git a/gcc-4.8/gcc/config/rs6000/rs6000-cpus.def b/gcc-4.8/gcc/config/rs6000/rs6000-cpus.def
index 3f17c6f23..089c98d72 100644
--- a/gcc-4.8/gcc/config/rs6000/rs6000-cpus.def
+++ b/gcc-4.8/gcc/config/rs6000/rs6000-cpus.def
@@ -28,7 +28,7 @@
ALTIVEC, since in general it isn't a win on power6. In ISA 2.04, fsel,
fre, fsqrt, etc. were no longer documented as optional. Group masks by
server and embedded. */
-#define ISA_2_5_MASKS_EMBEDDED (ISA_2_2_MASKS \
+#define ISA_2_5_MASKS_EMBEDDED (ISA_2_4_MASKS \
| OPTION_MASK_CMPB \
| OPTION_MASK_RECIP_PRECISION \
| OPTION_MASK_PPC_GFXOPT \
@@ -38,12 +38,24 @@
/* For ISA 2.06, don't add ISEL, since in general it isn't a win, but
altivec is a win so enable it. */
+ /* OPTION_MASK_VSX_TIMODE should be set, but disable it for now until
+ PR 58587 is fixed. */
#define ISA_2_6_MASKS_EMBEDDED (ISA_2_5_MASKS_EMBEDDED | OPTION_MASK_POPCNTD)
#define ISA_2_6_MASKS_SERVER (ISA_2_5_MASKS_SERVER \
| OPTION_MASK_POPCNTD \
| OPTION_MASK_ALTIVEC \
| OPTION_MASK_VSX)
+/* For now, don't provide an embedded version of ISA 2.07. */
+#define ISA_2_7_MASKS_SERVER (ISA_2_6_MASKS_SERVER \
+ | OPTION_MASK_P8_FUSION \
+ | OPTION_MASK_P8_VECTOR \
+ | OPTION_MASK_CRYPTO \
+ | OPTION_MASK_DIRECT_MOVE \
+ | OPTION_MASK_HTM \
+ | OPTION_MASK_QUAD_MEMORY \
+ | OPTION_MASK_QUAD_MEMORY_ATOMIC)
+
#define POWERPC_7400_MASK (OPTION_MASK_PPC_GFXOPT | OPTION_MASK_ALTIVEC)
/* Deal with ports that do not have -mstrict-align. */
@@ -60,23 +72,30 @@
/* Mask of all options to set the default isa flags based on -mcpu=<xxx>. */
#define POWERPC_MASKS (OPTION_MASK_ALTIVEC \
| OPTION_MASK_CMPB \
+ | OPTION_MASK_CRYPTO \
| OPTION_MASK_DFP \
+ | OPTION_MASK_DIRECT_MOVE \
| OPTION_MASK_DLMZB \
| OPTION_MASK_FPRND \
+ | OPTION_MASK_HTM \
| OPTION_MASK_ISEL \
| OPTION_MASK_MFCRF \
| OPTION_MASK_MFPGPR \
| OPTION_MASK_MULHW \
| OPTION_MASK_NO_UPDATE \
+ | OPTION_MASK_P8_FUSION \
+ | OPTION_MASK_P8_VECTOR \
| OPTION_MASK_POPCNTB \
| OPTION_MASK_POPCNTD \
| OPTION_MASK_POWERPC64 \
| OPTION_MASK_PPC_GFXOPT \
| OPTION_MASK_PPC_GPOPT \
+ | OPTION_MASK_QUAD_MEMORY \
| OPTION_MASK_RECIP_PRECISION \
| OPTION_MASK_SOFT_FLOAT \
| OPTION_MASK_STRICT_ALIGN_OPTIONAL \
- | OPTION_MASK_VSX)
+ | OPTION_MASK_VSX \
+ | OPTION_MASK_VSX_TIMODE)
#endif
@@ -166,10 +185,7 @@ RS6000_CPU ("power7", PROCESSOR_POWER7, /* Don't add MASK_ISEL by default */
POWERPC_7400_MASK | MASK_POWERPC64 | MASK_PPC_GPOPT | MASK_MFCRF
| MASK_POPCNTB | MASK_FPRND | MASK_CMPB | MASK_DFP | MASK_POPCNTD
| MASK_VSX | MASK_RECIP_PRECISION)
-RS6000_CPU ("power8", PROCESSOR_POWER7, /* Don't add MASK_ISEL by default */
- POWERPC_7400_MASK | MASK_POWERPC64 | MASK_PPC_GPOPT | MASK_MFCRF
- | MASK_POPCNTB | MASK_FPRND | MASK_CMPB | MASK_DFP | MASK_POPCNTD
- | MASK_VSX | MASK_RECIP_PRECISION)
+RS6000_CPU ("power8", PROCESSOR_POWER8, MASK_POWERPC64 | ISA_2_7_MASKS_SERVER)
RS6000_CPU ("powerpc", PROCESSOR_POWERPC, 0)
RS6000_CPU ("powerpc64", PROCESSOR_POWERPC64, MASK_PPC_GFXOPT | MASK_POWERPC64)
RS6000_CPU ("rs64", PROCESSOR_RS64A, MASK_PPC_GFXOPT | MASK_POWERPC64)
diff --git a/gcc-4.8/gcc/config/rs6000/rs6000-modes.def b/gcc-4.8/gcc/config/rs6000/rs6000-modes.def
index bc18f8a16..7062a22f2 100644
--- a/gcc-4.8/gcc/config/rs6000/rs6000-modes.def
+++ b/gcc-4.8/gcc/config/rs6000/rs6000-modes.def
@@ -38,6 +38,12 @@ VECTOR_MODES (INT, 8); /* V8QI V4HI V2SI */
VECTOR_MODES (INT, 16); /* V16QI V8HI V4SI V2DI */
VECTOR_MODES (INT, 32); /* V32QI V16HI V8SI V4DI */
VECTOR_MODE (INT, DI, 1);
+VECTOR_MODE (INT, TI, 1);
VECTOR_MODES (FLOAT, 8); /* V4HF V2SF */
VECTOR_MODES (FLOAT, 16); /* V8HF V4SF V2DF */
VECTOR_MODES (FLOAT, 32); /* V16HF V8SF V4DF */
+
+/* Replacement for TImode that only is allowed in GPRs. We also use PTImode
+ for quad memory atomic operations to force getting an even/odd register
+ combination. */
+PARTIAL_INT_MODE (TI);
diff --git a/gcc-4.8/gcc/config/rs6000/rs6000-opts.h b/gcc-4.8/gcc/config/rs6000/rs6000-opts.h
index fc843fd19..52fb58965 100644
--- a/gcc-4.8/gcc/config/rs6000/rs6000-opts.h
+++ b/gcc-4.8/gcc/config/rs6000/rs6000-opts.h
@@ -59,7 +59,8 @@ enum processor_type
PROCESSOR_POWER7,
PROCESSOR_CELL,
PROCESSOR_PPCA2,
- PROCESSOR_TITAN
+ PROCESSOR_TITAN,
+ PROCESSOR_POWER8
};
/* FP processor type. */
@@ -100,7 +101,8 @@ enum group_termination
/* Enumeration to give which calling sequence to use. */
enum rs6000_abi {
ABI_NONE,
- ABI_AIX, /* IBM's AIX */
+ ABI_AIX, /* IBM's AIX, or Linux ELFv1 */
+ ABI_ELFv2, /* Linux ELFv2 ABI */
ABI_V4, /* System V.4/eabi */
ABI_DARWIN /* Apple's Darwin (OS X kernel) */
};
@@ -131,11 +133,14 @@ enum rs6000_cmodel {
CMODEL_LARGE
};
-/* Describe which vector unit to use for a given machine mode. */
+/* Describe which vector unit to use for a given machine mode. The
+ VECTOR_MEM_* and VECTOR_UNIT_* macros assume that Altivec, VSX, and
+ P8_VECTOR are contiguous. */
enum rs6000_vector {
VECTOR_NONE, /* Type is not a vector or not supported */
VECTOR_ALTIVEC, /* Use altivec for vector processing */
VECTOR_VSX, /* Use VSX for vector processing */
+ VECTOR_P8_VECTOR, /* Use ISA 2.07 VSX for vector processing */
VECTOR_PAIRED, /* Use paired floating point for vectors */
VECTOR_SPE, /* Use SPE for vector processing */
VECTOR_OTHER /* Some other vector unit */
diff --git a/gcc-4.8/gcc/config/rs6000/rs6000-protos.h b/gcc-4.8/gcc/config/rs6000/rs6000-protos.h
index d9bcf1a41..71d5d0a73 100644
--- a/gcc-4.8/gcc/config/rs6000/rs6000-protos.h
+++ b/gcc-4.8/gcc/config/rs6000/rs6000-protos.h
@@ -50,12 +50,19 @@ extern rtx rs6000_got_register (rtx);
extern rtx find_addr_reg (rtx);
extern rtx gen_easy_altivec_constant (rtx);
extern const char *output_vec_const_move (rtx *);
+extern const char *rs6000_output_move_128bit (rtx *);
+extern bool rs6000_move_128bit_ok_p (rtx []);
+extern bool rs6000_split_128bit_ok_p (rtx []);
extern void rs6000_expand_vector_init (rtx, rtx);
extern void paired_expand_vector_init (rtx, rtx);
extern void rs6000_expand_vector_set (rtx, rtx, int);
extern void rs6000_expand_vector_extract (rtx, rtx, int);
extern bool altivec_expand_vec_perm_const (rtx op[4]);
+extern void altivec_expand_vec_perm_le (rtx op[4]);
extern bool rs6000_expand_vec_perm_const (rtx op[4]);
+extern void altivec_expand_lvx_be (rtx, rtx, enum machine_mode, unsigned);
+extern void altivec_expand_stvx_be (rtx, rtx, enum machine_mode, unsigned);
+extern void altivec_expand_stvex_be (rtx, rtx, enum machine_mode, unsigned);
extern void rs6000_expand_extract_even (rtx, rtx, rtx);
extern void rs6000_expand_interleave (rtx, rtx, rtx, bool);
extern void build_mask64_2_operands (rtx, rtx *);
@@ -70,6 +77,11 @@ extern int insvdi_rshift_rlwimi_p (rtx, rtx, rtx);
extern int registers_ok_for_quad_peep (rtx, rtx);
extern int mems_ok_for_quad_peep (rtx, rtx);
extern bool gpr_or_gpr_p (rtx, rtx);
+extern bool direct_move_p (rtx, rtx);
+extern bool quad_load_store_p (rtx, rtx);
+extern bool fusion_gpr_load_p (rtx *, bool);
+extern void expand_fusion_gpr_load (rtx *);
+extern const char *emit_fusion_gpr_load (rtx *);
extern enum reg_class (*rs6000_preferred_reload_class_ptr) (rtx,
enum reg_class);
extern enum reg_class (*rs6000_secondary_reload_class_ptr) (enum reg_class,
@@ -116,6 +128,7 @@ extern rtx rs6000_longcall_ref (rtx);
extern void rs6000_fatal_bad_address (rtx);
extern rtx create_TOC_reference (rtx, rtx);
extern void rs6000_split_multireg_move (rtx, rtx);
+extern void rs6000_emit_le_vsx_move (rtx, rtx, enum machine_mode);
extern void rs6000_emit_move (rtx, rtx, enum machine_mode);
extern rtx rs6000_secondary_memory_needed_rtx (enum machine_mode);
extern rtx (*rs6000_legitimize_reload_address_ptr) (rtx, enum machine_mode,
@@ -135,9 +148,11 @@ extern rtx rs6000_address_for_fpconvert (rtx);
extern rtx rs6000_address_for_altivec (rtx);
extern rtx rs6000_allocate_stack_temp (enum machine_mode, bool, bool);
extern int rs6000_loop_align (rtx);
+extern void rs6000_split_logical (rtx [], enum rtx_code, bool, bool, bool, rtx);
#endif /* RTX_CODE */
#ifdef TREE_CODE
+extern unsigned int rs6000_data_alignment (tree, unsigned int, enum data_align);
extern unsigned int rs6000_special_round_type_align (tree, unsigned int,
unsigned int);
extern unsigned int darwin_rs6000_special_round_type_align (tree, unsigned int,
@@ -146,6 +161,7 @@ extern tree altivec_resolve_overloaded_builtin (location_t, tree, void *);
extern rtx rs6000_libcall_value (enum machine_mode);
extern rtx rs6000_va_arg (tree, tree);
extern int function_ok_for_sibcall (tree);
+extern int rs6000_reg_parm_stack_space (tree);
extern void rs6000_elf_declare_function_name (FILE *, const char *, tree);
extern bool rs6000_elf_in_small_data_p (const_tree);
#ifdef ARGS_SIZE_RTX
@@ -170,7 +186,8 @@ extern unsigned int rs6000_dbx_register_number (unsigned int);
extern void rs6000_emit_epilogue (int);
extern void rs6000_emit_eh_reg_restore (rtx, rtx);
extern const char * output_isel (rtx *);
-extern void rs6000_call_indirect_aix (rtx, rtx, rtx);
+extern void rs6000_call_aix (rtx, rtx, rtx, rtx);
+extern void rs6000_sibcall_aix (rtx, rtx, rtx, rtx);
extern void rs6000_aix_asm_output_dwarf_table_ref (char *);
extern void get_ppc476_thunk_name (char name[32]);
extern bool rs6000_overloaded_builtin_p (enum rs6000_builtins);
diff --git a/gcc-4.8/gcc/config/rs6000/rs6000.c b/gcc-4.8/gcc/config/rs6000/rs6000.c
index f8579fd98..9cea1f112 100644
--- a/gcc-4.8/gcc/config/rs6000/rs6000.c
+++ b/gcc-4.8/gcc/config/rs6000/rs6000.c
@@ -1,5 +1,5 @@
/* Subroutines used for code generation on IBM RS/6000.
- Copyright (C) 1991-2013 Free Software Foundation, Inc.
+ Copyright (C) 1991-2014 Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
This file is part of GCC.
@@ -56,6 +56,7 @@
#include "intl.h"
#include "params.h"
#include "tm-constrs.h"
+#include "ira.h"
#include "opts.h"
#include "tree-vectorizer.h"
#include "dumpfile.h"
@@ -96,6 +97,7 @@ typedef struct rs6000_stack {
int spe_gp_save_offset; /* offset to save spe 64-bit gprs */
int varargs_save_offset; /* offset to save the varargs registers */
int ehrd_offset; /* offset to EH return data */
+ int ehcr_offset; /* offset to EH CR field data */
int reg_size; /* register size (4 or 8) */
HOST_WIDE_INT vars_size; /* variable save area size */
int parm_size; /* outgoing parameter size */
@@ -139,6 +141,8 @@ typedef struct GTY(()) machine_function
64-bits wide and is allocated early enough so that the offset
does not overflow the 16-bit load/store offset field. */
rtx sdmode_stack_slot;
+ /* Flag if r2 setup is needed with ELFv2 ABI. */
+ bool r2_setup_needed;
} machine_function;
/* Support targetm.vectorize.builtin_mask_for_load. */
@@ -189,9 +193,6 @@ unsigned char rs6000_hard_regno_nregs[NUM_MACHINE_MODES][FIRST_PSEUDO_REGISTER];
/* Map register number to register class. */
enum reg_class rs6000_regno_regclass[FIRST_PSEUDO_REGISTER];
-/* Reload functions based on the type and the vector unit. */
-static enum insn_code rs6000_vector_reload[NUM_MACHINE_MODES][2];
-
static int dbg_cost_ctrl;
/* Built in types. */
@@ -289,6 +290,105 @@ static struct
don't link in rs6000-c.c, so we can't call it directly. */
void (*rs6000_target_modify_macros_ptr) (bool, HOST_WIDE_INT, HOST_WIDE_INT);
+/* Simplfy register classes into simpler classifications. We assume
+ GPR_REG_TYPE - FPR_REG_TYPE are ordered so that we can use a simple range
+ check for standard register classes (gpr/floating/altivec/vsx) and
+ floating/vector classes (float/altivec/vsx). */
+
+enum rs6000_reg_type {
+ NO_REG_TYPE,
+ PSEUDO_REG_TYPE,
+ GPR_REG_TYPE,
+ VSX_REG_TYPE,
+ ALTIVEC_REG_TYPE,
+ FPR_REG_TYPE,
+ SPR_REG_TYPE,
+ CR_REG_TYPE,
+ SPE_ACC_TYPE,
+ SPEFSCR_REG_TYPE
+};
+
+/* Map register class to register type. */
+static enum rs6000_reg_type reg_class_to_reg_type[N_REG_CLASSES];
+
+/* First/last register type for the 'normal' register types (i.e. general
+ purpose, floating point, altivec, and VSX registers). */
+#define IS_STD_REG_TYPE(RTYPE) IN_RANGE(RTYPE, GPR_REG_TYPE, FPR_REG_TYPE)
+
+#define IS_FP_VECT_REG_TYPE(RTYPE) IN_RANGE(RTYPE, VSX_REG_TYPE, FPR_REG_TYPE)
+
+
+/* Register classes we care about in secondary reload or go if legitimate
+ address. We only need to worry about GPR, FPR, and Altivec registers here,
+ along an ANY field that is the OR of the 3 register classes. */
+
+enum rs6000_reload_reg_type {
+ RELOAD_REG_GPR, /* General purpose registers. */
+ RELOAD_REG_FPR, /* Traditional floating point regs. */
+ RELOAD_REG_VMX, /* Altivec (VMX) registers. */
+ RELOAD_REG_ANY, /* OR of GPR, FPR, Altivec masks. */
+ N_RELOAD_REG
+};
+
+/* For setting up register classes, loop through the 3 register classes mapping
+ into real registers, and skip the ANY class, which is just an OR of the
+ bits. */
+#define FIRST_RELOAD_REG_CLASS RELOAD_REG_GPR
+#define LAST_RELOAD_REG_CLASS RELOAD_REG_VMX
+
+/* Map reload register type to a register in the register class. */
+struct reload_reg_map_type {
+ const char *name; /* Register class name. */
+ int reg; /* Register in the register class. */
+};
+
+static const struct reload_reg_map_type reload_reg_map[N_RELOAD_REG] = {
+ { "Gpr", FIRST_GPR_REGNO }, /* RELOAD_REG_GPR. */
+ { "Fpr", FIRST_FPR_REGNO }, /* RELOAD_REG_FPR. */
+ { "VMX", FIRST_ALTIVEC_REGNO }, /* RELOAD_REG_VMX. */
+ { "Any", -1 }, /* RELOAD_REG_ANY. */
+};
+
+/* Mask bits for each register class, indexed per mode. Historically the
+ compiler has been more restrictive which types can do PRE_MODIFY instead of
+ PRE_INC and PRE_DEC, so keep track of sepaate bits for these two. */
+typedef unsigned char addr_mask_type;
+
+#define RELOAD_REG_VALID 0x01 /* Mode valid in register.. */
+#define RELOAD_REG_MULTIPLE 0x02 /* Mode takes multiple registers. */
+#define RELOAD_REG_INDEXED 0x04 /* Reg+reg addressing. */
+#define RELOAD_REG_OFFSET 0x08 /* Reg+offset addressing. */
+#define RELOAD_REG_PRE_INCDEC 0x10 /* PRE_INC/PRE_DEC valid. */
+#define RELOAD_REG_PRE_MODIFY 0x20 /* PRE_MODIFY valid. */
+
+/* Register type masks based on the type, of valid addressing modes. */
+struct rs6000_reg_addr {
+ enum insn_code reload_load; /* INSN to reload for loading. */
+ enum insn_code reload_store; /* INSN to reload for storing. */
+ enum insn_code reload_fpr_gpr; /* INSN to move from FPR to GPR. */
+ enum insn_code reload_gpr_vsx; /* INSN to move from GPR to VSX. */
+ enum insn_code reload_vsx_gpr; /* INSN to move from VSX to GPR. */
+ addr_mask_type addr_mask[(int)N_RELOAD_REG]; /* Valid address masks. */
+};
+
+static struct rs6000_reg_addr reg_addr[NUM_MACHINE_MODES];
+
+/* Helper function to say whether a mode supports PRE_INC or PRE_DEC. */
+static inline bool
+mode_supports_pre_incdec_p (enum machine_mode mode)
+{
+ return ((reg_addr[mode].addr_mask[RELOAD_REG_ANY] & RELOAD_REG_PRE_INCDEC)
+ != 0);
+}
+
+/* Helper function to say whether a mode supports PRE_MODIFY. */
+static inline bool
+mode_supports_pre_modify_p (enum machine_mode mode)
+{
+ return ((reg_addr[mode].addr_mask[RELOAD_REG_ANY] & RELOAD_REG_PRE_MODIFY)
+ != 0);
+}
+
/* Target cpu costs. */
@@ -828,6 +928,25 @@ struct processor_costs power7_cost = {
12, /* prefetch streams */
};
+/* Instruction costs on POWER8 processors. */
+static const
+struct processor_costs power8_cost = {
+ COSTS_N_INSNS (3), /* mulsi */
+ COSTS_N_INSNS (3), /* mulsi_const */
+ COSTS_N_INSNS (3), /* mulsi_const9 */
+ COSTS_N_INSNS (3), /* muldi */
+ COSTS_N_INSNS (19), /* divsi */
+ COSTS_N_INSNS (35), /* divdi */
+ COSTS_N_INSNS (3), /* fp */
+ COSTS_N_INSNS (3), /* dmul */
+ COSTS_N_INSNS (14), /* sdiv */
+ COSTS_N_INSNS (17), /* ddiv */
+ 128, /* cache line size */
+ 32, /* l1 cache */
+ 256, /* l2 cache */
+ 12, /* prefetch streams */
+};
+
/* Instruction costs on POWER A2 processors. */
static const
struct processor_costs ppca2_cost = {
@@ -855,6 +974,7 @@ struct processor_costs ppca2_cost = {
#undef RS6000_BUILTIN_A
#undef RS6000_BUILTIN_D
#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
#undef RS6000_BUILTIN_P
#undef RS6000_BUILTIN_Q
#undef RS6000_BUILTIN_S
@@ -878,6 +998,9 @@ struct processor_costs ppca2_cost = {
#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE) \
{ NAME, ICODE, MASK, ATTR },
+#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE) \
+ { NAME, ICODE, MASK, ATTR },
+
#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE) \
{ NAME, ICODE, MASK, ATTR },
@@ -908,6 +1031,7 @@ static const struct rs6000_builtin_info_type rs6000_builtin_info[] =
#undef RS6000_BUILTIN_A
#undef RS6000_BUILTIN_D
#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
#undef RS6000_BUILTIN_P
#undef RS6000_BUILTIN_Q
#undef RS6000_BUILTIN_S
@@ -948,6 +1072,7 @@ static void rs6000_common_init_builtins (void);
static void paired_init_builtins (void);
static rtx paired_expand_predicate_builtin (enum insn_code, tree, rtx);
static void spe_init_builtins (void);
+static void htm_init_builtins (void);
static rtx spe_expand_predicate_builtin (enum insn_code, tree, rtx);
static rtx spe_expand_evsel_builtin (enum insn_code, tree, rtx);
static int rs6000_emit_int_cmove (rtx, rtx, rtx, rtx);
@@ -1020,6 +1145,13 @@ static void rs6000_print_isa_options (FILE *, int, const char *,
static void rs6000_print_builtin_options (FILE *, int, const char *,
HOST_WIDE_INT);
+static enum rs6000_reg_type register_to_reg_type (rtx, bool *);
+static bool rs6000_secondary_reload_move (enum rs6000_reg_type,
+ enum rs6000_reg_type,
+ enum machine_mode,
+ secondary_reload_info *,
+ bool);
+
/* Hash table stuff for keeping track of TOC entries. */
struct GTY(()) toc_hash_struct
@@ -1068,7 +1200,9 @@ char rs6000_reg_names[][8] =
/* SPE registers. */
"spe_acc", "spefscr",
/* Soft frame pointer. */
- "sfp"
+ "sfp",
+ /* HTM SPR registers. */
+ "tfhar", "tfiar", "texasr"
};
#ifdef TARGET_REGNAMES
@@ -1094,7 +1228,9 @@ static const char alt_reg_names[][8] =
/* SPE registers. */
"spe_acc", "spefscr",
/* Soft frame pointer. */
- "sfp"
+ "sfp",
+ /* HTM SPR registers. */
+ "tfhar", "tfiar", "texasr"
};
#endif
@@ -1316,6 +1452,9 @@ static const struct attribute_spec rs6000_attribute_table[] =
#undef TARGET_RETURN_IN_MEMORY
#define TARGET_RETURN_IN_MEMORY rs6000_return_in_memory
+#undef TARGET_RETURN_IN_MSB
+#define TARGET_RETURN_IN_MSB rs6000_return_in_msb
+
#undef TARGET_SETUP_INCOMING_VARARGS
#define TARGET_SETUP_INCOMING_VARARGS setup_incoming_varargs
@@ -1425,6 +1564,9 @@ static const struct attribute_spec rs6000_attribute_table[] =
#undef TARGET_MODE_DEPENDENT_ADDRESS_P
#define TARGET_MODE_DEPENDENT_ADDRESS_P rs6000_mode_dependent_address_p
+#undef TARGET_LRA_P
+#define TARGET_LRA_P rs6000_lra_p
+
#undef TARGET_CAN_ELIMINATE
#define TARGET_CAN_ELIMINATE rs6000_can_eliminate
@@ -1513,8 +1655,9 @@ rs6000_hard_regno_nregs_internal (int regno, enum machine_mode mode)
{
unsigned HOST_WIDE_INT reg_size;
+ /* TF/TD modes are special in that they always take 2 registers. */
if (FP_REGNO_P (regno))
- reg_size = (VECTOR_MEM_VSX_P (mode)
+ reg_size = ((VECTOR_MEM_VSX_P (mode) && mode != TDmode && mode != TFmode)
? UNITS_PER_VSX_WORD
: UNITS_PER_FP_WORD);
@@ -1546,17 +1689,40 @@ rs6000_hard_regno_mode_ok (int regno, enum machine_mode mode)
{
int last_regno = regno + rs6000_hard_regno_nregs[mode][regno] - 1;
+ /* PTImode can only go in GPRs. Quad word memory operations require even/odd
+ register combinations, and use PTImode where we need to deal with quad
+ word memory operations. Don't allow quad words in the argument or frame
+ pointer registers, just registers 0..31. */
+ if (mode == PTImode)
+ return (IN_RANGE (regno, FIRST_GPR_REGNO, LAST_GPR_REGNO)
+ && IN_RANGE (last_regno, FIRST_GPR_REGNO, LAST_GPR_REGNO)
+ && ((regno & 1) == 0));
+
/* VSX registers that overlap the FPR registers are larger than for non-VSX
implementations. Don't allow an item to be split between a FP register
- and an Altivec register. */
- if (VECTOR_MEM_VSX_P (mode))
+ and an Altivec register. Allow TImode in all VSX registers if the user
+ asked for it. */
+ if (TARGET_VSX && VSX_REGNO_P (regno)
+ && (VECTOR_MEM_VSX_P (mode)
+ || (TARGET_VSX_SCALAR_FLOAT && mode == SFmode)
+ || (TARGET_VSX_SCALAR_DOUBLE && (mode == DFmode || mode == DImode))
+ || (TARGET_VSX_TIMODE && mode == TImode)
+ || (TARGET_VADDUQM && mode == V1TImode)))
{
if (FP_REGNO_P (regno))
return FP_REGNO_P (last_regno);
if (ALTIVEC_REGNO_P (regno))
+ {
+ if (mode == SFmode && !TARGET_UPPER_REGS_SF)
+ return 0;
+
+ if ((mode == DFmode || mode == DImode) && !TARGET_UPPER_REGS_DF)
+ return 0;
+
return ALTIVEC_REGNO_P (last_regno);
}
+ }
/* The GPRs can hold any mode, but values bigger than one register
cannot go past R31. */
@@ -1564,8 +1730,7 @@ rs6000_hard_regno_mode_ok (int regno, enum machine_mode mode)
return INT_REGNO_P (last_regno);
/* The float registers (except for VSX vector modes) can only hold floating
- modes and DImode. This excludes the 32-bit decimal float mode for
- now. */
+ modes and DImode. */
if (FP_REGNO_P (regno))
{
if (SCALAR_FLOAT_MODE_P (mode)
@@ -1593,15 +1758,15 @@ rs6000_hard_regno_mode_ok (int regno, enum machine_mode mode)
/* AltiVec only in AldyVec registers. */
if (ALTIVEC_REGNO_P (regno))
- return VECTOR_MEM_ALTIVEC_OR_VSX_P (mode);
+ return (VECTOR_MEM_ALTIVEC_OR_VSX_P (mode)
+ || mode == V1TImode);
/* ...but GPRs can hold SIMD data on the SPE in one register. */
if (SPE_SIMD_REGNO_P (regno) && TARGET_SPE && SPE_VECTOR_MODE (mode))
return 1;
- /* We cannot put TImode anywhere except general register and it must be able
- to fit within the register set. In the future, allow TImode in the
- Altivec or VSX registers. */
+ /* We cannot put non-VSX TImode or PTImode anywhere except general register
+ and it must be able to fit within the register set. */
return GET_MODE_SIZE (mode) <= UNITS_PER_WORD;
}
@@ -1674,10 +1839,77 @@ rs6000_debug_reg_print (int first_regno, int last_regno, const char *reg_name)
comma = "";
}
+ len += fprintf (stderr, "%sreg-class = %s", comma,
+ reg_class_names[(int)rs6000_regno_regclass[r]]);
+ comma = ", ";
+
+ if (len > 70)
+ {
+ fprintf (stderr, ",\n\t");
+ comma = "";
+ }
+
fprintf (stderr, "%sregno = %d\n", comma, r);
}
}
+static const char *
+rs6000_debug_vector_unit (enum rs6000_vector v)
+{
+ const char *ret;
+
+ switch (v)
+ {
+ case VECTOR_NONE: ret = "none"; break;
+ case VECTOR_ALTIVEC: ret = "altivec"; break;
+ case VECTOR_VSX: ret = "vsx"; break;
+ case VECTOR_P8_VECTOR: ret = "p8_vector"; break;
+ case VECTOR_PAIRED: ret = "paired"; break;
+ case VECTOR_SPE: ret = "spe"; break;
+ case VECTOR_OTHER: ret = "other"; break;
+ default: ret = "unknown"; break;
+ }
+
+ return ret;
+}
+
+/* Print the address masks in a human readble fashion. */
+DEBUG_FUNCTION void
+rs6000_debug_print_mode (ssize_t m)
+{
+ ssize_t rc;
+
+ fprintf (stderr, "Mode: %-5s", GET_MODE_NAME (m));
+ for (rc = 0; rc < N_RELOAD_REG; rc++)
+ {
+ addr_mask_type mask = reg_addr[m].addr_mask[rc];
+ fprintf (stderr,
+ " %s: %c%c%c%c%c%c",
+ reload_reg_map[rc].name,
+ (mask & RELOAD_REG_VALID) != 0 ? 'v' : ' ',
+ (mask & RELOAD_REG_MULTIPLE) != 0 ? 'm' : ' ',
+ (mask & RELOAD_REG_INDEXED) != 0 ? 'i' : ' ',
+ (mask & RELOAD_REG_OFFSET) != 0 ? 'o' : ' ',
+ (mask & RELOAD_REG_PRE_INCDEC) != 0 ? '+' : ' ',
+ (mask & RELOAD_REG_PRE_MODIFY) != 0 ? '+' : ' ');
+ }
+
+ if (rs6000_vector_unit[m] != VECTOR_NONE
+ || rs6000_vector_mem[m] != VECTOR_NONE
+ || (reg_addr[m].reload_store != CODE_FOR_nothing)
+ || (reg_addr[m].reload_load != CODE_FOR_nothing))
+ {
+ fprintf (stderr,
+ " Vector-arith=%-10s Vector-mem=%-10s Reload=%c%c",
+ rs6000_debug_vector_unit (rs6000_vector_unit[m]),
+ rs6000_debug_vector_unit (rs6000_vector_mem[m]),
+ (reg_addr[m].reload_store != CODE_FOR_nothing) ? 's' : '*',
+ (reg_addr[m].reload_load != CODE_FOR_nothing) ? 'l' : '*');
+ }
+
+ fputs ("\n", stderr);
+}
+
#define DEBUG_FMT_ID "%-32s= "
#define DEBUG_FMT_D DEBUG_FMT_ID "%d\n"
#define DEBUG_FMT_WX DEBUG_FMT_ID "%#.12" HOST_WIDE_INT_PRINT "x: "
@@ -1690,6 +1922,7 @@ rs6000_debug_reg_global (void)
static const char *const tf[2] = { "false", "true" };
const char *nl = (const char *)0;
int m;
+ size_t m1, m2, v;
char costly_num[20];
char nop_num[20];
char flags_buffer[40];
@@ -1700,20 +1933,69 @@ rs6000_debug_reg_global (void)
const char *cmodel_str;
struct cl_target_option cl_opts;
- /* Map enum rs6000_vector to string. */
- static const char *rs6000_debug_vector_unit[] = {
- "none",
- "altivec",
- "vsx",
- "paired",
- "spe",
- "other"
+ /* Modes we want tieable information on. */
+ static const enum machine_mode print_tieable_modes[] = {
+ QImode,
+ HImode,
+ SImode,
+ DImode,
+ TImode,
+ PTImode,
+ SFmode,
+ DFmode,
+ TFmode,
+ SDmode,
+ DDmode,
+ TDmode,
+ V8QImode,
+ V4HImode,
+ V2SImode,
+ V16QImode,
+ V8HImode,
+ V4SImode,
+ V2DImode,
+ V1TImode,
+ V32QImode,
+ V16HImode,
+ V8SImode,
+ V4DImode,
+ V2TImode,
+ V2SFmode,
+ V4SFmode,
+ V2DFmode,
+ V8SFmode,
+ V4DFmode,
+ CCmode,
+ CCUNSmode,
+ CCEQmode,
+ };
+
+ /* Virtual regs we are interested in. */
+ const static struct {
+ int regno; /* register number. */
+ const char *name; /* register name. */
+ } virtual_regs[] = {
+ { STACK_POINTER_REGNUM, "stack pointer:" },
+ { TOC_REGNUM, "toc: " },
+ { STATIC_CHAIN_REGNUM, "static chain: " },
+ { RS6000_PIC_OFFSET_TABLE_REGNUM, "pic offset: " },
+ { HARD_FRAME_POINTER_REGNUM, "hard frame: " },
+ { ARG_POINTER_REGNUM, "arg pointer: " },
+ { FRAME_POINTER_REGNUM, "frame pointer:" },
+ { FIRST_PSEUDO_REGISTER, "first pseudo: " },
+ { FIRST_VIRTUAL_REGISTER, "first virtual:" },
+ { VIRTUAL_INCOMING_ARGS_REGNUM, "incoming_args:" },
+ { VIRTUAL_STACK_VARS_REGNUM, "stack_vars: " },
+ { VIRTUAL_STACK_DYNAMIC_REGNUM, "stack_dynamic:" },
+ { VIRTUAL_OUTGOING_ARGS_REGNUM, "outgoing_args:" },
+ { VIRTUAL_CFA_REGNUM, "cfa (frame): " },
+ { VIRTUAL_PREFERRED_STACK_BOUNDARY_REGNUM, "stack boundry:" },
+ { LAST_VIRTUAL_REGISTER, "last virtual: " },
};
- fprintf (stderr, "Register information: (last virtual reg = %d)\n",
- LAST_VIRTUAL_REGISTER);
- rs6000_debug_reg_print (0, 31, "gr");
- rs6000_debug_reg_print (32, 63, "fp");
+ fputs ("\nHard register information:\n", stderr);
+ rs6000_debug_reg_print (FIRST_GPR_REGNO, LAST_GPR_REGNO, "gr");
+ rs6000_debug_reg_print (FIRST_FPR_REGNO, LAST_FPR_REGNO, "fp");
rs6000_debug_reg_print (FIRST_ALTIVEC_REGNO,
LAST_ALTIVEC_REGNO,
"vs");
@@ -1726,6 +2008,10 @@ rs6000_debug_reg_global (void)
rs6000_debug_reg_print (SPE_ACC_REGNO, SPE_ACC_REGNO, "spe_a");
rs6000_debug_reg_print (SPEFSCR_REGNO, SPEFSCR_REGNO, "spe_f");
+ fputs ("\nVirtual/stack/frame registers:\n", stderr);
+ for (v = 0; v < ARRAY_SIZE (virtual_regs); v++)
+ fprintf (stderr, "%s regno = %3d\n", virtual_regs[v].name, virtual_regs[v].regno);
+
fprintf (stderr,
"\n"
"d reg_class = %s\n"
@@ -1734,23 +2020,68 @@ rs6000_debug_reg_global (void)
"wa reg_class = %s\n"
"wd reg_class = %s\n"
"wf reg_class = %s\n"
- "ws reg_class = %s\n\n",
+ "wg reg_class = %s\n"
+ "wl reg_class = %s\n"
+ "wm reg_class = %s\n"
+ "wr reg_class = %s\n"
+ "ws reg_class = %s\n"
+ "wt reg_class = %s\n"
+ "wu reg_class = %s\n"
+ "wv reg_class = %s\n"
+ "ww reg_class = %s\n"
+ "wx reg_class = %s\n"
+ "wy reg_class = %s\n"
+ "wz reg_class = %s\n"
+ "\n",
reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_d]],
reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_f]],
reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_v]],
reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wa]],
reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wd]],
reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wf]],
- reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_ws]]);
-
+ reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wg]],
+ reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wl]],
+ reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wm]],
+ reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wr]],
+ reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_ws]],
+ reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wt]],
+ reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wu]],
+ reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wv]],
+ reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_ww]],
+ reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wx]],
+ reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wy]],
+ reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wz]]);
+
+ nl = "\n";
for (m = 0; m < NUM_MACHINE_MODES; ++m)
- if (rs6000_vector_unit[m] || rs6000_vector_mem[m])
+ rs6000_debug_print_mode (m);
+
+ fputs ("\n", stderr);
+
+ for (m1 = 0; m1 < ARRAY_SIZE (print_tieable_modes); m1++)
+ {
+ enum machine_mode mode1 = print_tieable_modes[m1];
+ bool first_time = true;
+
+ nl = (const char *)0;
+ for (m2 = 0; m2 < ARRAY_SIZE (print_tieable_modes); m2++)
+ {
+ enum machine_mode mode2 = print_tieable_modes[m2];
+ if (mode1 != mode2 && MODES_TIEABLE_P (mode1, mode2))
{
+ if (first_time)
+ {
+ fprintf (stderr, "Tieable modes %s:", GET_MODE_NAME (mode1));
nl = "\n";
- fprintf (stderr, "Vector mode: %-5s arithmetic: %-8s move: %-8s\n",
- GET_MODE_NAME (m),
- rs6000_debug_vector_unit[ rs6000_vector_unit[m] ],
- rs6000_debug_vector_unit[ rs6000_vector_mem[m] ]);
+ first_time = false;
+ }
+
+ fprintf (stderr, " %s", GET_MODE_NAME (mode2));
+ }
+ }
+
+ if (!first_time)
+ fputs ("\n", stderr);
}
if (nl)
@@ -1913,6 +2244,7 @@ rs6000_debug_reg_global (void)
{
case ABI_NONE: abi_str = "none"; break;
case ABI_AIX: abi_str = "aix"; break;
+ case ABI_ELFv2: abi_str = "ELFv2"; break;
case ABI_V4: abi_str = "V4"; break;
case ABI_DARWIN: abi_str = "darwin"; break;
default: abi_str = "unknown"; break;
@@ -1932,9 +2264,34 @@ rs6000_debug_reg_global (void)
if (rs6000_float_gprs)
fprintf (stderr, DEBUG_FMT_S, "float_gprs", "true");
+ fprintf (stderr, DEBUG_FMT_S, "fprs",
+ (TARGET_FPRS ? "true" : "false"));
+
+ fprintf (stderr, DEBUG_FMT_S, "single_float",
+ (TARGET_SINGLE_FLOAT ? "true" : "false"));
+
+ fprintf (stderr, DEBUG_FMT_S, "double_float",
+ (TARGET_DOUBLE_FLOAT ? "true" : "false"));
+
+ fprintf (stderr, DEBUG_FMT_S, "soft_float",
+ (TARGET_SOFT_FLOAT ? "true" : "false"));
+
+ fprintf (stderr, DEBUG_FMT_S, "e500_single",
+ (TARGET_E500_SINGLE ? "true" : "false"));
+
+ fprintf (stderr, DEBUG_FMT_S, "e500_double",
+ (TARGET_E500_DOUBLE ? "true" : "false"));
+
if (TARGET_LINK_STACK)
fprintf (stderr, DEBUG_FMT_S, "link_stack", "true");
+ if (targetm.lra_p ())
+ fprintf (stderr, DEBUG_FMT_S, "lra", "true");
+
+ if (TARGET_P8_FUSION)
+ fprintf (stderr, DEBUG_FMT_S, "p8 fusion",
+ (TARGET_P8_FUSION_SIGN) ? "zero+sign" : "zero");
+
fprintf (stderr, DEBUG_FMT_S, "plt-format",
TARGET_SECURE_PLT ? "secure" : "bss");
fprintf (stderr, DEBUG_FMT_S, "struct-return",
@@ -1954,11 +2311,106 @@ rs6000_debug_reg_global (void)
(int)RS6000_BUILTIN_COUNT);
}
+
+/* Update the addr mask bits in reg_addr to help secondary reload and go if
+ legitimate address support to figure out the appropriate addressing to
+ use. */
+
+static void
+rs6000_setup_reg_addr_masks (void)
+{
+ ssize_t rc, reg, m, nregs;
+ addr_mask_type any_addr_mask, addr_mask;
+
+ for (m = 0; m < NUM_MACHINE_MODES; ++m)
+ {
+ /* SDmode is special in that we want to access it only via REG+REG
+ addressing on power7 and above, since we want to use the LFIWZX and
+ STFIWZX instructions to load it. */
+ bool indexed_only_p = (m == SDmode && TARGET_NO_SDMODE_STACK);
+
+ any_addr_mask = 0;
+ for (rc = FIRST_RELOAD_REG_CLASS; rc <= LAST_RELOAD_REG_CLASS; rc++)
+ {
+ addr_mask = 0;
+ reg = reload_reg_map[rc].reg;
+
+ /* Can mode values go in the GPR/FPR/Altivec registers? */
+ if (reg >= 0 && rs6000_hard_regno_mode_ok_p[m][reg])
+ {
+ nregs = rs6000_hard_regno_nregs[m][reg];
+ addr_mask |= RELOAD_REG_VALID;
+
+ /* Indicate if the mode takes more than 1 physical register. If
+ it takes a single register, indicate it can do REG+REG
+ addressing. */
+ if (nregs > 1 || m == BLKmode)
+ addr_mask |= RELOAD_REG_MULTIPLE;
+ else
+ addr_mask |= RELOAD_REG_INDEXED;
+
+ /* Figure out if we can do PRE_INC, PRE_DEC, or PRE_MODIFY
+ addressing. Restrict addressing on SPE for 64-bit types
+ because of the SUBREG hackery used to address 64-bit floats in
+ '32-bit' GPRs. To simplify secondary reload, don't allow
+ update forms on scalar floating point types that can go in the
+ upper registers. */
+
+ if (TARGET_UPDATE
+ && (rc == RELOAD_REG_GPR || rc == RELOAD_REG_FPR)
+ && GET_MODE_SIZE (m) <= 8
+ && !VECTOR_MODE_P (m)
+ && !COMPLEX_MODE_P (m)
+ && !indexed_only_p
+ && !(TARGET_E500_DOUBLE && GET_MODE_SIZE (m) == 8)
+ && !(m == DFmode && TARGET_UPPER_REGS_DF)
+ && !(m == SFmode && TARGET_UPPER_REGS_SF))
+ {
+ addr_mask |= RELOAD_REG_PRE_INCDEC;
+
+ /* PRE_MODIFY is more restricted than PRE_INC/PRE_DEC in that
+ we don't allow PRE_MODIFY for some multi-register
+ operations. */
+ switch (m)
+ {
+ default:
+ addr_mask |= RELOAD_REG_PRE_MODIFY;
+ break;
+
+ case DImode:
+ if (TARGET_POWERPC64)
+ addr_mask |= RELOAD_REG_PRE_MODIFY;
+ break;
+
+ case DFmode:
+ case DDmode:
+ if (TARGET_DF_INSN)
+ addr_mask |= RELOAD_REG_PRE_MODIFY;
+ break;
+ }
+ }
+ }
+
+ /* GPR and FPR registers can do REG+OFFSET addressing, except
+ possibly for SDmode. */
+ if ((addr_mask != 0) && !indexed_only_p
+ && (rc == RELOAD_REG_GPR || rc == RELOAD_REG_FPR))
+ addr_mask |= RELOAD_REG_OFFSET;
+
+ reg_addr[m].addr_mask[rc] = addr_mask;
+ any_addr_mask |= addr_mask;
+ }
+
+ reg_addr[m].addr_mask[RELOAD_REG_ANY] = any_addr_mask;
+ }
+}
+
+
/* Initialize the various global tables that are based on register size. */
static void
rs6000_init_hard_regno_mode_ok (bool global_init_p)
{
- int r, m, c;
+ ssize_t r, m, c;
int align64;
int align32;
@@ -1987,20 +2439,54 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
rs6000_regno_regclass[VSCR_REGNO] = VRSAVE_REGS;
rs6000_regno_regclass[SPE_ACC_REGNO] = SPE_ACC_REGS;
rs6000_regno_regclass[SPEFSCR_REGNO] = SPEFSCR_REGS;
+ rs6000_regno_regclass[TFHAR_REGNO] = SPR_REGS;
+ rs6000_regno_regclass[TFIAR_REGNO] = SPR_REGS;
+ rs6000_regno_regclass[TEXASR_REGNO] = SPR_REGS;
rs6000_regno_regclass[ARG_POINTER_REGNUM] = BASE_REGS;
rs6000_regno_regclass[FRAME_POINTER_REGNUM] = BASE_REGS;
- /* Precalculate vector information, this must be set up before the
- rs6000_hard_regno_nregs_internal below. */
- for (m = 0; m < NUM_MACHINE_MODES; ++m)
+ /* Precalculate register class to simpler reload register class. We don't
+ need all of the register classes that are combinations of different
+ classes, just the simple ones that have constraint letters. */
+ for (c = 0; c < N_REG_CLASSES; c++)
+ reg_class_to_reg_type[c] = NO_REG_TYPE;
+
+ reg_class_to_reg_type[(int)GENERAL_REGS] = GPR_REG_TYPE;
+ reg_class_to_reg_type[(int)BASE_REGS] = GPR_REG_TYPE;
+ reg_class_to_reg_type[(int)VSX_REGS] = VSX_REG_TYPE;
+ reg_class_to_reg_type[(int)VRSAVE_REGS] = SPR_REG_TYPE;
+ reg_class_to_reg_type[(int)VSCR_REGS] = SPR_REG_TYPE;
+ reg_class_to_reg_type[(int)LINK_REGS] = SPR_REG_TYPE;
+ reg_class_to_reg_type[(int)CTR_REGS] = SPR_REG_TYPE;
+ reg_class_to_reg_type[(int)LINK_OR_CTR_REGS] = SPR_REG_TYPE;
+ reg_class_to_reg_type[(int)CR_REGS] = CR_REG_TYPE;
+ reg_class_to_reg_type[(int)CR0_REGS] = CR_REG_TYPE;
+ reg_class_to_reg_type[(int)SPE_ACC_REGS] = SPE_ACC_TYPE;
+ reg_class_to_reg_type[(int)SPEFSCR_REGS] = SPEFSCR_REG_TYPE;
+
+ if (TARGET_VSX)
{
- rs6000_vector_unit[m] = rs6000_vector_mem[m] = VECTOR_NONE;
- rs6000_vector_reload[m][0] = CODE_FOR_nothing;
- rs6000_vector_reload[m][1] = CODE_FOR_nothing;
+ reg_class_to_reg_type[(int)FLOAT_REGS] = VSX_REG_TYPE;
+ reg_class_to_reg_type[(int)ALTIVEC_REGS] = VSX_REG_TYPE;
}
+ else
+ {
+ reg_class_to_reg_type[(int)FLOAT_REGS] = FPR_REG_TYPE;
+ reg_class_to_reg_type[(int)ALTIVEC_REGS] = ALTIVEC_REG_TYPE;
+ }
+
+ /* Precalculate the valid memory formats as well as the vector information,
+ this must be set up before the rs6000_hard_regno_nregs_internal calls
+ below. */
+ gcc_assert ((int)VECTOR_NONE == 0);
+ memset ((void *) &rs6000_vector_unit[0], '\0', sizeof (rs6000_vector_unit));
+ memset ((void *) &rs6000_vector_mem[0], '\0', sizeof (rs6000_vector_unit));
+
+ gcc_assert ((int)CODE_FOR_nothing == 0);
+ memset ((void *) &reg_addr[0], '\0', sizeof (reg_addr));
- for (c = 0; c < (int)(int)RS6000_CONSTRAINT_MAX; c++)
- rs6000_constraints[c] = NO_REGS;
+ gcc_assert ((int)NO_REGS == 0);
+ memset ((void *) &rs6000_constraints[0], '\0', sizeof (rs6000_constraints));
/* The VSX hardware allows native alignment for vectors, but control whether the compiler
believes it can use native alignment or still uses 128-bit alignment. */
@@ -2062,13 +2548,19 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
}
}
- /* V2DImode, only allow under VSX, which can do V2DI insert/splat/extract.
- Altivec doesn't have 64-bit support. */
+ /* V2DImode, full mode depends on ISA 2.07 vector mode. Allow under VSX to
+ do insert/splat/extract. Altivec doesn't have 64-bit integer support. */
if (TARGET_VSX)
{
rs6000_vector_mem[V2DImode] = VECTOR_VSX;
- rs6000_vector_unit[V2DImode] = VECTOR_NONE;
+ rs6000_vector_unit[V2DImode]
+ = (TARGET_P8_VECTOR) ? VECTOR_P8_VECTOR : VECTOR_NONE;
rs6000_vector_align[V2DImode] = align64;
+
+ rs6000_vector_mem[V1TImode] = VECTOR_VSX;
+ rs6000_vector_unit[V1TImode]
+ = (TARGET_P8_VECTOR) ? VECTOR_P8_VECTOR : VECTOR_NONE;
+ rs6000_vector_align[V1TImode] = 128;
}
/* DFmode, see if we want to use the VSX unit. */
@@ -2076,14 +2568,48 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
{
rs6000_vector_unit[DFmode] = VECTOR_VSX;
rs6000_vector_mem[DFmode]
- = (TARGET_VSX_SCALAR_MEMORY ? VECTOR_VSX : VECTOR_NONE);
+ = (TARGET_UPPER_REGS_DF ? VECTOR_VSX : VECTOR_NONE);
rs6000_vector_align[DFmode] = align64;
}
+ /* Allow TImode in VSX register and set the VSX memory macros. */
+ if (TARGET_VSX && TARGET_VSX_TIMODE)
+ {
+ rs6000_vector_mem[TImode] = VECTOR_VSX;
+ rs6000_vector_align[TImode] = align64;
+ }
+
/* TODO add SPE and paired floating point vector support. */
/* Register class constraints for the constraints that depend on compile
- switches. */
+ switches. When the VSX code was added, different constraints were added
+ based on the type (DFmode, V2DFmode, V4SFmode). For the vector types, all
+ of the VSX registers are used. The register classes for scalar floating
+ point types is set, based on whether we allow that type into the upper
+ (Altivec) registers. GCC has register classes to target the Altivec
+ registers for load/store operations, to select using a VSX memory
+ operation instead of the traditional floating point operation. The
+ constraints are:
+
+ d - Register class to use with traditional DFmode instructions.
+ f - Register class to use with traditional SFmode instructions.
+ v - Altivec register.
+ wa - Any VSX register.
+ wd - Preferred register class for V2DFmode.
+ wf - Preferred register class for V4SFmode.
+ wg - Float register for power6x move insns.
+ wl - Float register if we can do 32-bit signed int loads.
+ wm - VSX register for ISA 2.07 direct move operations.
+ wr - GPR if 64-bit mode is permitted.
+ ws - Register class to do ISA 2.06 DF operations.
+ wu - Altivec register for ISA 2.07 VSX SF/SI load/stores.
+ wv - Altivec register for ISA 2.06 VSX DF/DI load/stores.
+ wt - VSX register for TImode in VSX registers.
+ ww - Register class to do SF conversions in with VSX operations.
+ wx - Float register if we can do 32-bit int stores.
+ wy - Register class to do ISA 2.07 SF operations.
+ wz - Float register if we can do 32-bit unsigned int loads. */
+
if (TARGET_HARD_FLOAT && TARGET_FPRS)
rs6000_constraints[RS6000_CONSTRAINT_f] = FLOAT_REGS;
@@ -2092,63 +2618,163 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
if (TARGET_VSX)
{
- /* At present, we just use VSX_REGS, but we have different constraints
- based on the use, in case we want to fine tune the default register
- class used. wa = any VSX register, wf = register class to use for
- V4SF, wd = register class to use for V2DF, and ws = register classs to
- use for DF scalars. */
rs6000_constraints[RS6000_CONSTRAINT_wa] = VSX_REGS;
- rs6000_constraints[RS6000_CONSTRAINT_wf] = VSX_REGS;
rs6000_constraints[RS6000_CONSTRAINT_wd] = VSX_REGS;
- rs6000_constraints[RS6000_CONSTRAINT_ws] = (TARGET_VSX_SCALAR_MEMORY
- ? VSX_REGS
- : FLOAT_REGS);
+ rs6000_constraints[RS6000_CONSTRAINT_wf] = VSX_REGS;
+
+ if (TARGET_VSX_TIMODE)
+ rs6000_constraints[RS6000_CONSTRAINT_wt] = VSX_REGS;
+
+ if (TARGET_UPPER_REGS_DF)
+ {
+ rs6000_constraints[RS6000_CONSTRAINT_ws] = VSX_REGS;
+ rs6000_constraints[RS6000_CONSTRAINT_wv] = ALTIVEC_REGS;
+ }
+ else
+ rs6000_constraints[RS6000_CONSTRAINT_ws] = FLOAT_REGS;
}
+ /* Add conditional constraints based on various options, to allow us to
+ collapse multiple insn patterns. */
if (TARGET_ALTIVEC)
rs6000_constraints[RS6000_CONSTRAINT_v] = ALTIVEC_REGS;
- /* Set up the reload helper functions. */
+ if (TARGET_MFPGPR)
+ rs6000_constraints[RS6000_CONSTRAINT_wg] = FLOAT_REGS;
+
+ if (TARGET_LFIWAX)
+ rs6000_constraints[RS6000_CONSTRAINT_wl] = FLOAT_REGS;
+
+ if (TARGET_DIRECT_MOVE)
+ rs6000_constraints[RS6000_CONSTRAINT_wm] = VSX_REGS;
+
+ if (TARGET_POWERPC64)
+ rs6000_constraints[RS6000_CONSTRAINT_wr] = GENERAL_REGS;
+
+ if (TARGET_P8_VECTOR && TARGET_UPPER_REGS_SF)
+ {
+ rs6000_constraints[RS6000_CONSTRAINT_wu] = ALTIVEC_REGS;
+ rs6000_constraints[RS6000_CONSTRAINT_wy] = VSX_REGS;
+ rs6000_constraints[RS6000_CONSTRAINT_ww] = VSX_REGS;
+ }
+ else if (TARGET_P8_VECTOR)
+ {
+ rs6000_constraints[RS6000_CONSTRAINT_wy] = FLOAT_REGS;
+ rs6000_constraints[RS6000_CONSTRAINT_ww] = FLOAT_REGS;
+ }
+ else if (TARGET_VSX)
+ rs6000_constraints[RS6000_CONSTRAINT_ww] = FLOAT_REGS;
+
+ if (TARGET_STFIWX)
+ rs6000_constraints[RS6000_CONSTRAINT_wx] = FLOAT_REGS;
+
+ if (TARGET_LFIWZX)
+ rs6000_constraints[RS6000_CONSTRAINT_wz] = FLOAT_REGS;
+
+ /* Set up the reload helper and direct move functions. */
if (TARGET_VSX || TARGET_ALTIVEC)
{
if (TARGET_64BIT)
{
- rs6000_vector_reload[V16QImode][0] = CODE_FOR_reload_v16qi_di_store;
- rs6000_vector_reload[V16QImode][1] = CODE_FOR_reload_v16qi_di_load;
- rs6000_vector_reload[V8HImode][0] = CODE_FOR_reload_v8hi_di_store;
- rs6000_vector_reload[V8HImode][1] = CODE_FOR_reload_v8hi_di_load;
- rs6000_vector_reload[V4SImode][0] = CODE_FOR_reload_v4si_di_store;
- rs6000_vector_reload[V4SImode][1] = CODE_FOR_reload_v4si_di_load;
- rs6000_vector_reload[V2DImode][0] = CODE_FOR_reload_v2di_di_store;
- rs6000_vector_reload[V2DImode][1] = CODE_FOR_reload_v2di_di_load;
- rs6000_vector_reload[V4SFmode][0] = CODE_FOR_reload_v4sf_di_store;
- rs6000_vector_reload[V4SFmode][1] = CODE_FOR_reload_v4sf_di_load;
- rs6000_vector_reload[V2DFmode][0] = CODE_FOR_reload_v2df_di_store;
- rs6000_vector_reload[V2DFmode][1] = CODE_FOR_reload_v2df_di_load;
- if (TARGET_VSX && TARGET_VSX_SCALAR_MEMORY)
+ reg_addr[V16QImode].reload_store = CODE_FOR_reload_v16qi_di_store;
+ reg_addr[V16QImode].reload_load = CODE_FOR_reload_v16qi_di_load;
+ reg_addr[V8HImode].reload_store = CODE_FOR_reload_v8hi_di_store;
+ reg_addr[V8HImode].reload_load = CODE_FOR_reload_v8hi_di_load;
+ reg_addr[V4SImode].reload_store = CODE_FOR_reload_v4si_di_store;
+ reg_addr[V4SImode].reload_load = CODE_FOR_reload_v4si_di_load;
+ reg_addr[V2DImode].reload_store = CODE_FOR_reload_v2di_di_store;
+ reg_addr[V2DImode].reload_load = CODE_FOR_reload_v2di_di_load;
+ reg_addr[V1TImode].reload_store = CODE_FOR_reload_v1ti_di_store;
+ reg_addr[V1TImode].reload_load = CODE_FOR_reload_v1ti_di_load;
+ reg_addr[V4SFmode].reload_store = CODE_FOR_reload_v4sf_di_store;
+ reg_addr[V4SFmode].reload_load = CODE_FOR_reload_v4sf_di_load;
+ reg_addr[V2DFmode].reload_store = CODE_FOR_reload_v2df_di_store;
+ reg_addr[V2DFmode].reload_load = CODE_FOR_reload_v2df_di_load;
+ if (TARGET_VSX && TARGET_UPPER_REGS_DF)
{
- rs6000_vector_reload[DFmode][0] = CODE_FOR_reload_df_di_store;
- rs6000_vector_reload[DFmode][1] = CODE_FOR_reload_df_di_load;
+ reg_addr[DFmode].reload_store = CODE_FOR_reload_df_di_store;
+ reg_addr[DFmode].reload_load = CODE_FOR_reload_df_di_load;
+ reg_addr[DDmode].reload_store = CODE_FOR_reload_dd_di_store;
+ reg_addr[DDmode].reload_load = CODE_FOR_reload_dd_di_load;
+ }
+ if (TARGET_P8_VECTOR)
+ {
+ reg_addr[SFmode].reload_store = CODE_FOR_reload_sf_di_store;
+ reg_addr[SFmode].reload_load = CODE_FOR_reload_sf_di_load;
+ reg_addr[SDmode].reload_store = CODE_FOR_reload_sd_di_store;
+ reg_addr[SDmode].reload_load = CODE_FOR_reload_sd_di_load;
+ }
+ if (TARGET_VSX_TIMODE)
+ {
+ reg_addr[TImode].reload_store = CODE_FOR_reload_ti_di_store;
+ reg_addr[TImode].reload_load = CODE_FOR_reload_ti_di_load;
+ }
+ if (TARGET_DIRECT_MOVE)
+ {
+ if (TARGET_POWERPC64)
+ {
+ reg_addr[TImode].reload_gpr_vsx = CODE_FOR_reload_gpr_from_vsxti;
+ reg_addr[V1TImode].reload_gpr_vsx = CODE_FOR_reload_gpr_from_vsxv1ti;
+ reg_addr[V2DFmode].reload_gpr_vsx = CODE_FOR_reload_gpr_from_vsxv2df;
+ reg_addr[V2DImode].reload_gpr_vsx = CODE_FOR_reload_gpr_from_vsxv2di;
+ reg_addr[V4SFmode].reload_gpr_vsx = CODE_FOR_reload_gpr_from_vsxv4sf;
+ reg_addr[V4SImode].reload_gpr_vsx = CODE_FOR_reload_gpr_from_vsxv4si;
+ reg_addr[V8HImode].reload_gpr_vsx = CODE_FOR_reload_gpr_from_vsxv8hi;
+ reg_addr[V16QImode].reload_gpr_vsx = CODE_FOR_reload_gpr_from_vsxv16qi;
+ reg_addr[SFmode].reload_gpr_vsx = CODE_FOR_reload_gpr_from_vsxsf;
+
+ reg_addr[TImode].reload_vsx_gpr = CODE_FOR_reload_vsx_from_gprti;
+ reg_addr[V1TImode].reload_vsx_gpr = CODE_FOR_reload_vsx_from_gprv1ti;
+ reg_addr[V2DFmode].reload_vsx_gpr = CODE_FOR_reload_vsx_from_gprv2df;
+ reg_addr[V2DImode].reload_vsx_gpr = CODE_FOR_reload_vsx_from_gprv2di;
+ reg_addr[V4SFmode].reload_vsx_gpr = CODE_FOR_reload_vsx_from_gprv4sf;
+ reg_addr[V4SImode].reload_vsx_gpr = CODE_FOR_reload_vsx_from_gprv4si;
+ reg_addr[V8HImode].reload_vsx_gpr = CODE_FOR_reload_vsx_from_gprv8hi;
+ reg_addr[V16QImode].reload_vsx_gpr = CODE_FOR_reload_vsx_from_gprv16qi;
+ reg_addr[SFmode].reload_vsx_gpr = CODE_FOR_reload_vsx_from_gprsf;
+ }
+ else
+ {
+ reg_addr[DImode].reload_fpr_gpr = CODE_FOR_reload_fpr_from_gprdi;
+ reg_addr[DDmode].reload_fpr_gpr = CODE_FOR_reload_fpr_from_gprdd;
+ reg_addr[DFmode].reload_fpr_gpr = CODE_FOR_reload_fpr_from_gprdf;
+ }
}
}
else
{
- rs6000_vector_reload[V16QImode][0] = CODE_FOR_reload_v16qi_si_store;
- rs6000_vector_reload[V16QImode][1] = CODE_FOR_reload_v16qi_si_load;
- rs6000_vector_reload[V8HImode][0] = CODE_FOR_reload_v8hi_si_store;
- rs6000_vector_reload[V8HImode][1] = CODE_FOR_reload_v8hi_si_load;
- rs6000_vector_reload[V4SImode][0] = CODE_FOR_reload_v4si_si_store;
- rs6000_vector_reload[V4SImode][1] = CODE_FOR_reload_v4si_si_load;
- rs6000_vector_reload[V2DImode][0] = CODE_FOR_reload_v2di_si_store;
- rs6000_vector_reload[V2DImode][1] = CODE_FOR_reload_v2di_si_load;
- rs6000_vector_reload[V4SFmode][0] = CODE_FOR_reload_v4sf_si_store;
- rs6000_vector_reload[V4SFmode][1] = CODE_FOR_reload_v4sf_si_load;
- rs6000_vector_reload[V2DFmode][0] = CODE_FOR_reload_v2df_si_store;
- rs6000_vector_reload[V2DFmode][1] = CODE_FOR_reload_v2df_si_load;
- if (TARGET_VSX && TARGET_VSX_SCALAR_MEMORY)
+ reg_addr[V16QImode].reload_store = CODE_FOR_reload_v16qi_si_store;
+ reg_addr[V16QImode].reload_load = CODE_FOR_reload_v16qi_si_load;
+ reg_addr[V8HImode].reload_store = CODE_FOR_reload_v8hi_si_store;
+ reg_addr[V8HImode].reload_load = CODE_FOR_reload_v8hi_si_load;
+ reg_addr[V4SImode].reload_store = CODE_FOR_reload_v4si_si_store;
+ reg_addr[V4SImode].reload_load = CODE_FOR_reload_v4si_si_load;
+ reg_addr[V2DImode].reload_store = CODE_FOR_reload_v2di_si_store;
+ reg_addr[V2DImode].reload_load = CODE_FOR_reload_v2di_si_load;
+ reg_addr[V1TImode].reload_store = CODE_FOR_reload_v1ti_si_store;
+ reg_addr[V1TImode].reload_load = CODE_FOR_reload_v1ti_si_load;
+ reg_addr[V4SFmode].reload_store = CODE_FOR_reload_v4sf_si_store;
+ reg_addr[V4SFmode].reload_load = CODE_FOR_reload_v4sf_si_load;
+ reg_addr[V2DFmode].reload_store = CODE_FOR_reload_v2df_si_store;
+ reg_addr[V2DFmode].reload_load = CODE_FOR_reload_v2df_si_load;
+ if (TARGET_VSX && TARGET_UPPER_REGS_DF)
+ {
+ reg_addr[DFmode].reload_store = CODE_FOR_reload_df_si_store;
+ reg_addr[DFmode].reload_load = CODE_FOR_reload_df_si_load;
+ reg_addr[DDmode].reload_store = CODE_FOR_reload_dd_si_store;
+ reg_addr[DDmode].reload_load = CODE_FOR_reload_dd_si_load;
+ }
+ if (TARGET_P8_VECTOR)
+ {
+ reg_addr[SFmode].reload_store = CODE_FOR_reload_sf_si_store;
+ reg_addr[SFmode].reload_load = CODE_FOR_reload_sf_si_load;
+ reg_addr[SDmode].reload_store = CODE_FOR_reload_sd_si_store;
+ reg_addr[SDmode].reload_load = CODE_FOR_reload_sd_si_load;
+ }
+ if (TARGET_VSX_TIMODE)
{
- rs6000_vector_reload[DFmode][0] = CODE_FOR_reload_df_si_store;
- rs6000_vector_reload[DFmode][1] = CODE_FOR_reload_df_si_load;
+ reg_addr[TImode].reload_store = CODE_FOR_reload_ti_si_store;
+ reg_addr[TImode].reload_load = CODE_FOR_reload_ti_si_load;
}
}
}
@@ -2267,6 +2893,11 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
}
}
+ /* Update the addr mask bits in reg_addr to help secondary reload and go if
+ legitimate address support to figure out the appropriate addressing to
+ use. */
+ rs6000_setup_reg_addr_masks ();
+
if (global_init_p || TARGET_DEBUG_TARGET)
{
if (TARGET_DEBUG_REG)
@@ -2378,7 +3009,12 @@ rs6000_builtin_mask_calculate (void)
| ((TARGET_FRSQRTE) ? RS6000_BTM_FRSQRTE : 0)
| ((TARGET_FRSQRTES) ? RS6000_BTM_FRSQRTES : 0)
| ((TARGET_POPCNTD) ? RS6000_BTM_POPCNTD : 0)
- | ((rs6000_cpu == PROCESSOR_CELL) ? RS6000_BTM_CELL : 0));
+ | ((rs6000_cpu == PROCESSOR_CELL) ? RS6000_BTM_CELL : 0)
+ | ((TARGET_P8_VECTOR) ? RS6000_BTM_P8_VECTOR : 0)
+ | ((TARGET_CRYPTO) ? RS6000_BTM_CRYPTO : 0)
+ | ((TARGET_HTM) ? RS6000_BTM_HTM : 0)
+ | ((TARGET_DFP) ? RS6000_BTM_DFP : 0)
+ | ((TARGET_HARD_FLOAT) ? RS6000_BTM_HARD_FLOAT : 0));
}
/* Override command line options. Mostly we process the processor type and
@@ -2415,7 +3051,8 @@ rs6000_option_override_internal (bool global_init_p)
calculation works better for RTL loop invariant motion on targets
with enough (>= 32) registers. It is an expensive optimization.
So it is on only for peak performance. */
- if (optimize >= 3 && global_init_p)
+ if (optimize >= 3 && global_init_p
+ && !global_options_set.x_flag_ira_loop_pressure)
flag_ira_loop_pressure = 1;
/* Set the pointer size. */
@@ -2609,6 +3246,24 @@ rs6000_option_override_internal (bool global_init_p)
}
}
+ /* If little-endian, default to -mstrict-align on older processors.
+ Testing for htm matches power8 and later. */
+ if (!BYTES_BIG_ENDIAN
+ && !(processor_target_table[tune_index].target_enable & OPTION_MASK_HTM))
+ rs6000_isa_flags |= ~rs6000_isa_flags_explicit & OPTION_MASK_STRICT_ALIGN;
+
+ /* -maltivec={le,be} implies -maltivec. */
+ if (rs6000_altivec_element_order != 0)
+ rs6000_isa_flags |= OPTION_MASK_ALTIVEC;
+
+ /* Disallow -maltivec=le in big endian mode for now. This is not
+ known to be useful for anyone. */
+ if (BYTES_BIG_ENDIAN && rs6000_altivec_element_order == 1)
+ {
+ warning (0, N_("-maltivec=le not allowed for big-endian targets"));
+ rs6000_altivec_element_order = 0;
+ }
+
/* Add some warnings for VSX. */
if (TARGET_VSX)
{
@@ -2619,15 +3274,13 @@ rs6000_option_override_internal (bool global_init_p)
if (rs6000_isa_flags_explicit & OPTION_MASK_VSX)
msg = N_("-mvsx requires hardware floating point");
else
+ {
rs6000_isa_flags &= ~ OPTION_MASK_VSX;
+ rs6000_isa_flags_explicit |= OPTION_MASK_VSX;
+ }
}
else if (TARGET_PAIRED_FLOAT)
msg = N_("-mvsx and -mpaired are incompatible");
- /* The hardware will allow VSX and little endian, but until we make sure
- things like vector select, etc. work don't allow VSX on little endian
- systems at this point. */
- else if (!BYTES_BIG_ENDIAN)
- msg = N_("-mvsx used with little endian code");
else if (TARGET_AVOID_XFORM > 0)
msg = N_("-mvsx needs indexed addressing");
else if (!TARGET_ALTIVEC && (rs6000_isa_flags_explicit
@@ -2647,9 +3300,24 @@ rs6000_option_override_internal (bool global_init_p)
}
}
+ /* If hard-float/altivec/vsx were explicitly turned off then don't allow
+ the -mcpu setting to enable options that conflict. */
+ if ((!TARGET_HARD_FLOAT || !TARGET_ALTIVEC || !TARGET_VSX)
+ && (rs6000_isa_flags_explicit & (OPTION_MASK_SOFT_FLOAT
+ | OPTION_MASK_ALTIVEC
+ | OPTION_MASK_VSX)) != 0)
+ rs6000_isa_flags &= ~((OPTION_MASK_P8_VECTOR | OPTION_MASK_CRYPTO
+ | OPTION_MASK_DIRECT_MOVE)
+ & ~rs6000_isa_flags_explicit);
+
+ if (TARGET_DEBUG_REG || TARGET_DEBUG_TARGET)
+ rs6000_print_isa_options (stderr, 0, "before defaults", rs6000_isa_flags);
+
/* For the newer switches (vsx, dfp, etc.) set some of the older options,
unless the user explicitly used the -mno-<option> to disable the code. */
- if (TARGET_VSX)
+ if (TARGET_P8_VECTOR || TARGET_DIRECT_MOVE || TARGET_CRYPTO)
+ rs6000_isa_flags |= (ISA_2_7_MASKS_SERVER & ~rs6000_isa_flags_explicit);
+ else if (TARGET_VSX)
rs6000_isa_flags |= (ISA_2_6_MASKS_SERVER & ~rs6000_isa_flags_explicit);
else if (TARGET_POPCNTD)
rs6000_isa_flags |= (ISA_2_6_MASKS_EMBEDDED & ~rs6000_isa_flags_explicit);
@@ -2664,6 +3332,99 @@ rs6000_option_override_internal (bool global_init_p)
else if (TARGET_ALTIVEC)
rs6000_isa_flags |= (OPTION_MASK_PPC_GFXOPT & ~rs6000_isa_flags_explicit);
+ if (TARGET_CRYPTO && !TARGET_ALTIVEC)
+ {
+ if (rs6000_isa_flags_explicit & OPTION_MASK_CRYPTO)
+ error ("-mcrypto requires -maltivec");
+ rs6000_isa_flags &= ~OPTION_MASK_CRYPTO;
+ }
+
+ if (TARGET_DIRECT_MOVE && !TARGET_VSX)
+ {
+ if (rs6000_isa_flags_explicit & OPTION_MASK_DIRECT_MOVE)
+ error ("-mdirect-move requires -mvsx");
+ rs6000_isa_flags &= ~OPTION_MASK_DIRECT_MOVE;
+ }
+
+ if (TARGET_P8_VECTOR && !TARGET_ALTIVEC)
+ {
+ if (rs6000_isa_flags_explicit & OPTION_MASK_P8_VECTOR)
+ error ("-mpower8-vector requires -maltivec");
+ rs6000_isa_flags &= ~OPTION_MASK_P8_VECTOR;
+ }
+
+ if (TARGET_P8_VECTOR && !TARGET_VSX)
+ {
+ if (rs6000_isa_flags_explicit & OPTION_MASK_P8_VECTOR)
+ error ("-mpower8-vector requires -mvsx");
+ rs6000_isa_flags &= ~OPTION_MASK_P8_VECTOR;
+ }
+
+ if (TARGET_VSX_TIMODE && !TARGET_VSX)
+ {
+ if (rs6000_isa_flags_explicit & OPTION_MASK_VSX_TIMODE)
+ error ("-mvsx-timode requires -mvsx");
+ rs6000_isa_flags &= ~OPTION_MASK_VSX_TIMODE;
+ }
+
+ if (TARGET_DFP && !TARGET_HARD_FLOAT)
+ {
+ if (rs6000_isa_flags_explicit & OPTION_MASK_DFP)
+ error ("-mhard-dfp requires -mhard-float");
+ rs6000_isa_flags &= ~OPTION_MASK_DFP;
+ }
+
+ /* The quad memory instructions only works in 64-bit mode. In 32-bit mode,
+ silently turn off quad memory mode. */
+ if ((TARGET_QUAD_MEMORY || TARGET_QUAD_MEMORY_ATOMIC) && !TARGET_POWERPC64)
+ {
+ if ((rs6000_isa_flags_explicit & OPTION_MASK_QUAD_MEMORY) != 0)
+ warning (0, N_("-mquad-memory requires 64-bit mode"));
+
+ if ((rs6000_isa_flags_explicit & OPTION_MASK_QUAD_MEMORY_ATOMIC) != 0)
+ warning (0, N_("-mquad-memory-atomic requires 64-bit mode"));
+
+ rs6000_isa_flags &= ~(OPTION_MASK_QUAD_MEMORY
+ | OPTION_MASK_QUAD_MEMORY_ATOMIC);
+ }
+
+ /* Non-atomic quad memory load/store are disabled for little endian, since
+ the words are reversed, but atomic operations can still be done by
+ swapping the words. */
+ if (TARGET_QUAD_MEMORY && !WORDS_BIG_ENDIAN)
+ {
+ if ((rs6000_isa_flags_explicit & OPTION_MASK_QUAD_MEMORY) != 0)
+ warning (0, N_("-mquad-memory is not available in little endian mode"));
+
+ rs6000_isa_flags &= ~OPTION_MASK_QUAD_MEMORY;
+ }
+
+ /* Assume if the user asked for normal quad memory instructions, they want
+ the atomic versions as well, unless they explicity told us not to use quad
+ word atomic instructions. */
+ if (TARGET_QUAD_MEMORY
+ && !TARGET_QUAD_MEMORY_ATOMIC
+ && ((rs6000_isa_flags_explicit & OPTION_MASK_QUAD_MEMORY_ATOMIC) == 0))
+ rs6000_isa_flags |= OPTION_MASK_QUAD_MEMORY_ATOMIC;
+
+ /* Enable power8 fusion if we are tuning for power8, even if we aren't
+ generating power8 instructions. */
+ if (!(rs6000_isa_flags_explicit & OPTION_MASK_P8_FUSION))
+ rs6000_isa_flags |= (processor_target_table[tune_index].target_enable
+ & OPTION_MASK_P8_FUSION);
+
+ /* Power8 does not fuse sign extended loads with the addis. If we are
+ optimizing at high levels for speed, convert a sign extended load into a
+ zero extending load, and an explicit sign extension. */
+ if (TARGET_P8_FUSION
+ && !(rs6000_isa_flags_explicit & OPTION_MASK_P8_FUSION_SIGN)
+ && optimize_function_for_speed_p (cfun)
+ && optimize >= 3)
+ rs6000_isa_flags |= OPTION_MASK_P8_FUSION_SIGN;
+
+ if (TARGET_DEBUG_REG || TARGET_DEBUG_TARGET)
+ rs6000_print_isa_options (stderr, 0, "after defaults", rs6000_isa_flags);
+
/* E500mc does "better" if we inline more aggressively. Respect the
user's opinion, though. */
if (rs6000_block_move_inline_limit == 0
@@ -2787,9 +3548,13 @@ rs6000_option_override_internal (bool global_init_p)
/* Place FP constants in the constant pool instead of TOC
if section anchors enabled. */
- if (flag_section_anchors)
+ if (flag_section_anchors
+ && !global_options_set.x_TARGET_NO_FP_IN_TOC)
TARGET_NO_FP_IN_TOC = 1;
+ if (TARGET_DEBUG_REG || TARGET_DEBUG_TARGET)
+ rs6000_print_isa_options (stderr, 0, "before subtarget", rs6000_isa_flags);
+
#ifdef SUBTARGET_OVERRIDE_OPTIONS
SUBTARGET_OVERRIDE_OPTIONS;
#endif
@@ -2800,6 +3565,9 @@ rs6000_option_override_internal (bool global_init_p)
SUB3TARGET_OVERRIDE_OPTIONS;
#endif
+ if (TARGET_DEBUG_REG || TARGET_DEBUG_TARGET)
+ rs6000_print_isa_options (stderr, 0, "after subtarget", rs6000_isa_flags);
+
/* For the E500 family of cores, reset the single/double FP flags to let us
check that they remain constant across attributes or pragmas. Also,
clear a possible request for string instructions, not supported and which
@@ -2849,16 +3617,19 @@ rs6000_option_override_internal (bool global_init_p)
&& rs6000_cpu != PROCESSOR_POWER5
&& rs6000_cpu != PROCESSOR_POWER6
&& rs6000_cpu != PROCESSOR_POWER7
+ && rs6000_cpu != PROCESSOR_POWER8
&& rs6000_cpu != PROCESSOR_PPCA2
&& rs6000_cpu != PROCESSOR_CELL
&& rs6000_cpu != PROCESSOR_PPC476);
rs6000_sched_groups = (rs6000_cpu == PROCESSOR_POWER4
|| rs6000_cpu == PROCESSOR_POWER5
- || rs6000_cpu == PROCESSOR_POWER7);
+ || rs6000_cpu == PROCESSOR_POWER7
+ || rs6000_cpu == PROCESSOR_POWER8);
rs6000_align_branch_targets = (rs6000_cpu == PROCESSOR_POWER4
|| rs6000_cpu == PROCESSOR_POWER5
|| rs6000_cpu == PROCESSOR_POWER6
|| rs6000_cpu == PROCESSOR_POWER7
+ || rs6000_cpu == PROCESSOR_POWER8
|| rs6000_cpu == PROCESSOR_PPCE500MC
|| rs6000_cpu == PROCESSOR_PPCE500MC64
|| rs6000_cpu == PROCESSOR_PPCE5500
@@ -2988,7 +3759,7 @@ rs6000_option_override_internal (bool global_init_p)
/* We should always be splitting complex arguments, but we can't break
Linux and Darwin ABIs at the moment. For now, only AIX is fixed. */
- if (DEFAULT_ABI != ABI_AIX)
+ if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_DARWIN)
targetm.calls.split_complex_arg = NULL;
}
@@ -3102,6 +3873,10 @@ rs6000_option_override_internal (bool global_init_p)
rs6000_cost = &power7_cost;
break;
+ case PROCESSOR_POWER8:
+ rs6000_cost = &power8_cost;
+ break;
+
case PROCESSOR_PPCA2:
rs6000_cost = &ppca2_cost;
break;
@@ -3274,7 +4049,8 @@ rs6000_loop_align (rtx label)
&& (rs6000_cpu == PROCESSOR_POWER4
|| rs6000_cpu == PROCESSOR_POWER5
|| rs6000_cpu == PROCESSOR_POWER6
- || rs6000_cpu == PROCESSOR_POWER7))
+ || rs6000_cpu == PROCESSOR_POWER7
+ || rs6000_cpu == PROCESSOR_POWER8))
return 5;
else
return align_loops_log;
@@ -3493,6 +4269,8 @@ rs6000_preferred_simd_mode (enum machine_mode mode)
{
case SFmode:
return V4SFmode;
+ case TImode:
+ return V1TImode;
case DImode:
return V2DImode;
case SImode:
@@ -3813,6 +4591,22 @@ rs6000_builtin_vectorized_function (tree fndecl, tree type_out,
enum built_in_function fn = DECL_FUNCTION_CODE (fndecl);
switch (fn)
{
+ case BUILT_IN_CLZIMAX:
+ case BUILT_IN_CLZLL:
+ case BUILT_IN_CLZL:
+ case BUILT_IN_CLZ:
+ if (TARGET_P8_VECTOR && in_mode == out_mode && out_n == in_n)
+ {
+ if (out_mode == QImode && out_n == 16)
+ return rs6000_builtin_decls[P8V_BUILTIN_VCLZB];
+ else if (out_mode == HImode && out_n == 8)
+ return rs6000_builtin_decls[P8V_BUILTIN_VCLZH];
+ else if (out_mode == SImode && out_n == 4)
+ return rs6000_builtin_decls[P8V_BUILTIN_VCLZW];
+ else if (out_mode == DImode && out_n == 2)
+ return rs6000_builtin_decls[P8V_BUILTIN_VCLZD];
+ }
+ break;
case BUILT_IN_COPYSIGN:
if (VECTOR_UNIT_VSX_P (V2DFmode)
&& out_mode == DFmode && out_n == 2
@@ -3828,6 +4622,22 @@ rs6000_builtin_vectorized_function (tree fndecl, tree type_out,
if (VECTOR_UNIT_ALTIVEC_P (V4SFmode))
return rs6000_builtin_decls[ALTIVEC_BUILTIN_COPYSIGN_V4SF];
break;
+ case BUILT_IN_POPCOUNTIMAX:
+ case BUILT_IN_POPCOUNTLL:
+ case BUILT_IN_POPCOUNTL:
+ case BUILT_IN_POPCOUNT:
+ if (TARGET_P8_VECTOR && in_mode == out_mode && out_n == in_n)
+ {
+ if (out_mode == QImode && out_n == 16)
+ return rs6000_builtin_decls[P8V_BUILTIN_VPOPCNTB];
+ else if (out_mode == HImode && out_n == 8)
+ return rs6000_builtin_decls[P8V_BUILTIN_VPOPCNTH];
+ else if (out_mode == SImode && out_n == 4)
+ return rs6000_builtin_decls[P8V_BUILTIN_VPOPCNTW];
+ else if (out_mode == DImode && out_n == 2)
+ return rs6000_builtin_decls[P8V_BUILTIN_VPOPCNTD];
+ }
+ break;
case BUILT_IN_SQRT:
if (VECTOR_UNIT_VSX_P (V2DFmode)
&& out_mode == DFmode && out_n == 2
@@ -4043,7 +4853,11 @@ rs6000_file_start (void)
putc ('\n', file);
}
- if (DEFAULT_ABI == ABI_AIX || (TARGET_ELF && flag_pic == 2))
+ if (DEFAULT_ABI == ABI_ELFv2)
+ fprintf (file, "\t.abiversion 2\n");
+
+ if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2
+ || (TARGET_ELF && flag_pic == 2))
{
switch_to_section (toc_section);
switch_to_section (text_section);
@@ -4230,7 +5044,7 @@ vspltis_constant (rtx op, unsigned step, unsigned copies)
HOST_WIDE_INT splat_val;
HOST_WIDE_INT msb_val;
- if (mode == V2DImode || mode == V2DFmode)
+ if (mode == V2DImode || mode == V2DFmode || mode == V1TImode)
return false;
nunits = GET_MODE_NUNITS (mode);
@@ -4239,7 +5053,7 @@ vspltis_constant (rtx op, unsigned step, unsigned copies)
val = const_vector_elt_as_int (op, BYTES_BIG_ENDIAN ? nunits - 1 : 0);
splat_val = val;
- msb_val = val > 0 ? 0 : -1;
+ msb_val = val >= 0 ? 0 : -1;
/* Construct the value to be splatted, if possible. If not, return 0. */
for (i = 2; i <= copies; i *= 2)
@@ -4274,15 +5088,16 @@ vspltis_constant (rtx op, unsigned step, unsigned copies)
/* Check if VAL is present in every STEP-th element, and the
other elements are filled with its most significant bit. */
- for (i = 0; i < nunits - 1; ++i)
+ for (i = 1; i < nunits; ++i)
{
HOST_WIDE_INT desired_val;
- if (((BYTES_BIG_ENDIAN ? i + 1 : i) & (step - 1)) == 0)
+ unsigned elt = BYTES_BIG_ENDIAN ? nunits - 1 - i : i;
+ if ((i & (step - 1)) == 0)
desired_val = val;
else
desired_val = msb_val;
- if (desired_val != const_vector_elt_as_int (op, i))
+ if (desired_val != const_vector_elt_as_int (op, elt))
return false;
}
@@ -4308,7 +5123,7 @@ easy_altivec_constant (rtx op, enum machine_mode mode)
if (mode == V2DFmode)
return zero_constant (op, mode);
- if (mode == V2DImode)
+ else if (mode == V2DImode)
{
/* In case the compiler is built 32-bit, CONST_DOUBLE constants are not
easy. */
@@ -4326,6 +5141,10 @@ easy_altivec_constant (rtx op, enum machine_mode mode)
return false;
}
+ /* V1TImode is a special container for TImode. Ignore for now. */
+ else if (mode == V1TImode)
+ return false;
+
/* Start with a vspltisw. */
step = GET_MODE_NUNITS (mode) / 4;
copies = 1;
@@ -4407,7 +5226,7 @@ output_vec_const_move (rtx *operands)
if (zero_constant (vec, mode))
return "xxlxor %x0,%x0,%x0";
- if (mode == V2DImode
+ if ((mode == V2DImode || mode == V1TImode)
&& INTVAL (CONST_VECTOR_ELT (vec, 0)) == -1
&& INTVAL (CONST_VECTOR_ELT (vec, 1)) == -1)
return "vspltisw %0,-1";
@@ -4698,9 +5517,12 @@ rs6000_expand_vector_init (rtx target, rtx vals)
{
rtx freg = gen_reg_rtx (V4SFmode);
rtx sreg = force_reg (SFmode, XVECEXP (vals, 0, 0));
+ rtx cvt = ((TARGET_XSCVDPSPN)
+ ? gen_vsx_xscvdpspn_scalar (freg, sreg)
+ : gen_vsx_xscvdpsp_scalar (freg, sreg));
- emit_insn (gen_vsx_xscvdpsp_scalar (freg, sreg));
- emit_insn (gen_vsx_xxspltw_v4sf (target, freg, const0_rtx));
+ emit_insn (cvt);
+ emit_insn (gen_vsx_xxspltw_v4sf_direct (target, freg, const0_rtx));
}
else
{
@@ -4790,6 +5612,13 @@ rs6000_expand_vector_set (rtx target, rtx val, int elt)
return;
}
+ /* Simplify setting single element vectors like V1TImode. */
+ if (GET_MODE_SIZE (mode) == GET_MODE_SIZE (inner_mode) && elt == 0)
+ {
+ emit_move_insn (target, gen_lowpart (mode, val));
+ return;
+ }
+
/* Load single variable value. */
mem = assign_stack_temp (mode, GET_MODE_SIZE (inner_mode));
emit_move_insn (adjust_address_nv (mem, inner_mode, 0), val);
@@ -4811,10 +5640,29 @@ rs6000_expand_vector_set (rtx target, rtx val, int elt)
XVECEXP (mask, 0, elt*width + i)
= GEN_INT (i + 0x10);
x = gen_rtx_CONST_VECTOR (V16QImode, XVEC (mask, 0));
+
+ if (BYTES_BIG_ENDIAN)
x = gen_rtx_UNSPEC (mode,
gen_rtvec (3, target, reg,
force_reg (V16QImode, x)),
UNSPEC_VPERM);
+ else
+ {
+ /* Invert selector. We prefer to generate VNAND on P8 so
+ that future fusion opportunities can kick in, but must
+ generate VNOR elsewhere. */
+ rtx notx = gen_rtx_NOT (V16QImode, force_reg (V16QImode, x));
+ rtx iorx = (TARGET_P8_VECTOR
+ ? gen_rtx_IOR (V16QImode, notx, notx)
+ : gen_rtx_AND (V16QImode, notx, notx));
+ rtx tmp = gen_reg_rtx (V16QImode);
+ emit_insn (gen_rtx_SET (VOIDmode, tmp, iorx));
+
+ /* Permute with operands reversed and adjusted selector. */
+ x = gen_rtx_UNSPEC (mode, gen_rtvec (3, reg, target, tmp),
+ UNSPEC_VPERM);
+ }
+
emit_insn (gen_rtx_SET (VOIDmode, target, x));
}
@@ -4833,6 +5681,10 @@ rs6000_expand_vector_extract (rtx target, rtx vec, int elt)
{
default:
break;
+ case V1TImode:
+ gcc_assert (elt == 0 && inner_mode == TImode);
+ emit_move_insn (target, gen_lowpart (TImode, vec));
+ break;
case V2DFmode:
emit_insn (gen_vsx_extract_v2df (target, vec, GEN_INT (elt)));
return;
@@ -4938,7 +5790,7 @@ invalid_e500_subreg (rtx op, enum machine_mode mode)
purpose. */
if (GET_CODE (op) == SUBREG
&& (mode == SImode || mode == DImode || mode == TImode
- || mode == DDmode || mode == TDmode)
+ || mode == DDmode || mode == TDmode || mode == PTImode)
&& REG_P (SUBREG_REG (op))
&& (GET_MODE (SUBREG_REG (op)) == DFmode
|| GET_MODE (SUBREG_REG (op)) == TFmode))
@@ -4951,6 +5803,7 @@ invalid_e500_subreg (rtx op, enum machine_mode mode)
&& REG_P (SUBREG_REG (op))
&& (GET_MODE (SUBREG_REG (op)) == DImode
|| GET_MODE (SUBREG_REG (op)) == TImode
+ || GET_MODE (SUBREG_REG (op)) == PTImode
|| GET_MODE (SUBREG_REG (op)) == DDmode
|| GET_MODE (SUBREG_REG (op)) == TDmode))
return true;
@@ -4966,6 +5819,48 @@ invalid_e500_subreg (rtx op, enum machine_mode mode)
return false;
}
+/* Return alignment of TYPE. Existing alignment is ALIGN. HOW
+ selects whether the alignment is abi mandated, optional, or
+ both abi and optional alignment. */
+
+unsigned int
+rs6000_data_alignment (tree type, unsigned int align, enum data_align how)
+{
+ if (how != align_opt)
+ {
+ if (TREE_CODE (type) == VECTOR_TYPE)
+ {
+ if ((TARGET_SPE && SPE_VECTOR_MODE (TYPE_MODE (type)))
+ || (TARGET_PAIRED_FLOAT && PAIRED_VECTOR_MODE (TYPE_MODE (type))))
+ {
+ if (align < 64)
+ align = 64;
+ }
+ else if (align < 128)
+ align = 128;
+ }
+ else if (TARGET_E500_DOUBLE
+ && TREE_CODE (type) == REAL_TYPE
+ && TYPE_MODE (type) == DFmode)
+ {
+ if (align < 64)
+ align = 64;
+ }
+ }
+
+ if (how != align_abi)
+ {
+ if (TREE_CODE (type) == ARRAY_TYPE
+ && TYPE_MODE (TREE_TYPE (type)) == QImode)
+ {
+ if (align < BITS_PER_WORD)
+ align = BITS_PER_WORD;
+ }
+ }
+
+ return align;
+}
+
/* AIX increases natural record alignment to doubleword if the first
field is an FP double while the FP fields remain word aligned. */
@@ -5087,6 +5982,73 @@ gpr_or_gpr_p (rtx op0, rtx op1)
|| (REG_P (op1) && INT_REGNO_P (REGNO (op1))));
}
+/* Return true if this is a move direct operation between GPR registers and
+ floating point/VSX registers. */
+
+bool
+direct_move_p (rtx op0, rtx op1)
+{
+ int regno0, regno1;
+
+ if (!REG_P (op0) || !REG_P (op1))
+ return false;
+
+ if (!TARGET_DIRECT_MOVE && !TARGET_MFPGPR)
+ return false;
+
+ regno0 = REGNO (op0);
+ regno1 = REGNO (op1);
+ if (regno0 >= FIRST_PSEUDO_REGISTER || regno1 >= FIRST_PSEUDO_REGISTER)
+ return false;
+
+ if (INT_REGNO_P (regno0))
+ return (TARGET_DIRECT_MOVE) ? VSX_REGNO_P (regno1) : FP_REGNO_P (regno1);
+
+ else if (INT_REGNO_P (regno1))
+ {
+ if (TARGET_MFPGPR && FP_REGNO_P (regno0))
+ return true;
+
+ else if (TARGET_DIRECT_MOVE && VSX_REGNO_P (regno0))
+ return true;
+ }
+
+ return false;
+}
+
+/* Return true if this is a load or store quad operation. This function does
+ not handle the atomic quad memory instructions. */
+
+bool
+quad_load_store_p (rtx op0, rtx op1)
+{
+ bool ret;
+
+ if (!TARGET_QUAD_MEMORY)
+ ret = false;
+
+ else if (REG_P (op0) && MEM_P (op1))
+ ret = (quad_int_reg_operand (op0, GET_MODE (op0))
+ && quad_memory_operand (op1, GET_MODE (op1))
+ && !reg_overlap_mentioned_p (op0, op1));
+
+ else if (MEM_P (op0) && REG_P (op1))
+ ret = (quad_memory_operand (op0, GET_MODE (op0))
+ && quad_int_reg_operand (op1, GET_MODE (op1)));
+
+ else
+ ret = false;
+
+ if (TARGET_DEBUG_ADDR)
+ {
+ fprintf (stderr, "\n========== quad_load_store, return %s\n",
+ ret ? "true" : "false");
+ debug_rtx (gen_rtx_SET (VOIDmode, op0, op1));
+ }
+
+ return ret;
+}
+
/* Given an address, return a constant offset term if one exists. */
static rtx
@@ -5170,7 +6132,12 @@ reg_offset_addressing_ok_p (enum machine_mode mode)
case V4SImode:
case V2DFmode:
case V2DImode:
- /* AltiVec/VSX vector modes. Only reg+reg addressing is valid. */
+ case V1TImode:
+ case TImode:
+ /* AltiVec/VSX vector modes. Only reg+reg addressing is valid. While
+ TImode is not a vector mode, if we want to use the VSX registers to
+ move it around, we need to restrict ourselves to reg+reg
+ addressing. */
if (VECTOR_MEM_ALTIVEC_OR_VSX_P (mode))
return false;
break;
@@ -5184,6 +6151,13 @@ reg_offset_addressing_ok_p (enum machine_mode mode)
return false;
break;
+ case SDmode:
+ /* If we can do direct load/stores of SDmode, restrict it to reg+reg
+ addressing for the LFIWZX and STFIWX instructions. */
+ if (TARGET_NO_SDMODE_STACK)
+ return false;
+ break;
+
default:
break;
}
@@ -5211,59 +6185,56 @@ virtual_stack_registers_memory_p (rtx op)
&& regnum <= LAST_VIRTUAL_POINTER_REGISTER);
}
-/* Return true if memory accesses to OP are known to never straddle
- a 32k boundary. */
+/* Return true if a MODE sized memory accesses to OP plus OFFSET
+ is known to not straddle a 32k boundary. */
static bool
offsettable_ok_by_alignment (rtx op, HOST_WIDE_INT offset,
enum machine_mode mode)
{
tree decl, type;
- unsigned HOST_WIDE_INT dsize, dalign;
+ unsigned HOST_WIDE_INT dsize, dalign, lsb, mask;
if (GET_CODE (op) != SYMBOL_REF)
return false;
+ dsize = GET_MODE_SIZE (mode);
decl = SYMBOL_REF_DECL (op);
if (!decl)
{
- if (GET_MODE_SIZE (mode) == 0)
+ if (dsize == 0)
return false;
/* -fsection-anchors loses the original SYMBOL_REF_DECL when
replacing memory addresses with an anchor plus offset. We
could find the decl by rummaging around in the block->objects
VEC for the given offset but that seems like too much work. */
- dalign = 1;
+ dalign = BITS_PER_UNIT;
if (SYMBOL_REF_HAS_BLOCK_INFO_P (op)
&& SYMBOL_REF_ANCHOR_P (op)
&& SYMBOL_REF_BLOCK (op) != NULL)
{
struct object_block *block = SYMBOL_REF_BLOCK (op);
- HOST_WIDE_INT lsb, mask;
- /* Given the alignment of the block.. */
dalign = block->alignment;
- mask = dalign / BITS_PER_UNIT - 1;
-
- /* ..and the combined offset of the anchor and any offset
- to this block object.. */
offset += SYMBOL_REF_BLOCK_OFFSET (op);
- lsb = offset & -offset;
+ }
+ else if (CONSTANT_POOL_ADDRESS_P (op))
+ {
+ /* It would be nice to have get_pool_align().. */
+ enum machine_mode cmode = get_pool_mode (op);
- /* ..find how many bits of the alignment we know for the
- object. */
- mask &= lsb - 1;
- dalign = mask + 1;
+ dalign = GET_MODE_ALIGNMENT (cmode);
}
- return dalign >= GET_MODE_SIZE (mode);
}
-
- if (DECL_P (decl))
+ else if (DECL_P (decl))
{
- if (TREE_CODE (decl) == FUNCTION_DECL)
- return true;
+ dalign = DECL_ALIGN (decl);
+ if (dsize == 0)
+ {
+ /* Allow BLKmode when the entire object is known to not
+ cross a 32k boundary. */
if (!DECL_SIZE_UNIT (decl))
return false;
@@ -5274,12 +6245,22 @@ offsettable_ok_by_alignment (rtx op, HOST_WIDE_INT offset,
if (dsize > 32768)
return false;
- dalign = DECL_ALIGN_UNIT (decl);
- return dalign >= dsize;
+ return dalign / BITS_PER_UNIT >= dsize;
}
-
+ }
+ else
+ {
type = TREE_TYPE (decl);
+ dalign = TYPE_ALIGN (type);
+ if (CONSTANT_CLASS_P (decl))
+ dalign = CONSTANT_ALIGNMENT (decl, dalign);
+ else
+ dalign = DATA_ALIGNMENT (decl, dalign);
+
+ if (dsize == 0)
+ {
+ /* BLKmode, check the entire object. */
if (TREE_CODE (decl) == STRING_CST)
dsize = TREE_STRING_LENGTH (decl);
else if (TYPE_SIZE_UNIT (type)
@@ -5290,12 +6271,16 @@ offsettable_ok_by_alignment (rtx op, HOST_WIDE_INT offset,
if (dsize > 32768)
return false;
- dalign = TYPE_ALIGN (type);
- if (CONSTANT_CLASS_P (decl))
- dalign = CONSTANT_ALIGNMENT (decl, dalign);
- else
- dalign = DATA_ALIGNMENT (decl, dalign);
- dalign /= BITS_PER_UNIT;
+ return dalign / BITS_PER_UNIT >= dsize;
+ }
+ }
+
+ /* Find how many bits of the alignment we know for this access. */
+ mask = dalign / BITS_PER_UNIT - 1;
+ lsb = offset & -offset;
+ mask &= lsb - 1;
+ dalign = mask + 1;
+
return dalign >= dsize;
}
@@ -5387,7 +6372,7 @@ rs6000_legitimate_offset_address_p (enum machine_mode mode, rtx x,
return false;
if (!reg_offset_addressing_ok_p (mode))
return virtual_stack_registers_memory_p (x);
- if (legitimate_constant_pool_address_p (x, mode, strict))
+ if (legitimate_constant_pool_address_p (x, mode, strict || lra_in_progress))
return true;
if (GET_CODE (XEXP (x, 1)) != CONST_INT)
return false;
@@ -5416,7 +6401,7 @@ rs6000_legitimate_offset_address_p (enum machine_mode mode, rtx x,
/* If we are using VSX scalar loads, restrict ourselves to reg+reg
addressing. */
- if (mode == DFmode && VECTOR_MEM_VSX_P (DFmode))
+ if (VECTOR_MEM_VSX_P (mode))
return false;
if (!worst_case)
@@ -5428,12 +6413,14 @@ rs6000_legitimate_offset_address_p (enum machine_mode mode, rtx x,
break;
case TFmode:
- case TDmode:
- case TImode:
if (TARGET_E500_DOUBLE)
return (SPE_CONST_OFFSET_OK (offset)
&& SPE_CONST_OFFSET_OK (offset + 8));
+ /* fall through */
+ case TDmode:
+ case TImode:
+ case PTImode:
extra = 8;
if (!worst_case)
break;
@@ -5526,9 +6513,21 @@ legitimate_lo_sum_address_p (enum machine_mode mode, rtx x, int strict)
if (TARGET_ELF || TARGET_MACHO)
{
- if (DEFAULT_ABI != ABI_AIX && DEFAULT_ABI != ABI_DARWIN && flag_pic)
+ bool large_toc_ok;
+
+ if (DEFAULT_ABI == ABI_V4 && flag_pic)
return false;
- if (TARGET_TOC)
+ /* LRA don't use LEGITIMIZE_RELOAD_ADDRESS as it usually calls
+ push_reload from reload pass code. LEGITIMIZE_RELOAD_ADDRESS
+ recognizes some LO_SUM addresses as valid although this
+ function says opposite. In most cases, LRA through different
+ transformations can generate correct code for address reloads.
+ It can not manage only some LO_SUM cases. So we need to add
+ code analogous to one in rs6000_legitimize_reload_address for
+ LOW_SUM here saying that some addresses are still valid. */
+ large_toc_ok = (lra_in_progress && TARGET_CMODEL != CMODEL_SMALL
+ && small_toc_ref (x, VOIDmode));
+ if (TARGET_TOC && ! large_toc_ok)
return false;
if (GET_MODE_NUNITS (mode) != 1)
return false;
@@ -5538,7 +6537,7 @@ legitimate_lo_sum_address_p (enum machine_mode mode, rtx x, int strict)
&& (mode == DFmode || mode == DDmode)))
return false;
- return CONSTANT_P (x);
+ return CONSTANT_P (x) || large_toc_ok;
}
return false;
@@ -5582,8 +6581,11 @@ rs6000_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
if (GET_CODE (x) == PLUS && XEXP (x, 1) == const0_rtx)
return force_reg (Pmode, XEXP (x, 0));
+ /* For TImode with load/store quad, restrict addresses to just a single
+ pointer, so it works with both GPRs and VSX registers. */
/* Make sure both operands are registers. */
- else if (GET_CODE (x) == PLUS)
+ else if (GET_CODE (x) == PLUS
+ && (mode != TImode || !TARGET_QUAD_MEMORY))
return gen_rtx_PLUS (Pmode,
force_reg (Pmode, XEXP (x, 0)),
force_reg (Pmode, XEXP (x, 1)));
@@ -5603,11 +6605,12 @@ rs6000_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
case TFmode:
case TDmode:
case TImode:
+ case PTImode:
/* As in legitimate_offset_address_p we do not assume
worst-case. The mode here is just a hint as to the registers
used. A TImode is usually in gprs, but may actually be in
fprs. Leave worst-case scenario for reload to handle via
- insn constraints. */
+ insn constraints. PTImode is only GPRs. */
extra = 8;
break;
default:
@@ -6099,10 +7102,13 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model)
1, const0_rtx, Pmode);
r3 = gen_rtx_REG (Pmode, 3);
- if (DEFAULT_ABI == ABI_AIX && TARGET_64BIT)
+ if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
+ {
+ if (TARGET_64BIT)
insn = gen_tls_gd_aix64 (r3, got, addr, tga, const0_rtx);
- else if (DEFAULT_ABI == ABI_AIX && !TARGET_64BIT)
+ else
insn = gen_tls_gd_aix32 (r3, got, addr, tga, const0_rtx);
+ }
else if (DEFAULT_ABI == ABI_V4)
insn = gen_tls_gd_sysvsi (r3, got, addr, tga, const0_rtx);
else
@@ -6121,10 +7127,13 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model)
1, const0_rtx, Pmode);
r3 = gen_rtx_REG (Pmode, 3);
- if (DEFAULT_ABI == ABI_AIX && TARGET_64BIT)
+ if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
+ {
+ if (TARGET_64BIT)
insn = gen_tls_ld_aix64 (r3, got, tga, const0_rtx);
- else if (DEFAULT_ABI == ABI_AIX && !TARGET_64BIT)
+ else
insn = gen_tls_ld_aix32 (r3, got, tga, const0_rtx);
+ }
else if (DEFAULT_ABI == ABI_V4)
insn = gen_tls_ld_sysvsi (r3, got, tga, const0_rtx);
else
@@ -6239,7 +7248,6 @@ use_toc_relative_ref (rtx sym)
&& ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (get_pool_constant (sym),
get_pool_mode (sym)))
|| (TARGET_CMODEL == CMODEL_MEDIUM
- && !CONSTANT_POOL_ADDRESS_P (sym)
&& SYMBOL_REF_LOCAL_P (sym)));
}
@@ -6338,7 +7346,7 @@ rs6000_legitimize_reload_address (rtx x, enum machine_mode mode,
&& !(TARGET_E500_DOUBLE && (mode == DFmode || mode == TFmode
|| mode == DDmode || mode == TDmode
|| mode == DImode))
- && VECTOR_MEM_NONE_P (mode))
+ && (!VECTOR_MODE_P (mode) || VECTOR_MEM_NONE_P (mode)))
{
HOST_WIDE_INT val = INTVAL (XEXP (x, 1));
HOST_WIDE_INT low = ((val & 0xffff) ^ 0x8000) - 0x8000;
@@ -6369,7 +7377,7 @@ rs6000_legitimize_reload_address (rtx x, enum machine_mode mode,
if (GET_CODE (x) == SYMBOL_REF
&& reg_offset_p
- && VECTOR_MEM_NONE_P (mode)
+ && (!VECTOR_MODE_P (mode) || VECTOR_MEM_NONE_P (mode))
&& !SPE_VECTOR_MODE (mode)
#if TARGET_MACHO
&& DEFAULT_ABI == ABI_DARWIN
@@ -6395,6 +7403,8 @@ rs6000_legitimize_reload_address (rtx x, enum machine_mode mode,
mem is sufficiently aligned. */
&& mode != TFmode
&& mode != TDmode
+ && (mode != TImode || !TARGET_VSX_TIMODE)
+ && mode != PTImode
&& (mode != DImode || TARGET_POWERPC64)
&& ((mode != DFmode && mode != DDmode) || TARGET_POWERPC64
|| (TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT)))
@@ -6515,15 +7525,9 @@ rs6000_legitimate_address_p (enum machine_mode mode, rtx x, bool reg_ok_strict)
return 0;
if (legitimate_indirect_address_p (x, reg_ok_strict))
return 1;
- if ((GET_CODE (x) == PRE_INC || GET_CODE (x) == PRE_DEC)
- && !VECTOR_MEM_ALTIVEC_OR_VSX_P (mode)
- && !SPE_VECTOR_MODE (mode)
- && mode != TFmode
- && mode != TDmode
- /* Restrict addressing for DI because of our SUBREG hackery. */
- && !(TARGET_E500_DOUBLE
- && (mode == DFmode || mode == DDmode || mode == DImode))
- && TARGET_UPDATE
+ if (TARGET_UPDATE
+ && (GET_CODE (x) == PRE_INC || GET_CODE (x) == PRE_DEC)
+ && mode_supports_pre_incdec_p (mode)
&& legitimate_indirect_address_p (XEXP (x, 0), reg_ok_strict))
return 1;
if (virtual_stack_registers_memory_p (x))
@@ -6531,8 +7535,16 @@ rs6000_legitimate_address_p (enum machine_mode mode, rtx x, bool reg_ok_strict)
if (reg_offset_p && legitimate_small_data_p (mode, x))
return 1;
if (reg_offset_p
- && legitimate_constant_pool_address_p (x, mode, reg_ok_strict))
+ && legitimate_constant_pool_address_p (x, mode,
+ reg_ok_strict || lra_in_progress))
return 1;
+ /* For TImode, if we have load/store quad and TImode in VSX registers, only
+ allow register indirect addresses. This will allow the values to go in
+ either GPRs or VSX registers without reloading. The vector types would
+ tend to go into VSX registers, so we allow REG+REG, while TImode seems
+ somewhat split, in that some uses are GPR based, and some VSX based. */
+ if (mode == TImode && TARGET_QUAD_MEMORY && TARGET_VSX_TIMODE)
+ return 0;
/* If not REG_OK_STRICT (before reload) let pass any stack offset. */
if (! reg_ok_strict
&& reg_offset_p
@@ -6544,31 +7556,20 @@ rs6000_legitimate_address_p (enum machine_mode mode, rtx x, bool reg_ok_strict)
return 1;
if (rs6000_legitimate_offset_address_p (mode, x, reg_ok_strict, false))
return 1;
- if (mode != TImode
- && mode != TFmode
+ if (mode != TFmode
&& mode != TDmode
&& ((TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT)
|| TARGET_POWERPC64
|| (mode != DFmode && mode != DDmode)
|| (TARGET_E500_DOUBLE && mode != DDmode))
&& (TARGET_POWERPC64 || mode != DImode)
+ && (mode != TImode || VECTOR_MEM_VSX_P (TImode))
+ && mode != PTImode
&& !avoiding_indexed_address_p (mode)
&& legitimate_indexed_address_p (x, reg_ok_strict))
return 1;
- if (GET_CODE (x) == PRE_MODIFY
- && mode != TImode
- && mode != TFmode
- && mode != TDmode
- && ((TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT)
- || TARGET_POWERPC64
- || ((mode != DFmode && mode != DDmode) || TARGET_E500_DOUBLE))
- && (TARGET_POWERPC64 || mode != DImode)
- && !VECTOR_MEM_ALTIVEC_OR_VSX_P (mode)
- && !SPE_VECTOR_MODE (mode)
- /* Restrict addressing for DI because of our SUBREG hackery. */
- && !(TARGET_E500_DOUBLE
- && (mode == DFmode || mode == DDmode || mode == DImode))
- && TARGET_UPDATE
+ if (TARGET_UPDATE && GET_CODE (x) == PRE_MODIFY
+ && mode_supports_pre_modify_p (mode)
&& legitimate_indirect_address_p (XEXP (x, 0), reg_ok_strict)
&& (rs6000_legitimate_offset_address_p (mode, XEXP (x, 1),
reg_ok_strict, false)
@@ -6589,10 +7590,13 @@ rs6000_debug_legitimate_address_p (enum machine_mode mode, rtx x,
bool ret = rs6000_legitimate_address_p (mode, x, reg_ok_strict);
fprintf (stderr,
"\nrs6000_legitimate_address_p: return = %s, mode = %s, "
- "strict = %d, code = %s\n",
+ "strict = %d, reload = %s, code = %s\n",
ret ? "true" : "false",
GET_MODE_NAME (mode),
reg_ok_strict,
+ (reload_completed
+ ? "after"
+ : (reload_in_progress ? "progress" : "before")),
GET_RTX_NAME (GET_CODE (x)));
debug_rtx (x);
@@ -6758,7 +7762,7 @@ rs6000_conditional_register_usage (void)
/* The TOC register is not killed across calls in a way that is
visible to the compiler. */
- if (DEFAULT_ABI == ABI_AIX)
+ if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
call_really_used_regs[2] = 0;
if (DEFAULT_ABI == ABI_V4
@@ -6819,6 +7823,7 @@ rs6000_conditional_register_usage (void)
}
}
+
/* Try to output insns to set TARGET equal to the constant C if it can
be done in less than N insns. Do all computations in MODE.
Returns the place where the output has been placed if it can be
@@ -7006,7 +8011,7 @@ rs6000_emit_set_long_const (rtx dest, HOST_WIDE_INT c1, HOST_WIDE_INT c2)
}
/* Helper for the following. Get rid of [r+r] memory refs
- in cases where it won't work (TImode, TFmode, TDmode). */
+ in cases where it won't work (TImode, TFmode, TDmode, PTImode). */
static void
rs6000_eliminate_indexed_memrefs (rtx operands[2])
@@ -7031,6 +8036,131 @@ rs6000_eliminate_indexed_memrefs (rtx operands[2])
copy_addr_to_reg (XEXP (operands[1], 0)));
}
+/* Generate a vector of constants to permute MODE for a little-endian
+ storage operation by swapping the two halves of a vector. */
+static rtvec
+rs6000_const_vec (enum machine_mode mode)
+{
+ int i, subparts;
+ rtvec v;
+
+ switch (mode)
+ {
+ case V1TImode:
+ subparts = 1;
+ break;
+ case V2DFmode:
+ case V2DImode:
+ subparts = 2;
+ break;
+ case V4SFmode:
+ case V4SImode:
+ subparts = 4;
+ break;
+ case V8HImode:
+ subparts = 8;
+ break;
+ case V16QImode:
+ subparts = 16;
+ break;
+ default:
+ gcc_unreachable();
+ }
+
+ v = rtvec_alloc (subparts);
+
+ for (i = 0; i < subparts / 2; ++i)
+ RTVEC_ELT (v, i) = gen_rtx_CONST_INT (DImode, i + subparts / 2);
+ for (i = subparts / 2; i < subparts; ++i)
+ RTVEC_ELT (v, i) = gen_rtx_CONST_INT (DImode, i - subparts / 2);
+
+ return v;
+}
+
+/* Generate a permute rtx that represents an lxvd2x, stxvd2x, or xxpermdi
+ for a VSX load or store operation. */
+rtx
+rs6000_gen_le_vsx_permute (rtx source, enum machine_mode mode)
+{
+ rtx par = gen_rtx_PARALLEL (VOIDmode, rs6000_const_vec (mode));
+ return gen_rtx_VEC_SELECT (mode, source, par);
+}
+
+/* Emit a little-endian load from vector memory location SOURCE to VSX
+ register DEST in mode MODE. The load is done with two permuting
+ insn's that represent an lxvd2x and xxpermdi. */
+void
+rs6000_emit_le_vsx_load (rtx dest, rtx source, enum machine_mode mode)
+{
+ rtx tmp, permute_mem, permute_reg;
+
+ /* Use V2DImode to do swaps of types with 128-bit scalare parts (TImode,
+ V1TImode). */
+ if (mode == TImode || mode == V1TImode)
+ {
+ mode = V2DImode;
+ dest = gen_lowpart (V2DImode, dest);
+ source = adjust_address (source, V2DImode, 0);
+ }
+
+ tmp = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (dest) : dest;
+ permute_mem = rs6000_gen_le_vsx_permute (source, mode);
+ permute_reg = rs6000_gen_le_vsx_permute (tmp, mode);
+ emit_insn (gen_rtx_SET (VOIDmode, tmp, permute_mem));
+ emit_insn (gen_rtx_SET (VOIDmode, dest, permute_reg));
+}
+
+/* Emit a little-endian store to vector memory location DEST from VSX
+ register SOURCE in mode MODE. The store is done with two permuting
+ insn's that represent an xxpermdi and an stxvd2x. */
+void
+rs6000_emit_le_vsx_store (rtx dest, rtx source, enum machine_mode mode)
+{
+ rtx tmp, permute_src, permute_tmp;
+
+ /* Use V2DImode to do swaps of types with 128-bit scalare parts (TImode,
+ V1TImode). */
+ if (mode == TImode || mode == V1TImode)
+ {
+ mode = V2DImode;
+ dest = adjust_address (dest, V2DImode, 0);
+ source = gen_lowpart (V2DImode, source);
+ }
+
+ tmp = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (source) : source;
+ permute_src = rs6000_gen_le_vsx_permute (source, mode);
+ permute_tmp = rs6000_gen_le_vsx_permute (tmp, mode);
+ emit_insn (gen_rtx_SET (VOIDmode, tmp, permute_src));
+ emit_insn (gen_rtx_SET (VOIDmode, dest, permute_tmp));
+}
+
+/* Emit a sequence representing a little-endian VSX load or store,
+ moving data from SOURCE to DEST in mode MODE. This is done
+ separately from rs6000_emit_move to ensure it is called only
+ during expand. LE VSX loads and stores introduced later are
+ handled with a split. The expand-time RTL generation allows
+ us to optimize away redundant pairs of register-permutes. */
+void
+rs6000_emit_le_vsx_move (rtx dest, rtx source, enum machine_mode mode)
+{
+ gcc_assert (!BYTES_BIG_ENDIAN
+ && VECTOR_MEM_VSX_P (mode)
+ && !gpr_or_gpr_p (dest, source)
+ && (MEM_P (source) ^ MEM_P (dest)));
+
+ if (MEM_P (source))
+ {
+ gcc_assert (REG_P (dest) || GET_CODE (dest) == SUBREG);
+ rs6000_emit_le_vsx_load (dest, source, mode);
+ }
+ else
+ {
+ if (!REG_P (source))
+ source = force_reg (mode, source);
+ rs6000_emit_le_vsx_store (dest, source, mode);
+ }
+}
+
/* Emit a move from SOURCE to DEST in mode MODE. */
void
rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
@@ -7149,8 +8279,71 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
cfun->machine->sdmode_stack_slot =
eliminate_regs (cfun->machine->sdmode_stack_slot, VOIDmode, NULL_RTX);
+
+ if (lra_in_progress
+ && mode == SDmode
+ && REG_P (operands[0]) && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER
+ && reg_preferred_class (REGNO (operands[0])) == NO_REGS
+ && (REG_P (operands[1])
+ || (GET_CODE (operands[1]) == SUBREG
+ && REG_P (SUBREG_REG (operands[1])))))
+ {
+ int regno = REGNO (GET_CODE (operands[1]) == SUBREG
+ ? SUBREG_REG (operands[1]) : operands[1]);
+ enum reg_class cl;
+
+ if (regno >= FIRST_PSEUDO_REGISTER)
+ {
+ cl = reg_preferred_class (regno);
+ gcc_assert (cl != NO_REGS);
+ regno = ira_class_hard_regs[cl][0];
+ }
+ if (FP_REGNO_P (regno))
+ {
+ if (GET_MODE (operands[0]) != DDmode)
+ operands[0] = gen_rtx_SUBREG (DDmode, operands[0], 0);
+ emit_insn (gen_movsd_store (operands[0], operands[1]));
+ }
+ else if (INT_REGNO_P (regno))
+ emit_insn (gen_movsd_hardfloat (operands[0], operands[1]));
+ else
+ gcc_unreachable();
+ return;
+ }
+ if (lra_in_progress
+ && mode == SDmode
+ && (REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+ && REG_P (SUBREG_REG (operands[0]))))
+ && REG_P (operands[1]) && REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER
+ && reg_preferred_class (REGNO (operands[1])) == NO_REGS)
+ {
+ int regno = REGNO (GET_CODE (operands[0]) == SUBREG
+ ? SUBREG_REG (operands[0]) : operands[0]);
+ enum reg_class cl;
+
+ if (regno >= FIRST_PSEUDO_REGISTER)
+ {
+ cl = reg_preferred_class (regno);
+ gcc_assert (cl != NO_REGS);
+ regno = ira_class_hard_regs[cl][0];
+ }
+ if (FP_REGNO_P (regno))
+ {
+ if (GET_MODE (operands[1]) != DDmode)
+ operands[1] = gen_rtx_SUBREG (DDmode, operands[1], 0);
+ emit_insn (gen_movsd_load (operands[0], operands[1]));
+ }
+ else if (INT_REGNO_P (regno))
+ emit_insn (gen_movsd_hardfloat (operands[0], operands[1]));
+ else
+ gcc_unreachable();
+ return;
+ }
+
if (reload_in_progress
&& mode == SDmode
+ && cfun->machine->sdmode_stack_slot != NULL_RTX
&& MEM_P (operands[0])
&& rtx_equal_p (operands[0], cfun->machine->sdmode_stack_slot)
&& REG_P (operands[1]))
@@ -7163,7 +8356,9 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
}
else if (INT_REGNO_P (REGNO (operands[1])))
{
- rtx mem = adjust_address_nv (operands[0], mode, 4);
+ rtx mem = operands[0];
+ if (BYTES_BIG_ENDIAN)
+ mem = adjust_address_nv (mem, mode, 4);
mem = eliminate_regs (mem, VOIDmode, NULL_RTX);
emit_insn (gen_movsd_hardfloat (mem, operands[1]));
}
@@ -7175,6 +8370,7 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
&& mode == SDmode
&& REG_P (operands[0])
&& MEM_P (operands[1])
+ && cfun->machine->sdmode_stack_slot != NULL_RTX
&& rtx_equal_p (operands[1], cfun->machine->sdmode_stack_slot))
{
if (FP_REGNO_P (REGNO (operands[0])))
@@ -7185,7 +8381,9 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
}
else if (INT_REGNO_P (REGNO (operands[0])))
{
- rtx mem = adjust_address_nv (operands[1], mode, 4);
+ rtx mem = operands[1];
+ if (BYTES_BIG_ENDIAN)
+ mem = adjust_address_nv (mem, mode, 4);
mem = eliminate_regs (mem, VOIDmode, NULL_RTX);
emit_insn (gen_movsd_hardfloat (operands[0], mem));
}
@@ -7230,6 +8428,7 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
case V1DImode:
case V2DFmode:
case V2DImode:
+ case V1TImode:
if (CONSTANT_P (operands[1])
&& !easy_vector_constant (operands[1], mode))
operands[1] = force_const_mem (mode, operands[1]);
@@ -7388,6 +8587,11 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
break;
case TImode:
+ if (!VECTOR_MEM_VSX_P (TImode))
+ rs6000_eliminate_indexed_memrefs (operands);
+ break;
+
+ case PTImode:
rs6000_eliminate_indexed_memrefs (operands);
break;
@@ -7426,18 +8630,231 @@ rs6000_member_type_forces_blk (const_tree field, enum machine_mode mode)
}
/* Nonzero if we can use a floating-point register to pass this arg. */
-#define USE_FP_FOR_ARG_P(CUM,MODE,TYPE) \
+#define USE_FP_FOR_ARG_P(CUM,MODE) \
(SCALAR_FLOAT_MODE_P (MODE) \
&& (CUM)->fregno <= FP_ARG_MAX_REG \
&& TARGET_HARD_FLOAT && TARGET_FPRS)
/* Nonzero if we can use an AltiVec register to pass this arg. */
-#define USE_ALTIVEC_FOR_ARG_P(CUM,MODE,TYPE,NAMED) \
+#define USE_ALTIVEC_FOR_ARG_P(CUM,MODE,NAMED) \
(ALTIVEC_OR_VSX_VECTOR_MODE (MODE) \
&& (CUM)->vregno <= ALTIVEC_ARG_MAX_REG \
&& TARGET_ALTIVEC_ABI \
&& (NAMED))
+/* Walk down the type tree of TYPE counting consecutive base elements.
+ If *MODEP is VOIDmode, then set it to the first valid floating point
+ or vector type. If a non-floating point or vector type is found, or
+ if a floating point or vector type that doesn't match a non-VOIDmode
+ *MODEP is found, then return -1, otherwise return the count in the
+ sub-tree. */
+
+static int
+rs6000_aggregate_candidate (const_tree type, enum machine_mode *modep)
+{
+ enum machine_mode mode;
+ HOST_WIDE_INT size;
+
+ switch (TREE_CODE (type))
+ {
+ case REAL_TYPE:
+ mode = TYPE_MODE (type);
+ if (!SCALAR_FLOAT_MODE_P (mode))
+ return -1;
+
+ if (*modep == VOIDmode)
+ *modep = mode;
+
+ if (*modep == mode)
+ return 1;
+
+ break;
+
+ case COMPLEX_TYPE:
+ mode = TYPE_MODE (TREE_TYPE (type));
+ if (!SCALAR_FLOAT_MODE_P (mode))
+ return -1;
+
+ if (*modep == VOIDmode)
+ *modep = mode;
+
+ if (*modep == mode)
+ return 2;
+
+ break;
+
+ case VECTOR_TYPE:
+ if (!TARGET_ALTIVEC_ABI || !TARGET_ALTIVEC)
+ return -1;
+
+ /* Use V4SImode as representative of all 128-bit vector types. */
+ size = int_size_in_bytes (type);
+ switch (size)
+ {
+ case 16:
+ mode = V4SImode;
+ break;
+ default:
+ return -1;
+ }
+
+ if (*modep == VOIDmode)
+ *modep = mode;
+
+ /* Vector modes are considered to be opaque: two vectors are
+ equivalent for the purposes of being homogeneous aggregates
+ if they are the same size. */
+ if (*modep == mode)
+ return 1;
+
+ break;
+
+ case ARRAY_TYPE:
+ {
+ int count;
+ tree index = TYPE_DOMAIN (type);
+
+ /* Can't handle incomplete types. */
+ if (!COMPLETE_TYPE_P (type))
+ return -1;
+
+ count = rs6000_aggregate_candidate (TREE_TYPE (type), modep);
+ if (count == -1
+ || !index
+ || !TYPE_MAX_VALUE (index)
+ || !host_integerp (TYPE_MAX_VALUE (index), 1)
+ || !TYPE_MIN_VALUE (index)
+ || !host_integerp (TYPE_MIN_VALUE (index), 1)
+ || count < 0)
+ return -1;
+
+ count *= (1 + tree_low_cst (TYPE_MAX_VALUE (index), 1)
+ - tree_low_cst (TYPE_MIN_VALUE (index), 1));
+
+ /* There must be no padding. */
+ if (!host_integerp (TYPE_SIZE (type), 1)
+ || (tree_low_cst (TYPE_SIZE (type), 1)
+ != count * GET_MODE_BITSIZE (*modep)))
+ return -1;
+
+ return count;
+ }
+
+ case RECORD_TYPE:
+ {
+ int count = 0;
+ int sub_count;
+ tree field;
+
+ /* Can't handle incomplete types. */
+ if (!COMPLETE_TYPE_P (type))
+ return -1;
+
+ for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
+ {
+ if (TREE_CODE (field) != FIELD_DECL)
+ continue;
+
+ sub_count = rs6000_aggregate_candidate (TREE_TYPE (field), modep);
+ if (sub_count < 0)
+ return -1;
+ count += sub_count;
+ }
+
+ /* There must be no padding. */
+ if (!host_integerp (TYPE_SIZE (type), 1)
+ || (tree_low_cst (TYPE_SIZE (type), 1)
+ != count * GET_MODE_BITSIZE (*modep)))
+ return -1;
+
+ return count;
+ }
+
+ case UNION_TYPE:
+ case QUAL_UNION_TYPE:
+ {
+ /* These aren't very interesting except in a degenerate case. */
+ int count = 0;
+ int sub_count;
+ tree field;
+
+ /* Can't handle incomplete types. */
+ if (!COMPLETE_TYPE_P (type))
+ return -1;
+
+ for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
+ {
+ if (TREE_CODE (field) != FIELD_DECL)
+ continue;
+
+ sub_count = rs6000_aggregate_candidate (TREE_TYPE (field), modep);
+ if (sub_count < 0)
+ return -1;
+ count = count > sub_count ? count : sub_count;
+ }
+
+ /* There must be no padding. */
+ if (!host_integerp (TYPE_SIZE (type), 1)
+ || (tree_low_cst (TYPE_SIZE (type), 1)
+ != count * GET_MODE_BITSIZE (*modep)))
+ return -1;
+
+ return count;
+ }
+
+ default:
+ break;
+ }
+
+ return -1;
+}
+
+/* If an argument, whose type is described by TYPE and MODE, is a homogeneous
+ float or vector aggregate that shall be passed in FP/vector registers
+ according to the ELFv2 ABI, return the homogeneous element mode in
+ *ELT_MODE and the number of elements in *N_ELTS, and return TRUE.
+
+ Otherwise, set *ELT_MODE to MODE and *N_ELTS to 1, and return FALSE. */
+
+static bool
+rs6000_discover_homogeneous_aggregate (enum machine_mode mode, const_tree type,
+ enum machine_mode *elt_mode,
+ int *n_elts)
+{
+ /* Note that we do not accept complex types at the top level as
+ homogeneous aggregates; these types are handled via the
+ targetm.calls.split_complex_arg mechanism. Complex types
+ can be elements of homogeneous aggregates, however. */
+ if (DEFAULT_ABI == ABI_ELFv2 && type && AGGREGATE_TYPE_P (type))
+ {
+ enum machine_mode field_mode = VOIDmode;
+ int field_count = rs6000_aggregate_candidate (type, &field_mode);
+
+ if (field_count > 0)
+ {
+ int n_regs = (SCALAR_FLOAT_MODE_P (field_mode)?
+ (GET_MODE_SIZE (field_mode) + 7) >> 3 : 1);
+
+ /* The ELFv2 ABI allows homogeneous aggregates to occupy
+ up to AGGR_ARG_NUM_REG registers. */
+ if (field_count * n_regs <= AGGR_ARG_NUM_REG)
+ {
+ if (elt_mode)
+ *elt_mode = field_mode;
+ if (n_elts)
+ *n_elts = field_count;
+ return true;
+ }
+ }
+ }
+
+ if (elt_mode)
+ *elt_mode = mode;
+ if (n_elts)
+ *n_elts = 1;
+ return false;
+}
+
/* Return a nonzero value to say to return the function value in
memory, just as large structures are always returned. TYPE will be
the data type of the value, and FNTYPE will be the type of the
@@ -7490,6 +8907,16 @@ rs6000_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED)
/* Otherwise fall through to more conventional ABI rules. */
}
+ /* The ELFv2 ABI returns homogeneous VFP aggregates in registers */
+ if (rs6000_discover_homogeneous_aggregate (TYPE_MODE (type), type,
+ NULL, NULL))
+ return false;
+
+ /* The ELFv2 ABI returns aggregates up to 16B in registers */
+ if (DEFAULT_ABI == ABI_ELFv2 && AGGREGATE_TYPE_P (type)
+ && (unsigned HOST_WIDE_INT) int_size_in_bytes (type) <= 16)
+ return false;
+
if (AGGREGATE_TYPE_P (type)
&& (aix_struct_return
|| (unsigned HOST_WIDE_INT) int_size_in_bytes (type) > 8))
@@ -7521,6 +8948,19 @@ rs6000_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED)
return false;
}
+/* Specify whether values returned in registers should be at the most
+ significant end of a register. We want aggregates returned by
+ value to match the way aggregates are passed to functions. */
+
+static bool
+rs6000_return_in_msb (const_tree valtype)
+{
+ return (DEFAULT_ABI == ABI_ELFv2
+ && BYTES_BIG_ENDIAN
+ && AGGREGATE_TYPE_P (valtype)
+ && FUNCTION_ARG_PADDING (TYPE_MODE (valtype), valtype) == upward);
+}
+
#ifdef HAVE_AS_GNU_ATTRIBUTE
/* Return TRUE if a call to function FNDECL may be one that
potentially affects the function calling ABI of the object file. */
@@ -7657,7 +9097,7 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, tree fntype,
static bool
rs6000_must_pass_in_stack (enum machine_mode mode, const_tree type)
{
- if (DEFAULT_ABI == ABI_AIX || TARGET_64BIT)
+ if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2 || TARGET_64BIT)
return must_pass_in_stack_var_size (mode, type);
else
return must_pass_in_stack_var_size_or_pad (mode, type);
@@ -7738,6 +9178,11 @@ function_arg_padding (enum machine_mode mode, const_tree type)
static unsigned int
rs6000_function_arg_boundary (enum machine_mode mode, const_tree type)
{
+ enum machine_mode elt_mode;
+ int n_elts;
+
+ rs6000_discover_homogeneous_aggregate (mode, type, &elt_mode, &n_elts);
+
if (DEFAULT_ABI == ABI_V4
&& (GET_MODE_SIZE (mode) == 8
|| (TARGET_HARD_FLOAT
@@ -7749,12 +9194,13 @@ rs6000_function_arg_boundary (enum machine_mode mode, const_tree type)
&& int_size_in_bytes (type) >= 8
&& int_size_in_bytes (type) < 16))
return 64;
- else if (ALTIVEC_OR_VSX_VECTOR_MODE (mode)
+ else if (ALTIVEC_OR_VSX_VECTOR_MODE (elt_mode)
|| (type && TREE_CODE (type) == VECTOR_TYPE
&& int_size_in_bytes (type) >= 16))
return 128;
- else if (TARGET_MACHO
- && rs6000_darwin64_abi
+ else if (((TARGET_MACHO && rs6000_darwin64_abi)
+ || DEFAULT_ABI == ABI_ELFv2
+ || (DEFAULT_ABI == ABI_AIX && !rs6000_compat_align_parm))
&& mode == BLKmode
&& type && TYPE_ALIGN (type) > 64)
return 128;
@@ -7762,6 +9208,16 @@ rs6000_function_arg_boundary (enum machine_mode mode, const_tree type)
return PARM_BOUNDARY;
}
+/* The offset in words to the start of the parameter save area. */
+
+static unsigned int
+rs6000_parm_offset (void)
+{
+ return (DEFAULT_ABI == ABI_V4 ? 2
+ : DEFAULT_ABI == ABI_ELFv2 ? 4
+ : 6);
+}
+
/* For a function parm of MODE and TYPE, return the starting word in
the parameter area. NWORDS of the parameter area are already used. */
@@ -7770,11 +9226,9 @@ rs6000_parm_start (enum machine_mode mode, const_tree type,
unsigned int nwords)
{
unsigned int align;
- unsigned int parm_offset;
align = rs6000_function_arg_boundary (mode, type) / PARM_BOUNDARY - 1;
- parm_offset = DEFAULT_ABI == ABI_V4 ? 2 : 6;
- return nwords + (-(parm_offset + nwords) & align);
+ return nwords + (-(rs6000_parm_offset () + nwords) & align);
}
/* Compute the size (in words) of a function argument. */
@@ -7881,7 +9335,7 @@ rs6000_darwin64_record_arg_advance_recurse (CUMULATIVE_ARGS *cum,
if (TREE_CODE (ftype) == RECORD_TYPE)
rs6000_darwin64_record_arg_advance_recurse (cum, ftype, bitpos);
- else if (USE_FP_FOR_ARG_P (cum, mode, ftype))
+ else if (USE_FP_FOR_ARG_P (cum, mode))
{
unsigned n_fpregs = (GET_MODE_SIZE (mode) + 7) >> 3;
rs6000_darwin64_record_arg_advance_flush (cum, bitpos, 0);
@@ -7922,7 +9376,7 @@ rs6000_darwin64_record_arg_advance_recurse (CUMULATIVE_ARGS *cum,
else
cum->words += n_fpregs;
}
- else if (USE_ALTIVEC_FOR_ARG_P (cum, mode, type, 1))
+ else if (USE_ALTIVEC_FOR_ARG_P (cum, mode, 1))
{
rs6000_darwin64_record_arg_advance_flush (cum, bitpos, 0);
cum->vregno++;
@@ -7959,6 +9413,11 @@ static void
rs6000_function_arg_advance_1 (CUMULATIVE_ARGS *cum, enum machine_mode mode,
const_tree type, bool named, int depth)
{
+ enum machine_mode elt_mode;
+ int n_elts;
+
+ rs6000_discover_homogeneous_aggregate (mode, type, &elt_mode, &n_elts);
+
/* Only tick off an argument if we're not recursing. */
if (depth == 0)
cum->nargs_prototype--;
@@ -7979,15 +9438,16 @@ rs6000_function_arg_advance_1 (CUMULATIVE_ARGS *cum, enum machine_mode mode,
#endif
if (TARGET_ALTIVEC_ABI
- && (ALTIVEC_OR_VSX_VECTOR_MODE (mode)
+ && (ALTIVEC_OR_VSX_VECTOR_MODE (elt_mode)
|| (type && TREE_CODE (type) == VECTOR_TYPE
&& int_size_in_bytes (type) == 16)))
{
bool stack = false;
- if (USE_ALTIVEC_FOR_ARG_P (cum, mode, type, named))
+ if (USE_ALTIVEC_FOR_ARG_P (cum, elt_mode, named))
{
- cum->vregno++;
+ cum->vregno += n_elts;
+
if (!TARGET_ALTIVEC)
error ("cannot pass argument in vector register because"
" altivec instructions are disabled, use -maltivec"
@@ -7996,7 +9456,8 @@ rs6000_function_arg_advance_1 (CUMULATIVE_ARGS *cum, enum machine_mode mode,
/* PowerPC64 Linux and AIX allocate GPRs for a vector argument
even if it is going to be passed in a vector register.
Darwin does the same for variable-argument functions. */
- if ((DEFAULT_ABI == ABI_AIX && TARGET_64BIT)
+ if (((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
+ && TARGET_64BIT)
|| (cum->stdarg && DEFAULT_ABI != ABI_V4))
stack = true;
}
@@ -8007,15 +9468,13 @@ rs6000_function_arg_advance_1 (CUMULATIVE_ARGS *cum, enum machine_mode mode,
{
int align;
- /* Vector parameters must be 16-byte aligned. This places
- them at 2 mod 4 in terms of words in 32-bit mode, since
- the parameter save area starts at offset 24 from the
- stack. In 64-bit mode, they just have to start on an
- even word, since the parameter save area is 16-byte
- aligned. Space for GPRs is reserved even if the argument
- will be passed in memory. */
+ /* Vector parameters must be 16-byte aligned. In 32-bit
+ mode this means we need to take into account the offset
+ to the parameter save area. In 64-bit mode, they just
+ have to start on an even word, since the parameter save
+ area is 16-byte aligned. */
if (TARGET_32BIT)
- align = (2 - cum->words) & 3;
+ align = -(rs6000_parm_offset () + cum->words) & 3;
else
align = cum->words & 1;
cum->words += align + rs6000_arg_size (mode, type);
@@ -8140,15 +9599,15 @@ rs6000_function_arg_advance_1 (CUMULATIVE_ARGS *cum, enum machine_mode mode,
cum->words = align_words + n_words;
- if (SCALAR_FLOAT_MODE_P (mode)
+ if (SCALAR_FLOAT_MODE_P (elt_mode)
&& TARGET_HARD_FLOAT && TARGET_FPRS)
{
/* _Decimal128 must be passed in an even/odd float register pair.
This assumes that the register number is odd when fregno is
odd. */
- if (mode == TDmode && (cum->fregno % 2) == 1)
+ if (elt_mode == TDmode && (cum->fregno % 2) == 1)
cum->fregno++;
- cum->fregno += (GET_MODE_SIZE (mode) + 7) >> 3;
+ cum->fregno += n_elts * ((GET_MODE_SIZE (elt_mode) + 7) >> 3);
}
if (TARGET_DEBUG_ARG)
@@ -8358,7 +9817,7 @@ rs6000_darwin64_record_arg_recurse (CUMULATIVE_ARGS *cum, const_tree type,
if (TREE_CODE (ftype) == RECORD_TYPE)
rs6000_darwin64_record_arg_recurse (cum, ftype, bitpos, rvec, k);
- else if (cum->named && USE_FP_FOR_ARG_P (cum, mode, ftype))
+ else if (cum->named && USE_FP_FOR_ARG_P (cum, mode))
{
unsigned n_fpreg = (GET_MODE_SIZE (mode) + 7) >> 3;
#if 0
@@ -8386,7 +9845,7 @@ rs6000_darwin64_record_arg_recurse (CUMULATIVE_ARGS *cum, const_tree type,
if (mode == TFmode || mode == TDmode)
cum->fregno++;
}
- else if (cum->named && USE_ALTIVEC_FOR_ARG_P (cum, mode, ftype, 1))
+ else if (cum->named && USE_ALTIVEC_FOR_ARG_P (cum, mode, 1))
{
rs6000_darwin64_record_arg_flush (cum, bitpos, rvec, k);
rvec[(*k)++]
@@ -8503,6 +9962,84 @@ rs6000_mixed_function_arg (enum machine_mode mode, const_tree type,
return gen_rtx_PARALLEL (mode, gen_rtvec_v (k, rvec));
}
+/* We have an argument of MODE and TYPE that goes into FPRs or VRs,
+ but must also be copied into the parameter save area starting at
+ offset ALIGN_WORDS. Fill in RVEC with the elements corresponding
+ to the GPRs and/or memory. Return the number of elements used. */
+
+static int
+rs6000_psave_function_arg (enum machine_mode mode, const_tree type,
+ int align_words, rtx *rvec)
+{
+ int k = 0;
+
+ if (align_words < GP_ARG_NUM_REG)
+ {
+ int n_words = rs6000_arg_size (mode, type);
+
+ if (align_words + n_words > GP_ARG_NUM_REG
+ || mode == BLKmode
+ || (TARGET_32BIT && TARGET_POWERPC64))
+ {
+ /* If this is partially on the stack, then we only
+ include the portion actually in registers here. */
+ enum machine_mode rmode = TARGET_32BIT ? SImode : DImode;
+ int i = 0;
+
+ if (align_words + n_words > GP_ARG_NUM_REG)
+ {
+ /* Not all of the arg fits in gprs. Say that it goes in memory
+ too, using a magic NULL_RTX component. Also see comment in
+ rs6000_mixed_function_arg for why the normal
+ function_arg_partial_nregs scheme doesn't work in this case. */
+ rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, NULL_RTX, const0_rtx);
+ }
+
+ do
+ {
+ rtx r = gen_rtx_REG (rmode, GP_ARG_MIN_REG + align_words);
+ rtx off = GEN_INT (i++ * GET_MODE_SIZE (rmode));
+ rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, r, off);
+ }
+ while (++align_words < GP_ARG_NUM_REG && --n_words != 0);
+ }
+ else
+ {
+ /* The whole arg fits in gprs. */
+ rtx r = gen_rtx_REG (mode, GP_ARG_MIN_REG + align_words);
+ rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, r, const0_rtx);
+ }
+ }
+ else
+ {
+ /* It's entirely in memory. */
+ rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, NULL_RTX, const0_rtx);
+ }
+
+ return k;
+}
+
+/* RVEC is a vector of K components of an argument of mode MODE.
+ Construct the final function_arg return value from it. */
+
+static rtx
+rs6000_finish_function_arg (enum machine_mode mode, rtx *rvec, int k)
+{
+ gcc_assert (k >= 1);
+
+ /* Avoid returning a PARALLEL in the trivial cases. */
+ if (k == 1)
+ {
+ if (XEXP (rvec[0], 0) == NULL_RTX)
+ return NULL_RTX;
+
+ if (GET_MODE (XEXP (rvec[0], 0)) == mode)
+ return XEXP (rvec[0], 0);
+ }
+
+ return gen_rtx_PARALLEL (mode, gen_rtvec_v (k, rvec));
+}
+
/* Determine where to put an argument to a function.
Value is zero to push the argument on the stack,
or a hard register in which to store the argument.
@@ -8537,6 +10074,8 @@ rs6000_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
enum rs6000_abi abi = DEFAULT_ABI;
+ enum machine_mode elt_mode;
+ int n_elts;
/* Return a marker to indicate whether CR1 needs to set or clear the
bit that V.4 uses to say fp args were passed in registers.
@@ -8563,6 +10102,8 @@ rs6000_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
return GEN_INT (cum->call_cookie & ~CALL_LIBCALL);
}
+ rs6000_discover_homogeneous_aggregate (mode, type, &elt_mode, &n_elts);
+
if (TARGET_MACHO && rs6000_darwin64_struct_check_p (mode, type))
{
rtx rslt = rs6000_darwin64_record_arg (cum, type, named, /*retval= */false);
@@ -8571,33 +10112,30 @@ rs6000_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
/* Else fall through to usual handling. */
}
- if (USE_ALTIVEC_FOR_ARG_P (cum, mode, type, named))
- if (TARGET_64BIT && ! cum->prototype)
+ if (USE_ALTIVEC_FOR_ARG_P (cum, elt_mode, named))
{
- /* Vector parameters get passed in vector register
- and also in GPRs or memory, in absence of prototype. */
- int align_words;
- rtx slot;
- align_words = (cum->words + 1) & ~1;
+ rtx rvec[GP_ARG_NUM_REG + AGGR_ARG_NUM_REG + 1];
+ rtx r, off;
+ int i, k = 0;
- if (align_words >= GP_ARG_NUM_REG)
+ /* Do we also need to pass this argument in the parameter
+ save area? */
+ if (TARGET_64BIT && ! cum->prototype)
{
- slot = NULL_RTX;
+ int align_words = (cum->words + 1) & ~1;
+ k = rs6000_psave_function_arg (mode, type, align_words, rvec);
}
- else
+
+ /* Describe where this argument goes in the vector registers. */
+ for (i = 0; i < n_elts && cum->vregno + i <= ALTIVEC_ARG_MAX_REG; i++)
{
- slot = gen_rtx_REG (mode, GP_ARG_MIN_REG + align_words);
+ r = gen_rtx_REG (elt_mode, cum->vregno + i);
+ off = GEN_INT (i * GET_MODE_SIZE (elt_mode));
+ rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, r, off);
}
- return gen_rtx_PARALLEL (mode,
- gen_rtvec (2,
- gen_rtx_EXPR_LIST (VOIDmode,
- slot, const0_rtx),
- gen_rtx_EXPR_LIST (VOIDmode,
- gen_rtx_REG (mode, cum->vregno),
- const0_rtx)));
+
+ return rs6000_finish_function_arg (mode, rvec, k);
}
- else
- return gen_rtx_REG (mode, cum->vregno);
else if (TARGET_ALTIVEC_ABI
&& (ALTIVEC_OR_VSX_VECTOR_MODE (mode)
|| (type && TREE_CODE (type) == VECTOR_TYPE
@@ -8612,13 +10150,13 @@ rs6000_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
int align, align_words, n_words;
enum machine_mode part_mode;
- /* Vector parameters must be 16-byte aligned. This places them at
- 2 mod 4 in terms of words in 32-bit mode, since the parameter
- save area starts at offset 24 from the stack. In 64-bit mode,
- they just have to start on an even word, since the parameter
- save area is 16-byte aligned. */
+ /* Vector parameters must be 16-byte aligned. In 32-bit
+ mode this means we need to take into account the offset
+ to the parameter save area. In 64-bit mode, they just
+ have to start on an even word, since the parameter save
+ area is 16-byte aligned. */
if (TARGET_32BIT)
- align = (2 - cum->words) & 3;
+ align = -(rs6000_parm_offset () + cum->words) & 3;
else
align = cum->words & 1;
align_words = cum->words + align;
@@ -8696,101 +10234,50 @@ rs6000_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
/* _Decimal128 must be passed in an even/odd float register pair.
This assumes that the register number is odd when fregno is odd. */
- if (mode == TDmode && (cum->fregno % 2) == 1)
+ if (elt_mode == TDmode && (cum->fregno % 2) == 1)
cum->fregno++;
- if (USE_FP_FOR_ARG_P (cum, mode, type))
+ if (USE_FP_FOR_ARG_P (cum, elt_mode))
{
- rtx rvec[GP_ARG_NUM_REG + 1];
- rtx r;
- int k;
- bool needs_psave;
- enum machine_mode fmode = mode;
- unsigned long n_fpreg = (GET_MODE_SIZE (mode) + 7) >> 3;
+ rtx rvec[GP_ARG_NUM_REG + AGGR_ARG_NUM_REG + 1];
+ rtx r, off;
+ int i, k = 0;
+ unsigned long n_fpreg = (GET_MODE_SIZE (elt_mode) + 7) >> 3;
- if (cum->fregno + n_fpreg > FP_ARG_MAX_REG + 1)
- {
- /* Currently, we only ever need one reg here because complex
- doubles are split. */
- gcc_assert (cum->fregno == FP_ARG_MAX_REG
- && (fmode == TFmode || fmode == TDmode));
+ /* Do we also need to pass this argument in the parameter
+ save area? */
+ if (type && (cum->nargs_prototype <= 0
+ || ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
+ && TARGET_XL_COMPAT
+ && align_words >= GP_ARG_NUM_REG)))
+ k = rs6000_psave_function_arg (mode, type, align_words, rvec);
- /* Long double or _Decimal128 split over regs and memory. */
+ /* Describe where this argument goes in the fprs. */
+ for (i = 0; i < n_elts
+ && cum->fregno + i * n_fpreg <= FP_ARG_MAX_REG; i++)
+ {
+ /* Check if the argument is split over registers and memory.
+ This can only ever happen for long double or _Decimal128;
+ complex types are handled via split_complex_arg. */
+ enum machine_mode fmode = elt_mode;
+ if (cum->fregno + (i + 1) * n_fpreg > FP_ARG_MAX_REG + 1)
+ {
+ gcc_assert (fmode == TFmode || fmode == TDmode);
fmode = DECIMAL_FLOAT_MODE_P (fmode) ? DDmode : DFmode;
}
- /* Do we also need to pass this arg in the parameter save
- area? */
- needs_psave = (type
- && (cum->nargs_prototype <= 0
- || (DEFAULT_ABI == ABI_AIX
- && TARGET_XL_COMPAT
- && align_words >= GP_ARG_NUM_REG)));
-
- if (!needs_psave && mode == fmode)
- return gen_rtx_REG (fmode, cum->fregno);
-
- k = 0;
- if (needs_psave)
- {
- /* Describe the part that goes in gprs or the stack.
- This piece must come first, before the fprs. */
- if (align_words < GP_ARG_NUM_REG)
- {
- unsigned long n_words = rs6000_arg_size (mode, type);
-
- if (align_words + n_words > GP_ARG_NUM_REG
- || (TARGET_32BIT && TARGET_POWERPC64))
- {
- /* If this is partially on the stack, then we only
- include the portion actually in registers here. */
- enum machine_mode rmode = TARGET_32BIT ? SImode : DImode;
- rtx off;
- int i = 0;
- if (align_words + n_words > GP_ARG_NUM_REG)
- /* Not all of the arg fits in gprs. Say that it
- goes in memory too, using a magic NULL_RTX
- component. Also see comment in
- rs6000_mixed_function_arg for why the normal
- function_arg_partial_nregs scheme doesn't work
- in this case. */
- rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, NULL_RTX,
- const0_rtx);
- do
- {
- r = gen_rtx_REG (rmode,
- GP_ARG_MIN_REG + align_words);
- off = GEN_INT (i++ * GET_MODE_SIZE (rmode));
- rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, r, off);
- }
- while (++align_words < GP_ARG_NUM_REG && --n_words != 0);
- }
- else
- {
- /* The whole arg fits in gprs. */
- r = gen_rtx_REG (mode, GP_ARG_MIN_REG + align_words);
- rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, r, const0_rtx);
- }
- }
- else
- /* It's entirely in memory. */
- rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, NULL_RTX, const0_rtx);
+ r = gen_rtx_REG (fmode, cum->fregno + i * n_fpreg);
+ off = GEN_INT (i * GET_MODE_SIZE (elt_mode));
+ rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, r, off);
}
- /* Describe where this piece goes in the fprs. */
- r = gen_rtx_REG (fmode, cum->fregno);
- rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, r, const0_rtx);
-
- return gen_rtx_PARALLEL (mode, gen_rtvec_v (k, rvec));
+ return rs6000_finish_function_arg (mode, rvec, k);
}
else if (align_words < GP_ARG_NUM_REG)
- {
+ {
if (TARGET_32BIT && TARGET_POWERPC64)
return rs6000_mixed_function_arg (mode, type, align_words);
- if (mode == BLKmode)
- mode = Pmode;
-
return gen_rtx_REG (mode, GP_ARG_MIN_REG + align_words);
}
else
@@ -8809,42 +10296,62 @@ rs6000_arg_partial_bytes (cumulative_args_t cum_v, enum machine_mode mode,
tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
+ bool passed_in_gprs = true;
int ret = 0;
int align_words;
+ enum machine_mode elt_mode;
+ int n_elts;
+
+ rs6000_discover_homogeneous_aggregate (mode, type, &elt_mode, &n_elts);
if (DEFAULT_ABI == ABI_V4)
return 0;
- if (USE_ALTIVEC_FOR_ARG_P (cum, mode, type, named)
- && cum->nargs_prototype >= 0)
+ if (USE_ALTIVEC_FOR_ARG_P (cum, elt_mode, named))
+ {
+ /* If we are passing this arg in the fixed parameter save area
+ (gprs or memory) as well as VRs, we do not use the partial
+ bytes mechanism; instead, rs6000_function_arg will return a
+ PARALLEL including a memory element as necessary. */
+ if (TARGET_64BIT && ! cum->prototype)
return 0;
+ /* Otherwise, we pass in VRs only. Check for partial copies. */
+ passed_in_gprs = false;
+ if (cum->vregno + n_elts > ALTIVEC_ARG_MAX_REG + 1)
+ ret = (ALTIVEC_ARG_MAX_REG + 1 - cum->vregno) * 16;
+ }
+
/* In this complicated case we just disable the partial_nregs code. */
if (TARGET_MACHO && rs6000_darwin64_struct_check_p (mode, type))
return 0;
align_words = rs6000_parm_start (mode, type, cum->words);
- if (USE_FP_FOR_ARG_P (cum, mode, type))
+ if (USE_FP_FOR_ARG_P (cum, elt_mode))
{
+ unsigned long n_fpreg = (GET_MODE_SIZE (elt_mode) + 7) >> 3;
+
/* If we are passing this arg in the fixed parameter save area
- (gprs or memory) as well as fprs, then this function should
- return the number of partial bytes passed in the parameter
- save area rather than partial bytes passed in fprs. */
+ (gprs or memory) as well as FPRs, we do not use the partial
+ bytes mechanism; instead, rs6000_function_arg will return a
+ PARALLEL including a memory element as necessary. */
if (type
&& (cum->nargs_prototype <= 0
- || (DEFAULT_ABI == ABI_AIX
+ || ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
&& TARGET_XL_COMPAT
&& align_words >= GP_ARG_NUM_REG)))
return 0;
- else if (cum->fregno + ((GET_MODE_SIZE (mode) + 7) >> 3)
- > FP_ARG_MAX_REG + 1)
- ret = (FP_ARG_MAX_REG + 1 - cum->fregno) * 8;
- else if (cum->nargs_prototype >= 0)
- return 0;
+
+ /* Otherwise, we pass in FPRs only. Check for partial copies. */
+ passed_in_gprs = false;
+ if (cum->fregno + n_elts * n_fpreg > FP_ARG_MAX_REG + 1)
+ ret = ((FP_ARG_MAX_REG + 1 - cum->fregno)
+ * MIN (8, GET_MODE_SIZE (elt_mode)));
}
- if (align_words < GP_ARG_NUM_REG
+ if (passed_in_gprs
+ && align_words < GP_ARG_NUM_REG
&& GP_ARG_NUM_REG < align_words + rs6000_arg_size (mode, type))
ret = (GP_ARG_NUM_REG - align_words) * (TARGET_32BIT ? 4 : 8);
@@ -8925,6 +10432,139 @@ rs6000_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
return 0;
}
+/* Process parameter of type TYPE after ARGS_SO_FAR parameters were
+ already processes. Return true if the parameter must be passed
+ (fully or partially) on the stack. */
+
+static bool
+rs6000_parm_needs_stack (cumulative_args_t args_so_far, tree type)
+{
+ enum machine_mode mode;
+ int unsignedp;
+ rtx entry_parm;
+
+ /* Catch errors. */
+ if (type == NULL || type == error_mark_node)
+ return true;
+
+ /* Handle types with no storage requirement. */
+ if (TYPE_MODE (type) == VOIDmode)
+ return false;
+
+ /* Handle complex types. */
+ if (TREE_CODE (type) == COMPLEX_TYPE)
+ return (rs6000_parm_needs_stack (args_so_far, TREE_TYPE (type))
+ || rs6000_parm_needs_stack (args_so_far, TREE_TYPE (type)));
+
+ /* Handle transparent aggregates. */
+ if ((TREE_CODE (type) == UNION_TYPE || TREE_CODE (type) == RECORD_TYPE)
+ && TYPE_TRANSPARENT_AGGR (type))
+ type = TREE_TYPE (first_field (type));
+
+ /* See if this arg was passed by invisible reference. */
+ if (pass_by_reference (get_cumulative_args (args_so_far),
+ TYPE_MODE (type), type, true))
+ type = build_pointer_type (type);
+
+ /* Find mode as it is passed by the ABI. */
+ unsignedp = TYPE_UNSIGNED (type);
+ mode = promote_mode (type, TYPE_MODE (type), &unsignedp);
+
+ /* If we must pass in stack, we need a stack. */
+ if (rs6000_must_pass_in_stack (mode, type))
+ return true;
+
+ /* If there is no incoming register, we need a stack. */
+ entry_parm = rs6000_function_arg (args_so_far, mode, type, true);
+ if (entry_parm == NULL)
+ return true;
+
+ /* Likewise if we need to pass both in registers and on the stack. */
+ if (GET_CODE (entry_parm) == PARALLEL
+ && XEXP (XVECEXP (entry_parm, 0, 0), 0) == NULL_RTX)
+ return true;
+
+ /* Also true if we're partially in registers and partially not. */
+ if (rs6000_arg_partial_bytes (args_so_far, mode, type, true) != 0)
+ return true;
+
+ /* Update info on where next arg arrives in registers. */
+ rs6000_function_arg_advance (args_so_far, mode, type, true);
+ return false;
+}
+
+/* Return true if FUN has no prototype, has a variable argument
+ list, or passes any parameter in memory. */
+
+static bool
+rs6000_function_parms_need_stack (tree fun)
+{
+ function_args_iterator args_iter;
+ tree arg_type;
+ CUMULATIVE_ARGS args_so_far_v;
+ cumulative_args_t args_so_far;
+
+ if (!fun)
+ /* Must be a libcall, all of which only use reg parms. */
+ return false;
+ if (!TYPE_P (fun))
+ fun = TREE_TYPE (fun);
+
+ /* Varargs functions need the parameter save area. */
+ if (!prototype_p (fun) || stdarg_p (fun))
+ return true;
+
+ INIT_CUMULATIVE_INCOMING_ARGS (args_so_far_v, fun, NULL_RTX);
+ args_so_far = pack_cumulative_args (&args_so_far_v);
+
+ if (aggregate_value_p (TREE_TYPE (fun), fun))
+ {
+ tree type = build_pointer_type (TREE_TYPE (fun));
+ rs6000_parm_needs_stack (args_so_far, type);
+ }
+
+ FOREACH_FUNCTION_ARGS (fun, arg_type, args_iter)
+ if (rs6000_parm_needs_stack (args_so_far, arg_type))
+ return true;
+
+ return false;
+}
+
+/* Return the size of the REG_PARM_STACK_SPACE are for FUN. This is
+ usually a constant depending on the ABI. However, in the ELFv2 ABI
+ the register parameter area is optional when calling a function that
+ has a prototype is scope, has no variable argument list, and passes
+ all parameters in registers. */
+
+int
+rs6000_reg_parm_stack_space (tree fun)
+{
+ int reg_parm_stack_space;
+
+ switch (DEFAULT_ABI)
+ {
+ default:
+ reg_parm_stack_space = 0;
+ break;
+
+ case ABI_AIX:
+ case ABI_DARWIN:
+ reg_parm_stack_space = TARGET_64BIT ? 64 : 32;
+ break;
+
+ case ABI_ELFv2:
+ /* ??? Recomputing this every time is a bit expensive. Is there
+ a place to cache this information? */
+ if (rs6000_function_parms_need_stack (fun))
+ reg_parm_stack_space = TARGET_64BIT ? 64 : 32;
+ else
+ reg_parm_stack_space = 0;
+ break;
+ }
+
+ return reg_parm_stack_space;
+}
+
static void
rs6000_move_block_from_reg (int regno, rtx x, int nregs)
{
@@ -9306,8 +10946,10 @@ rs6000_gimplify_va_arg (tree valist, tree type, gimple_seq *pre_p,
We don't need to check for pass-by-reference because of the test above.
We can return a simplifed answer, since we know there's no offset to add. */
- if (TARGET_MACHO
- && rs6000_darwin64_abi
+ if (((TARGET_MACHO
+ && rs6000_darwin64_abi)
+ || DEFAULT_ABI == ABI_ELFv2
+ || (DEFAULT_ABI == ABI_AIX && !rs6000_compat_align_parm))
&& integer_zerop (TYPE_SIZE (type)))
{
unsigned HOST_WIDE_INT align, boundary;
@@ -9602,6 +11244,7 @@ def_builtin (const char *name, tree type, enum rs6000_builtins code)
#undef RS6000_BUILTIN_A
#undef RS6000_BUILTIN_D
#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
#undef RS6000_BUILTIN_P
#undef RS6000_BUILTIN_Q
#undef RS6000_BUILTIN_S
@@ -9615,6 +11258,7 @@ def_builtin (const char *name, tree type, enum rs6000_builtins code)
#define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
@@ -9633,6 +11277,7 @@ static const struct builtin_description bdesc_3arg[] =
#undef RS6000_BUILTIN_A
#undef RS6000_BUILTIN_D
#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
#undef RS6000_BUILTIN_P
#undef RS6000_BUILTIN_Q
#undef RS6000_BUILTIN_S
@@ -9646,6 +11291,7 @@ static const struct builtin_description bdesc_3arg[] =
{ MASK, ICODE, NAME, ENUM },
#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
@@ -9664,6 +11310,7 @@ static const struct builtin_description bdesc_dst[] =
#undef RS6000_BUILTIN_A
#undef RS6000_BUILTIN_D
#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
#undef RS6000_BUILTIN_P
#undef RS6000_BUILTIN_Q
#undef RS6000_BUILTIN_S
@@ -9677,6 +11324,7 @@ static const struct builtin_description bdesc_dst[] =
#define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
@@ -9693,6 +11341,7 @@ static const struct builtin_description bdesc_2arg[] =
#undef RS6000_BUILTIN_A
#undef RS6000_BUILTIN_D
#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
#undef RS6000_BUILTIN_P
#undef RS6000_BUILTIN_Q
#undef RS6000_BUILTIN_S
@@ -9704,6 +11353,7 @@ static const struct builtin_description bdesc_2arg[] =
#define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE) \
{ MASK, ICODE, NAME, ENUM },
@@ -9725,6 +11375,7 @@ static const struct builtin_description bdesc_altivec_preds[] =
#undef RS6000_BUILTIN_A
#undef RS6000_BUILTIN_D
#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
#undef RS6000_BUILTIN_P
#undef RS6000_BUILTIN_Q
#undef RS6000_BUILTIN_S
@@ -9736,6 +11387,7 @@ static const struct builtin_description bdesc_altivec_preds[] =
#define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE) \
@@ -9755,6 +11407,7 @@ static const struct builtin_description bdesc_spe_predicates[] =
#undef RS6000_BUILTIN_A
#undef RS6000_BUILTIN_D
#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
#undef RS6000_BUILTIN_P
#undef RS6000_BUILTIN_Q
#undef RS6000_BUILTIN_S
@@ -9768,6 +11421,7 @@ static const struct builtin_description bdesc_spe_predicates[] =
#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE) \
{ MASK, ICODE, NAME, ENUM },
+#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
@@ -9785,6 +11439,7 @@ static const struct builtin_description bdesc_spe_evsel[] =
#undef RS6000_BUILTIN_A
#undef RS6000_BUILTIN_D
#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
#undef RS6000_BUILTIN_P
#undef RS6000_BUILTIN_Q
#undef RS6000_BUILTIN_S
@@ -9796,6 +11451,7 @@ static const struct builtin_description bdesc_spe_evsel[] =
#define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE) \
{ MASK, ICODE, NAME, ENUM },
@@ -9816,6 +11472,7 @@ static const struct builtin_description bdesc_paired_preds[] =
#undef RS6000_BUILTIN_A
#undef RS6000_BUILTIN_D
#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
#undef RS6000_BUILTIN_P
#undef RS6000_BUILTIN_Q
#undef RS6000_BUILTIN_S
@@ -9829,6 +11486,7 @@ static const struct builtin_description bdesc_paired_preds[] =
#define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
@@ -9846,8 +11504,9 @@ static const struct builtin_description bdesc_abs[] =
#undef RS6000_BUILTIN_2
#undef RS6000_BUILTIN_3
#undef RS6000_BUILTIN_A
-#undef RS6000_BUILTIN_E
#undef RS6000_BUILTIN_D
+#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
#undef RS6000_BUILTIN_P
#undef RS6000_BUILTIN_Q
#undef RS6000_BUILTIN_S
@@ -9861,6 +11520,7 @@ static const struct builtin_description bdesc_abs[] =
#define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
@@ -9871,17 +11531,49 @@ static const struct builtin_description bdesc_1arg[] =
#include "rs6000-builtin.def"
};
+/* HTM builtins. */
#undef RS6000_BUILTIN_1
#undef RS6000_BUILTIN_2
#undef RS6000_BUILTIN_3
#undef RS6000_BUILTIN_A
#undef RS6000_BUILTIN_D
#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
#undef RS6000_BUILTIN_P
#undef RS6000_BUILTIN_Q
#undef RS6000_BUILTIN_S
#undef RS6000_BUILTIN_X
+#define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE) \
+ { MASK, ICODE, NAME, ENUM },
+
+#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
+#define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE)
+
+static const struct builtin_description bdesc_htm[] =
+{
+#include "rs6000-builtin.def"
+};
+
+#undef RS6000_BUILTIN_1
+#undef RS6000_BUILTIN_2
+#undef RS6000_BUILTIN_3
+#undef RS6000_BUILTIN_A
+#undef RS6000_BUILTIN_D
+#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
+#undef RS6000_BUILTIN_P
+#undef RS6000_BUILTIN_Q
+#undef RS6000_BUILTIN_S
+
/* Return true if a builtin function is overloaded. */
bool
rs6000_overloaded_builtin_p (enum rs6000_builtins fncode)
@@ -10189,6 +11881,100 @@ paired_expand_lv_builtin (enum insn_code icode, tree exp, rtx target)
return target;
}
+/* Return a constant vector for use as a little-endian permute control vector
+ to reverse the order of elements of the given vector mode. */
+static rtx
+swap_selector_for_mode (enum machine_mode mode)
+{
+ /* These are little endian vectors, so their elements are reversed
+ from what you would normally expect for a permute control vector. */
+ unsigned int swap2[16] = {7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8};
+ unsigned int swap4[16] = {3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12};
+ unsigned int swap8[16] = {1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14};
+ unsigned int swap16[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ unsigned int *swaparray, i;
+ rtx perm[16];
+
+ switch (mode)
+ {
+ case V2DFmode:
+ case V2DImode:
+ swaparray = swap2;
+ break;
+ case V4SFmode:
+ case V4SImode:
+ swaparray = swap4;
+ break;
+ case V8HImode:
+ swaparray = swap8;
+ break;
+ case V16QImode:
+ swaparray = swap16;
+ break;
+ default:
+ gcc_unreachable ();
+ }
+
+ for (i = 0; i < 16; ++i)
+ perm[i] = GEN_INT (swaparray[i]);
+
+ return force_reg (V16QImode, gen_rtx_CONST_VECTOR (V16QImode, gen_rtvec_v (16, perm)));
+}
+
+/* Generate code for an "lvx", "lvxl", or "lve*x" built-in for a little endian target
+ with -maltivec=be specified. Issue the load followed by an element-reversing
+ permute. */
+void
+altivec_expand_lvx_be (rtx op0, rtx op1, enum machine_mode mode, unsigned unspec)
+{
+ rtx tmp = gen_reg_rtx (mode);
+ rtx load = gen_rtx_SET (VOIDmode, tmp, op1);
+ rtx lvx = gen_rtx_UNSPEC (mode, gen_rtvec (1, const0_rtx), unspec);
+ rtx par = gen_rtx_PARALLEL (mode, gen_rtvec (2, load, lvx));
+ rtx sel = swap_selector_for_mode (mode);
+ rtx vperm = gen_rtx_UNSPEC (mode, gen_rtvec (3, tmp, tmp, sel), UNSPEC_VPERM);
+
+ gcc_assert (REG_P (op0));
+ emit_insn (par);
+ emit_insn (gen_rtx_SET (VOIDmode, op0, vperm));
+}
+
+/* Generate code for a "stvx" or "stvxl" built-in for a little endian target
+ with -maltivec=be specified. Issue the store preceded by an element-reversing
+ permute. */
+void
+altivec_expand_stvx_be (rtx op0, rtx op1, enum machine_mode mode, unsigned unspec)
+{
+ rtx tmp = gen_reg_rtx (mode);
+ rtx store = gen_rtx_SET (VOIDmode, op0, tmp);
+ rtx stvx = gen_rtx_UNSPEC (mode, gen_rtvec (1, const0_rtx), unspec);
+ rtx par = gen_rtx_PARALLEL (mode, gen_rtvec (2, store, stvx));
+ rtx sel = swap_selector_for_mode (mode);
+ rtx vperm;
+
+ gcc_assert (REG_P (op1));
+ vperm = gen_rtx_UNSPEC (mode, gen_rtvec (3, op1, op1, sel), UNSPEC_VPERM);
+ emit_insn (gen_rtx_SET (VOIDmode, tmp, vperm));
+ emit_insn (par);
+}
+
+/* Generate code for a "stve*x" built-in for a little endian target with -maltivec=be
+ specified. Issue the store preceded by an element-reversing permute. */
+void
+altivec_expand_stvex_be (rtx op0, rtx op1, enum machine_mode mode, unsigned unspec)
+{
+ enum machine_mode inner_mode = GET_MODE_INNER (mode);
+ rtx tmp = gen_reg_rtx (mode);
+ rtx stvx = gen_rtx_UNSPEC (inner_mode, gen_rtvec (1, tmp), unspec);
+ rtx sel = swap_selector_for_mode (mode);
+ rtx vperm;
+
+ gcc_assert (REG_P (op1));
+ vperm = gen_rtx_UNSPEC (mode, gen_rtvec (3, op1, op1, sel), UNSPEC_VPERM);
+ emit_insn (gen_rtx_SET (VOIDmode, tmp, vperm));
+ emit_insn (gen_rtx_SET (VOIDmode, op0, stvx));
+}
+
static rtx
altivec_expand_lv_builtin (enum insn_code icode, tree exp, rtx target, bool blk)
{
@@ -10351,6 +12137,197 @@ altivec_expand_stv_builtin (enum insn_code icode, tree exp)
return NULL_RTX;
}
+/* Return the appropriate SPR number associated with the given builtin. */
+static inline HOST_WIDE_INT
+htm_spr_num (enum rs6000_builtins code)
+{
+ if (code == HTM_BUILTIN_GET_TFHAR
+ || code == HTM_BUILTIN_SET_TFHAR)
+ return TFHAR_SPR;
+ else if (code == HTM_BUILTIN_GET_TFIAR
+ || code == HTM_BUILTIN_SET_TFIAR)
+ return TFIAR_SPR;
+ else if (code == HTM_BUILTIN_GET_TEXASR
+ || code == HTM_BUILTIN_SET_TEXASR)
+ return TEXASR_SPR;
+ gcc_assert (code == HTM_BUILTIN_GET_TEXASRU
+ || code == HTM_BUILTIN_SET_TEXASRU);
+ return TEXASRU_SPR;
+}
+
+/* Return the appropriate SPR regno associated with the given builtin. */
+static inline HOST_WIDE_INT
+htm_spr_regno (enum rs6000_builtins code)
+{
+ if (code == HTM_BUILTIN_GET_TFHAR
+ || code == HTM_BUILTIN_SET_TFHAR)
+ return TFHAR_REGNO;
+ else if (code == HTM_BUILTIN_GET_TFIAR
+ || code == HTM_BUILTIN_SET_TFIAR)
+ return TFIAR_REGNO;
+ gcc_assert (code == HTM_BUILTIN_GET_TEXASR
+ || code == HTM_BUILTIN_SET_TEXASR
+ || code == HTM_BUILTIN_GET_TEXASRU
+ || code == HTM_BUILTIN_SET_TEXASRU);
+ return TEXASR_REGNO;
+}
+
+/* Return the correct ICODE value depending on whether we are
+ setting or reading the HTM SPRs. */
+static inline enum insn_code
+rs6000_htm_spr_icode (bool nonvoid)
+{
+ if (nonvoid)
+ return (TARGET_64BIT) ? CODE_FOR_htm_mfspr_di : CODE_FOR_htm_mfspr_si;
+ else
+ return (TARGET_64BIT) ? CODE_FOR_htm_mtspr_di : CODE_FOR_htm_mtspr_si;
+}
+
+/* Expand the HTM builtin in EXP and store the result in TARGET.
+ Store true in *EXPANDEDP if we found a builtin to expand. */
+static rtx
+htm_expand_builtin (tree exp, rtx target, bool * expandedp)
+{
+ tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0);
+ bool nonvoid = TREE_TYPE (TREE_TYPE (fndecl)) != void_type_node;
+ enum rs6000_builtins fcode = (enum rs6000_builtins) DECL_FUNCTION_CODE (fndecl);
+ const struct builtin_description *d;
+ size_t i;
+
+ *expandedp = false;
+
+ /* Expand the HTM builtins. */
+ d = bdesc_htm;
+ for (i = 0; i < ARRAY_SIZE (bdesc_htm); i++, d++)
+ if (d->code == fcode)
+ {
+ rtx op[MAX_HTM_OPERANDS], pat;
+ int nopnds = 0;
+ tree arg;
+ call_expr_arg_iterator iter;
+ unsigned attr = rs6000_builtin_info[fcode].attr;
+ enum insn_code icode = d->icode;
+
+ if (attr & RS6000_BTC_SPR)
+ icode = rs6000_htm_spr_icode (nonvoid);
+
+ if (nonvoid)
+ {
+ enum machine_mode tmode = insn_data[icode].operand[0].mode;
+ if (!target
+ || GET_MODE (target) != tmode
+ || !(*insn_data[icode].operand[0].predicate) (target, tmode))
+ target = gen_reg_rtx (tmode);
+ op[nopnds++] = target;
+ }
+
+ FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
+ {
+ const struct insn_operand_data *insn_op;
+
+ if (arg == error_mark_node || nopnds >= MAX_HTM_OPERANDS)
+ return NULL_RTX;
+
+ insn_op = &insn_data[icode].operand[nopnds];
+
+ op[nopnds] = expand_normal (arg);
+
+ if (!(*insn_op->predicate) (op[nopnds], insn_op->mode))
+ {
+ if (!strcmp (insn_op->constraint, "n"))
+ {
+ int arg_num = (nonvoid) ? nopnds : nopnds + 1;
+ if (!CONST_INT_P (op[nopnds]))
+ error ("argument %d must be an unsigned literal", arg_num);
+ else
+ error ("argument %d is an unsigned literal that is "
+ "out of range", arg_num);
+ return const0_rtx;
+ }
+ op[nopnds] = copy_to_mode_reg (insn_op->mode, op[nopnds]);
+ }
+
+ nopnds++;
+ }
+
+ /* Handle the builtins for extended mnemonics. These accept
+ no arguments, but map to builtins that take arguments. */
+ switch (fcode)
+ {
+ case HTM_BUILTIN_TENDALL: /* Alias for: tend. 1 */
+ case HTM_BUILTIN_TRESUME: /* Alias for: tsr. 1 */
+ op[nopnds++] = GEN_INT (1);
+#ifdef ENABLE_CHECKING
+ attr |= RS6000_BTC_UNARY;
+#endif
+ break;
+ case HTM_BUILTIN_TSUSPEND: /* Alias for: tsr. 0 */
+ op[nopnds++] = GEN_INT (0);
+#ifdef ENABLE_CHECKING
+ attr |= RS6000_BTC_UNARY;
+#endif
+ break;
+ default:
+ break;
+ }
+
+ /* If this builtin accesses SPRs, then pass in the appropriate
+ SPR number and SPR regno as the last two operands. */
+ if (attr & RS6000_BTC_SPR)
+ {
+ op[nopnds++] = gen_rtx_CONST_INT (Pmode, htm_spr_num (fcode));
+ op[nopnds++] = gen_rtx_REG (Pmode, htm_spr_regno (fcode));
+ }
+
+#ifdef ENABLE_CHECKING
+ int expected_nopnds = 0;
+ if ((attr & RS6000_BTC_TYPE_MASK) == RS6000_BTC_UNARY)
+ expected_nopnds = 1;
+ else if ((attr & RS6000_BTC_TYPE_MASK) == RS6000_BTC_BINARY)
+ expected_nopnds = 2;
+ else if ((attr & RS6000_BTC_TYPE_MASK) == RS6000_BTC_TERNARY)
+ expected_nopnds = 3;
+ if (!(attr & RS6000_BTC_VOID))
+ expected_nopnds += 1;
+ if (attr & RS6000_BTC_SPR)
+ expected_nopnds += 2;
+
+ gcc_assert (nopnds == expected_nopnds && nopnds <= MAX_HTM_OPERANDS);
+#endif
+
+ switch (nopnds)
+ {
+ case 0:
+ pat = GEN_FCN (icode) (NULL_RTX);
+ break;
+ case 1:
+ pat = GEN_FCN (icode) (op[0]);
+ break;
+ case 2:
+ pat = GEN_FCN (icode) (op[0], op[1]);
+ break;
+ case 3:
+ pat = GEN_FCN (icode) (op[0], op[1], op[2]);
+ break;
+ case 4:
+ pat = GEN_FCN (icode) (op[0], op[1], op[2], op[3]);
+ break;
+ default:
+ gcc_unreachable ();
+ }
+ if (!pat)
+ return NULL_RTX;
+ emit_insn (pat);
+
+ *expandedp = true;
+ if (nonvoid)
+ return target;
+ return const0_rtx;
+ }
+
+ return NULL_RTX;
+}
+
static rtx
rs6000_expand_ternop_builtin (enum insn_code icode, tree exp, rtx target)
{
@@ -10416,7 +12393,15 @@ rs6000_expand_ternop_builtin (enum insn_code icode, tree exp, rtx target)
}
}
else if (icode == CODE_FOR_vsx_set_v2df
- || icode == CODE_FOR_vsx_set_v2di)
+ || icode == CODE_FOR_vsx_set_v2di
+ || icode == CODE_FOR_bcdadd
+ || icode == CODE_FOR_bcdadd_lt
+ || icode == CODE_FOR_bcdadd_eq
+ || icode == CODE_FOR_bcdadd_gt
+ || icode == CODE_FOR_bcdsub
+ || icode == CODE_FOR_bcdsub_lt
+ || icode == CODE_FOR_bcdsub_eq
+ || icode == CODE_FOR_bcdsub_gt)
{
/* Only allow 1-bit unsigned literals. */
STRIP_NOPS (arg2);
@@ -10427,6 +12412,65 @@ rs6000_expand_ternop_builtin (enum insn_code icode, tree exp, rtx target)
return const0_rtx;
}
}
+ else if (icode == CODE_FOR_dfp_ddedpd_dd
+ || icode == CODE_FOR_dfp_ddedpd_td)
+ {
+ /* Only allow 2-bit unsigned literals where the value is 0 or 2. */
+ STRIP_NOPS (arg0);
+ if (TREE_CODE (arg0) != INTEGER_CST
+ || TREE_INT_CST_LOW (arg2) & ~0x3)
+ {
+ error ("argument 1 must be 0 or 2");
+ return const0_rtx;
+ }
+ }
+ else if (icode == CODE_FOR_dfp_denbcd_dd
+ || icode == CODE_FOR_dfp_denbcd_td)
+ {
+ /* Only allow 1-bit unsigned literals. */
+ STRIP_NOPS (arg0);
+ if (TREE_CODE (arg0) != INTEGER_CST
+ || TREE_INT_CST_LOW (arg0) & ~0x1)
+ {
+ error ("argument 1 must be a 1-bit unsigned literal");
+ return const0_rtx;
+ }
+ }
+ else if (icode == CODE_FOR_dfp_dscli_dd
+ || icode == CODE_FOR_dfp_dscli_td
+ || icode == CODE_FOR_dfp_dscri_dd
+ || icode == CODE_FOR_dfp_dscri_td)
+ {
+ /* Only allow 6-bit unsigned literals. */
+ STRIP_NOPS (arg1);
+ if (TREE_CODE (arg1) != INTEGER_CST
+ || TREE_INT_CST_LOW (arg1) & ~0x3f)
+ {
+ error ("argument 2 must be a 6-bit unsigned literal");
+ return const0_rtx;
+ }
+ }
+ else if (icode == CODE_FOR_crypto_vshasigmaw
+ || icode == CODE_FOR_crypto_vshasigmad)
+ {
+ /* Check whether the 2nd and 3rd arguments are integer constants and in
+ range and prepare arguments. */
+ STRIP_NOPS (arg1);
+ if (TREE_CODE (arg1) != INTEGER_CST
+ || !IN_RANGE (TREE_INT_CST_LOW (arg1), 0, 1))
+ {
+ error ("argument 2 must be 0 or 1");
+ return const0_rtx;
+ }
+
+ STRIP_NOPS (arg2);
+ if (TREE_CODE (arg2) != INTEGER_CST
+ || !IN_RANGE (TREE_INT_CST_LOW (arg2), 0, 15))
+ {
+ error ("argument 3 must be in the range 0..15");
+ return const0_rtx;
+ }
+ }
if (target == 0
|| GET_MODE (target) != tmode
@@ -10481,6 +12525,8 @@ altivec_expand_ld_builtin (tree exp, rtx target, bool *expandedp)
break;
case ALTIVEC_BUILTIN_LD_INTERNAL_2di:
icode = CODE_FOR_vector_altivec_load_v2di;
+ case ALTIVEC_BUILTIN_LD_INTERNAL_1ti:
+ icode = CODE_FOR_vector_altivec_load_v1ti;
break;
default:
*expandedp = false;
@@ -10540,6 +12586,8 @@ altivec_expand_st_builtin (tree exp, rtx target ATTRIBUTE_UNUSED,
break;
case ALTIVEC_BUILTIN_ST_INTERNAL_2di:
icode = CODE_FOR_vector_altivec_store_v2di;
+ case ALTIVEC_BUILTIN_ST_INTERNAL_1ti:
+ icode = CODE_FOR_vector_altivec_store_v1ti;
break;
default:
*expandedp = false;
@@ -10632,21 +12680,33 @@ altivec_expand_vec_init_builtin (tree type, tree exp, rtx target)
enum machine_mode tmode = TYPE_MODE (type);
enum machine_mode inner_mode = GET_MODE_INNER (tmode);
int i, n_elt = GET_MODE_NUNITS (tmode);
- rtvec v = rtvec_alloc (n_elt);
gcc_assert (VECTOR_MODE_P (tmode));
gcc_assert (n_elt == call_expr_nargs (exp));
+ if (!target || !register_operand (target, tmode))
+ target = gen_reg_rtx (tmode);
+
+ /* If we have a vector compromised of a single element, such as V1TImode, do
+ the initialization directly. */
+ if (n_elt == 1 && GET_MODE_SIZE (tmode) == GET_MODE_SIZE (inner_mode))
+ {
+ rtx x = expand_normal (CALL_EXPR_ARG (exp, 0));
+ emit_move_insn (target, gen_lowpart (tmode, x));
+ }
+ else
+ {
+ rtvec v = rtvec_alloc (n_elt);
+
for (i = 0; i < n_elt; ++i)
{
rtx x = expand_normal (CALL_EXPR_ARG (exp, i));
RTVEC_ELT (v, i) = gen_lowpart (inner_mode, x);
}
- if (!target || !register_operand (target, tmode))
- target = gen_reg_rtx (tmode);
-
rs6000_expand_vector_init (target, gen_rtx_PARALLEL (tmode, v));
+ }
+
return target;
}
@@ -10769,16 +12829,38 @@ altivec_expand_builtin (tree exp, rtx target, bool *expandedp)
switch (fcode)
{
+ case ALTIVEC_BUILTIN_STVX_V2DF:
+ return altivec_expand_stv_builtin (CODE_FOR_altivec_stvx_v2df, exp);
+ case ALTIVEC_BUILTIN_STVX_V2DI:
+ return altivec_expand_stv_builtin (CODE_FOR_altivec_stvx_v2di, exp);
+ case ALTIVEC_BUILTIN_STVX_V4SF:
+ return altivec_expand_stv_builtin (CODE_FOR_altivec_stvx_v4sf, exp);
case ALTIVEC_BUILTIN_STVX:
+ case ALTIVEC_BUILTIN_STVX_V4SI:
return altivec_expand_stv_builtin (CODE_FOR_altivec_stvx_v4si, exp);
+ case ALTIVEC_BUILTIN_STVX_V8HI:
+ return altivec_expand_stv_builtin (CODE_FOR_altivec_stvx_v8hi, exp);
+ case ALTIVEC_BUILTIN_STVX_V16QI:
+ return altivec_expand_stv_builtin (CODE_FOR_altivec_stvx_v16qi, exp);
case ALTIVEC_BUILTIN_STVEBX:
return altivec_expand_stv_builtin (CODE_FOR_altivec_stvebx, exp);
case ALTIVEC_BUILTIN_STVEHX:
return altivec_expand_stv_builtin (CODE_FOR_altivec_stvehx, exp);
case ALTIVEC_BUILTIN_STVEWX:
return altivec_expand_stv_builtin (CODE_FOR_altivec_stvewx, exp);
+ case ALTIVEC_BUILTIN_STVXL_V2DF:
+ return altivec_expand_stv_builtin (CODE_FOR_altivec_stvxl_v2df, exp);
+ case ALTIVEC_BUILTIN_STVXL_V2DI:
+ return altivec_expand_stv_builtin (CODE_FOR_altivec_stvxl_v2di, exp);
+ case ALTIVEC_BUILTIN_STVXL_V4SF:
+ return altivec_expand_stv_builtin (CODE_FOR_altivec_stvxl_v4sf, exp);
case ALTIVEC_BUILTIN_STVXL:
- return altivec_expand_stv_builtin (CODE_FOR_altivec_stvxl, exp);
+ case ALTIVEC_BUILTIN_STVXL_V4SI:
+ return altivec_expand_stv_builtin (CODE_FOR_altivec_stvxl_v4si, exp);
+ case ALTIVEC_BUILTIN_STVXL_V8HI:
+ return altivec_expand_stv_builtin (CODE_FOR_altivec_stvxl_v8hi, exp);
+ case ALTIVEC_BUILTIN_STVXL_V16QI:
+ return altivec_expand_stv_builtin (CODE_FOR_altivec_stvxl_v16qi, exp);
case ALTIVEC_BUILTIN_STVLX:
return altivec_expand_stv_builtin (CODE_FOR_altivec_stvlx, exp);
@@ -10789,6 +12871,8 @@ altivec_expand_builtin (tree exp, rtx target, bool *expandedp)
case ALTIVEC_BUILTIN_STVRXL:
return altivec_expand_stv_builtin (CODE_FOR_altivec_stvrxl, exp);
+ case VSX_BUILTIN_STXVD2X_V1TI:
+ return altivec_expand_stv_builtin (CODE_FOR_vsx_store_v1ti, exp);
case VSX_BUILTIN_STXVD2X_V2DF:
return altivec_expand_stv_builtin (CODE_FOR_vsx_store_v2df, exp);
case VSX_BUILTIN_STXVD2X_V2DI:
@@ -10869,6 +12953,7 @@ altivec_expand_builtin (tree exp, rtx target, bool *expandedp)
case ALTIVEC_BUILTIN_VEC_INIT_V4SF:
case VSX_BUILTIN_VEC_INIT_V2DF:
case VSX_BUILTIN_VEC_INIT_V2DI:
+ case VSX_BUILTIN_VEC_INIT_V1TI:
return altivec_expand_vec_init_builtin (TREE_TYPE (exp), exp, target);
case ALTIVEC_BUILTIN_VEC_SET_V4SI:
@@ -10877,6 +12962,7 @@ altivec_expand_builtin (tree exp, rtx target, bool *expandedp)
case ALTIVEC_BUILTIN_VEC_SET_V4SF:
case VSX_BUILTIN_VEC_SET_V2DF:
case VSX_BUILTIN_VEC_SET_V2DI:
+ case VSX_BUILTIN_VEC_SET_V1TI:
return altivec_expand_vec_set_builtin (exp);
case ALTIVEC_BUILTIN_VEC_EXT_V4SI:
@@ -10885,6 +12971,7 @@ altivec_expand_builtin (tree exp, rtx target, bool *expandedp)
case ALTIVEC_BUILTIN_VEC_EXT_V4SF:
case VSX_BUILTIN_VEC_EXT_V2DF:
case VSX_BUILTIN_VEC_EXT_V2DI:
+ case VSX_BUILTIN_VEC_EXT_V1TI:
return altivec_expand_vec_ext_builtin (exp, target);
default:
@@ -10922,12 +13009,44 @@ altivec_expand_builtin (tree exp, rtx target, bool *expandedp)
case ALTIVEC_BUILTIN_LVEWX:
return altivec_expand_lv_builtin (CODE_FOR_altivec_lvewx,
exp, target, false);
+ case ALTIVEC_BUILTIN_LVXL_V2DF:
+ return altivec_expand_lv_builtin (CODE_FOR_altivec_lvxl_v2df,
+ exp, target, false);
+ case ALTIVEC_BUILTIN_LVXL_V2DI:
+ return altivec_expand_lv_builtin (CODE_FOR_altivec_lvxl_v2di,
+ exp, target, false);
+ case ALTIVEC_BUILTIN_LVXL_V4SF:
+ return altivec_expand_lv_builtin (CODE_FOR_altivec_lvxl_v4sf,
+ exp, target, false);
case ALTIVEC_BUILTIN_LVXL:
- return altivec_expand_lv_builtin (CODE_FOR_altivec_lvxl,
+ case ALTIVEC_BUILTIN_LVXL_V4SI:
+ return altivec_expand_lv_builtin (CODE_FOR_altivec_lvxl_v4si,
+ exp, target, false);
+ case ALTIVEC_BUILTIN_LVXL_V8HI:
+ return altivec_expand_lv_builtin (CODE_FOR_altivec_lvxl_v8hi,
+ exp, target, false);
+ case ALTIVEC_BUILTIN_LVXL_V16QI:
+ return altivec_expand_lv_builtin (CODE_FOR_altivec_lvxl_v16qi,
+ exp, target, false);
+ case ALTIVEC_BUILTIN_LVX_V2DF:
+ return altivec_expand_lv_builtin (CODE_FOR_altivec_lvx_v2df,
+ exp, target, false);
+ case ALTIVEC_BUILTIN_LVX_V2DI:
+ return altivec_expand_lv_builtin (CODE_FOR_altivec_lvx_v2di,
+ exp, target, false);
+ case ALTIVEC_BUILTIN_LVX_V4SF:
+ return altivec_expand_lv_builtin (CODE_FOR_altivec_lvx_v4sf,
exp, target, false);
case ALTIVEC_BUILTIN_LVX:
+ case ALTIVEC_BUILTIN_LVX_V4SI:
return altivec_expand_lv_builtin (CODE_FOR_altivec_lvx_v4si,
exp, target, false);
+ case ALTIVEC_BUILTIN_LVX_V8HI:
+ return altivec_expand_lv_builtin (CODE_FOR_altivec_lvx_v8hi,
+ exp, target, false);
+ case ALTIVEC_BUILTIN_LVX_V16QI:
+ return altivec_expand_lv_builtin (CODE_FOR_altivec_lvx_v16qi,
+ exp, target, false);
case ALTIVEC_BUILTIN_LVLX:
return altivec_expand_lv_builtin (CODE_FOR_altivec_lvlx,
exp, target, true);
@@ -10940,6 +13059,9 @@ altivec_expand_builtin (tree exp, rtx target, bool *expandedp)
case ALTIVEC_BUILTIN_LVRXL:
return altivec_expand_lv_builtin (CODE_FOR_altivec_lvrxl,
exp, target, true);
+ case VSX_BUILTIN_LXVD2X_V1TI:
+ return altivec_expand_lv_builtin (CODE_FOR_vsx_load_v1ti,
+ exp, target, false);
case VSX_BUILTIN_LXVD2X_V2DF:
return altivec_expand_lv_builtin (CODE_FOR_vsx_load_v2df,
exp, target, false);
@@ -11411,12 +13533,24 @@ rs6000_invalid_builtin (enum rs6000_builtins fncode)
error ("Builtin function %s is only valid for the cell processor", name);
else if ((fnmask & RS6000_BTM_VSX) != 0)
error ("Builtin function %s requires the -mvsx option", name);
+ else if ((fnmask & RS6000_BTM_HTM) != 0)
+ error ("Builtin function %s requires the -mhtm option", name);
else if ((fnmask & RS6000_BTM_ALTIVEC) != 0)
error ("Builtin function %s requires the -maltivec option", name);
else if ((fnmask & RS6000_BTM_PAIRED) != 0)
error ("Builtin function %s requires the -mpaired option", name);
else if ((fnmask & RS6000_BTM_SPE) != 0)
error ("Builtin function %s requires the -mspe option", name);
+ else if ((fnmask & (RS6000_BTM_DFP | RS6000_BTM_P8_VECTOR))
+ == (RS6000_BTM_DFP | RS6000_BTM_P8_VECTOR))
+ error ("Builtin function %s requires the -mhard-dfp and"
+ "-mpower8-vector options", name);
+ else if ((fnmask & RS6000_BTM_DFP) != 0)
+ error ("Builtin function %s requires the -mhard-dfp option", name);
+ else if ((fnmask & RS6000_BTM_P8_VECTOR) != 0)
+ error ("Builtin function %s requires the -mpower8-vector option", name);
+ else if ((fnmask & RS6000_BTM_HARD_FLOAT) != 0)
+ error ("Builtin function %s requires the -mhard-float option", name);
else
error ("Builtin function %s is not supported with the current options",
name);
@@ -11515,7 +13649,8 @@ rs6000_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
case ALTIVEC_BUILTIN_MASK_FOR_LOAD:
case ALTIVEC_BUILTIN_MASK_FOR_STORE:
{
- int icode = (int) CODE_FOR_altivec_lvsr;
+ int icode = (BYTES_BIG_ENDIAN ? (int) CODE_FOR_altivec_lvsr
+ : (int) CODE_FOR_altivec_lvsl);
enum machine_mode tmode = insn_data[icode].operand[0].mode;
enum machine_mode mode = insn_data[icode].operand[1].mode;
tree arg;
@@ -11590,8 +13725,18 @@ rs6000_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
if (success)
return ret;
}
+ if (TARGET_HTM)
+ {
+ ret = htm_expand_builtin (exp, target, &success);
+
+ if (success)
+ return ret;
+ }
- gcc_assert (TARGET_ALTIVEC || TARGET_VSX || TARGET_SPE || TARGET_PAIRED_FLOAT);
+ unsigned attr = rs6000_builtin_info[uns_fcode].attr & RS6000_BTC_TYPE_MASK;
+ gcc_assert (attr == RS6000_BTC_UNARY
+ || attr == RS6000_BTC_BINARY
+ || attr == RS6000_BTC_TERNARY);
/* Handle simple unary operations. */
d = bdesc_1arg;
@@ -11648,6 +13793,14 @@ rs6000_init_builtins (void)
opaque_p_V2SI_type_node = build_pointer_type (opaque_V2SI_type_node);
opaque_V4SI_type_node = build_opaque_vector_type (intSI_type_node, 4);
+ /* We use V1TI mode as a special container to hold __int128_t items that
+ must live in VSX registers. */
+ if (intTI_type_node)
+ {
+ V1TI_type_node = build_vector_type (intTI_type_node, 1);
+ unsigned_V1TI_type_node = build_vector_type (unsigned_intTI_type_node, 1);
+ }
+
/* The 'vector bool ...' types must be kept distinct from 'vector unsigned ...'
types, especially in C++ land. Similarly, 'vector pixel' is distinct from
'vector unsigned short'. */
@@ -11670,8 +13823,13 @@ rs6000_init_builtins (void)
uintSI_type_internal_node = unsigned_intSI_type_node;
intDI_type_internal_node = intDI_type_node;
uintDI_type_internal_node = unsigned_intDI_type_node;
+ intTI_type_internal_node = intTI_type_node;
+ uintTI_type_internal_node = unsigned_intTI_type_node;
float_type_internal_node = float_type_node;
double_type_internal_node = double_type_node;
+ long_double_type_internal_node = long_double_type_node;
+ dfloat64_type_internal_node = dfloat64_type_node;
+ dfloat128_type_internal_node = dfloat128_type_node;
void_type_internal_node = void_type_node;
/* Initialize the modes for builtin_function_type, mapping a machine mode to
@@ -11682,8 +13840,15 @@ rs6000_init_builtins (void)
builtin_mode_to_type[SImode][1] = unsigned_intSI_type_node;
builtin_mode_to_type[DImode][0] = intDI_type_node;
builtin_mode_to_type[DImode][1] = unsigned_intDI_type_node;
+ builtin_mode_to_type[TImode][0] = intTI_type_node;
+ builtin_mode_to_type[TImode][1] = unsigned_intTI_type_node;
builtin_mode_to_type[SFmode][0] = float_type_node;
builtin_mode_to_type[DFmode][0] = double_type_node;
+ builtin_mode_to_type[TFmode][0] = long_double_type_node;
+ builtin_mode_to_type[DDmode][0] = dfloat64_type_node;
+ builtin_mode_to_type[TDmode][0] = dfloat128_type_node;
+ builtin_mode_to_type[V1TImode][0] = V1TI_type_node;
+ builtin_mode_to_type[V1TImode][1] = unsigned_V1TI_type_node;
builtin_mode_to_type[V2SImode][0] = V2SI_type_node;
builtin_mode_to_type[V2SFmode][0] = V2SF_type_node;
builtin_mode_to_type[V2DImode][0] = V2DI_type_node;
@@ -11752,14 +13917,41 @@ rs6000_init_builtins (void)
tdecl = add_builtin_type ("__vector double", V2DF_type_node);
TYPE_NAME (V2DF_type_node) = tdecl;
+ if (TARGET_POWERPC64)
+ {
tdecl = add_builtin_type ("__vector long", V2DI_type_node);
TYPE_NAME (V2DI_type_node) = tdecl;
- tdecl = add_builtin_type ("__vector unsigned long", unsigned_V2DI_type_node);
+ tdecl = add_builtin_type ("__vector unsigned long",
+ unsigned_V2DI_type_node);
TYPE_NAME (unsigned_V2DI_type_node) = tdecl;
tdecl = add_builtin_type ("__vector __bool long", bool_V2DI_type_node);
TYPE_NAME (bool_V2DI_type_node) = tdecl;
+ }
+ else
+ {
+ tdecl = add_builtin_type ("__vector long long", V2DI_type_node);
+ TYPE_NAME (V2DI_type_node) = tdecl;
+
+ tdecl = add_builtin_type ("__vector unsigned long long",
+ unsigned_V2DI_type_node);
+ TYPE_NAME (unsigned_V2DI_type_node) = tdecl;
+
+ tdecl = add_builtin_type ("__vector __bool long long",
+ bool_V2DI_type_node);
+ TYPE_NAME (bool_V2DI_type_node) = tdecl;
+ }
+
+ if (V1TI_type_node)
+ {
+ tdecl = add_builtin_type ("__vector __int128", V1TI_type_node);
+ TYPE_NAME (V1TI_type_node) = tdecl;
+
+ tdecl = add_builtin_type ("__vector unsigned __int128",
+ unsigned_V1TI_type_node);
+ TYPE_NAME (unsigned_V1TI_type_node) = tdecl;
+ }
/* Paired and SPE builtins are only available if you build a compiler with
the appropriate options, so only create those builtins with the
@@ -11772,6 +13964,9 @@ rs6000_init_builtins (void)
spe_init_builtins ();
if (TARGET_EXTRA_BUILTINS)
altivec_init_builtins ();
+ if (TARGET_HTM)
+ htm_init_builtins ();
+
if (TARGET_EXTRA_BUILTINS || TARGET_SPE || TARGET_PAIRED_FLOAT)
rs6000_common_init_builtins ();
@@ -12117,6 +14312,10 @@ altivec_init_builtins (void)
= build_function_type_list (integer_type_node,
integer_type_node, V4SI_type_node,
V4SI_type_node, NULL_TREE);
+ tree int_ftype_int_v2di_v2di
+ = build_function_type_list (integer_type_node,
+ integer_type_node, V2DI_type_node,
+ V2DI_type_node, NULL_TREE);
tree void_ftype_v4si
= build_function_type_list (void_type_node, V4SI_type_node, NULL_TREE);
tree v8hi_ftype_void
@@ -12199,6 +14398,8 @@ altivec_init_builtins (void)
= build_function_type_list (integer_type_node,
integer_type_node, V2DF_type_node,
V2DF_type_node, NULL_TREE);
+ tree v2di_ftype_v2di
+ = build_function_type_list (V2DI_type_node, V2DI_type_node, NULL_TREE);
tree v4si_ftype_v4si
= build_function_type_list (V4SI_type_node, V4SI_type_node, NULL_TREE);
tree v8hi_ftype_v8hi
@@ -12224,10 +14425,58 @@ altivec_init_builtins (void)
def_builtin ("__builtin_altivec_lvehx", v8hi_ftype_long_pcvoid, ALTIVEC_BUILTIN_LVEHX);
def_builtin ("__builtin_altivec_lvewx", v4si_ftype_long_pcvoid, ALTIVEC_BUILTIN_LVEWX);
def_builtin ("__builtin_altivec_lvxl", v4si_ftype_long_pcvoid, ALTIVEC_BUILTIN_LVXL);
+ def_builtin ("__builtin_altivec_lvxl_v2df", v2df_ftype_long_pcvoid,
+ ALTIVEC_BUILTIN_LVXL_V2DF);
+ def_builtin ("__builtin_altivec_lvxl_v2di", v2di_ftype_long_pcvoid,
+ ALTIVEC_BUILTIN_LVXL_V2DI);
+ def_builtin ("__builtin_altivec_lvxl_v4sf", v4sf_ftype_long_pcvoid,
+ ALTIVEC_BUILTIN_LVXL_V4SF);
+ def_builtin ("__builtin_altivec_lvxl_v4si", v4si_ftype_long_pcvoid,
+ ALTIVEC_BUILTIN_LVXL_V4SI);
+ def_builtin ("__builtin_altivec_lvxl_v8hi", v8hi_ftype_long_pcvoid,
+ ALTIVEC_BUILTIN_LVXL_V8HI);
+ def_builtin ("__builtin_altivec_lvxl_v16qi", v16qi_ftype_long_pcvoid,
+ ALTIVEC_BUILTIN_LVXL_V16QI);
def_builtin ("__builtin_altivec_lvx", v4si_ftype_long_pcvoid, ALTIVEC_BUILTIN_LVX);
+ def_builtin ("__builtin_altivec_lvx_v2df", v2df_ftype_long_pcvoid,
+ ALTIVEC_BUILTIN_LVX_V2DF);
+ def_builtin ("__builtin_altivec_lvx_v2di", v2di_ftype_long_pcvoid,
+ ALTIVEC_BUILTIN_LVX_V2DI);
+ def_builtin ("__builtin_altivec_lvx_v4sf", v4sf_ftype_long_pcvoid,
+ ALTIVEC_BUILTIN_LVX_V4SF);
+ def_builtin ("__builtin_altivec_lvx_v4si", v4si_ftype_long_pcvoid,
+ ALTIVEC_BUILTIN_LVX_V4SI);
+ def_builtin ("__builtin_altivec_lvx_v8hi", v8hi_ftype_long_pcvoid,
+ ALTIVEC_BUILTIN_LVX_V8HI);
+ def_builtin ("__builtin_altivec_lvx_v16qi", v16qi_ftype_long_pcvoid,
+ ALTIVEC_BUILTIN_LVX_V16QI);
def_builtin ("__builtin_altivec_stvx", void_ftype_v4si_long_pvoid, ALTIVEC_BUILTIN_STVX);
+ def_builtin ("__builtin_altivec_stvx_v2df", void_ftype_v2df_long_pvoid,
+ ALTIVEC_BUILTIN_STVX_V2DF);
+ def_builtin ("__builtin_altivec_stvx_v2di", void_ftype_v2di_long_pvoid,
+ ALTIVEC_BUILTIN_STVX_V2DI);
+ def_builtin ("__builtin_altivec_stvx_v4sf", void_ftype_v4sf_long_pvoid,
+ ALTIVEC_BUILTIN_STVX_V4SF);
+ def_builtin ("__builtin_altivec_stvx_v4si", void_ftype_v4si_long_pvoid,
+ ALTIVEC_BUILTIN_STVX_V4SI);
+ def_builtin ("__builtin_altivec_stvx_v8hi", void_ftype_v8hi_long_pvoid,
+ ALTIVEC_BUILTIN_STVX_V8HI);
+ def_builtin ("__builtin_altivec_stvx_v16qi", void_ftype_v16qi_long_pvoid,
+ ALTIVEC_BUILTIN_STVX_V16QI);
def_builtin ("__builtin_altivec_stvewx", void_ftype_v4si_long_pvoid, ALTIVEC_BUILTIN_STVEWX);
def_builtin ("__builtin_altivec_stvxl", void_ftype_v4si_long_pvoid, ALTIVEC_BUILTIN_STVXL);
+ def_builtin ("__builtin_altivec_stvxl_v2df", void_ftype_v2df_long_pvoid,
+ ALTIVEC_BUILTIN_STVXL_V2DF);
+ def_builtin ("__builtin_altivec_stvxl_v2di", void_ftype_v2di_long_pvoid,
+ ALTIVEC_BUILTIN_STVXL_V2DI);
+ def_builtin ("__builtin_altivec_stvxl_v4sf", void_ftype_v4sf_long_pvoid,
+ ALTIVEC_BUILTIN_STVXL_V4SF);
+ def_builtin ("__builtin_altivec_stvxl_v4si", void_ftype_v4si_long_pvoid,
+ ALTIVEC_BUILTIN_STVXL_V4SI);
+ def_builtin ("__builtin_altivec_stvxl_v8hi", void_ftype_v8hi_long_pvoid,
+ ALTIVEC_BUILTIN_STVXL_V8HI);
+ def_builtin ("__builtin_altivec_stvxl_v16qi", void_ftype_v16qi_long_pvoid,
+ ALTIVEC_BUILTIN_STVXL_V16QI);
def_builtin ("__builtin_altivec_stvebx", void_ftype_v16qi_long_pvoid, ALTIVEC_BUILTIN_STVEBX);
def_builtin ("__builtin_altivec_stvehx", void_ftype_v8hi_long_pvoid, ALTIVEC_BUILTIN_STVEHX);
def_builtin ("__builtin_vec_ld", opaque_ftype_long_pcvoid, ALTIVEC_BUILTIN_VEC_LD);
@@ -12334,6 +14583,9 @@ altivec_init_builtins (void)
case VOIDmode:
type = int_ftype_int_opaque_opaque;
break;
+ case V2DImode:
+ type = int_ftype_int_v2di_v2di;
+ break;
case V4SImode:
type = int_ftype_int_v4si_v4si;
break;
@@ -12367,6 +14619,9 @@ altivec_init_builtins (void)
switch (mode0)
{
+ case V2DImode:
+ type = v2di_ftype_v2di;
+ break;
case V4SImode:
type = v4si_ftype_v4si;
break;
@@ -12497,6 +14752,107 @@ altivec_init_builtins (void)
ftype = build_function_type_list (intDI_type_node, V2DI_type_node,
integer_type_node, NULL_TREE);
def_builtin ("__builtin_vec_ext_v2di", ftype, VSX_BUILTIN_VEC_EXT_V2DI);
+
+
+ if (V1TI_type_node)
+ {
+ tree v1ti_ftype_long_pcvoid
+ = build_function_type_list (V1TI_type_node,
+ long_integer_type_node, pcvoid_type_node,
+ NULL_TREE);
+ tree void_ftype_v1ti_long_pvoid
+ = build_function_type_list (void_type_node,
+ V1TI_type_node, long_integer_type_node,
+ pvoid_type_node, NULL_TREE);
+ def_builtin ("__builtin_vsx_lxvd2x_v1ti", v1ti_ftype_long_pcvoid,
+ VSX_BUILTIN_LXVD2X_V1TI);
+ def_builtin ("__builtin_vsx_stxvd2x_v1ti", void_ftype_v1ti_long_pvoid,
+ VSX_BUILTIN_STXVD2X_V1TI);
+ ftype = build_function_type_list (V1TI_type_node, intTI_type_node,
+ NULL_TREE, NULL_TREE);
+ def_builtin ("__builtin_vec_init_v1ti", ftype, VSX_BUILTIN_VEC_INIT_V1TI);
+ ftype = build_function_type_list (V1TI_type_node, V1TI_type_node,
+ intTI_type_node,
+ integer_type_node, NULL_TREE);
+ def_builtin ("__builtin_vec_set_v1ti", ftype, VSX_BUILTIN_VEC_SET_V1TI);
+ ftype = build_function_type_list (intTI_type_node, V1TI_type_node,
+ integer_type_node, NULL_TREE);
+ def_builtin ("__builtin_vec_ext_v1ti", ftype, VSX_BUILTIN_VEC_EXT_V1TI);
+ }
+
+}
+
+static void
+htm_init_builtins (void)
+{
+ HOST_WIDE_INT builtin_mask = rs6000_builtin_mask;
+ const struct builtin_description *d;
+ size_t i;
+
+ d = bdesc_htm;
+ for (i = 0; i < ARRAY_SIZE (bdesc_htm); i++, d++)
+ {
+ tree op[MAX_HTM_OPERANDS], type;
+ HOST_WIDE_INT mask = d->mask;
+ unsigned attr = rs6000_builtin_info[d->code].attr;
+ bool void_func = (attr & RS6000_BTC_VOID);
+ int attr_args = (attr & RS6000_BTC_TYPE_MASK);
+ int nopnds = 0;
+ tree argtype = (attr & RS6000_BTC_SPR) ? long_unsigned_type_node
+ : unsigned_type_node;
+
+ if ((mask & builtin_mask) != mask)
+ {
+ if (TARGET_DEBUG_BUILTIN)
+ fprintf (stderr, "htm_builtin, skip binary %s\n", d->name);
+ continue;
+ }
+
+ if (d->name == 0)
+ {
+ if (TARGET_DEBUG_BUILTIN)
+ fprintf (stderr, "htm_builtin, bdesc_htm[%ld] no name\n",
+ (long unsigned) i);
+ continue;
+ }
+
+ op[nopnds++] = (void_func) ? void_type_node : argtype;
+
+ if (attr_args == RS6000_BTC_UNARY)
+ op[nopnds++] = argtype;
+ else if (attr_args == RS6000_BTC_BINARY)
+ {
+ op[nopnds++] = argtype;
+ op[nopnds++] = argtype;
+ }
+ else if (attr_args == RS6000_BTC_TERNARY)
+ {
+ op[nopnds++] = argtype;
+ op[nopnds++] = argtype;
+ op[nopnds++] = argtype;
+ }
+
+ switch (nopnds)
+ {
+ case 1:
+ type = build_function_type_list (op[0], NULL_TREE);
+ break;
+ case 2:
+ type = build_function_type_list (op[0], op[1], NULL_TREE);
+ break;
+ case 3:
+ type = build_function_type_list (op[0], op[1], op[2], NULL_TREE);
+ break;
+ case 4:
+ type = build_function_type_list (op[0], op[1], op[2], op[3],
+ NULL_TREE);
+ break;
+ default:
+ gcc_unreachable ();
+ }
+
+ def_builtin (d->name, type, d->code);
+ }
}
/* Hash function for builtin functions with up to 3 arguments and a return
@@ -12572,11 +14928,34 @@ builtin_function_type (enum machine_mode mode_ret, enum machine_mode mode_arg0,
are type correct. */
switch (builtin)
{
+ /* unsigned 1 argument functions. */
+ case CRYPTO_BUILTIN_VSBOX:
+ case P8V_BUILTIN_VGBBD:
+ case MISC_BUILTIN_CDTBCD:
+ case MISC_BUILTIN_CBCDTD:
+ h.uns_p[0] = 1;
+ h.uns_p[1] = 1;
+ break;
+
/* unsigned 2 argument functions. */
case ALTIVEC_BUILTIN_VMULEUB_UNS:
case ALTIVEC_BUILTIN_VMULEUH_UNS:
case ALTIVEC_BUILTIN_VMULOUB_UNS:
case ALTIVEC_BUILTIN_VMULOUH_UNS:
+ case CRYPTO_BUILTIN_VCIPHER:
+ case CRYPTO_BUILTIN_VCIPHERLAST:
+ case CRYPTO_BUILTIN_VNCIPHER:
+ case CRYPTO_BUILTIN_VNCIPHERLAST:
+ case CRYPTO_BUILTIN_VPMSUMB:
+ case CRYPTO_BUILTIN_VPMSUMH:
+ case CRYPTO_BUILTIN_VPMSUMW:
+ case CRYPTO_BUILTIN_VPMSUMD:
+ case CRYPTO_BUILTIN_VPMSUM:
+ case MISC_BUILTIN_ADDG6S:
+ case MISC_BUILTIN_DIVWEU:
+ case MISC_BUILTIN_DIVWEUO:
+ case MISC_BUILTIN_DIVDEU:
+ case MISC_BUILTIN_DIVDEUO:
h.uns_p[0] = 1;
h.uns_p[1] = 1;
h.uns_p[2] = 1;
@@ -12599,6 +14978,14 @@ builtin_function_type (enum machine_mode mode_ret, enum machine_mode mode_arg0,
case VSX_BUILTIN_XXSEL_8HI_UNS:
case VSX_BUILTIN_XXSEL_4SI_UNS:
case VSX_BUILTIN_XXSEL_2DI_UNS:
+ case CRYPTO_BUILTIN_VPERMXOR:
+ case CRYPTO_BUILTIN_VPERMXOR_V2DI:
+ case CRYPTO_BUILTIN_VPERMXOR_V4SI:
+ case CRYPTO_BUILTIN_VPERMXOR_V8HI:
+ case CRYPTO_BUILTIN_VPERMXOR_V16QI:
+ case CRYPTO_BUILTIN_VSHASIGMAW:
+ case CRYPTO_BUILTIN_VSHASIGMAD:
+ case CRYPTO_BUILTIN_VSHASIGMA:
h.uns_p[0] = 1;
h.uns_p[1] = 1;
h.uns_p[2] = 1;
@@ -12630,9 +15017,18 @@ builtin_function_type (enum machine_mode mode_ret, enum machine_mode mode_arg0,
/* signed args, unsigned return. */
case VSX_BUILTIN_XVCVDPUXDS_UNS:
case ALTIVEC_BUILTIN_FIXUNS_V4SF_V4SI:
+ case MISC_BUILTIN_UNPACK_TD:
+ case MISC_BUILTIN_UNPACK_V1TI:
h.uns_p[0] = 1;
break;
+ /* unsigned arguments for 128-bit pack instructions. */
+ case MISC_BUILTIN_PACK_TD:
+ case MISC_BUILTIN_PACK_V1TI:
+ h.uns_p[1] = 1;
+ h.uns_p[2] = 1;
+ break;
+
default:
break;
}
@@ -12740,8 +15136,23 @@ rs6000_common_init_builtins (void)
else
{
enum insn_code icode = d->icode;
- if (d->name == 0 || icode == CODE_FOR_nothing)
+ if (d->name == 0)
+ {
+ if (TARGET_DEBUG_BUILTIN)
+ fprintf (stderr, "rs6000_builtin, bdesc_3arg[%ld] no name\n",
+ (long unsigned)i);
+
+ continue;
+ }
+
+ if (icode == CODE_FOR_nothing)
+ {
+ if (TARGET_DEBUG_BUILTIN)
+ fprintf (stderr, "rs6000_builtin, skip ternary %s (no code)\n",
+ d->name);
+
continue;
+ }
type = builtin_function_type (insn_data[icode].operand[0].mode,
insn_data[icode].operand[1].mode,
@@ -12780,8 +15191,23 @@ rs6000_common_init_builtins (void)
else
{
enum insn_code icode = d->icode;
- if (d->name == 0 || icode == CODE_FOR_nothing)
+ if (d->name == 0)
+ {
+ if (TARGET_DEBUG_BUILTIN)
+ fprintf (stderr, "rs6000_builtin, bdesc_2arg[%ld] no name\n",
+ (long unsigned)i);
+
+ continue;
+ }
+
+ if (icode == CODE_FOR_nothing)
+ {
+ if (TARGET_DEBUG_BUILTIN)
+ fprintf (stderr, "rs6000_builtin, skip binary %s (no code)\n",
+ d->name);
+
continue;
+ }
mode0 = insn_data[icode].operand[0].mode;
mode1 = insn_data[icode].operand[1].mode;
@@ -12842,8 +15268,23 @@ rs6000_common_init_builtins (void)
else
{
enum insn_code icode = d->icode;
- if (d->name == 0 || icode == CODE_FOR_nothing)
+ if (d->name == 0)
+ {
+ if (TARGET_DEBUG_BUILTIN)
+ fprintf (stderr, "rs6000_builtin, bdesc_1arg[%ld] no name\n",
+ (long unsigned)i);
+
+ continue;
+ }
+
+ if (icode == CODE_FOR_nothing)
+ {
+ if (TARGET_DEBUG_BUILTIN)
+ fprintf (stderr, "rs6000_builtin, skip unary %s (no code)\n",
+ d->name);
+
continue;
+ }
mode0 = insn_data[icode].operand[0].mode;
mode1 = insn_data[icode].operand[1].mode;
@@ -13631,7 +16072,7 @@ rs6000_secondary_memory_needed_rtx (enum machine_mode mode)
static bool eliminated = false;
rtx ret;
- if (mode != SDmode)
+ if (mode != SDmode || TARGET_NO_SDMODE_STACK)
ret = assign_stack_local (mode, GET_MODE_SIZE (mode), 0);
else
{
@@ -13660,6 +16101,17 @@ rs6000_secondary_memory_needed_rtx (enum machine_mode mode)
return ret;
}
+/* Return the mode to be used for memory when a secondary memory
+ location is needed. For SDmode values we need to use DDmode, in
+ all other cases we can use the same mode. */
+enum machine_mode
+rs6000_secondary_memory_needed_mode (enum machine_mode mode)
+{
+ if (mode == SDmode)
+ return DDmode;
+ return mode;
+}
+
static tree
rs6000_check_sdmode (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
{
@@ -13690,29 +16142,226 @@ rs6000_check_sdmode (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
return NULL_TREE;
}
-enum reload_reg_type {
- GPR_REGISTER_TYPE,
- VECTOR_REGISTER_TYPE,
- OTHER_REGISTER_TYPE
-};
+/* Classify a register type. Because the FMRGOW/FMRGEW instructions only work
+ on traditional floating point registers, and the VMRGOW/VMRGEW instructions
+ only work on the traditional altivec registers, note if an altivec register
+ was chosen. */
-static enum reload_reg_type
-rs6000_reload_register_type (enum reg_class rclass)
+static enum rs6000_reg_type
+register_to_reg_type (rtx reg, bool *is_altivec)
{
- switch (rclass)
+ HOST_WIDE_INT regno;
+ enum reg_class rclass;
+
+ if (GET_CODE (reg) == SUBREG)
+ reg = SUBREG_REG (reg);
+
+ if (!REG_P (reg))
+ return NO_REG_TYPE;
+
+ regno = REGNO (reg);
+ if (regno >= FIRST_PSEUDO_REGISTER)
{
- case GENERAL_REGS:
- case BASE_REGS:
- return GPR_REGISTER_TYPE;
+ if (!lra_in_progress && !reload_in_progress && !reload_completed)
+ return PSEUDO_REG_TYPE;
- case FLOAT_REGS:
- case ALTIVEC_REGS:
- case VSX_REGS:
- return VECTOR_REGISTER_TYPE;
+ regno = true_regnum (reg);
+ if (regno < 0 || regno >= FIRST_PSEUDO_REGISTER)
+ return PSEUDO_REG_TYPE;
+ }
- default:
- return OTHER_REGISTER_TYPE;
+ gcc_assert (regno >= 0);
+
+ if (is_altivec && ALTIVEC_REGNO_P (regno))
+ *is_altivec = true;
+
+ rclass = rs6000_regno_regclass[regno];
+ return reg_class_to_reg_type[(int)rclass];
+}
+
+/* Helper function for rs6000_secondary_reload to return true if a move to a
+ different register classe is really a simple move. */
+
+static bool
+rs6000_secondary_reload_simple_move (enum rs6000_reg_type to_type,
+ enum rs6000_reg_type from_type,
+ enum machine_mode mode)
+{
+ int size;
+
+ /* Add support for various direct moves available. In this function, we only
+ look at cases where we don't need any extra registers, and one or more
+ simple move insns are issued. At present, 32-bit integers are not allowed
+ in FPR/VSX registers. Single precision binary floating is not a simple
+ move because we need to convert to the single precision memory layout.
+ The 4-byte SDmode can be moved. */
+ size = GET_MODE_SIZE (mode);
+ if (TARGET_DIRECT_MOVE
+ && ((mode == SDmode) || (TARGET_POWERPC64 && size == 8))
+ && ((to_type == GPR_REG_TYPE && from_type == VSX_REG_TYPE)
+ || (to_type == VSX_REG_TYPE && from_type == GPR_REG_TYPE)))
+ return true;
+
+ else if (TARGET_MFPGPR && TARGET_POWERPC64 && size == 8
+ && ((to_type == GPR_REG_TYPE && from_type == FPR_REG_TYPE)
+ || (to_type == FPR_REG_TYPE && from_type == GPR_REG_TYPE)))
+ return true;
+
+ else if ((size == 4 || (TARGET_POWERPC64 && size == 8))
+ && ((to_type == GPR_REG_TYPE && from_type == SPR_REG_TYPE)
+ || (to_type == SPR_REG_TYPE && from_type == GPR_REG_TYPE)))
+ return true;
+
+ return false;
+}
+
+/* Power8 helper function for rs6000_secondary_reload, handle all of the
+ special direct moves that involve allocating an extra register, return the
+ insn code of the helper function if there is such a function or
+ CODE_FOR_nothing if not. */
+
+static bool
+rs6000_secondary_reload_direct_move (enum rs6000_reg_type to_type,
+ enum rs6000_reg_type from_type,
+ enum machine_mode mode,
+ secondary_reload_info *sri,
+ bool altivec_p)
+{
+ bool ret = false;
+ enum insn_code icode = CODE_FOR_nothing;
+ int cost = 0;
+ int size = GET_MODE_SIZE (mode);
+
+ if (TARGET_POWERPC64)
+ {
+ if (size == 16)
+ {
+ /* Handle moving 128-bit values from GPRs to VSX point registers on
+ power8 when running in 64-bit mode using XXPERMDI to glue the two
+ 64-bit values back together. */
+ if (to_type == VSX_REG_TYPE && from_type == GPR_REG_TYPE)
+ {
+ cost = 3; /* 2 mtvsrd's, 1 xxpermdi. */
+ icode = reg_addr[mode].reload_vsx_gpr;
+ }
+
+ /* Handle moving 128-bit values from VSX point registers to GPRs on
+ power8 when running in 64-bit mode using XXPERMDI to get access to the
+ bottom 64-bit value. */
+ else if (to_type == GPR_REG_TYPE && from_type == VSX_REG_TYPE)
+ {
+ cost = 3; /* 2 mfvsrd's, 1 xxpermdi. */
+ icode = reg_addr[mode].reload_gpr_vsx;
+ }
+ }
+
+ else if (mode == SFmode)
+ {
+ if (to_type == GPR_REG_TYPE && from_type == VSX_REG_TYPE)
+ {
+ cost = 3; /* xscvdpspn, mfvsrd, and. */
+ icode = reg_addr[mode].reload_gpr_vsx;
+ }
+
+ else if (to_type == VSX_REG_TYPE && from_type == GPR_REG_TYPE)
+ {
+ cost = 2; /* mtvsrz, xscvspdpn. */
+ icode = reg_addr[mode].reload_vsx_gpr;
+ }
+ }
+ }
+
+ if (TARGET_POWERPC64 && size == 16)
+ {
+ /* Handle moving 128-bit values from GPRs to VSX point registers on
+ power8 when running in 64-bit mode using XXPERMDI to glue the two
+ 64-bit values back together. */
+ if (to_type == VSX_REG_TYPE && from_type == GPR_REG_TYPE)
+ {
+ cost = 3; /* 2 mtvsrd's, 1 xxpermdi. */
+ icode = reg_addr[mode].reload_vsx_gpr;
+ }
+
+ /* Handle moving 128-bit values from VSX point registers to GPRs on
+ power8 when running in 64-bit mode using XXPERMDI to get access to the
+ bottom 64-bit value. */
+ else if (to_type == GPR_REG_TYPE && from_type == VSX_REG_TYPE)
+ {
+ cost = 3; /* 2 mfvsrd's, 1 xxpermdi. */
+ icode = reg_addr[mode].reload_gpr_vsx;
+ }
+ }
+
+ else if (!TARGET_POWERPC64 && size == 8)
+ {
+ /* Handle moving 64-bit values from GPRs to floating point registers on
+ power8 when running in 32-bit mode using FMRGOW to glue the two 32-bit
+ values back together. Altivec register classes must be handled
+ specially since a different instruction is used, and the secondary
+ reload support requires a single instruction class in the scratch
+ register constraint. However, right now TFmode is not allowed in
+ Altivec registers, so the pattern will never match. */
+ if (to_type == VSX_REG_TYPE && from_type == GPR_REG_TYPE && !altivec_p)
+ {
+ cost = 3; /* 2 mtvsrwz's, 1 fmrgow. */
+ icode = reg_addr[mode].reload_fpr_gpr;
+ }
}
+
+ if (icode != CODE_FOR_nothing)
+ {
+ ret = true;
+ if (sri)
+ {
+ sri->icode = icode;
+ sri->extra_cost = cost;
+ }
+ }
+
+ return ret;
+}
+
+/* Return whether a move between two register classes can be done either
+ directly (simple move) or via a pattern that uses a single extra temporary
+ (using power8's direct move in this case. */
+
+static bool
+rs6000_secondary_reload_move (enum rs6000_reg_type to_type,
+ enum rs6000_reg_type from_type,
+ enum machine_mode mode,
+ secondary_reload_info *sri,
+ bool altivec_p)
+{
+ /* Fall back to load/store reloads if either type is not a register. */
+ if (to_type == NO_REG_TYPE || from_type == NO_REG_TYPE)
+ return false;
+
+ /* If we haven't allocated registers yet, assume the move can be done for the
+ standard register types. */
+ if ((to_type == PSEUDO_REG_TYPE && from_type == PSEUDO_REG_TYPE)
+ || (to_type == PSEUDO_REG_TYPE && IS_STD_REG_TYPE (from_type))
+ || (from_type == PSEUDO_REG_TYPE && IS_STD_REG_TYPE (to_type)))
+ return true;
+
+ /* Moves to the same set of registers is a simple move for non-specialized
+ registers. */
+ if (to_type == from_type && IS_STD_REG_TYPE (to_type))
+ return true;
+
+ /* Check whether a simple move can be done directly. */
+ if (rs6000_secondary_reload_simple_move (to_type, from_type, mode))
+ {
+ if (sri)
+ {
+ sri->icode = CODE_FOR_nothing;
+ sri->extra_cost = 0;
+ }
+ return true;
+ }
+
+ /* Now check if we can do it in a few steps. */
+ return rs6000_secondary_reload_direct_move (to_type, from_type, mode, sri,
+ altivec_p);
}
/* Inform reload about cases where moving X with a mode MODE to a register in
@@ -13738,11 +16387,35 @@ rs6000_secondary_reload (bool in_p,
bool default_p = false;
sri->icode = CODE_FOR_nothing;
+ icode = ((in_p)
+ ? reg_addr[mode].reload_load
+ : reg_addr[mode].reload_store);
- /* Convert vector loads and stores into gprs to use an additional base
- register. */
- icode = rs6000_vector_reload[mode][in_p != false];
- if (icode != CODE_FOR_nothing)
+ if (REG_P (x) || register_operand (x, mode))
+ {
+ enum rs6000_reg_type to_type = reg_class_to_reg_type[(int)rclass];
+ bool altivec_p = (rclass == ALTIVEC_REGS);
+ enum rs6000_reg_type from_type = register_to_reg_type (x, &altivec_p);
+
+ if (!in_p)
+ {
+ enum rs6000_reg_type exchange = to_type;
+ to_type = from_type;
+ from_type = exchange;
+ }
+
+ /* Can we do a direct move of some sort? */
+ if (rs6000_secondary_reload_move (to_type, from_type, mode, sri,
+ altivec_p))
+ {
+ icode = (enum insn_code)sri->icode;
+ default_p = false;
+ ret = NO_REGS;
+ }
+ }
+
+ /* Handle vector moves with reload helper functions. */
+ if (ret == ALL_REGS && icode != CODE_FOR_nothing)
{
ret = NO_REGS;
sri->icode = CODE_FOR_nothing;
@@ -13754,11 +16427,20 @@ rs6000_secondary_reload (bool in_p,
/* Loads to and stores from gprs can do reg+offset, and wouldn't need
an extra register in that case, but it would need an extra
- register if the addressing is reg+reg or (reg+reg)&(-16). */
+ register if the addressing is reg+reg or (reg+reg)&(-16). Special
+ case load/store quad. */
if (rclass == GENERAL_REGS || rclass == BASE_REGS)
{
- if (!legitimate_indirect_address_p (addr, false)
- && !rs6000_legitimate_offset_address_p (TImode, addr,
+ if (TARGET_POWERPC64 && TARGET_QUAD_MEMORY
+ && GET_MODE_SIZE (mode) == 16
+ && quad_memory_operand (x, mode))
+ {
+ sri->icode = icode;
+ sri->extra_cost = 2;
+ }
+
+ else if (!legitimate_indirect_address_p (addr, false)
+ && !rs6000_legitimate_offset_address_p (PTImode, addr,
false, true))
{
sri->icode = icode;
@@ -13768,8 +16450,20 @@ rs6000_secondary_reload (bool in_p,
+ ((GET_CODE (addr) == AND) ? 1 : 0));
}
}
+ /* Allow scalar loads to/from the traditional floating point
+ registers, even if VSX memory is set. */
+ else if ((rclass == FLOAT_REGS || rclass == NO_REGS)
+ && (GET_MODE_SIZE (mode) == 4 || GET_MODE_SIZE (mode) == 8)
+ && (legitimate_indirect_address_p (addr, false)
+ || legitimate_indirect_address_p (addr, false)
+ || rs6000_legitimate_offset_address_p (mode, addr,
+ false, true)))
+
+ ;
/* Loads to and stores from vector registers can only do reg+reg
- addressing. Altivec registers can also do (reg+reg)&(-16). */
+ addressing. Altivec registers can also do (reg+reg)&(-16). Allow
+ scalar modes loading up the traditional floating point registers
+ to use offset addresses. */
else if (rclass == VSX_REGS || rclass == ALTIVEC_REGS
|| rclass == FLOAT_REGS || rclass == NO_REGS)
{
@@ -13813,12 +16507,12 @@ rs6000_secondary_reload (bool in_p,
else
{
enum reg_class xclass = REGNO_REG_CLASS (regno);
- enum reload_reg_type rtype1 = rs6000_reload_register_type (rclass);
- enum reload_reg_type rtype2 = rs6000_reload_register_type (xclass);
+ enum rs6000_reg_type rtype1 = reg_class_to_reg_type[(int)rclass];
+ enum rs6000_reg_type rtype2 = reg_class_to_reg_type[(int)xclass];
/* If memory is needed, use default_secondary_reload to create the
stack slot. */
- if (rtype1 != rtype2 || rtype1 == OTHER_REGISTER_TYPE)
+ if (rtype1 != rtype2 || !IS_STD_REG_TYPE (rtype1))
default_p = true;
else
ret = NO_REGS;
@@ -13828,7 +16522,7 @@ rs6000_secondary_reload (bool in_p,
default_p = true;
}
else if (TARGET_POWERPC64
- && rs6000_reload_register_type (rclass) == GPR_REGISTER_TYPE
+ && reg_class_to_reg_type[(int)rclass] == GPR_REG_TYPE
&& MEM_P (x)
&& GET_MODE_SIZE (GET_MODE (x)) >= UNITS_PER_WORD)
{
@@ -13867,7 +16561,7 @@ rs6000_secondary_reload (bool in_p,
default_p = true;
}
else if (!TARGET_POWERPC64
- && rs6000_reload_register_type (rclass) == GPR_REGISTER_TYPE
+ && reg_class_to_reg_type[(int)rclass] == GPR_REG_TYPE
&& MEM_P (x)
&& GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD)
{
@@ -13945,6 +16639,36 @@ rs6000_secondary_reload (bool in_p,
return ret;
}
+/* Better tracing for rs6000_secondary_reload_inner. */
+
+static void
+rs6000_secondary_reload_trace (int line, rtx reg, rtx mem, rtx scratch,
+ bool store_p)
+{
+ rtx set, clobber;
+
+ gcc_assert (reg != NULL_RTX && mem != NULL_RTX && scratch != NULL_RTX);
+
+ fprintf (stderr, "rs6000_secondary_reload_inner:%d, type = %s\n", line,
+ store_p ? "store" : "load");
+
+ if (store_p)
+ set = gen_rtx_SET (VOIDmode, mem, reg);
+ else
+ set = gen_rtx_SET (VOIDmode, reg, mem);
+
+ clobber = gen_rtx_CLOBBER (VOIDmode, scratch);
+ debug_rtx (gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, set, clobber)));
+}
+
+static void
+rs6000_secondary_reload_fail (int line, rtx reg, rtx mem, rtx scratch,
+ bool store_p)
+{
+ rs6000_secondary_reload_trace (line, reg, mem, scratch, store_p);
+ gcc_unreachable ();
+}
+
/* Fixup reload addresses for Altivec or VSX loads/stores to change SP+offset
to SP+reg addressing. */
@@ -13963,21 +16687,16 @@ rs6000_secondary_reload_inner (rtx reg, rtx mem, rtx scratch, bool store_p)
rtx cc_clobber;
if (TARGET_DEBUG_ADDR)
- {
- fprintf (stderr, "\nrs6000_secondary_reload_inner, type = %s\n",
- store_p ? "store" : "load");
- fprintf (stderr, "reg:\n");
- debug_rtx (reg);
- fprintf (stderr, "mem:\n");
- debug_rtx (mem);
- fprintf (stderr, "scratch:\n");
- debug_rtx (scratch);
- }
+ rs6000_secondary_reload_trace (__LINE__, reg, mem, scratch, store_p);
+
+ if (regno < 0 || regno >= FIRST_PSEUDO_REGISTER)
+ rs6000_secondary_reload_fail (__LINE__, reg, mem, scratch, store_p);
+
+ if (GET_CODE (mem) != MEM)
+ rs6000_secondary_reload_fail (__LINE__, reg, mem, scratch, store_p);
- gcc_assert (regno >= 0 && regno < FIRST_PSEUDO_REGISTER);
- gcc_assert (GET_CODE (mem) == MEM);
rclass = REGNO_REG_CLASS (regno);
- addr = XEXP (mem, 0);
+ addr = find_replacement (&XEXP (mem, 0));
switch (rclass)
{
@@ -13988,25 +16707,31 @@ rs6000_secondary_reload_inner (rtx reg, rtx mem, rtx scratch, bool store_p)
if (GET_CODE (addr) == AND)
{
and_op2 = XEXP (addr, 1);
- addr = XEXP (addr, 0);
+ addr = find_replacement (&XEXP (addr, 0));
}
if (GET_CODE (addr) == PRE_MODIFY)
{
- scratch_or_premodify = XEXP (addr, 0);
- gcc_assert (REG_P (scratch_or_premodify));
- gcc_assert (GET_CODE (XEXP (addr, 1)) == PLUS);
- addr = XEXP (addr, 1);
+ scratch_or_premodify = find_replacement (&XEXP (addr, 0));
+ if (!REG_P (scratch_or_premodify))
+ rs6000_secondary_reload_fail (__LINE__, reg, mem, scratch, store_p);
+
+ addr = find_replacement (&XEXP (addr, 1));
+ if (GET_CODE (addr) != PLUS)
+ rs6000_secondary_reload_fail (__LINE__, reg, mem, scratch, store_p);
}
if (GET_CODE (addr) == PLUS
&& (and_op2 != NULL_RTX
- || !rs6000_legitimate_offset_address_p (TImode, addr,
+ || !rs6000_legitimate_offset_address_p (PTImode, addr,
false, true)))
{
+ /* find_replacement already recurses into both operands of
+ PLUS so we don't need to call it here. */
addr_op1 = XEXP (addr, 0);
addr_op2 = XEXP (addr, 1);
- gcc_assert (legitimate_indirect_address_p (addr_op1, false));
+ if (!legitimate_indirect_address_p (addr_op1, false))
+ rs6000_secondary_reload_fail (__LINE__, reg, mem, scratch, store_p);
if (!REG_P (addr_op2)
&& (GET_CODE (addr_op2) != CONST_INT
@@ -14034,7 +16759,7 @@ rs6000_secondary_reload_inner (rtx reg, rtx mem, rtx scratch, bool store_p)
scratch_or_premodify = scratch;
}
else if (!legitimate_indirect_address_p (addr, false)
- && !rs6000_legitimate_offset_address_p (TImode, addr,
+ && !rs6000_legitimate_offset_address_p (PTImode, addr,
false, true))
{
if (TARGET_DEBUG_ADDR)
@@ -14050,9 +16775,21 @@ rs6000_secondary_reload_inner (rtx reg, rtx mem, rtx scratch, bool store_p)
}
break;
- /* Float/Altivec registers can only handle reg+reg addressing. Move
- other addresses into a scratch register. */
+ /* Float registers can do offset+reg addressing for scalar types. */
case FLOAT_REGS:
+ if (legitimate_indirect_address_p (addr, false) /* reg */
+ || legitimate_indexed_address_p (addr, false) /* reg+reg */
+ || ((GET_MODE_SIZE (mode) == 4 || GET_MODE_SIZE (mode) == 8)
+ && and_op2 == NULL_RTX
+ && scratch_or_premodify == scratch
+ && rs6000_legitimate_offset_address_p (mode, addr, false, false)))
+ break;
+
+ /* If this isn't a legacy floating point load/store, fall through to the
+ VSX defaults. */
+
+ /* VSX/Altivec registers can only handle reg+reg addressing. Move other
+ addresses into a scratch register. */
case VSX_REGS:
case ALTIVEC_REGS:
@@ -14066,42 +16803,43 @@ rs6000_secondary_reload_inner (rtx reg, rtx mem, rtx scratch, bool store_p)
|| !VECTOR_MEM_ALTIVEC_P (mode)))
{
and_op2 = XEXP (addr, 1);
- addr = XEXP (addr, 0);
+ addr = find_replacement (&XEXP (addr, 0));
}
/* If we aren't using a VSX load, save the PRE_MODIFY register and use it
as the address later. */
if (GET_CODE (addr) == PRE_MODIFY
- && (!VECTOR_MEM_VSX_P (mode)
+ && ((ALTIVEC_OR_VSX_VECTOR_MODE (mode)
+ && (rclass != FLOAT_REGS
+ || (GET_MODE_SIZE (mode) != 4 && GET_MODE_SIZE (mode) != 8)))
|| and_op2 != NULL_RTX
|| !legitimate_indexed_address_p (XEXP (addr, 1), false)))
{
- scratch_or_premodify = XEXP (addr, 0);
- gcc_assert (legitimate_indirect_address_p (scratch_or_premodify,
- false));
- gcc_assert (GET_CODE (XEXP (addr, 1)) == PLUS);
- addr = XEXP (addr, 1);
+ scratch_or_premodify = find_replacement (&XEXP (addr, 0));
+ if (!legitimate_indirect_address_p (scratch_or_premodify, false))
+ rs6000_secondary_reload_fail (__LINE__, reg, mem, scratch, store_p);
+
+ addr = find_replacement (&XEXP (addr, 1));
+ if (GET_CODE (addr) != PLUS)
+ rs6000_secondary_reload_fail (__LINE__, reg, mem, scratch, store_p);
}
if (legitimate_indirect_address_p (addr, false) /* reg */
|| legitimate_indexed_address_p (addr, false) /* reg+reg */
- || GET_CODE (addr) == PRE_MODIFY /* VSX pre-modify */
|| (GET_CODE (addr) == AND /* Altivec memory */
+ && rclass == ALTIVEC_REGS
&& GET_CODE (XEXP (addr, 1)) == CONST_INT
&& INTVAL (XEXP (addr, 1)) == -16
- && VECTOR_MEM_ALTIVEC_P (mode))
- || (rclass == FLOAT_REGS /* legacy float mem */
- && GET_MODE_SIZE (mode) == 8
- && and_op2 == NULL_RTX
- && scratch_or_premodify == scratch
- && rs6000_legitimate_offset_address_p (mode, addr, false, false)))
+ && (legitimate_indirect_address_p (XEXP (addr, 0), false)
+ || legitimate_indexed_address_p (XEXP (addr, 0), false))))
;
else if (GET_CODE (addr) == PLUS)
{
addr_op1 = XEXP (addr, 0);
addr_op2 = XEXP (addr, 1);
- gcc_assert (REG_P (addr_op1));
+ if (!REG_P (addr_op1))
+ rs6000_secondary_reload_fail (__LINE__, reg, mem, scratch, store_p);
if (TARGET_DEBUG_ADDR)
{
@@ -14120,7 +16858,8 @@ rs6000_secondary_reload_inner (rtx reg, rtx mem, rtx scratch, bool store_p)
}
else if (GET_CODE (addr) == SYMBOL_REF || GET_CODE (addr) == CONST
- || GET_CODE (addr) == CONST_INT || REG_P (addr))
+ || GET_CODE (addr) == CONST_INT || GET_CODE (addr) == LO_SUM
+ || REG_P (addr))
{
if (TARGET_DEBUG_ADDR)
{
@@ -14136,12 +16875,12 @@ rs6000_secondary_reload_inner (rtx reg, rtx mem, rtx scratch, bool store_p)
}
else
- gcc_unreachable ();
+ rs6000_secondary_reload_fail (__LINE__, reg, mem, scratch, store_p);
break;
default:
- gcc_unreachable ();
+ rs6000_secondary_reload_fail (__LINE__, reg, mem, scratch, store_p);
}
/* If the original address involved a pre-modify that we couldn't use the VSX
@@ -14188,7 +16927,7 @@ rs6000_secondary_reload_inner (rtx reg, rtx mem, rtx scratch, bool store_p)
/* Adjust the address if it changed. */
if (addr != XEXP (mem, 0))
{
- mem = change_address (mem, mode, addr);
+ mem = replace_equiv_address_nv (mem, addr);
if (TARGET_DEBUG_ADDR)
fprintf (stderr, "\nrs6000_secondary_reload_inner, mem adjusted.\n");
}
@@ -14253,8 +16992,10 @@ rs6000_secondary_reload_gpr (rtx reg, rtx mem, rtx scratch, bool store_p)
return;
}
-/* Allocate a 64-bit stack slot to be used for copying SDmode
- values through if this function has any SDmode references. */
+/* Allocate a 64-bit stack slot to be used for copying SDmode values through if
+ this function has any SDmode references. If we are on a power7 or later, we
+ don't need the 64-bit stack slot since the LFIWZX and STIFWX instructions
+ can load/store the value. */
static void
rs6000_alloc_sdmode_stack_slot (void)
@@ -14264,6 +17005,13 @@ rs6000_alloc_sdmode_stack_slot (void)
gimple_stmt_iterator gsi;
gcc_assert (cfun->machine->sdmode_stack_slot == NULL_RTX);
+ /* We use a different approach for dealing with the secondary
+ memory in LRA. */
+ if (ira_use_lra_p)
+ return;
+
+ if (TARGET_NO_SDMODE_STACK)
+ return;
FOR_EACH_BB (bb)
for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
@@ -14325,8 +17073,7 @@ rs6000_preferred_reload_class (rtx x, enum reg_class rclass)
{
enum machine_mode mode = GET_MODE (x);
- if (VECTOR_UNIT_VSX_P (mode)
- && x == CONST0_RTX (mode) && VSX_REG_CLASS_P (rclass))
+ if (TARGET_VSX && x == CONST0_RTX (mode) && VSX_REG_CLASS_P (rclass))
return rclass;
if (VECTOR_UNIT_ALTIVEC_OR_VSX_P (mode)
@@ -14334,8 +17081,14 @@ rs6000_preferred_reload_class (rtx x, enum reg_class rclass)
&& easy_vector_constant (x, mode))
return ALTIVEC_REGS;
- if (CONSTANT_P (x) && reg_classes_intersect_p (rclass, FLOAT_REGS))
+ if ((CONSTANT_P (x) || GET_CODE (x) == PLUS))
+ {
+ if (reg_class_subset_p (GENERAL_REGS, rclass))
+ return GENERAL_REGS;
+ if (reg_class_subset_p (BASE_REGS, rclass))
+ return BASE_REGS;
return NO_REGS;
+ }
if (GET_MODE_CLASS (mode) == MODE_INT && rclass == NON_SPECIAL_REGS)
return GENERAL_REGS;
@@ -14349,7 +17102,8 @@ rs6000_preferred_reload_class (rtx x, enum reg_class rclass)
if (GET_MODE_SIZE (mode) <= 8)
return FLOAT_REGS;
- if (VECTOR_UNIT_ALTIVEC_P (mode) || VECTOR_MEM_ALTIVEC_P (mode))
+ if (VECTOR_UNIT_ALTIVEC_P (mode) || VECTOR_MEM_ALTIVEC_P (mode)
+ || mode == V1TImode)
return ALTIVEC_REGS;
return rclass;
@@ -14381,42 +17135,25 @@ rs6000_debug_preferred_reload_class (rtx x, enum reg_class rclass)
set and vice versa. */
static bool
-rs6000_secondary_memory_needed (enum reg_class class1,
- enum reg_class class2,
+rs6000_secondary_memory_needed (enum reg_class from_class,
+ enum reg_class to_class,
enum machine_mode mode)
{
- if (class1 == class2)
- return false;
-
- /* Under VSX, there are 3 register classes that values could be in (VSX_REGS,
- ALTIVEC_REGS, and FLOAT_REGS). We don't need to use memory to copy
- between these classes. But we need memory for other things that can go in
- FLOAT_REGS like SFmode. */
- if (TARGET_VSX
- && (VECTOR_MEM_VSX_P (mode) || VECTOR_UNIT_VSX_P (mode))
- && (class1 == VSX_REGS || class1 == ALTIVEC_REGS
- || class1 == FLOAT_REGS))
- return (class2 != VSX_REGS && class2 != ALTIVEC_REGS
- && class2 != FLOAT_REGS);
+ enum rs6000_reg_type from_type, to_type;
+ bool altivec_p = ((from_class == ALTIVEC_REGS)
+ || (to_class == ALTIVEC_REGS));
- if (class1 == VSX_REGS || class2 == VSX_REGS)
- return true;
-
- if (class1 == FLOAT_REGS
- && (!TARGET_MFPGPR || !TARGET_POWERPC64
- || ((mode != DFmode)
- && (mode != DDmode)
- && (mode != DImode))))
- return true;
+ /* If a simple/direct move is available, we don't need secondary memory */
+ from_type = reg_class_to_reg_type[(int)from_class];
+ to_type = reg_class_to_reg_type[(int)to_class];
- if (class2 == FLOAT_REGS
- && (!TARGET_MFPGPR || !TARGET_POWERPC64
- || ((mode != DFmode)
- && (mode != DDmode)
- && (mode != DImode))))
- return true;
+ if (rs6000_secondary_reload_move (to_type, from_type, mode,
+ (secondary_reload_info *)0, altivec_p))
+ return false;
- if (class1 == ALTIVEC_REGS || class2 == ALTIVEC_REGS)
+ /* If we have a floating point or vector register class, we need to use
+ memory to transfer the data. */
+ if (IS_FP_VECT_REG_TYPE (from_type) || IS_FP_VECT_REG_TYPE (to_type))
return true;
return false;
@@ -14424,17 +17161,19 @@ rs6000_secondary_memory_needed (enum reg_class class1,
/* Debug version of rs6000_secondary_memory_needed. */
static bool
-rs6000_debug_secondary_memory_needed (enum reg_class class1,
- enum reg_class class2,
+rs6000_debug_secondary_memory_needed (enum reg_class from_class,
+ enum reg_class to_class,
enum machine_mode mode)
{
- bool ret = rs6000_secondary_memory_needed (class1, class2, mode);
+ bool ret = rs6000_secondary_memory_needed (from_class, to_class, mode);
fprintf (stderr,
- "rs6000_secondary_memory_needed, return: %s, class1 = %s, "
- "class2 = %s, mode = %s\n",
- ret ? "true" : "false", reg_class_names[class1],
- reg_class_names[class2], GET_MODE_NAME (mode));
+ "rs6000_secondary_memory_needed, return: %s, from_class = %s, "
+ "to_class = %s, mode = %s\n",
+ ret ? "true" : "false",
+ reg_class_names[from_class],
+ reg_class_names[to_class],
+ GET_MODE_NAME (mode));
return ret;
}
@@ -14498,14 +17237,20 @@ rs6000_secondary_reload_class (enum reg_class rclass, enum machine_mode mode,
/* Constants, memory, and FP registers can go into FP registers. */
if ((regno == -1 || FP_REGNO_P (regno))
&& (rclass == FLOAT_REGS || rclass == NON_SPECIAL_REGS))
- return (mode != SDmode) ? NO_REGS : GENERAL_REGS;
+ return (mode != SDmode || lra_in_progress) ? NO_REGS : GENERAL_REGS;
/* Memory, and FP/altivec registers can go into fp/altivec registers under
- VSX. */
+ VSX. However, for scalar variables, use the traditional floating point
+ registers so that we can use offset+register addressing. */
if (TARGET_VSX
&& (regno == -1 || VSX_REGNO_P (regno))
&& VSX_REG_CLASS_P (rclass))
+ {
+ if (GET_MODE_SIZE (mode) < 16)
+ return FLOAT_REGS;
+
return NO_REGS;
+ }
/* Memory, and AltiVec registers can go into AltiVec registers. */
if ((regno == -1 || ALTIVEC_REGNO_P (regno))
@@ -14550,8 +17295,42 @@ rs6000_cannot_change_mode_class (enum machine_mode from,
if (from_size != to_size)
{
enum reg_class xclass = (TARGET_VSX) ? VSX_REGS : FLOAT_REGS;
- return ((from_size < 8 || to_size < 8 || TARGET_IEEEQUAD)
- && reg_classes_intersect_p (xclass, rclass));
+
+ if (reg_classes_intersect_p (xclass, rclass))
+ {
+ unsigned to_nregs = hard_regno_nregs[FIRST_FPR_REGNO][to];
+ unsigned from_nregs = hard_regno_nregs[FIRST_FPR_REGNO][from];
+
+ /* Don't allow 64-bit types to overlap with 128-bit types that take a
+ single register under VSX because the scalar part of the register
+ is in the upper 64-bits, and not the lower 64-bits. Types like
+ TFmode/TDmode that take 2 scalar register can overlap. 128-bit
+ IEEE floating point can't overlap, and neither can small
+ values. */
+
+ if (TARGET_IEEEQUAD && (to == TFmode || from == TFmode))
+ return true;
+
+ /* TDmode in floating-mode registers must always go into a register
+ pair with the most significant word in the even-numbered register
+ to match ISA requirements. In little-endian mode, this does not
+ match subreg numbering, so we cannot allow subregs. */
+ if (!BYTES_BIG_ENDIAN && (to == TDmode || from == TDmode))
+ return true;
+
+ if (from_size < 8 || to_size < 8)
+ return true;
+
+ if (from_size == 8 && (8 * to_nregs) != to_size)
+ return true;
+
+ if (to_size == 8 && (8 * from_nregs) != from_size)
+ return true;
+
+ return false;
+ }
+ else
+ return false;
}
if (TARGET_E500_DOUBLE
@@ -14565,9 +17344,18 @@ rs6000_cannot_change_mode_class (enum machine_mode from,
/* Since the VSX register set includes traditional floating point registers
and altivec registers, just check for the size being different instead of
trying to check whether the modes are vector modes. Otherwise it won't
- allow say DF and DI to change classes. */
+ allow say DF and DI to change classes. For types like TFmode and TDmode
+ that take 2 64-bit registers, rather than a single 128-bit register, don't
+ allow subregs of those types to other 128 bit types. */
if (TARGET_VSX && VSX_REG_CLASS_P (rclass))
+ {
+ unsigned num_regs = (from_size + 15) / 16;
+ if (hard_regno_nregs[FIRST_FPR_REGNO][to] > num_regs
+ || hard_regno_nregs[FIRST_FPR_REGNO][from] > num_regs)
+ return true;
+
return (from_size != 8 && from_size != 16);
+ }
if (TARGET_ALTIVEC && rclass == ALTIVEC_REGS
&& (ALTIVEC_VECTOR_MODE (from) + ALTIVEC_VECTOR_MODE (to)) == 1)
@@ -14598,6 +17386,186 @@ rs6000_debug_cannot_change_mode_class (enum machine_mode from,
return ret;
}
+/* Return a string to do a move operation of 128 bits of data. */
+
+const char *
+rs6000_output_move_128bit (rtx operands[])
+{
+ rtx dest = operands[0];
+ rtx src = operands[1];
+ enum machine_mode mode = GET_MODE (dest);
+ int dest_regno;
+ int src_regno;
+ bool dest_gpr_p, dest_fp_p, dest_vmx_p, dest_vsx_p;
+ bool src_gpr_p, src_fp_p, src_vmx_p, src_vsx_p;
+
+ if (REG_P (dest))
+ {
+ dest_regno = REGNO (dest);
+ dest_gpr_p = INT_REGNO_P (dest_regno);
+ dest_fp_p = FP_REGNO_P (dest_regno);
+ dest_vmx_p = ALTIVEC_REGNO_P (dest_regno);
+ dest_vsx_p = dest_fp_p | dest_vmx_p;
+ }
+ else
+ {
+ dest_regno = -1;
+ dest_gpr_p = dest_fp_p = dest_vmx_p = dest_vsx_p = false;
+ }
+
+ if (REG_P (src))
+ {
+ src_regno = REGNO (src);
+ src_gpr_p = INT_REGNO_P (src_regno);
+ src_fp_p = FP_REGNO_P (src_regno);
+ src_vmx_p = ALTIVEC_REGNO_P (src_regno);
+ src_vsx_p = src_fp_p | src_vmx_p;
+ }
+ else
+ {
+ src_regno = -1;
+ src_gpr_p = src_fp_p = src_vmx_p = src_vsx_p = false;
+ }
+
+ /* Register moves. */
+ if (dest_regno >= 0 && src_regno >= 0)
+ {
+ if (dest_gpr_p)
+ {
+ if (src_gpr_p)
+ return "#";
+
+ else if (TARGET_VSX && TARGET_DIRECT_MOVE && src_vsx_p)
+ return "#";
+ }
+
+ else if (TARGET_VSX && dest_vsx_p)
+ {
+ if (src_vsx_p)
+ return "xxlor %x0,%x1,%x1";
+
+ else if (TARGET_DIRECT_MOVE && src_gpr_p)
+ return "#";
+ }
+
+ else if (TARGET_ALTIVEC && dest_vmx_p && src_vmx_p)
+ return "vor %0,%1,%1";
+
+ else if (dest_fp_p && src_fp_p)
+ return "#";
+ }
+
+ /* Loads. */
+ else if (dest_regno >= 0 && MEM_P (src))
+ {
+ if (dest_gpr_p)
+ {
+ if (TARGET_QUAD_MEMORY && quad_load_store_p (dest, src))
+ return "lq %0,%1";
+ else
+ return "#";
+ }
+
+ else if (TARGET_ALTIVEC && dest_vmx_p
+ && altivec_indexed_or_indirect_operand (src, mode))
+ return "lvx %0,%y1";
+
+ else if (TARGET_VSX && dest_vsx_p)
+ {
+ if (mode == V16QImode || mode == V8HImode || mode == V4SImode)
+ return "lxvw4x %x0,%y1";
+ else
+ return "lxvd2x %x0,%y1";
+ }
+
+ else if (TARGET_ALTIVEC && dest_vmx_p)
+ return "lvx %0,%y1";
+
+ else if (dest_fp_p)
+ return "#";
+ }
+
+ /* Stores. */
+ else if (src_regno >= 0 && MEM_P (dest))
+ {
+ if (src_gpr_p)
+ {
+ if (TARGET_QUAD_MEMORY && quad_load_store_p (dest, src))
+ return "stq %1,%0";
+ else
+ return "#";
+ }
+
+ else if (TARGET_ALTIVEC && src_vmx_p
+ && altivec_indexed_or_indirect_operand (src, mode))
+ return "stvx %1,%y0";
+
+ else if (TARGET_VSX && src_vsx_p)
+ {
+ if (mode == V16QImode || mode == V8HImode || mode == V4SImode)
+ return "stxvw4x %x1,%y0";
+ else
+ return "stxvd2x %x1,%y0";
+ }
+
+ else if (TARGET_ALTIVEC && src_vmx_p)
+ return "stvx %1,%y0";
+
+ else if (src_fp_p)
+ return "#";
+ }
+
+ /* Constants. */
+ else if (dest_regno >= 0
+ && (GET_CODE (src) == CONST_INT
+ || GET_CODE (src) == CONST_DOUBLE
+ || GET_CODE (src) == CONST_VECTOR))
+ {
+ if (dest_gpr_p)
+ return "#";
+
+ else if (TARGET_VSX && dest_vsx_p && zero_constant (src, mode))
+ return "xxlxor %x0,%x0,%x0";
+
+ else if (TARGET_ALTIVEC && dest_vmx_p)
+ return output_vec_const_move (operands);
+ }
+
+ if (TARGET_DEBUG_ADDR)
+ {
+ fprintf (stderr, "\n===== Bad 128 bit move:\n");
+ debug_rtx (gen_rtx_SET (VOIDmode, dest, src));
+ }
+
+ gcc_unreachable ();
+}
+
+/* Validate a 128-bit move. */
+bool
+rs6000_move_128bit_ok_p (rtx operands[])
+{
+ enum machine_mode mode = GET_MODE (operands[0]);
+ return (gpc_reg_operand (operands[0], mode)
+ || gpc_reg_operand (operands[1], mode));
+}
+
+/* Return true if a 128-bit move needs to be split. */
+bool
+rs6000_split_128bit_ok_p (rtx operands[])
+{
+ if (!reload_completed)
+ return false;
+
+ if (!gpr_or_gpr_p (operands[0], operands[1]))
+ return false;
+
+ if (quad_load_store_p (operands[0], operands[1]))
+ return false;
+
+ return true;
+}
+
+
/* Given a comparison operation, return the bit number in CCR to test. We
know this is a valid comparison.
@@ -14823,6 +17791,7 @@ rs6000_output_function_entry (FILE *file, const char *fname)
ASM_OUTPUT_INTERNAL_LABEL_PREFIX (file, "L.");
break;
+ case ABI_ELFv2:
case ABI_V4:
case ABI_DARWIN:
break;
@@ -15302,7 +18271,7 @@ print_operand (FILE *file, rtx x, int code)
return;
case 'Y':
- /* Like 'L', for third word of TImode */
+ /* Like 'L', for third word of TImode/PTImode */
if (REG_P (x))
fputs (reg_names[REGNO (x) + 2], file);
else if (MEM_P (x))
@@ -15352,7 +18321,7 @@ print_operand (FILE *file, rtx x, int code)
return;
case 'Z':
- /* Like 'L', for last word of TImode. */
+ /* Like 'L', for last word of TImode/PTImode. */
if (REG_P (x))
fputs (reg_names[REGNO (x) + 3], file);
else if (MEM_P (x))
@@ -15383,7 +18352,8 @@ print_operand (FILE *file, rtx x, int code)
if ((TARGET_SPE || TARGET_E500_DOUBLE)
&& (GET_MODE_SIZE (GET_MODE (x)) == 8
|| GET_MODE (x) == TFmode
- || GET_MODE (x) == TImode))
+ || GET_MODE (x) == TImode
+ || GET_MODE (x) == PTImode))
{
/* Handle [reg]. */
if (REG_P (tmp))
@@ -16766,7 +19736,8 @@ emit_unlikely_jump (rtx cond, rtx label)
}
/* A subroutine of the atomic operation splitters. Emit a load-locked
- instruction in MODE. */
+ instruction in MODE. For QI/HImode, possibly use a pattern than includes
+ the zero_extend operation. */
static void
emit_load_locked (enum machine_mode mode, rtx reg, rtx mem)
@@ -16775,12 +19746,26 @@ emit_load_locked (enum machine_mode mode, rtx reg, rtx mem)
switch (mode)
{
+ case QImode:
+ fn = gen_load_lockedqi;
+ break;
+ case HImode:
+ fn = gen_load_lockedhi;
+ break;
case SImode:
+ if (GET_MODE (mem) == QImode)
+ fn = gen_load_lockedqi_si;
+ else if (GET_MODE (mem) == HImode)
+ fn = gen_load_lockedhi_si;
+ else
fn = gen_load_lockedsi;
break;
case DImode:
fn = gen_load_lockeddi;
break;
+ case TImode:
+ fn = gen_load_lockedti;
+ break;
default:
gcc_unreachable ();
}
@@ -16797,12 +19782,21 @@ emit_store_conditional (enum machine_mode mode, rtx res, rtx mem, rtx val)
switch (mode)
{
+ case QImode:
+ fn = gen_store_conditionalqi;
+ break;
+ case HImode:
+ fn = gen_store_conditionalhi;
+ break;
case SImode:
fn = gen_store_conditionalsi;
break;
case DImode:
fn = gen_store_conditionaldi;
break;
+ case TImode:
+ fn = gen_store_conditionalti;
+ break;
default:
gcc_unreachable ();
}
@@ -16949,7 +19943,7 @@ rs6000_expand_atomic_compare_and_swap (rtx operands[])
{
rtx boolval, retval, mem, oldval, newval, cond;
rtx label1, label2, x, mask, shift;
- enum machine_mode mode;
+ enum machine_mode mode, orig_mode;
enum memmodel mod_s, mod_f;
bool is_weak;
@@ -16961,15 +19955,21 @@ rs6000_expand_atomic_compare_and_swap (rtx operands[])
is_weak = (INTVAL (operands[5]) != 0);
mod_s = (enum memmodel) INTVAL (operands[6]);
mod_f = (enum memmodel) INTVAL (operands[7]);
- mode = GET_MODE (mem);
+ orig_mode = mode = GET_MODE (mem);
mask = shift = NULL_RTX;
if (mode == QImode || mode == HImode)
{
+ /* Before power8, we didn't have access to lbarx/lharx, so generate a
+ lwarx and shift/mask operations. With power8, we need to do the
+ comparison in SImode, but the store is still done in QI/HImode. */
+ oldval = convert_modes (SImode, mode, oldval, 1);
+
+ if (!TARGET_SYNC_HI_QI)
+ {
mem = rs6000_adjust_atomic_subword (mem, &shift, &mask);
/* Shift and mask OLDVAL into position with the word. */
- oldval = convert_modes (SImode, mode, oldval, 1);
oldval = expand_simple_binop (SImode, ASHIFT, oldval, shift,
NULL_RTX, 1, OPTAB_LIB_WIDEN);
@@ -16977,6 +19977,7 @@ rs6000_expand_atomic_compare_and_swap (rtx operands[])
newval = convert_modes (SImode, mode, newval, 1);
newval = expand_simple_binop (SImode, ASHIFT, newval, shift,
NULL_RTX, 1, OPTAB_LIB_WIDEN);
+ }
/* Prepare to adjust the return value. */
retval = gen_reg_rtx (SImode);
@@ -17005,7 +20006,25 @@ rs6000_expand_atomic_compare_and_swap (rtx operands[])
}
cond = gen_reg_rtx (CCmode);
+ /* If we have TImode, synthesize a comparison. */
+ if (mode != TImode)
x = gen_rtx_COMPARE (CCmode, x, oldval);
+ else
+ {
+ rtx xor1_result = gen_reg_rtx (DImode);
+ rtx xor2_result = gen_reg_rtx (DImode);
+ rtx or_result = gen_reg_rtx (DImode);
+ rtx new_word0 = simplify_gen_subreg (DImode, x, TImode, 0);
+ rtx new_word1 = simplify_gen_subreg (DImode, x, TImode, 8);
+ rtx old_word0 = simplify_gen_subreg (DImode, oldval, TImode, 0);
+ rtx old_word1 = simplify_gen_subreg (DImode, oldval, TImode, 8);
+
+ emit_insn (gen_xordi3 (xor1_result, new_word0, old_word0));
+ emit_insn (gen_xordi3 (xor2_result, new_word1, old_word1));
+ emit_insn (gen_iordi3 (or_result, xor1_result, xor2_result));
+ x = gen_rtx_COMPARE (CCmode, or_result, const0_rtx);
+ }
+
emit_insn (gen_rtx_SET (VOIDmode, cond, x));
x = gen_rtx_NE (VOIDmode, cond, const0_rtx);
@@ -17015,7 +20034,7 @@ rs6000_expand_atomic_compare_and_swap (rtx operands[])
if (mask)
x = rs6000_mask_atomic_subword (retval, newval, mask);
- emit_store_conditional (mode, cond, mem, x);
+ emit_store_conditional (orig_mode, cond, mem, x);
if (!is_weak)
{
@@ -17033,6 +20052,8 @@ rs6000_expand_atomic_compare_and_swap (rtx operands[])
if (shift)
rs6000_finish_atomic_subword (operands[1], retval, shift);
+ else if (mode != GET_MODE (operands[1]))
+ convert_move (operands[1], retval, 1);
/* In all cases, CR0 contains EQ on success, and NE on failure. */
x = gen_rtx_EQ (SImode, cond, const0_rtx);
@@ -17056,7 +20077,7 @@ rs6000_expand_atomic_exchange (rtx operands[])
mode = GET_MODE (mem);
mask = shift = NULL_RTX;
- if (mode == QImode || mode == HImode)
+ if (!TARGET_SYNC_HI_QI && (mode == QImode || mode == HImode))
{
mem = rs6000_adjust_atomic_subword (mem, &shift, &mask);
@@ -17105,12 +20126,28 @@ rs6000_expand_atomic_op (enum rtx_code code, rtx mem, rtx val,
{
enum memmodel model = (enum memmodel) INTVAL (model_rtx);
enum machine_mode mode = GET_MODE (mem);
+ enum machine_mode store_mode = mode;
rtx label, x, cond, mask, shift;
rtx before = orig_before, after = orig_after;
mask = shift = NULL_RTX;
+ /* On power8, we want to use SImode for the operation. On previous systems,
+ use the operation in a subword and shift/mask to get the proper byte or
+ halfword. */
if (mode == QImode || mode == HImode)
{
+ if (TARGET_SYNC_HI_QI)
+ {
+ val = convert_modes (SImode, mode, val, 1);
+
+ /* Prepare to adjust the return value. */
+ before = gen_reg_rtx (SImode);
+ if (after)
+ after = gen_reg_rtx (SImode);
+ mode = SImode;
+ }
+ else
+ {
mem = rs6000_adjust_atomic_subword (mem, &shift, &mask);
/* Shift and mask VAL into position with the word. */
@@ -17151,7 +20188,8 @@ rs6000_expand_atomic_op (enum rtx_code code, rtx mem, rtx val,
before = gen_reg_rtx (SImode);
if (after)
after = gen_reg_rtx (SImode);
- mode = SImode;
+ store_mode = mode = SImode;
+ }
}
mem = rs6000_pre_atomic_barrier (mem, model);
@@ -17184,9 +20222,11 @@ rs6000_expand_atomic_op (enum rtx_code code, rtx mem, rtx val,
NULL_RTX, 1, OPTAB_LIB_WIDEN);
x = rs6000_mask_atomic_subword (before, x, mask);
}
+ else if (store_mode != mode)
+ x = convert_modes (store_mode, mode, x, 1);
cond = gen_reg_rtx (CCmode);
- emit_store_conditional (mode, cond, mem, x);
+ emit_store_conditional (store_mode, cond, mem, x);
x = gen_rtx_NE (VOIDmode, cond, const0_rtx);
emit_unlikely_jump (x, label);
@@ -17195,11 +20235,22 @@ rs6000_expand_atomic_op (enum rtx_code code, rtx mem, rtx val,
if (shift)
{
+ /* QImode/HImode on machines without lbarx/lharx where we do a lwarx and
+ then do the calcuations in a SImode register. */
if (orig_before)
rs6000_finish_atomic_subword (orig_before, before, shift);
if (orig_after)
rs6000_finish_atomic_subword (orig_after, after, shift);
}
+ else if (store_mode != mode)
+ {
+ /* QImode/HImode on machines with lbarx/lharx where we do the native
+ operation and then do the calcuations in a SImode register. */
+ if (orig_before)
+ convert_move (orig_before, before, 1);
+ if (orig_after)
+ convert_move (orig_after, after, 1);
+ }
else if (orig_after && after != orig_after)
emit_move_insn (orig_after, after);
}
@@ -17239,6 +20290,39 @@ rs6000_split_multireg_move (rtx dst, rtx src)
gcc_assert (reg_mode_size * nregs == GET_MODE_SIZE (mode));
+ /* TDmode residing in FP registers is special, since the ISA requires that
+ the lower-numbered word of a register pair is always the most significant
+ word, even in little-endian mode. This does not match the usual subreg
+ semantics, so we cannnot use simplify_gen_subreg in those cases. Access
+ the appropriate constituent registers "by hand" in little-endian mode.
+
+ Note we do not need to check for destructive overlap here since TDmode
+ can only reside in even/odd register pairs. */
+ if (FP_REGNO_P (reg) && DECIMAL_FLOAT_MODE_P (mode) && !BYTES_BIG_ENDIAN)
+ {
+ rtx p_src, p_dst;
+ int i;
+
+ for (i = 0; i < nregs; i++)
+ {
+ if (REG_P (src) && FP_REGNO_P (REGNO (src)))
+ p_src = gen_rtx_REG (reg_mode, REGNO (src) + nregs - 1 - i);
+ else
+ p_src = simplify_gen_subreg (reg_mode, src, mode,
+ i * reg_mode_size);
+
+ if (REG_P (dst) && FP_REGNO_P (REGNO (dst)))
+ p_dst = gen_rtx_REG (reg_mode, REGNO (dst) + nregs - 1 - i);
+ else
+ p_dst = simplify_gen_subreg (reg_mode, dst, mode,
+ i * reg_mode_size);
+
+ emit_insn (gen_rtx_SET (VOIDmode, p_dst, p_src));
+ }
+
+ return;
+ }
+
if (REG_P (src) && REG_P (dst) && (REGNO (src) < REGNO (dst)))
{
/* Move register range backwards, if we might have destructive
@@ -17693,7 +20777,7 @@ rs6000_savres_strategy (rs6000_stack_t *info,
}
else
{
- gcc_checking_assert (DEFAULT_ABI == ABI_AIX);
+ gcc_checking_assert (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2);
if (info->first_fp_reg_save > 61)
strategy |= SAVE_INLINE_FPRS | REST_INLINE_FPRS;
strategy |= SAVE_INLINE_GPRS | REST_INLINE_GPRS;
@@ -17704,7 +20788,8 @@ rs6000_savres_strategy (rs6000_stack_t *info,
by the static chain. It would require too much fiddling and the
static chain is rarely used anyway. FPRs are saved w.r.t the stack
pointer on Darwin, and AIX uses r1 or r12. */
- if (using_static_chain_p && DEFAULT_ABI != ABI_AIX)
+ if (using_static_chain_p
+ && (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_DARWIN))
strategy |= ((DEFAULT_ABI == ABI_DARWIN ? 0 : SAVE_INLINE_FPRS)
| SAVE_INLINE_GPRS
| SAVE_INLINE_VRS | REST_INLINE_VRS);
@@ -17837,6 +20922,34 @@ rs6000_savres_strategy (rs6000_stack_t *info,
The required alignment for AIX configurations is two words (i.e., 8
or 16 bytes).
+ The ELFv2 ABI is a variant of the AIX ABI. Stack frames look like:
+
+ SP----> +---------------------------------------+
+ | Back chain to caller | 0
+ +---------------------------------------+
+ | Save area for CR | 8
+ +---------------------------------------+
+ | Saved LR | 16
+ +---------------------------------------+
+ | Saved TOC pointer | 24
+ +---------------------------------------+
+ | Parameter save area (P) | 32
+ +---------------------------------------+
+ | Alloca space (A) | 32+P
+ +---------------------------------------+
+ | Local variable space (L) | 32+P+A
+ +---------------------------------------+
+ | Save area for AltiVec registers (W) | 32+P+A+L
+ +---------------------------------------+
+ | AltiVec alignment padding (Y) | 32+P+A+L+W
+ +---------------------------------------+
+ | Save area for GP registers (G) | 32+P+A+L+W+Y
+ +---------------------------------------+
+ | Save area for FP registers (F) | 32+P+A+L+W+Y+G
+ +---------------------------------------+
+ old SP->| back chain to caller's caller | 32+P+A+L+W+Y+G+F
+ +---------------------------------------+
+
V.4 stack frames look like:
@@ -17897,6 +21010,7 @@ rs6000_stack_info (void)
rs6000_stack_t *info_ptr = &stack_info;
int reg_size = TARGET_32BIT ? 4 : 8;
int ehrd_size;
+ int ehcr_size;
int save_align;
int first_gp;
HOST_WIDE_INT non_fixed_size;
@@ -17990,6 +21104,18 @@ rs6000_stack_info (void)
else
ehrd_size = 0;
+ /* In the ELFv2 ABI, we also need to allocate space for separate
+ CR field save areas if the function calls __builtin_eh_return. */
+ if (DEFAULT_ABI == ABI_ELFv2 && crtl->calls_eh_return)
+ {
+ /* This hard-codes that we have three call-saved CR fields. */
+ ehcr_size = 3 * reg_size;
+ /* We do *not* use the regular CR save mechanism. */
+ info_ptr->cr_save_p = 0;
+ }
+ else
+ ehcr_size = 0;
+
/* Determine various sizes. */
info_ptr->reg_size = reg_size;
info_ptr->fixed_size = RS6000_SAVE_AREA;
@@ -18029,6 +21155,7 @@ rs6000_stack_info (void)
gcc_unreachable ();
case ABI_AIX:
+ case ABI_ELFv2:
case ABI_DARWIN:
info_ptr->fp_save_offset = - info_ptr->fp_size;
info_ptr->gp_save_offset = info_ptr->fp_save_offset - info_ptr->gp_size;
@@ -18058,6 +21185,8 @@ rs6000_stack_info (void)
}
else
info_ptr->ehrd_offset = info_ptr->gp_save_offset - ehrd_size;
+
+ info_ptr->ehcr_offset = info_ptr->ehrd_offset - ehcr_size;
info_ptr->cr_save_offset = reg_size; /* first word when 64-bit. */
info_ptr->lr_save_offset = 2*reg_size;
break;
@@ -18120,6 +21249,7 @@ rs6000_stack_info (void)
+ info_ptr->spe_gp_size
+ info_ptr->spe_padding_size
+ ehrd_size
+ + ehcr_size
+ info_ptr->cr_size
+ info_ptr->vrsave_size,
save_align);
@@ -18133,7 +21263,7 @@ rs6000_stack_info (void)
/* Determine if we need to save the link register. */
if (info_ptr->calls_p
- || (DEFAULT_ABI == ABI_AIX
+ || ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
&& crtl->profile
&& !TARGET_PROFILE_KERNEL)
|| (DEFAULT_ABI == ABI_V4 && cfun->calls_alloca)
@@ -18279,6 +21409,7 @@ debug_stack_info (rs6000_stack_t *info)
default: abi_string = "Unknown"; break;
case ABI_NONE: abi_string = "NONE"; break;
case ABI_AIX: abi_string = "AIX"; break;
+ case ABI_ELFv2: abi_string = "ELFv2"; break;
case ABI_DARWIN: abi_string = "Darwin"; break;
case ABI_V4: abi_string = "V.4"; break;
}
@@ -18400,7 +21531,8 @@ rs6000_return_addr (int count, rtx frame)
/* Currently we don't optimize very well between prolog and body
code and for PIC code the code can be actually quite bad, so
don't try to be too clever here. */
- if (count != 0 || (DEFAULT_ABI != ABI_AIX && flag_pic))
+ if (count != 0
+ || ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_DARWIN) && flag_pic))
{
cfun->machine->ra_needs_full_frame = 1;
@@ -18459,13 +21591,13 @@ rs6000_function_ok_for_sibcall (tree decl, tree exp)
return false;
}
- /* Under the AIX ABI we can't allow calls to non-local functions,
- because the callee may have a different TOC pointer to the
- caller and there's no way to ensure we restore the TOC when we
- return. With the secure-plt SYSV ABI we can't make non-local
+ /* Under the AIX or ELFv2 ABIs we can't allow calls to non-local
+ functions, because the callee may have a different TOC pointer to
+ the caller and there's no way to ensure we restore the TOC when
+ we return. With the secure-plt SYSV ABI we can't make non-local
calls when -fpic/PIC because the plt call stubs use r30. */
if (DEFAULT_ABI == ABI_DARWIN
- || (DEFAULT_ABI == ABI_AIX
+ || ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
&& decl
&& !DECL_EXTERNAL (decl)
&& (*targetm.binds_local_p) (decl))
@@ -18566,7 +21698,7 @@ rs6000_emit_load_toc_table (int fromprolog)
rtx dest;
dest = gen_rtx_REG (Pmode, RS6000_PIC_OFFSET_TABLE_REGNUM);
- if (TARGET_ELF && TARGET_SECURE_PLT && DEFAULT_ABI != ABI_AIX && flag_pic)
+ if (TARGET_ELF && TARGET_SECURE_PLT && DEFAULT_ABI == ABI_V4 && flag_pic)
{
char buf[30];
rtx lab, tmp1, tmp2, got;
@@ -18594,7 +21726,7 @@ rs6000_emit_load_toc_table (int fromprolog)
emit_insn (gen_load_toc_v4_pic_si ());
emit_move_insn (dest, gen_rtx_REG (Pmode, LR_REGNO));
}
- else if (TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2)
+ else if (TARGET_ELF && DEFAULT_ABI == ABI_V4 && flag_pic == 2)
{
char buf[30];
rtx temp0 = (fromprolog
@@ -18642,7 +21774,7 @@ rs6000_emit_load_toc_table (int fromprolog)
}
else
{
- gcc_assert (DEFAULT_ABI == ABI_AIX);
+ gcc_assert (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2);
if (TARGET_32BIT)
emit_insn (gen_load_toc_aix_si (dest));
@@ -19047,7 +22179,7 @@ output_probe_stack_range (rtx reg1, rtx reg2)
static rtx
rs6000_frame_related (rtx insn, rtx reg, HOST_WIDE_INT val,
- rtx reg2, rtx rreg)
+ rtx reg2, rtx rreg, rtx split_reg)
{
rtx real, temp;
@@ -19138,6 +22270,11 @@ rs6000_frame_related (rtx insn, rtx reg, HOST_WIDE_INT val,
}
}
+ /* If a store insn has been split into multiple insns, the
+ true source register is given by split_reg. */
+ if (split_reg != NULL_RTX)
+ real = gen_rtx_SET (VOIDmode, SET_DEST (real), split_reg);
+
RTX_FRAME_RELATED_P (insn) = 1;
add_reg_note (insn, REG_FRAME_RELATED_EXPR, real);
@@ -19245,7 +22382,7 @@ emit_frame_save (rtx frame_reg, enum machine_mode mode,
reg = gen_rtx_REG (mode, regno);
insn = emit_insn (gen_frame_store (reg, frame_reg, offset));
return rs6000_frame_related (insn, frame_reg, frame_reg_to_sp,
- NULL_RTX, NULL_RTX);
+ NULL_RTX, NULL_RTX, NULL_RTX);
}
/* Emit an offset memory reference suitable for a frame store, while
@@ -19361,7 +22498,7 @@ rs6000_savres_routine_name (rs6000_stack_t *info, int regno, int sel)
if ((sel & SAVRES_LR))
suffix = "_x";
}
- else if (DEFAULT_ABI == ABI_AIX)
+ else if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
{
#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD)
/* No out-of-line save/restore routines for GPRs on AIX. */
@@ -19502,7 +22639,7 @@ rs6000_emit_stack_reset (rs6000_stack_t *info,
static inline unsigned
ptr_regno_for_savres (int sel)
{
- if (DEFAULT_ABI == ABI_AIX)
+ if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
return (sel & SAVRES_REG) == SAVRES_FPR || (sel & SAVRES_LR) ? 1 : 12;
return DEFAULT_ABI == ABI_DARWIN && (sel & SAVRES_REG) == SAVRES_FPR ? 1 : 11;
}
@@ -19587,6 +22724,43 @@ rs6000_emit_savres_rtx (rs6000_stack_t *info,
return insn;
}
+/* Emit code to store CR fields that need to be saved into REG. */
+
+static void
+rs6000_emit_move_from_cr (rtx reg)
+{
+ /* Only the ELFv2 ABI allows storing only selected fields. */
+ if (DEFAULT_ABI == ABI_ELFv2 && TARGET_MFCRF)
+ {
+ int i, cr_reg[8], count = 0;
+
+ /* Collect CR fields that must be saved. */
+ for (i = 0; i < 8; i++)
+ if (save_reg_p (CR0_REGNO + i))
+ cr_reg[count++] = i;
+
+ /* If it's just a single one, use mfcrf. */
+ if (count == 1)
+ {
+ rtvec p = rtvec_alloc (1);
+ rtvec r = rtvec_alloc (2);
+ RTVEC_ELT (r, 0) = gen_rtx_REG (CCmode, CR0_REGNO + cr_reg[0]);
+ RTVEC_ELT (r, 1) = GEN_INT (1 << (7 - cr_reg[0]));
+ RTVEC_ELT (p, 0)
+ = gen_rtx_SET (VOIDmode, reg,
+ gen_rtx_UNSPEC (SImode, r, UNSPEC_MOVESI_FROM_CR));
+
+ emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
+ return;
+ }
+
+ /* ??? It might be better to handle count == 2 / 3 cases here
+ as well, using logical operations to combine the values. */
+ }
+
+ emit_insn (gen_movesi_from_cr (reg));
+}
+
/* Determine whether the gp REG is really used. */
static bool
@@ -19652,6 +22826,17 @@ rs6000_emit_prologue (void)
#define NOT_INUSE(R) do {} while (0)
#endif
+ if (DEFAULT_ABI == ABI_ELFv2)
+ {
+ cfun->machine->r2_setup_needed = df_regs_ever_live_p (TOC_REGNUM);
+
+ /* With -mminimal-toc we may generate an extra use of r2 below. */
+ if (!TARGET_SINGLE_PIC_BASE
+ && TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0)
+ cfun->machine->r2_setup_needed = true;
+ }
+
+
if (flag_stack_usage_info)
current_function_static_stack_size = info->total_size;
@@ -19766,7 +22951,7 @@ rs6000_emit_prologue (void)
insn = emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
rs6000_frame_related (insn, frame_reg_rtx, sp_off - frame_off,
- treg, GEN_INT (-info->total_size));
+ treg, GEN_INT (-info->total_size), NULL_RTX);
sp_off = frame_off = info->total_size;
}
@@ -19851,14 +23036,14 @@ rs6000_emit_prologue (void)
insn = emit_move_insn (mem, reg);
rs6000_frame_related (insn, frame_reg_rtx, sp_off - frame_off,
- NULL_RTX, NULL_RTX);
+ NULL_RTX, NULL_RTX, NULL_RTX);
END_USE (0);
}
}
/* If we need to save CR, put it into r12 or r11. Choose r12 except when
r12 will be needed by out-of-line gpr restore. */
- cr_save_regno = (DEFAULT_ABI == ABI_AIX
+ cr_save_regno = ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
&& !(strategy & (SAVE_INLINE_GPRS
| SAVE_NOINLINE_GPRS_SAVES_LR))
? 11 : 12);
@@ -19867,21 +23052,9 @@ rs6000_emit_prologue (void)
&& REGNO (frame_reg_rtx) != cr_save_regno
&& !(using_static_chain_p && cr_save_regno == 11))
{
- rtx set;
-
cr_save_rtx = gen_rtx_REG (SImode, cr_save_regno);
START_USE (cr_save_regno);
- insn = emit_insn (gen_movesi_from_cr (cr_save_rtx));
- RTX_FRAME_RELATED_P (insn) = 1;
- /* Now, there's no way that dwarf2out_frame_debug_expr is going
- to understand '(unspec:SI [(reg:CC 68) ...] UNSPEC_MOVESI_FROM_CR)'.
- But that's OK. All we have to do is specify that _one_ condition
- code register is saved in this stack slot. The thrower's epilogue
- will then restore all the call-saved registers.
- We use CR2_REGNO (70) to be compatible with gcc-2.95 on Linux. */
- set = gen_rtx_SET (VOIDmode, cr_save_rtx,
- gen_rtx_REG (SImode, CR2_REGNO));
- add_reg_note (insn, REG_FRAME_RELATED_EXPR, set);
+ rs6000_emit_move_from_cr (cr_save_rtx);
}
/* Do any required saving of fpr's. If only one or two to save, do
@@ -19919,7 +23092,7 @@ rs6000_emit_prologue (void)
info->lr_save_offset,
DFmode, sel);
rs6000_frame_related (insn, ptr_reg, sp_off,
- NULL_RTX, NULL_RTX);
+ NULL_RTX, NULL_RTX, NULL_RTX);
if (lr)
END_USE (0);
}
@@ -19998,7 +23171,7 @@ rs6000_emit_prologue (void)
SAVRES_SAVE | SAVRES_GPR);
rs6000_frame_related (insn, spe_save_area_ptr, sp_off - save_off,
- NULL_RTX, NULL_RTX);
+ NULL_RTX, NULL_RTX, NULL_RTX);
}
/* Move the static chain pointer back. */
@@ -20048,7 +23221,7 @@ rs6000_emit_prologue (void)
info->lr_save_offset + ptr_off,
reg_mode, sel);
rs6000_frame_related (insn, ptr_reg, sp_off - ptr_off,
- NULL_RTX, NULL_RTX);
+ NULL_RTX, NULL_RTX, NULL_RTX);
if (lr)
END_USE (0);
}
@@ -20064,7 +23237,7 @@ rs6000_emit_prologue (void)
info->gp_save_offset + frame_off + reg_size * i);
insn = emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
rs6000_frame_related (insn, frame_reg_rtx, sp_off - frame_off,
- NULL_RTX, NULL_RTX);
+ NULL_RTX, NULL_RTX, NULL_RTX);
}
else if (!WORLD_SAVE_P (info))
{
@@ -20133,7 +23306,8 @@ rs6000_emit_prologue (void)
be updated if we arrived at this function via a plt call or
toc adjusting stub. */
emit_move_insn (tmp_reg_si, gen_rtx_MEM (SImode, tmp_reg));
- toc_restore_insn = TARGET_32BIT ? 0x80410014 : 0xE8410028;
+ toc_restore_insn = ((TARGET_32BIT ? 0x80410000 : 0xE8410000)
+ + RS6000_TOC_SAVE_SLOT);
hi = gen_int_mode (toc_restore_insn & ~0xffff, SImode);
emit_insn (gen_xorsi3 (tmp_reg_si, tmp_reg_si, hi));
compare_result = gen_rtx_REG (CCUNSmode, CR0_REGNO);
@@ -20152,7 +23326,7 @@ rs6000_emit_prologue (void)
LABEL_NUSES (toc_save_done) += 1;
save_insn = emit_frame_save (frame_reg_rtx, reg_mode,
- TOC_REGNUM, frame_off + 5 * reg_size,
+ TOC_REGNUM, frame_off + RS6000_TOC_SAVE_SLOT,
sp_off - frame_off);
emit_label (toc_save_done);
@@ -20192,26 +23366,121 @@ rs6000_emit_prologue (void)
rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx,
GEN_INT (info->cr_save_offset + frame_off));
rtx mem = gen_frame_mem (SImode, addr);
- /* See the large comment above about why CR2_REGNO is used. */
- rtx magic_eh_cr_reg = gen_rtx_REG (SImode, CR2_REGNO);
/* If we didn't copy cr before, do so now using r0. */
if (cr_save_rtx == NULL_RTX)
{
- rtx set;
-
START_USE (0);
cr_save_rtx = gen_rtx_REG (SImode, 0);
- insn = emit_insn (gen_movesi_from_cr (cr_save_rtx));
+ rs6000_emit_move_from_cr (cr_save_rtx);
+ }
+
+ /* Saving CR requires a two-instruction sequence: one instruction
+ to move the CR to a general-purpose register, and a second
+ instruction that stores the GPR to memory.
+
+ We do not emit any DWARF CFI records for the first of these,
+ because we cannot properly represent the fact that CR is saved in
+ a register. One reason is that we cannot express that multiple
+ CR fields are saved; another reason is that on 64-bit, the size
+ of the CR register in DWARF (4 bytes) differs from the size of
+ a general-purpose register.
+
+ This means if any intervening instruction were to clobber one of
+ the call-saved CR fields, we'd have incorrect CFI. To prevent
+ this from happening, we mark the store to memory as a use of
+ those CR fields, which prevents any such instruction from being
+ scheduled in between the two instructions. */
+ rtx crsave_v[9];
+ int n_crsave = 0;
+ int i;
+
+ crsave_v[n_crsave++] = gen_rtx_SET (VOIDmode, mem, cr_save_rtx);
+ for (i = 0; i < 8; i++)
+ if (save_reg_p (CR0_REGNO + i))
+ crsave_v[n_crsave++]
+ = gen_rtx_USE (VOIDmode, gen_rtx_REG (CCmode, CR0_REGNO + i));
+
+ insn = emit_insn (gen_rtx_PARALLEL (VOIDmode,
+ gen_rtvec_v (n_crsave, crsave_v)));
+ END_USE (REGNO (cr_save_rtx));
+
+ /* Now, there's no way that dwarf2out_frame_debug_expr is going to
+ understand '(unspec:SI [(reg:CC 68) ...] UNSPEC_MOVESI_FROM_CR)',
+ so we need to construct a frame expression manually. */
RTX_FRAME_RELATED_P (insn) = 1;
- set = gen_rtx_SET (VOIDmode, cr_save_rtx, magic_eh_cr_reg);
+
+ /* Update address to be stack-pointer relative, like
+ rs6000_frame_related would do. */
+ addr = gen_rtx_PLUS (Pmode, gen_rtx_REG (Pmode, STACK_POINTER_REGNUM),
+ GEN_INT (info->cr_save_offset + sp_off));
+ mem = gen_frame_mem (SImode, addr);
+
+ if (DEFAULT_ABI == ABI_ELFv2)
+ {
+ /* In the ELFv2 ABI we generate separate CFI records for each
+ CR field that was actually saved. They all point to the
+ same 32-bit stack slot. */
+ rtx crframe[8];
+ int n_crframe = 0;
+
+ for (i = 0; i < 8; i++)
+ if (save_reg_p (CR0_REGNO + i))
+ {
+ crframe[n_crframe]
+ = gen_rtx_SET (VOIDmode, mem,
+ gen_rtx_REG (SImode, CR0_REGNO + i));
+
+ RTX_FRAME_RELATED_P (crframe[n_crframe]) = 1;
+ n_crframe++;
+ }
+
+ add_reg_note (insn, REG_FRAME_RELATED_EXPR,
+ gen_rtx_PARALLEL (VOIDmode,
+ gen_rtvec_v (n_crframe, crframe)));
+ }
+ else
+ {
+ /* In other ABIs, by convention, we use a single CR regnum to
+ represent the fact that all call-saved CR fields are saved.
+ We use CR2_REGNO to be compatible with gcc-2.95 on Linux. */
+ rtx set = gen_rtx_SET (VOIDmode, mem,
+ gen_rtx_REG (SImode, CR2_REGNO));
add_reg_note (insn, REG_FRAME_RELATED_EXPR, set);
}
- insn = emit_move_insn (mem, cr_save_rtx);
- END_USE (REGNO (cr_save_rtx));
+ }
- rs6000_frame_related (insn, frame_reg_rtx, sp_off - frame_off,
- NULL_RTX, NULL_RTX);
+ /* In the ELFv2 ABI we need to save all call-saved CR fields into
+ *separate* slots if the routine calls __builtin_eh_return, so
+ that they can be independently restored by the unwinder. */
+ if (DEFAULT_ABI == ABI_ELFv2 && crtl->calls_eh_return)
+ {
+ int i, cr_off = info->ehcr_offset;
+ rtx crsave;
+
+ /* ??? We might get better performance by using multiple mfocrf
+ instructions. */
+ crsave = gen_rtx_REG (SImode, 0);
+ emit_insn (gen_movesi_from_cr (crsave));
+
+ for (i = 0; i < 8; i++)
+ if (!call_used_regs[CR0_REGNO + i])
+ {
+ rtvec p = rtvec_alloc (2);
+ RTVEC_ELT (p, 0)
+ = gen_frame_store (crsave, frame_reg_rtx, cr_off + frame_off);
+ RTVEC_ELT (p, 1)
+ = gen_rtx_USE (VOIDmode, gen_rtx_REG (CCmode, CR0_REGNO + i));
+
+ insn = emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
+
+ RTX_FRAME_RELATED_P (insn) = 1;
+ add_reg_note (insn, REG_FRAME_RELATED_EXPR,
+ gen_frame_store (gen_rtx_REG (SImode, CR0_REGNO + i),
+ sp_reg_rtx, cr_off + sp_off));
+
+ cr_off += reg_size;
+ }
}
/* Update stack and set back pointer unless this is V.4,
@@ -20291,7 +23560,7 @@ rs6000_emit_prologue (void)
info->altivec_save_offset + ptr_off,
0, V4SImode, SAVRES_SAVE | SAVRES_VR);
rs6000_frame_related (insn, scratch_reg, sp_off - ptr_off,
- NULL_RTX, NULL_RTX);
+ NULL_RTX, NULL_RTX, NULL_RTX);
if (REGNO (frame_reg_rtx) == REGNO (scratch_reg))
{
/* The oddity mentioned above clobbered our frame reg. */
@@ -20307,7 +23576,7 @@ rs6000_emit_prologue (void)
for (i = info->first_altivec_reg_save; i <= LAST_ALTIVEC_REGNO; ++i)
if (info->vrsave_mask & ALTIVEC_REG_BIT (i))
{
- rtx areg, savereg, mem;
+ rtx areg, savereg, mem, split_reg;
int offset;
offset = (info->altivec_save_offset + frame_off
@@ -20325,8 +23594,18 @@ rs6000_emit_prologue (void)
insn = emit_move_insn (mem, savereg);
+ /* When we split a VSX store into two insns, we need to make
+ sure the DWARF info knows which register we are storing.
+ Pass it in to be used on the appropriate note. */
+ if (!BYTES_BIG_ENDIAN
+ && GET_CODE (PATTERN (insn)) == SET
+ && GET_CODE (SET_SRC (PATTERN (insn))) == VEC_SELECT)
+ split_reg = savereg;
+ else
+ split_reg = NULL_RTX;
+
rs6000_frame_related (insn, frame_reg_rtx, sp_off - frame_off,
- areg, GEN_INT (offset));
+ areg, GEN_INT (offset), split_reg);
}
}
@@ -20350,7 +23629,8 @@ rs6000_emit_prologue (void)
be using r12 as frame_reg_rtx and r11 as the static chain
pointer for nested functions. */
save_regno = 12;
- if (DEFAULT_ABI == ABI_AIX && !using_static_chain_p)
+ if ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
+ && !using_static_chain_p)
save_regno = 11;
else if (REGNO (frame_reg_rtx) == 12)
{
@@ -20389,7 +23669,7 @@ rs6000_emit_prologue (void)
can use register 0. This allows us to use a plain 'blr' to return
from the procedure more often. */
int save_LR_around_toc_setup = (TARGET_ELF
- && DEFAULT_ABI != ABI_AIX
+ && DEFAULT_ABI == ABI_V4
&& flag_pic
&& ! info->lr_save_p
&& EDGE_COUNT (EXIT_BLOCK_PTR->preds) > 0);
@@ -20451,7 +23731,7 @@ rs6000_emit_prologue (void)
if (rs6000_save_toc_in_prologue_p ())
{
rtx reg = gen_rtx_REG (reg_mode, TOC_REGNUM);
- emit_insn (gen_frame_store (reg, sp_reg_rtx, 5 * reg_size));
+ emit_insn (gen_frame_store (reg, sp_reg_rtx, RS6000_TOC_SAVE_SLOT));
}
}
@@ -20492,6 +23772,49 @@ rs6000_output_function_prologue (FILE *file,
}
}
+ /* ELFv2 ABI r2 setup code and local entry point. This must follow
+ immediately after the global entry point label. */
+ if (DEFAULT_ABI == ABI_ELFv2 && cfun->machine->r2_setup_needed)
+ {
+ const char *name = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0);
+
+ fprintf (file, "0:\taddis 2,12,.TOC.-0b@ha\n");
+ fprintf (file, "\taddi 2,2,.TOC.-0b@l\n");
+
+ fputs ("\t.localentry\t", file);
+ assemble_name (file, name);
+ fputs (",.-", file);
+ assemble_name (file, name);
+ fputs ("\n", file);
+ }
+
+ /* Output -mprofile-kernel code. This needs to be done here instead of
+ in output_function_profile since it must go after the ELFv2 ABI
+ local entry point. */
+ if (TARGET_PROFILE_KERNEL)
+ {
+ gcc_assert (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2);
+ gcc_assert (!TARGET_32BIT);
+
+ asm_fprintf (file, "\tmflr %s\n", reg_names[0]);
+ asm_fprintf (file, "\tstd %s,16(%s)\n", reg_names[0], reg_names[1]);
+
+ /* In the ELFv2 ABI we have no compiler stack word. It must be
+ the resposibility of _mcount to preserve the static chain
+ register if required. */
+ if (DEFAULT_ABI != ABI_ELFv2
+ && cfun->static_chain_decl != NULL)
+ {
+ asm_fprintf (file, "\tstd %s,24(%s)\n",
+ reg_names[STATIC_CHAIN_REGNUM], reg_names[1]);
+ fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
+ asm_fprintf (file, "\tld %s,24(%s)\n",
+ reg_names[STATIC_CHAIN_REGNUM], reg_names[1]);
+ }
+ else
+ fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
+ }
+
rs6000_pic_labelno++;
}
@@ -20544,6 +23867,7 @@ restore_saved_cr (rtx reg, int using_mfcr_multiple, bool exit_func)
if (using_mfcr_multiple && count > 1)
{
+ rtx insn;
rtvec p;
int ndx;
@@ -20561,16 +23885,43 @@ restore_saved_cr (rtx reg, int using_mfcr_multiple, bool exit_func)
gen_rtx_UNSPEC (CCmode, r, UNSPEC_MOVESI_TO_CR));
ndx++;
}
- emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
+ insn = emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
gcc_assert (ndx == count);
+
+ /* For the ELFv2 ABI we generate a CFA_RESTORE for each
+ CR field separately. */
+ if (!exit_func && DEFAULT_ABI == ABI_ELFv2 && flag_shrink_wrap)
+ {
+ for (i = 0; i < 8; i++)
+ if (save_reg_p (CR0_REGNO + i))
+ add_reg_note (insn, REG_CFA_RESTORE,
+ gen_rtx_REG (SImode, CR0_REGNO + i));
+
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
}
else
for (i = 0; i < 8; i++)
if (save_reg_p (CR0_REGNO + i))
- emit_insn (gen_movsi_to_cr_one (gen_rtx_REG (CCmode, CR0_REGNO + i),
- reg));
+ {
+ rtx insn = emit_insn (gen_movsi_to_cr_one
+ (gen_rtx_REG (CCmode, CR0_REGNO + i), reg));
- if (!exit_func && (DEFAULT_ABI == ABI_V4 || flag_shrink_wrap))
+ /* For the ELFv2 ABI we generate a CFA_RESTORE for each
+ CR field separately, attached to the insn that in fact
+ restores this particular CR field. */
+ if (!exit_func && DEFAULT_ABI == ABI_ELFv2 && flag_shrink_wrap)
+ {
+ add_reg_note (insn, REG_CFA_RESTORE,
+ gen_rtx_REG (SImode, CR0_REGNO + i));
+
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+ }
+
+ /* For other ABIs, we just generate a single CFA_RESTORE for CR2. */
+ if (!exit_func && DEFAULT_ABI != ABI_ELFv2
+ && (DEFAULT_ABI == ABI_V4 || flag_shrink_wrap))
{
rtx insn = get_last_insn ();
rtx cr = gen_rtx_REG (SImode, CR2_REGNO);
@@ -20611,10 +23962,22 @@ restore_saved_lr (int regno, bool exit_func)
static rtx
add_crlr_cfa_restore (const rs6000_stack_t *info, rtx cfa_restores)
{
- if (info->cr_save_p)
+ if (DEFAULT_ABI == ABI_ELFv2)
+ {
+ int i;
+ for (i = 0; i < 8; i++)
+ if (save_reg_p (CR0_REGNO + i))
+ {
+ rtx cr = gen_rtx_REG (SImode, CR0_REGNO + i);
+ cfa_restores = alloc_reg_note (REG_CFA_RESTORE, cr,
+ cfa_restores);
+ }
+ }
+ else if (info->cr_save_p)
cfa_restores = alloc_reg_note (REG_CFA_RESTORE,
gen_rtx_REG (SImode, CR2_REGNO),
cfa_restores);
+
if (info->lr_save_p)
cfa_restores = alloc_reg_note (REG_CFA_RESTORE,
gen_rtx_REG (Pmode, LR_REGNO),
@@ -21112,6 +24475,35 @@ rs6000_emit_epilogue (int sibcall)
|| (!restoring_GPRs_inline
&& info->first_fp_reg_save == 64));
+ /* In the ELFv2 ABI we need to restore all call-saved CR fields from
+ *separate* slots if the routine calls __builtin_eh_return, so
+ that they can be independently restored by the unwinder. */
+ if (DEFAULT_ABI == ABI_ELFv2 && crtl->calls_eh_return)
+ {
+ int i, cr_off = info->ehcr_offset;
+
+ for (i = 0; i < 8; i++)
+ if (!call_used_regs[CR0_REGNO + i])
+ {
+ rtx reg = gen_rtx_REG (SImode, 0);
+ emit_insn (gen_frame_load (reg, frame_reg_rtx,
+ cr_off + frame_off));
+
+ insn = emit_insn (gen_movsi_to_cr_one
+ (gen_rtx_REG (CCmode, CR0_REGNO + i), reg));
+
+ if (!exit_func && flag_shrink_wrap)
+ {
+ add_reg_note (insn, REG_CFA_RESTORE,
+ gen_rtx_REG (SImode, CR0_REGNO + i));
+
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+
+ cr_off += reg_size;
+ }
+ }
+
/* Get the old lr if we saved it. If we are restoring registers
out-of-line, then the out-of-line routines can do this for us. */
if (restore_lr && restoring_GPRs_inline)
@@ -21155,7 +24547,7 @@ rs6000_emit_epilogue (int sibcall)
{
rtx reg = gen_rtx_REG (reg_mode, 2);
emit_insn (gen_frame_load (reg, frame_reg_rtx,
- frame_off + 5 * reg_size));
+ frame_off + RS6000_TOC_SAVE_SLOT));
}
for (i = 0; ; ++i)
@@ -21441,6 +24833,7 @@ rs6000_emit_epilogue (int sibcall)
if (! restoring_FPRs_inline)
{
int i;
+ int reg;
rtx sym;
if (flag_shrink_wrap)
@@ -21449,10 +24842,9 @@ rs6000_emit_epilogue (int sibcall)
sym = rs6000_savres_routine_sym (info,
SAVRES_FPR | (lr ? SAVRES_LR : 0));
RTVEC_ELT (p, 2) = gen_rtx_USE (VOIDmode, sym);
- RTVEC_ELT (p, 3) = gen_rtx_USE (VOIDmode,
- gen_rtx_REG (Pmode,
- DEFAULT_ABI == ABI_AIX
- ? 1 : 11));
+ reg = (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)? 1 : 11;
+ RTVEC_ELT (p, 3) = gen_rtx_USE (VOIDmode, gen_rtx_REG (Pmode, reg));
+
for (i = 0; i < 64 - info->first_fp_reg_save; i++)
{
rtx reg = gen_rtx_REG (DFmode, info->first_fp_reg_save + i);
@@ -21530,7 +24922,8 @@ rs6000_output_function_epilogue (FILE *file,
System V.4 Powerpc's (and the embedded ABI derived from it) use a
different traceback table. */
- if (DEFAULT_ABI == ABI_AIX && ! flag_inhibit_size_directive
+ if ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
+ && ! flag_inhibit_size_directive
&& rs6000_traceback != traceback_none && !cfun->is_thunk)
{
const char *fname = NULL;
@@ -21858,6 +25251,12 @@ rs6000_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
SIBLING_CALL_P (insn) = 1;
emit_barrier ();
+ /* Ensure we have a global entry point for the thunk. ??? We could
+ avoid that if the target routine doesn't need a global entry point,
+ but we do not know whether this is the case at this point. */
+ if (DEFAULT_ABI == ABI_ELFv2)
+ cfun->machine->r2_setup_needed = true;
+
/* Run just enough of rest_of_compilation to get the insns emitted.
There's not really enough bulk here to make other passes such as
instruction scheduling worth while. Note that use_thunk calls
@@ -22554,7 +25953,7 @@ output_profile_hook (int labelno ATTRIBUTE_UNUSED)
if (TARGET_PROFILE_KERNEL)
return;
- if (DEFAULT_ABI == ABI_AIX)
+ if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
{
#ifndef NO_PROFILE_COUNTERS
# define NO_PROFILE_COUNTERS 0
@@ -22698,29 +26097,9 @@ output_function_profiler (FILE *file, int labelno)
break;
case ABI_AIX:
+ case ABI_ELFv2:
case ABI_DARWIN:
- if (!TARGET_PROFILE_KERNEL)
- {
/* Don't do anything, done in output_profile_hook (). */
- }
- else
- {
- gcc_assert (!TARGET_32BIT);
-
- asm_fprintf (file, "\tmflr %s\n", reg_names[0]);
- asm_fprintf (file, "\tstd %s,16(%s)\n", reg_names[0], reg_names[1]);
-
- if (cfun->static_chain_decl != NULL)
- {
- asm_fprintf (file, "\tstd %s,24(%s)\n",
- reg_names[STATIC_CHAIN_REGNUM], reg_names[1]);
- fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
- asm_fprintf (file, "\tld %s,24(%s)\n",
- reg_names[STATIC_CHAIN_REGNUM], reg_names[1]);
- }
- else
- fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
- }
break;
}
}
@@ -22846,6 +26225,7 @@ rs6000_adjust_cost (rtx insn, rtx link, rtx dep_insn, int cost)
|| rs6000_cpu_attr == CPU_POWER4
|| rs6000_cpu_attr == CPU_POWER5
|| rs6000_cpu_attr == CPU_POWER7
+ || rs6000_cpu_attr == CPU_POWER8
|| rs6000_cpu_attr == CPU_CELL)
&& recog_memoized (dep_insn)
&& (INSN_CODE (dep_insn) >= 0))
@@ -23128,7 +26508,8 @@ is_microcoded_insn (rtx insn)
if (rs6000_cpu_attr == CPU_CELL)
return get_attr_cell_micro (insn) == CELL_MICRO_ALWAYS;
- if (rs6000_sched_groups)
+ if (rs6000_sched_groups
+ && (rs6000_cpu == PROCESSOR_POWER4 || rs6000_cpu == PROCESSOR_POWER5))
{
enum attr_type type = get_attr_type (insn);
if (type == TYPE_LOAD_EXT_U
@@ -23153,7 +26534,8 @@ is_cracked_insn (rtx insn)
|| GET_CODE (PATTERN (insn)) == CLOBBER)
return false;
- if (rs6000_sched_groups)
+ if (rs6000_sched_groups
+ && (rs6000_cpu == PROCESSOR_POWER4 || rs6000_cpu == PROCESSOR_POWER5))
{
enum attr_type type = get_attr_type (insn);
if (type == TYPE_LOAD_U || type == TYPE_STORE_U
@@ -23432,6 +26814,8 @@ rs6000_issue_rate (void)
case CPU_POWER6:
case CPU_POWER7:
return 5;
+ case CPU_POWER8:
+ return 7;
default:
return 1;
}
@@ -24059,6 +27443,39 @@ insn_must_be_first_in_group (rtx insn)
break;
}
break;
+ case PROCESSOR_POWER8:
+ type = get_attr_type (insn);
+
+ switch (type)
+ {
+ case TYPE_CR_LOGICAL:
+ case TYPE_DELAYED_CR:
+ case TYPE_MFCR:
+ case TYPE_MFCRF:
+ case TYPE_MTCR:
+ case TYPE_COMPARE:
+ case TYPE_DELAYED_COMPARE:
+ case TYPE_VAR_DELAYED_COMPARE:
+ case TYPE_IMUL_COMPARE:
+ case TYPE_LMUL_COMPARE:
+ case TYPE_SYNC:
+ case TYPE_ISYNC:
+ case TYPE_LOAD_L:
+ case TYPE_STORE_C:
+ case TYPE_LOAD_U:
+ case TYPE_LOAD_UX:
+ case TYPE_LOAD_EXT:
+ case TYPE_LOAD_EXT_U:
+ case TYPE_LOAD_EXT_UX:
+ case TYPE_STORE_UX:
+ case TYPE_VECSTORE:
+ case TYPE_MFJMPR:
+ case TYPE_MTJMPR:
+ return true;
+ default:
+ break;
+ }
+ break;
default:
break;
}
@@ -24137,6 +27554,25 @@ insn_must_be_last_in_group (rtx insn)
break;
}
break;
+ case PROCESSOR_POWER8:
+ type = get_attr_type (insn);
+
+ switch (type)
+ {
+ case TYPE_MFCR:
+ case TYPE_MTCR:
+ case TYPE_ISYNC:
+ case TYPE_SYNC:
+ case TYPE_LOAD_L:
+ case TYPE_STORE_C:
+ case TYPE_LOAD_EXT_U:
+ case TYPE_LOAD_EXT_UX:
+ case TYPE_STORE_UX:
+ return true;
+ default:
+ break;
+ }
+ break;
default:
break;
}
@@ -24226,8 +27662,9 @@ force_new_group (int sched_verbose, FILE *dump, rtx *group_insns,
if (can_issue_more && !is_branch_slot_insn (next_insn))
can_issue_more--;
- /* Power6 and Power7 have special group ending nop. */
- if (rs6000_cpu_attr == CPU_POWER6 || rs6000_cpu_attr == CPU_POWER7)
+ /* Do we have a special group ending nop? */
+ if (rs6000_cpu_attr == CPU_POWER6 || rs6000_cpu_attr == CPU_POWER7
+ || rs6000_cpu_attr == CPU_POWER8)
{
nop = gen_group_ending_nop ();
emit_insn_before (nop, next_insn);
@@ -24598,6 +28035,11 @@ rs6000_trampoline_size (void)
ret = (TARGET_32BIT) ? 12 : 24;
break;
+ case ABI_ELFv2:
+ gcc_assert (!TARGET_32BIT);
+ ret = 32;
+ break;
+
case ABI_DARWIN:
case ABI_V4:
ret = (TARGET_32BIT) ? 40 : 48;
@@ -24653,6 +28095,7 @@ rs6000_trampoline_init (rtx m_tramp, tree fndecl, rtx cxt)
break;
/* Under V.4/eabi/darwin, __trampoline_setup does the real work. */
+ case ABI_ELFv2:
case ABI_DARWIN:
case ABI_V4:
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__trampoline_setup"),
@@ -24743,6 +28186,9 @@ rs6000_handle_altivec_attribute (tree *node,
unsigned_p = TYPE_UNSIGNED (type);
switch (mode)
{
+ case TImode:
+ result = (unsigned_p ? unsigned_V1TI_type_node : V1TI_type_node);
+ break;
case DImode:
result = (unsigned_p ? unsigned_V2DI_type_node : V2DI_type_node);
break;
@@ -24947,7 +28393,7 @@ rs6000_ms_bitfield_layout_p (const_tree record_type)
static void
rs6000_elf_output_toc_section_asm_op (const void *data ATTRIBUTE_UNUSED)
{
- if (DEFAULT_ABI == ABI_AIX
+ if ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
&& TARGET_MINIMAL_TOC
&& !TARGET_RELOCATABLE)
{
@@ -24968,7 +28414,8 @@ rs6000_elf_output_toc_section_asm_op (const void *data ATTRIBUTE_UNUSED)
else
fprintf (asm_out_file, "%s\n", MINIMAL_TOC_SECTION_ASM_OP);
}
- else if (DEFAULT_ABI == ABI_AIX && !TARGET_RELOCATABLE)
+ else if ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
+ && !TARGET_RELOCATABLE)
fprintf (asm_out_file, "%s\n", TOC_SECTION_ASM_OP);
else
{
@@ -25518,7 +28965,7 @@ rs6000_elf_reloc_rw_mask (void)
{
if (flag_pic)
return 3;
- else if (DEFAULT_ABI == ABI_AIX)
+ else if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
return 2;
else
return 0;
@@ -25594,7 +29041,7 @@ rs6000_elf_asm_out_destructor (rtx symbol, int priority)
void
rs6000_elf_declare_function_name (FILE *file, const char *name, tree decl)
{
- if (TARGET_64BIT)
+ if (TARGET_64BIT && DEFAULT_ABI != ABI_ELFv2)
{
fputs ("\t.section\t\".opd\",\"aw\"\n\t.align 3\n", file);
ASM_OUTPUT_LABEL (file, name);
@@ -25660,7 +29107,6 @@ rs6000_elf_declare_function_name (FILE *file, const char *name, tree decl)
fprintf (file, "%s:\n", desc_name);
fprintf (file, "\t.long %s\n", orig_name);
fputs ("\t.long _GLOBAL_OFFSET_TABLE_\n", file);
- if (DEFAULT_ABI == ABI_AIX)
fputs ("\t.long 0\n", file);
fprintf (file, "\t.previous\n");
}
@@ -25690,7 +29136,7 @@ rs6000_elf_file_end (void)
}
#endif
#if defined (POWERPC_LINUX) || defined (POWERPC_FREEBSD)
- if (TARGET_32BIT)
+ if (TARGET_32BIT || DEFAULT_ABI == ABI_ELFv2)
file_end_indicate_exec_stack ();
#endif
}
@@ -25829,10 +29275,23 @@ rs6000_xcoff_asm_named_section (const char *name, unsigned int flags,
name, suffix[smclass], flags & SECTION_ENTSIZE);
}
+#define IN_NAMED_SECTION(DECL) \
+ ((TREE_CODE (DECL) == FUNCTION_DECL || TREE_CODE (DECL) == VAR_DECL) \
+ && DECL_SECTION_NAME (DECL) != NULL_TREE)
+
static section *
rs6000_xcoff_select_section (tree decl, int reloc,
- unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
+ unsigned HOST_WIDE_INT align)
{
+ /* Place variables with alignment stricter than BIGGEST_ALIGNMENT into
+ named section. */
+ if (align > BIGGEST_ALIGNMENT)
+ {
+ resolve_unique_section (decl, reloc, true);
+ if (IN_NAMED_SECTION (decl))
+ return get_named_section (decl, NULL, reloc);
+ }
+
if (decl_readonly_section (decl, reloc))
{
if (TREE_PUBLIC (decl))
@@ -25870,10 +29329,12 @@ rs6000_xcoff_unique_section (tree decl, int reloc ATTRIBUTE_UNUSED)
{
const char *name;
- /* Use select_section for private and uninitialized data. */
+ /* Use select_section for private data and uninitialized data with
+ alignment <= BIGGEST_ALIGNMENT. */
if (!TREE_PUBLIC (decl)
|| DECL_COMMON (decl)
- || DECL_INITIAL (decl) == NULL_TREE
+ || (DECL_INITIAL (decl) == NULL_TREE
+ && DECL_ALIGN (decl) <= BIGGEST_ALIGNMENT)
|| DECL_INITIAL (decl) == error_mark_node
|| (flag_zero_initialized_in_bss
&& initializer_zerop (DECL_INITIAL (decl))))
@@ -26430,7 +29891,8 @@ rs6000_register_move_cost (enum machine_mode mode,
/* For those processors that have slow LR/CTR moves, make them more
expensive than memory in order to bias spills to memory .*/
else if ((rs6000_cpu == PROCESSOR_POWER6
- || rs6000_cpu == PROCESSOR_POWER7)
+ || rs6000_cpu == PROCESSOR_POWER7
+ || rs6000_cpu == PROCESSOR_POWER8)
&& reg_classes_intersect_p (rclass, LINK_OR_CTR_REGS))
ret = 6 * hard_regno_nregs[0][mode];
@@ -26440,7 +29902,7 @@ rs6000_register_move_cost (enum machine_mode mode,
}
/* If we have VSX, we can easily move between FPR or Altivec registers. */
- else if (VECTOR_UNIT_VSX_P (mode)
+ else if (VECTOR_MEM_VSX_P (mode)
&& reg_classes_intersect_p (to, VSX_REGS)
&& reg_classes_intersect_p (from, VSX_REGS))
ret = 2 * hard_regno_nregs[32][mode];
@@ -26481,7 +29943,8 @@ rs6000_memory_move_cost (enum machine_mode mode, reg_class_t rclass,
if (reg_classes_intersect_p (rclass, GENERAL_REGS))
ret = 4 * hard_regno_nregs[0][mode];
- else if (reg_classes_intersect_p (rclass, FLOAT_REGS))
+ else if ((reg_classes_intersect_p (rclass, FLOAT_REGS)
+ || reg_classes_intersect_p (rclass, VSX_REGS)))
ret = 4 * hard_regno_nregs[32][mode];
else if (reg_classes_intersect_p (rclass, ALTIVEC_REGS))
ret = 4 * hard_regno_nregs[FIRST_ALTIVEC_REGNO][mode];
@@ -26643,54 +30106,26 @@ rs6000_emit_nmsub (rtx dst, rtx m1, rtx m2, rtx a)
emit_insn (gen_rtx_SET (VOIDmode, dst, r));
}
-/* Newton-Raphson approximation of floating point divide with just 2 passes
- (either single precision floating point, or newer machines with higher
- accuracy estimates). Support both scalar and vector divide. Assumes no
- trapping math and finite arguments. */
+/* Newton-Raphson approximation of floating point divide DST = N/D. If NOTE_P,
+ add a reg_note saying that this was a division. Support both scalar and
+ vector divide. Assumes no trapping math and finite arguments. */
-static void
-rs6000_emit_swdiv_high_precision (rtx dst, rtx n, rtx d)
+void
+rs6000_emit_swdiv (rtx dst, rtx n, rtx d, bool note_p)
{
enum machine_mode mode = GET_MODE (dst);
- rtx x0, e0, e1, y1, u0, v0;
- enum insn_code code = optab_handler (smul_optab, mode);
- insn_gen_fn gen_mul = GEN_FCN (code);
- rtx one = rs6000_load_constant_and_splat (mode, dconst1);
-
- gcc_assert (code != CODE_FOR_nothing);
-
- /* x0 = 1./d estimate */
- x0 = gen_reg_rtx (mode);
- emit_insn (gen_rtx_SET (VOIDmode, x0,
- gen_rtx_UNSPEC (mode, gen_rtvec (1, d),
- UNSPEC_FRES)));
-
- e0 = gen_reg_rtx (mode);
- rs6000_emit_nmsub (e0, d, x0, one); /* e0 = 1. - (d * x0) */
-
- e1 = gen_reg_rtx (mode);
- rs6000_emit_madd (e1, e0, e0, e0); /* e1 = (e0 * e0) + e0 */
-
- y1 = gen_reg_rtx (mode);
- rs6000_emit_madd (y1, e1, x0, x0); /* y1 = (e1 * x0) + x0 */
-
- u0 = gen_reg_rtx (mode);
- emit_insn (gen_mul (u0, n, y1)); /* u0 = n * y1 */
-
- v0 = gen_reg_rtx (mode);
- rs6000_emit_nmsub (v0, d, u0, n); /* v0 = n - (d * u0) */
-
- rs6000_emit_madd (dst, v0, y1, u0); /* dst = (v0 * y1) + u0 */
-}
+ rtx one, x0, e0, x1, xprev, eprev, xnext, enext, u, v;
+ int i;
-/* Newton-Raphson approximation of floating point divide that has a low
- precision estimate. Assumes no trapping math and finite arguments. */
+ /* Low precision estimates guarantee 5 bits of accuracy. High
+ precision estimates guarantee 14 bits of accuracy. SFmode
+ requires 23 bits of accuracy. DFmode requires 52 bits of
+ accuracy. Each pass at least doubles the accuracy, leading
+ to the following. */
+ int passes = (TARGET_RECIP_PRECISION) ? 1 : 3;
+ if (mode == DFmode || mode == V2DFmode)
+ passes++;
-static void
-rs6000_emit_swdiv_low_precision (rtx dst, rtx n, rtx d)
-{
- enum machine_mode mode = GET_MODE (dst);
- rtx x0, e0, e1, e2, y1, y2, y3, u0, v0, one;
enum insn_code code = optab_handler (smul_optab, mode);
insn_gen_fn gen_mul = GEN_FCN (code);
@@ -26704,46 +30139,44 @@ rs6000_emit_swdiv_low_precision (rtx dst, rtx n, rtx d)
gen_rtx_UNSPEC (mode, gen_rtvec (1, d),
UNSPEC_FRES)));
- e0 = gen_reg_rtx (mode);
- rs6000_emit_nmsub (e0, d, x0, one); /* e0 = 1. - d * x0 */
-
- y1 = gen_reg_rtx (mode);
- rs6000_emit_madd (y1, e0, x0, x0); /* y1 = x0 + e0 * x0 */
+ /* Each iteration but the last calculates x_(i+1) = x_i * (2 - d * x_i). */
+ if (passes > 1) {
- e1 = gen_reg_rtx (mode);
- emit_insn (gen_mul (e1, e0, e0)); /* e1 = e0 * e0 */
+ /* e0 = 1. - d * x0 */
+ e0 = gen_reg_rtx (mode);
+ rs6000_emit_nmsub (e0, d, x0, one);
- y2 = gen_reg_rtx (mode);
- rs6000_emit_madd (y2, e1, y1, y1); /* y2 = y1 + e1 * y1 */
+ /* x1 = x0 + e0 * x0 */
+ x1 = gen_reg_rtx (mode);
+ rs6000_emit_madd (x1, e0, x0, x0);
- e2 = gen_reg_rtx (mode);
- emit_insn (gen_mul (e2, e1, e1)); /* e2 = e1 * e1 */
+ for (i = 0, xprev = x1, eprev = e0; i < passes - 2;
+ ++i, xprev = xnext, eprev = enext) {
- y3 = gen_reg_rtx (mode);
- rs6000_emit_madd (y3, e2, y2, y2); /* y3 = y2 + e2 * y2 */
+ /* enext = eprev * eprev */
+ enext = gen_reg_rtx (mode);
+ emit_insn (gen_mul (enext, eprev, eprev));
- u0 = gen_reg_rtx (mode);
- emit_insn (gen_mul (u0, n, y3)); /* u0 = n * y3 */
+ /* xnext = xprev + enext * xprev */
+ xnext = gen_reg_rtx (mode);
+ rs6000_emit_madd (xnext, enext, xprev, xprev);
+ }
- v0 = gen_reg_rtx (mode);
- rs6000_emit_nmsub (v0, d, u0, n); /* v0 = n - d * u0 */
+ } else
+ xprev = x0;
- rs6000_emit_madd (dst, v0, y3, u0); /* dst = u0 + v0 * y3 */
-}
+ /* The last iteration calculates x_(i+1) = n * x_i * (2 - d * x_i). */
-/* Newton-Raphson approximation of floating point divide DST = N/D. If NOTE_P,
- add a reg_note saying that this was a division. Support both scalar and
- vector divide. Assumes no trapping math and finite arguments. */
+ /* u = n * xprev */
+ u = gen_reg_rtx (mode);
+ emit_insn (gen_mul (u, n, xprev));
-void
-rs6000_emit_swdiv (rtx dst, rtx n, rtx d, bool note_p)
-{
- enum machine_mode mode = GET_MODE (dst);
+ /* v = n - (d * u) */
+ v = gen_reg_rtx (mode);
+ rs6000_emit_nmsub (v, d, u, n);
- if (RS6000_RECIP_HIGH_PRECISION_P (mode))
- rs6000_emit_swdiv_high_precision (dst, n, d);
- else
- rs6000_emit_swdiv_low_precision (dst, n, d);
+ /* dst = (v * xprev) + u */
+ rs6000_emit_madd (dst, v, xprev, u);
if (note_p)
add_reg_note (get_last_insn (), REG_EQUAL, gen_rtx_DIV (mode, n, d));
@@ -26758,7 +30191,16 @@ rs6000_emit_swrsqrt (rtx dst, rtx src)
enum machine_mode mode = GET_MODE (src);
rtx x0 = gen_reg_rtx (mode);
rtx y = gen_reg_rtx (mode);
- int passes = (TARGET_RECIP_PRECISION) ? 2 : 3;
+
+ /* Low precision estimates guarantee 5 bits of accuracy. High
+ precision estimates guarantee 14 bits of accuracy. SFmode
+ requires 23 bits of accuracy. DFmode requires 52 bits of
+ accuracy. Each pass at least doubles the accuracy, leading
+ to the following. */
+ int passes = (TARGET_RECIP_PRECISION) ? 1 : 3;
+ if (mode == DFmode || mode == V2DFmode)
+ passes++;
+
REAL_VALUE_TYPE dconst3_2;
int i;
rtx halfthree;
@@ -26920,6 +30362,136 @@ rs6000_emit_parity (rtx dst, rtx src)
}
}
+/* Expand an Altivec constant permutation for little endian mode.
+ There are two issues: First, the two input operands must be
+ swapped so that together they form a double-wide array in LE
+ order. Second, the vperm instruction has surprising behavior
+ in LE mode: it interprets the elements of the source vectors
+ in BE mode ("left to right") and interprets the elements of
+ the destination vector in LE mode ("right to left"). To
+ correct for this, we must subtract each element of the permute
+ control vector from 31.
+
+ For example, suppose we want to concatenate vr10 = {0, 1, 2, 3}
+ with vr11 = {4, 5, 6, 7} and extract {0, 2, 4, 6} using a vperm.
+ We place {0,1,2,3,8,9,10,11,16,17,18,19,24,25,26,27} in vr12 to
+ serve as the permute control vector. Then, in BE mode,
+
+ vperm 9,10,11,12
+
+ places the desired result in vr9. However, in LE mode the
+ vector contents will be
+
+ vr10 = 00000003 00000002 00000001 00000000
+ vr11 = 00000007 00000006 00000005 00000004
+
+ The result of the vperm using the same permute control vector is
+
+ vr9 = 05000000 07000000 01000000 03000000
+
+ That is, the leftmost 4 bytes of vr10 are interpreted as the
+ source for the rightmost 4 bytes of vr9, and so on.
+
+ If we change the permute control vector to
+
+ vr12 = {31,20,29,28,23,22,21,20,15,14,13,12,7,6,5,4}
+
+ and issue
+
+ vperm 9,11,10,12
+
+ we get the desired
+
+ vr9 = 00000006 00000004 00000002 00000000. */
+
+void
+altivec_expand_vec_perm_const_le (rtx operands[4])
+{
+ unsigned int i;
+ rtx perm[16];
+ rtx constv, unspec;
+ rtx target = operands[0];
+ rtx op0 = operands[1];
+ rtx op1 = operands[2];
+ rtx sel = operands[3];
+
+ /* Unpack and adjust the constant selector. */
+ for (i = 0; i < 16; ++i)
+ {
+ rtx e = XVECEXP (sel, 0, i);
+ unsigned int elt = 31 - (INTVAL (e) & 31);
+ perm[i] = GEN_INT (elt);
+ }
+
+ /* Expand to a permute, swapping the inputs and using the
+ adjusted selector. */
+ if (!REG_P (op0))
+ op0 = force_reg (V16QImode, op0);
+ if (!REG_P (op1))
+ op1 = force_reg (V16QImode, op1);
+
+ constv = gen_rtx_CONST_VECTOR (V16QImode, gen_rtvec_v (16, perm));
+ constv = force_reg (V16QImode, constv);
+ unspec = gen_rtx_UNSPEC (V16QImode, gen_rtvec (3, op1, op0, constv),
+ UNSPEC_VPERM);
+ if (!REG_P (target))
+ {
+ rtx tmp = gen_reg_rtx (V16QImode);
+ emit_move_insn (tmp, unspec);
+ unspec = tmp;
+ }
+
+ emit_move_insn (target, unspec);
+}
+
+/* Similarly to altivec_expand_vec_perm_const_le, we must adjust the
+ permute control vector. But here it's not a constant, so we must
+ generate a vector NAND or NOR to do the adjustment. */
+
+void
+altivec_expand_vec_perm_le (rtx operands[4])
+{
+ rtx notx, iorx, unspec;
+ rtx target = operands[0];
+ rtx op0 = operands[1];
+ rtx op1 = operands[2];
+ rtx sel = operands[3];
+ rtx tmp = target;
+ rtx norreg = gen_reg_rtx (V16QImode);
+ enum machine_mode mode = GET_MODE (target);
+
+ /* Get everything in regs so the pattern matches. */
+ if (!REG_P (op0))
+ op0 = force_reg (mode, op0);
+ if (!REG_P (op1))
+ op1 = force_reg (mode, op1);
+ if (!REG_P (sel))
+ sel = force_reg (V16QImode, sel);
+ if (!REG_P (target))
+ tmp = gen_reg_rtx (mode);
+
+ /* Invert the selector with a VNAND if available, else a VNOR.
+ The VNAND is preferred for future fusion opportunities. */
+ notx = gen_rtx_NOT (V16QImode, sel);
+ iorx = (TARGET_P8_VECTOR
+ ? gen_rtx_IOR (V16QImode, notx, notx)
+ : gen_rtx_AND (V16QImode, notx, notx));
+ emit_insn (gen_rtx_SET (VOIDmode, norreg, iorx));
+
+ /* Permute with operands reversed and adjusted selector. */
+ unspec = gen_rtx_UNSPEC (mode, gen_rtvec (3, op1, op0, norreg),
+ UNSPEC_VPERM);
+
+ /* Copy into target, possibly by way of a register. */
+ if (!REG_P (target))
+ {
+ emit_move_insn (tmp, unspec);
+ unspec = tmp;
+ }
+
+ emit_move_insn (target, unspec);
+}
+
/* Expand an Altivec constant permutation. Return true if we match
an efficient implementation; false to fall back to VPERM. */
@@ -26927,26 +30499,43 @@ bool
altivec_expand_vec_perm_const (rtx operands[4])
{
struct altivec_perm_insn {
+ HOST_WIDE_INT mask;
enum insn_code impl;
unsigned char perm[16];
};
static const struct altivec_perm_insn patterns[] = {
- { CODE_FOR_altivec_vpkuhum,
+ { OPTION_MASK_ALTIVEC, CODE_FOR_altivec_vpkuhum_direct,
{ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 } },
- { CODE_FOR_altivec_vpkuwum,
+ { OPTION_MASK_ALTIVEC, CODE_FOR_altivec_vpkuwum_direct,
{ 2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31 } },
- { CODE_FOR_altivec_vmrghb,
+ { OPTION_MASK_ALTIVEC,
+ (BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghb_direct
+ : CODE_FOR_altivec_vmrglb_direct),
{ 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 } },
- { CODE_FOR_altivec_vmrghh,
+ { OPTION_MASK_ALTIVEC,
+ (BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghh_direct
+ : CODE_FOR_altivec_vmrglh_direct),
{ 0, 1, 16, 17, 2, 3, 18, 19, 4, 5, 20, 21, 6, 7, 22, 23 } },
- { CODE_FOR_altivec_vmrghw,
+ { OPTION_MASK_ALTIVEC,
+ (BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghw_direct
+ : CODE_FOR_altivec_vmrglw_direct),
{ 0, 1, 2, 3, 16, 17, 18, 19, 4, 5, 6, 7, 20, 21, 22, 23 } },
- { CODE_FOR_altivec_vmrglb,
+ { OPTION_MASK_ALTIVEC,
+ (BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglb_direct
+ : CODE_FOR_altivec_vmrghb_direct),
{ 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 } },
- { CODE_FOR_altivec_vmrglh,
+ { OPTION_MASK_ALTIVEC,
+ (BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglh_direct
+ : CODE_FOR_altivec_vmrghh_direct),
{ 8, 9, 24, 25, 10, 11, 26, 27, 12, 13, 28, 29, 14, 15, 30, 31 } },
- { CODE_FOR_altivec_vmrglw,
- { 8, 9, 10, 11, 24, 25, 26, 27, 12, 13, 14, 15, 28, 29, 30, 31 } }
+ { OPTION_MASK_ALTIVEC,
+ (BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglw_direct
+ : CODE_FOR_altivec_vmrghw_direct),
+ { 8, 9, 10, 11, 24, 25, 26, 27, 12, 13, 14, 15, 28, 29, 30, 31 } },
+ { OPTION_MASK_P8_VECTOR, CODE_FOR_p8_vmrgew,
+ { 0, 1, 2, 3, 16, 17, 18, 19, 8, 9, 10, 11, 24, 25, 26, 27 } },
+ { OPTION_MASK_P8_VECTOR, CODE_FOR_p8_vmrgow,
+ { 4, 5, 6, 7, 20, 21, 22, 23, 12, 13, 14, 15, 28, 29, 30, 31 } }
};
unsigned int i, j, elt, which;
@@ -27003,7 +30592,9 @@ altivec_expand_vec_perm_const (rtx operands[4])
break;
if (i == 16)
{
- emit_insn (gen_altivec_vspltb (target, op0, GEN_INT (elt)));
+ if (!BYTES_BIG_ENDIAN)
+ elt = 15 - elt;
+ emit_insn (gen_altivec_vspltb_direct (target, op0, GEN_INT (elt)));
return true;
}
@@ -27014,9 +30605,10 @@ altivec_expand_vec_perm_const (rtx operands[4])
break;
if (i == 16)
{
+ int field = BYTES_BIG_ENDIAN ? elt / 2 : 7 - elt / 2;
x = gen_reg_rtx (V8HImode);
- emit_insn (gen_altivec_vsplth (x, gen_lowpart (V8HImode, op0),
- GEN_INT (elt / 2)));
+ emit_insn (gen_altivec_vsplth_direct (x, gen_lowpart (V8HImode, op0),
+ GEN_INT (field)));
emit_move_insn (target, gen_lowpart (V16QImode, x));
return true;
}
@@ -27032,9 +30624,10 @@ altivec_expand_vec_perm_const (rtx operands[4])
break;
if (i == 16)
{
+ int field = BYTES_BIG_ENDIAN ? elt / 4 : 3 - elt / 4;
x = gen_reg_rtx (V4SImode);
- emit_insn (gen_altivec_vspltw (x, gen_lowpart (V4SImode, op0),
- GEN_INT (elt / 4)));
+ emit_insn (gen_altivec_vspltw_direct (x, gen_lowpart (V4SImode, op0),
+ GEN_INT (field)));
emit_move_insn (target, gen_lowpart (V16QImode, x));
return true;
}
@@ -27046,6 +30639,9 @@ altivec_expand_vec_perm_const (rtx operands[4])
{
bool swapped;
+ if ((patterns[j].mask & rs6000_isa_flags) == 0)
+ continue;
+
elt = patterns[j].perm[0];
if (perm[0] == elt)
swapped = false;
@@ -27069,7 +30665,30 @@ altivec_expand_vec_perm_const (rtx operands[4])
enum machine_mode omode = insn_data[icode].operand[0].mode;
enum machine_mode imode = insn_data[icode].operand[1].mode;
- if (swapped)
+ /* For little-endian, don't use vpkuwum and vpkuhum if the
+ underlying vector type is not V4SI and V8HI, respectively.
+ For example, using vpkuwum with a V8HI picks up the even
+ halfwords (BE numbering) when the even halfwords (LE
+ numbering) are what we need. */
+ if (!BYTES_BIG_ENDIAN
+ && icode == CODE_FOR_altivec_vpkuwum_direct
+ && ((GET_CODE (op0) == REG
+ && GET_MODE (op0) != V4SImode)
+ || (GET_CODE (op0) == SUBREG
+ && GET_MODE (XEXP (op0, 0)) != V4SImode)))
+ continue;
+ if (!BYTES_BIG_ENDIAN
+ && icode == CODE_FOR_altivec_vpkuhum_direct
+ && ((GET_CODE (op0) == REG
+ && GET_MODE (op0) != V8HImode)
+ || (GET_CODE (op0) == SUBREG
+ && GET_MODE (XEXP (op0, 0)) != V8HImode)))
+ continue;
+
+ /* For little-endian, the two input operands must be swapped
+ (or swapped back) to ensure proper right-to-left numbering
+ from 0 to 2N-1. */
+ if (swapped ^ !BYTES_BIG_ENDIAN)
x = op0, op0 = op1, op1 = x;
if (imode != V16QImode)
{
@@ -27087,6 +30706,12 @@ altivec_expand_vec_perm_const (rtx operands[4])
}
}
+ if (!BYTES_BIG_ENDIAN)
+ {
+ altivec_expand_vec_perm_const_le (operands);
+ return true;
+ }
+
return false;
}
@@ -27135,7 +30760,6 @@ rs6000_expand_vec_perm_const_1 (rtx target, rtx op0, rtx op1,
vmode = GET_MODE (target);
gcc_assert (GET_MODE_NUNITS (vmode) == 2);
dmode = mode_for_vector (GET_MODE_INNER (vmode), 4);
-
x = gen_rtx_VEC_CONCAT (dmode, op0, op1);
v = gen_rtvec (2, GEN_INT (perm0), GEN_INT (perm1));
x = gen_rtx_VEC_SELECT (vmode, x, gen_rtx_PARALLEL (VOIDmode, v));
@@ -27231,7 +30855,7 @@ rs6000_expand_interleave (rtx target, rtx op0, rtx op1, bool highp)
unsigned i, high, nelt = GET_MODE_NUNITS (vmode);
rtx perm[16];
- high = (highp == BYTES_BIG_ENDIAN ? 0 : nelt / 2);
+ high = (highp ? 0 : nelt / 2);
for (i = 0; i < nelt / 2; i++)
{
perm[i * 2] = GEN_INT (i + high);
@@ -27286,6 +30910,8 @@ rs6000_function_value (const_tree valtype,
{
enum machine_mode mode;
unsigned int regno;
+ enum machine_mode elt_mode;
+ int n_elts;
/* Special handling for structs in darwin64. */
if (TARGET_MACHO
@@ -27305,6 +30931,36 @@ rs6000_function_value (const_tree valtype,
/* Otherwise fall through to standard ABI rules. */
}
+ /* The ELFv2 ABI returns homogeneous VFP aggregates in registers. */
+ if (rs6000_discover_homogeneous_aggregate (TYPE_MODE (valtype), valtype,
+ &elt_mode, &n_elts))
+ {
+ int first_reg, n_regs, i;
+ rtx par;
+
+ if (SCALAR_FLOAT_MODE_P (elt_mode))
+ {
+ /* _Decimal128 must use even/odd register pairs. */
+ first_reg = (elt_mode == TDmode) ? FP_ARG_RETURN + 1 : FP_ARG_RETURN;
+ n_regs = (GET_MODE_SIZE (elt_mode) + 7) >> 3;
+ }
+ else
+ {
+ first_reg = ALTIVEC_ARG_RETURN;
+ n_regs = 1;
+ }
+
+ par = gen_rtx_PARALLEL (TYPE_MODE (valtype), rtvec_alloc (n_elts));
+ for (i = 0; i < n_elts; i++)
+ {
+ rtx r = gen_rtx_REG (elt_mode, first_reg + i * n_regs);
+ rtx off = GEN_INT (i * GET_MODE_SIZE (elt_mode));
+ XVECEXP (par, 0, i) = gen_rtx_EXPR_LIST (VOIDmode, r, off);
+ }
+
+ return par;
+ }
+
if (TARGET_32BIT && TARGET_POWERPC64 && TYPE_MODE (valtype) == DImode)
{
/* Long long return value need be split in -mpowerpc64, 32bit ABI. */
@@ -27417,6 +31073,13 @@ rs6000_libcall_value (enum machine_mode mode)
}
+/* Return true if we use LRA instead of reload pass. */
+static bool
+rs6000_lra_p (void)
+{
+ return rs6000_lra_flag;
+}
+
/* Given FROM and TO register numbers, say whether this elimination is allowed.
Frame pointer elimination is automatically handled.
@@ -27679,22 +31342,33 @@ static struct rs6000_opt_mask const rs6000_opt_masks[] =
{
{ "altivec", OPTION_MASK_ALTIVEC, false, true },
{ "cmpb", OPTION_MASK_CMPB, false, true },
+ { "crypto", OPTION_MASK_CRYPTO, false, true },
+ { "direct-move", OPTION_MASK_DIRECT_MOVE, false, true },
{ "dlmzb", OPTION_MASK_DLMZB, false, true },
{ "fprnd", OPTION_MASK_FPRND, false, true },
{ "hard-dfp", OPTION_MASK_DFP, false, true },
+ { "htm", OPTION_MASK_HTM, false, true },
{ "isel", OPTION_MASK_ISEL, false, true },
{ "mfcrf", OPTION_MASK_MFCRF, false, true },
{ "mfpgpr", OPTION_MASK_MFPGPR, false, true },
{ "mulhw", OPTION_MASK_MULHW, false, true },
{ "multiple", OPTION_MASK_MULTIPLE, false, true },
- { "update", OPTION_MASK_NO_UPDATE, true , true },
{ "popcntb", OPTION_MASK_POPCNTB, false, true },
{ "popcntd", OPTION_MASK_POPCNTD, false, true },
+ { "power8-fusion", OPTION_MASK_P8_FUSION, false, true },
+ { "power8-fusion-sign", OPTION_MASK_P8_FUSION_SIGN, false, true },
+ { "power8-vector", OPTION_MASK_P8_VECTOR, false, true },
{ "powerpc-gfxopt", OPTION_MASK_PPC_GFXOPT, false, true },
{ "powerpc-gpopt", OPTION_MASK_PPC_GPOPT, false, true },
+ { "quad-memory", OPTION_MASK_QUAD_MEMORY, false, true },
+ { "quad-memory-atomic", OPTION_MASK_QUAD_MEMORY_ATOMIC, false, true },
{ "recip-precision", OPTION_MASK_RECIP_PRECISION, false, true },
{ "string", OPTION_MASK_STRING, false, true },
+ { "update", OPTION_MASK_NO_UPDATE, true , true },
+ { "upper-regs-df", OPTION_MASK_UPPER_REGS_DF, false, false },
+ { "upper-regs-sf", OPTION_MASK_UPPER_REGS_SF, false, false },
{ "vsx", OPTION_MASK_VSX, false, true },
+ { "vsx-timode", OPTION_MASK_VSX_TIMODE, false, true },
#ifdef OPTION_MASK_64BIT
#if TARGET_AIX_OS
{ "aix64", OPTION_MASK_64BIT, false, false },
@@ -27734,6 +31408,11 @@ static struct rs6000_opt_mask const rs6000_builtin_mask_names[] =
{ "frsqrtes", RS6000_BTM_FRSQRTES, false, false },
{ "popcntd", RS6000_BTM_POPCNTD, false, false },
{ "cell", RS6000_BTM_CELL, false, false },
+ { "power8-vector", RS6000_BTM_P8_VECTOR, false, false },
+ { "crypto", RS6000_BTM_CRYPTO, false, false },
+ { "htm", RS6000_BTM_HTM, false, false },
+ { "hard-dfp", RS6000_BTM_DFP, false, false },
+ { "hard-float", RS6000_BTM_HARD_FLOAT, false, false },
};
/* Option variables that we want to support inside attribute((target)) and
@@ -28250,7 +31929,6 @@ rs6000_print_options_internal (FILE *file,
size_t cur_column;
size_t max_column = 76;
const char *comma = "";
- const char *nl = "\n";
if (indent)
start_column += fprintf (file, "%*s", indent, "");
@@ -28281,7 +31959,6 @@ rs6000_print_options_internal (FILE *file,
fprintf (stderr, ", \\\n%*s", (int)start_column, "");
cur_column = start_column + len;
comma = "";
- nl = "\n\n";
}
fprintf (file, "%s%s%s%s", comma, prefix, no_str,
@@ -28291,7 +31968,7 @@ rs6000_print_options_internal (FILE *file,
}
}
- fputs (nl, file);
+ fputs ("\n", file);
}
/* Helper function to print the current isa options on a line. */
@@ -28467,118 +32144,149 @@ rs6000_legitimate_constant_p (enum machine_mode mode, rtx x)
}
-/* A function pointer under AIX is a pointer to a data area whose first word
- contains the actual address of the function, whose second word contains a
- pointer to its TOC, and whose third word contains a value to place in the
- static chain register (r11). Note that if we load the static chain, our
- "trampoline" need not have any executable code. */
+
+/* Expand code to perform a call under the AIX or ELFv2 ABI. */
void
-rs6000_call_indirect_aix (rtx value, rtx func_desc, rtx flag)
+rs6000_call_aix (rtx value, rtx func_desc, rtx flag, rtx cookie)
{
+ rtx toc_reg = gen_rtx_REG (Pmode, TOC_REGNUM);
+ rtx toc_load = NULL_RTX;
+ rtx toc_restore = NULL_RTX;
rtx func_addr;
- rtx toc_reg;
- rtx sc_reg;
- rtx stack_ptr;
- rtx stack_toc_offset;
- rtx stack_toc_mem;
- rtx func_toc_offset;
- rtx func_toc_mem;
- rtx func_sc_offset;
- rtx func_sc_mem;
+ rtx abi_reg = NULL_RTX;
+ rtx call[4];
+ int n_call;
rtx insn;
- rtx (*call_func) (rtx, rtx, rtx, rtx);
- rtx (*call_value_func) (rtx, rtx, rtx, rtx, rtx);
- stack_ptr = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM);
- toc_reg = gen_rtx_REG (Pmode, TOC_REGNUM);
+ /* Handle longcall attributes. */
+ if (INTVAL (cookie) & CALL_LONG)
+ func_desc = rs6000_longcall_ref (func_desc);
+
+ /* Handle indirect calls. */
+ if (GET_CODE (func_desc) != SYMBOL_REF
+ || (DEFAULT_ABI == ABI_AIX && !SYMBOL_REF_FUNCTION_P (func_desc)))
+ {
+ /* Save the TOC into its reserved slot before the call,
+ and prepare to restore it after the call. */
+ rtx stack_ptr = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM);
+ rtx stack_toc_offset = GEN_INT (RS6000_TOC_SAVE_SLOT);
+ rtx stack_toc_mem = gen_frame_mem (Pmode,
+ gen_rtx_PLUS (Pmode, stack_ptr,
+ stack_toc_offset));
+ toc_restore = gen_rtx_SET (VOIDmode, toc_reg, stack_toc_mem);
+
+ /* Can we optimize saving the TOC in the prologue or
+ do we need to do it at every call? */
+ if (TARGET_SAVE_TOC_INDIRECT && !cfun->calls_alloca)
+ cfun->machine->save_toc_in_prologue = true;
+ else
+ {
+ MEM_VOLATILE_P (stack_toc_mem) = 1;
+ emit_move_insn (stack_toc_mem, toc_reg);
+ }
+
+ if (DEFAULT_ABI == ABI_ELFv2)
+ {
+ /* A function pointer in the ELFv2 ABI is just a plain address, but
+ the ABI requires it to be loaded into r12 before the call. */
+ func_addr = gen_rtx_REG (Pmode, 12);
+ emit_move_insn (func_addr, func_desc);
+ abi_reg = func_addr;
+ }
+ else
+ {
+ /* A function pointer under AIX is a pointer to a data area whose
+ first word contains the actual address of the function, whose
+ second word contains a pointer to its TOC, and whose third word
+ contains a value to place in the static chain register (r11).
+ Note that if we load the static chain, our "trampoline" need
+ not have any executable code. */
/* Load up address of the actual function. */
func_desc = force_reg (Pmode, func_desc);
func_addr = gen_reg_rtx (Pmode);
emit_move_insn (func_addr, gen_rtx_MEM (Pmode, func_desc));
- if (TARGET_32BIT)
- {
-
- stack_toc_offset = GEN_INT (TOC_SAVE_OFFSET_32BIT);
- func_toc_offset = GEN_INT (AIX_FUNC_DESC_TOC_32BIT);
- func_sc_offset = GEN_INT (AIX_FUNC_DESC_SC_32BIT);
+ /* Prepare to load the TOC of the called function. Note that the
+ TOC load must happen immediately before the actual call so
+ that unwinding the TOC registers works correctly. See the
+ comment in frob_update_context. */
+ rtx func_toc_offset = GEN_INT (GET_MODE_SIZE (Pmode));
+ rtx func_toc_mem = gen_rtx_MEM (Pmode,
+ gen_rtx_PLUS (Pmode, func_desc,
+ func_toc_offset));
+ toc_load = gen_rtx_USE (VOIDmode, func_toc_mem);
+
+ /* If we have a static chain, load it up. */
if (TARGET_POINTERS_TO_NESTED_FUNCTIONS)
{
- call_func = gen_call_indirect_aix32bit;
- call_value_func = gen_call_value_indirect_aix32bit;
- }
- else
- {
- call_func = gen_call_indirect_aix32bit_nor11;
- call_value_func = gen_call_value_indirect_aix32bit_nor11;
+ rtx sc_reg = gen_rtx_REG (Pmode, STATIC_CHAIN_REGNUM);
+ rtx func_sc_offset = GEN_INT (2 * GET_MODE_SIZE (Pmode));
+ rtx func_sc_mem = gen_rtx_MEM (Pmode,
+ gen_rtx_PLUS (Pmode, func_desc,
+ func_sc_offset));
+ emit_move_insn (sc_reg, func_sc_mem);
+ abi_reg = sc_reg;
}
}
- else
- {
- stack_toc_offset = GEN_INT (TOC_SAVE_OFFSET_64BIT);
- func_toc_offset = GEN_INT (AIX_FUNC_DESC_TOC_64BIT);
- func_sc_offset = GEN_INT (AIX_FUNC_DESC_SC_64BIT);
- if (TARGET_POINTERS_TO_NESTED_FUNCTIONS)
- {
- call_func = gen_call_indirect_aix64bit;
- call_value_func = gen_call_value_indirect_aix64bit;
}
else
{
- call_func = gen_call_indirect_aix64bit_nor11;
- call_value_func = gen_call_value_indirect_aix64bit_nor11;
- }
+ /* Direct calls use the TOC: for local calls, the callee will
+ assume the TOC register is set; for non-local calls, the
+ PLT stub needs the TOC register. */
+ abi_reg = toc_reg;
+ func_addr = func_desc;
}
- /* Reserved spot to store the TOC. */
- stack_toc_mem = gen_frame_mem (Pmode,
- gen_rtx_PLUS (Pmode,
- stack_ptr,
- stack_toc_offset));
+ /* Create the call. */
+ call[0] = gen_rtx_CALL (VOIDmode, gen_rtx_MEM (SImode, func_addr), flag);
+ if (value != NULL_RTX)
+ call[0] = gen_rtx_SET (VOIDmode, value, call[0]);
+ n_call = 1;
- gcc_assert (cfun);
- gcc_assert (cfun->machine);
+ if (toc_load)
+ call[n_call++] = toc_load;
+ if (toc_restore)
+ call[n_call++] = toc_restore;
- /* Can we optimize saving the TOC in the prologue or do we need to do it at
- every call? */
- if (TARGET_SAVE_TOC_INDIRECT && !cfun->calls_alloca)
- cfun->machine->save_toc_in_prologue = true;
+ call[n_call++] = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (Pmode, LR_REGNO));
- else
- {
- MEM_VOLATILE_P (stack_toc_mem) = 1;
- emit_move_insn (stack_toc_mem, toc_reg);
- }
+ insn = gen_rtx_PARALLEL (VOIDmode, gen_rtvec_v (n_call, call));
+ insn = emit_call_insn (insn);
- /* Calculate the address to load the TOC of the called function. We don't
- actually load this until the split after reload. */
- func_toc_mem = gen_rtx_MEM (Pmode,
- gen_rtx_PLUS (Pmode,
- func_desc,
- func_toc_offset));
+ /* Mention all registers defined by the ABI to hold information
+ as uses in CALL_INSN_FUNCTION_USAGE. */
+ if (abi_reg)
+ use_reg (&CALL_INSN_FUNCTION_USAGE (insn), abi_reg);
+}
- /* If we have a static chain, load it up. */
- if (TARGET_POINTERS_TO_NESTED_FUNCTIONS)
- {
- func_sc_mem = gen_rtx_MEM (Pmode,
- gen_rtx_PLUS (Pmode,
- func_desc,
- func_sc_offset));
+/* Expand code to perform a sibling call under the AIX or ELFv2 ABI. */
- sc_reg = gen_rtx_REG (Pmode, STATIC_CHAIN_REGNUM);
- emit_move_insn (sc_reg, func_sc_mem);
- }
+void
+rs6000_sibcall_aix (rtx value, rtx func_desc, rtx flag, rtx cookie)
+{
+ rtx call[2];
+ rtx insn;
+
+ gcc_assert (INTVAL (cookie) == 0);
/* Create the call. */
- if (value)
- insn = call_value_func (value, func_addr, flag, func_toc_mem,
- stack_toc_mem);
- else
- insn = call_func (func_addr, flag, func_toc_mem, stack_toc_mem);
+ call[0] = gen_rtx_CALL (VOIDmode, gen_rtx_MEM (SImode, func_desc), flag);
+ if (value != NULL_RTX)
+ call[0] = gen_rtx_SET (VOIDmode, value, call[0]);
- emit_call_insn (insn);
+ call[1] = simple_return_rtx;
+
+ insn = gen_rtx_PARALLEL (VOIDmode, gen_rtvec_v (2, call));
+ insn = emit_call_insn (insn);
+
+ /* Note use of the TOC register. */
+ use_reg (&CALL_INSN_FUNCTION_USAGE (insn), gen_rtx_REG (Pmode, TOC_REGNUM));
+ /* We need to also mark a use of the link register since the function we
+ sibling-call to will use it to return to our caller. */
+ use_reg (&CALL_INSN_FUNCTION_USAGE (insn), gen_rtx_REG (Pmode, LR_REGNO));
}
/* Return whether we need to always update the saved TOC pointer when we update
@@ -28679,6 +32387,661 @@ rs6000_set_up_by_prologue (struct hard_reg_set_container *set)
add_to_hard_reg_set (&set->set, Pmode, RS6000_PIC_OFFSET_TABLE_REGNUM);
}
+
+/* Helper function for rs6000_split_logical to emit a logical instruction after
+ spliting the operation to single GPR registers.
+
+ DEST is the destination register.
+ OP1 and OP2 are the input source registers.
+ CODE is the base operation (AND, IOR, XOR, NOT).
+ MODE is the machine mode.
+ If COMPLEMENT_FINAL_P is true, wrap the whole operation with NOT.
+ If COMPLEMENT_OP1_P is true, wrap operand1 with NOT.
+ If COMPLEMENT_OP2_P is true, wrap operand2 with NOT.
+ CLOBBER_REG is either NULL or a scratch register of type CC to allow
+ formation of the AND instructions. */
+
+static void
+rs6000_split_logical_inner (rtx dest,
+ rtx op1,
+ rtx op2,
+ enum rtx_code code,
+ enum machine_mode mode,
+ bool complement_final_p,
+ bool complement_op1_p,
+ bool complement_op2_p,
+ rtx clobber_reg)
+{
+ rtx bool_rtx;
+ rtx set_rtx;
+
+ /* Optimize AND of 0/0xffffffff and IOR/XOR of 0. */
+ if (op2 && GET_CODE (op2) == CONST_INT
+ && (mode == SImode || (mode == DImode && TARGET_POWERPC64))
+ && !complement_final_p && !complement_op1_p && !complement_op2_p)
+ {
+ HOST_WIDE_INT mask = GET_MODE_MASK (mode);
+ HOST_WIDE_INT value = INTVAL (op2) & mask;
+
+ /* Optimize AND of 0 to just set 0. Optimize AND of -1 to be a move. */
+ if (code == AND)
+ {
+ if (value == 0)
+ {
+ emit_insn (gen_rtx_SET (VOIDmode, dest, const0_rtx));
+ return;
+ }
+
+ else if (value == mask)
+ {
+ if (!rtx_equal_p (dest, op1))
+ emit_insn (gen_rtx_SET (VOIDmode, dest, op1));
+ return;
+ }
+ }
+
+ /* Optimize IOR/XOR of 0 to be a simple move. Split large operations
+ into separate ORI/ORIS or XORI/XORIS instrucitons. */
+ else if (code == IOR || code == XOR)
+ {
+ if (value == 0)
+ {
+ if (!rtx_equal_p (dest, op1))
+ emit_insn (gen_rtx_SET (VOIDmode, dest, op1));
+ return;
+ }
+ }
+ }
+
+ if (complement_op1_p)
+ op1 = gen_rtx_NOT (mode, op1);
+
+ if (complement_op2_p)
+ op2 = gen_rtx_NOT (mode, op2);
+
+ bool_rtx = ((code == NOT)
+ ? gen_rtx_NOT (mode, op1)
+ : gen_rtx_fmt_ee (code, mode, op1, op2));
+
+ if (complement_final_p)
+ bool_rtx = gen_rtx_NOT (mode, bool_rtx);
+
+ set_rtx = gen_rtx_SET (VOIDmode, dest, bool_rtx);
+
+ /* Is this AND with an explicit clobber? */
+ if (clobber_reg)
+ {
+ rtx clobber = gen_rtx_CLOBBER (VOIDmode, clobber_reg);
+ set_rtx = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, set_rtx, clobber));
+ }
+
+ emit_insn (set_rtx);
+ return;
+}
+
+/* Split a DImode AND/IOR/XOR with a constant on a 32-bit system. These
+ operations are split immediately during RTL generation to allow for more
+ optimizations of the AND/IOR/XOR.
+
+ OPERANDS is an array containing the destination and two input operands.
+ CODE is the base operation (AND, IOR, XOR, NOT).
+ MODE is the machine mode.
+ If COMPLEMENT_FINAL_P is true, wrap the whole operation with NOT.
+ If COMPLEMENT_OP1_P is true, wrap operand1 with NOT.
+ If COMPLEMENT_OP2_P is true, wrap operand2 with NOT.
+ CLOBBER_REG is either NULL or a scratch register of type CC to allow
+ formation of the AND instructions. */
+
+static void
+rs6000_split_logical_di (rtx operands[3],
+ enum rtx_code code,
+ bool complement_final_p,
+ bool complement_op1_p,
+ bool complement_op2_p,
+ rtx clobber_reg)
+{
+ const HOST_WIDE_INT lower_32bits = HOST_WIDE_INT_C(0xffffffff);
+ const HOST_WIDE_INT upper_32bits = ~ lower_32bits;
+ const HOST_WIDE_INT sign_bit = HOST_WIDE_INT_C(0x80000000);
+ enum hi_lo { hi = 0, lo = 1 };
+ rtx op0_hi_lo[2], op1_hi_lo[2], op2_hi_lo[2];
+ size_t i;
+
+ op0_hi_lo[hi] = gen_highpart (SImode, operands[0]);
+ op1_hi_lo[hi] = gen_highpart (SImode, operands[1]);
+ op0_hi_lo[lo] = gen_lowpart (SImode, operands[0]);
+ op1_hi_lo[lo] = gen_lowpart (SImode, operands[1]);
+
+ if (code == NOT)
+ op2_hi_lo[hi] = op2_hi_lo[lo] = NULL_RTX;
+ else
+ {
+ if (GET_CODE (operands[2]) != CONST_INT)
+ {
+ op2_hi_lo[hi] = gen_highpart_mode (SImode, DImode, operands[2]);
+ op2_hi_lo[lo] = gen_lowpart (SImode, operands[2]);
+ }
+ else
+ {
+ HOST_WIDE_INT value = INTVAL (operands[2]);
+ HOST_WIDE_INT value_hi_lo[2];
+
+ gcc_assert (!complement_final_p);
+ gcc_assert (!complement_op1_p);
+ gcc_assert (!complement_op2_p);
+
+ value_hi_lo[hi] = value >> 32;
+ value_hi_lo[lo] = value & lower_32bits;
+
+ for (i = 0; i < 2; i++)
+ {
+ HOST_WIDE_INT sub_value = value_hi_lo[i];
+
+ if (sub_value & sign_bit)
+ sub_value |= upper_32bits;
+
+ op2_hi_lo[i] = GEN_INT (sub_value);
+
+ /* If this is an AND instruction, check to see if we need to load
+ the value in a register. */
+ if (code == AND && sub_value != -1 && sub_value != 0
+ && !and_operand (op2_hi_lo[i], SImode))
+ op2_hi_lo[i] = force_reg (SImode, op2_hi_lo[i]);
+ }
+ }
+ }
+
+ for (i = 0; i < 2; i++)
+ {
+ /* Split large IOR/XOR operations. */
+ if ((code == IOR || code == XOR)
+ && GET_CODE (op2_hi_lo[i]) == CONST_INT
+ && !complement_final_p
+ && !complement_op1_p
+ && !complement_op2_p
+ && clobber_reg == NULL_RTX
+ && !logical_const_operand (op2_hi_lo[i], SImode))
+ {
+ HOST_WIDE_INT value = INTVAL (op2_hi_lo[i]);
+ HOST_WIDE_INT hi_16bits = value & HOST_WIDE_INT_C(0xffff0000);
+ HOST_WIDE_INT lo_16bits = value & HOST_WIDE_INT_C(0x0000ffff);
+ rtx tmp = gen_reg_rtx (SImode);
+
+ /* Make sure the constant is sign extended. */
+ if ((hi_16bits & sign_bit) != 0)
+ hi_16bits |= upper_32bits;
+
+ rs6000_split_logical_inner (tmp, op1_hi_lo[i], GEN_INT (hi_16bits),
+ code, SImode, false, false, false,
+ NULL_RTX);
+
+ rs6000_split_logical_inner (op0_hi_lo[i], tmp, GEN_INT (lo_16bits),
+ code, SImode, false, false, false,
+ NULL_RTX);
+ }
+ else
+ rs6000_split_logical_inner (op0_hi_lo[i], op1_hi_lo[i], op2_hi_lo[i],
+ code, SImode, complement_final_p,
+ complement_op1_p, complement_op2_p,
+ clobber_reg);
+ }
+
+ return;
+}
+
+/* Split the insns that make up boolean operations operating on multiple GPR
+ registers. The boolean MD patterns ensure that the inputs either are
+ exactly the same as the output registers, or there is no overlap.
+
+ OPERANDS is an array containing the destination and two input operands.
+ CODE is the base operation (AND, IOR, XOR, NOT).
+ MODE is the machine mode.
+ If COMPLEMENT_FINAL_P is true, wrap the whole operation with NOT.
+ If COMPLEMENT_OP1_P is true, wrap operand1 with NOT.
+ If COMPLEMENT_OP2_P is true, wrap operand2 with NOT.
+ CLOBBER_REG is either NULL or a scratch register of type CC to allow
+ formation of the AND instructions. */
+
+void
+rs6000_split_logical (rtx operands[3],
+ enum rtx_code code,
+ bool complement_final_p,
+ bool complement_op1_p,
+ bool complement_op2_p,
+ rtx clobber_reg)
+{
+ enum machine_mode mode = GET_MODE (operands[0]);
+ enum machine_mode sub_mode;
+ rtx op0, op1, op2;
+ int sub_size, regno0, regno1, nregs, i;
+
+ /* If this is DImode, use the specialized version that can run before
+ register allocation. */
+ if (mode == DImode && !TARGET_POWERPC64)
+ {
+ rs6000_split_logical_di (operands, code, complement_final_p,
+ complement_op1_p, complement_op2_p,
+ clobber_reg);
+ return;
+ }
+
+ op0 = operands[0];
+ op1 = operands[1];
+ op2 = (code == NOT) ? NULL_RTX : operands[2];
+ sub_mode = (TARGET_POWERPC64) ? DImode : SImode;
+ sub_size = GET_MODE_SIZE (sub_mode);
+ regno0 = REGNO (op0);
+ regno1 = REGNO (op1);
+
+ gcc_assert (reload_completed);
+ gcc_assert (IN_RANGE (regno0, FIRST_GPR_REGNO, LAST_GPR_REGNO));
+ gcc_assert (IN_RANGE (regno1, FIRST_GPR_REGNO, LAST_GPR_REGNO));
+
+ nregs = rs6000_hard_regno_nregs[(int)mode][regno0];
+ gcc_assert (nregs > 1);
+
+ if (op2 && REG_P (op2))
+ gcc_assert (IN_RANGE (REGNO (op2), FIRST_GPR_REGNO, LAST_GPR_REGNO));
+
+ for (i = 0; i < nregs; i++)
+ {
+ int offset = i * sub_size;
+ rtx sub_op0 = simplify_subreg (sub_mode, op0, mode, offset);
+ rtx sub_op1 = simplify_subreg (sub_mode, op1, mode, offset);
+ rtx sub_op2 = ((code == NOT)
+ ? NULL_RTX
+ : simplify_subreg (sub_mode, op2, mode, offset));
+
+ rs6000_split_logical_inner (sub_op0, sub_op1, sub_op2, code, sub_mode,
+ complement_final_p, complement_op1_p,
+ complement_op2_p, clobber_reg);
+ }
+
+ return;
+}
+
+
+/* Return true if the peephole2 can combine a load involving a combination of
+ an addis instruction and a load with an offset that can be fused together on
+ a power8.
+
+ The operands are:
+ operands[0] register set with addis
+ operands[1] value set via addis
+ operands[2] target register being loaded
+ operands[3] D-form memory reference using operands[0].
+
+ In addition, we are passed a boolean that is true if this is a peephole2,
+ and we can use see if the addis_reg is dead after the insn and can be
+ replaced by the target register. */
+
+bool
+fusion_gpr_load_p (rtx *operands, bool peep2_p)
+{
+ rtx addis_reg = operands[0];
+ rtx addis_value = operands[1];
+ rtx target = operands[2];
+ rtx mem = operands[3];
+ rtx addr;
+ rtx base_reg;
+
+ /* Validate arguments. */
+ if (!base_reg_operand (addis_reg, GET_MODE (addis_reg)))
+ return false;
+
+ if (!base_reg_operand (target, GET_MODE (target)))
+ return false;
+
+ if (!fusion_gpr_addis (addis_value, GET_MODE (addis_value)))
+ return false;
+
+ if (!fusion_gpr_mem_load (mem, GET_MODE (mem)))
+ return false;
+
+ /* Allow sign/zero extension. */
+ if (GET_CODE (mem) == ZERO_EXTEND
+ || (GET_CODE (mem) == SIGN_EXTEND && TARGET_P8_FUSION_SIGN))
+ mem = XEXP (mem, 0);
+
+ if (!MEM_P (mem))
+ return false;
+
+ addr = XEXP (mem, 0); /* either PLUS or LO_SUM. */
+ if (GET_CODE (addr) != PLUS && GET_CODE (addr) != LO_SUM)
+ return false;
+
+ /* Validate that the register used to load the high value is either the
+ register being loaded, or we can safely replace its use in a peephole2.
+
+ If this is a peephole2, we assume that there are 2 instructions in the
+ peephole (addis and load), so we want to check if the target register was
+ not used in the memory address and the register to hold the addis result
+ is dead after the peephole. */
+ if (REGNO (addis_reg) != REGNO (target))
+ {
+ if (!peep2_p)
+ return false;
+
+ if (reg_mentioned_p (target, mem))
+ return false;
+
+ if (!peep2_reg_dead_p (2, addis_reg))
+ return false;
+
+ /* If the target register being loaded is the stack pointer, we must
+ avoid loading any other value into it, even temporarily. */
+ if (REG_P (target) && REGNO (target) == STACK_POINTER_REGNUM)
+ return false;
+ }
+
+ base_reg = XEXP (addr, 0);
+ return REGNO (addis_reg) == REGNO (base_reg);
+}
+
+/* During the peephole2 pass, adjust and expand the insns for a load fusion
+ sequence. We adjust the addis register to use the target register. If the
+ load sign extends, we adjust the code to do the zero extending load, and an
+ explicit sign extension later since the fusion only covers zero extending
+ loads.
+
+ The operands are:
+ operands[0] register set with addis (to be replaced with target)
+ operands[1] value set via addis
+ operands[2] target register being loaded
+ operands[3] D-form memory reference using operands[0]. */
+
+void
+expand_fusion_gpr_load (rtx *operands)
+{
+ rtx addis_value = operands[1];
+ rtx target = operands[2];
+ rtx orig_mem = operands[3];
+ rtx new_addr, new_mem, orig_addr, offset;
+ enum rtx_code plus_or_lo_sum;
+ enum machine_mode target_mode = GET_MODE (target);
+ enum machine_mode extend_mode = target_mode;
+ enum machine_mode ptr_mode = Pmode;
+ enum rtx_code extend = UNKNOWN;
+ rtx addis_reg = ((ptr_mode == target_mode)
+ ? target
+ : simplify_subreg (ptr_mode, target, target_mode, 0));
+
+ if (GET_CODE (orig_mem) == ZERO_EXTEND
+ || (TARGET_P8_FUSION_SIGN && GET_CODE (orig_mem) == SIGN_EXTEND))
+ {
+ extend = GET_CODE (orig_mem);
+ orig_mem = XEXP (orig_mem, 0);
+ target_mode = GET_MODE (orig_mem);
+ }
+
+ gcc_assert (MEM_P (orig_mem));
+
+ orig_addr = XEXP (orig_mem, 0);
+ plus_or_lo_sum = GET_CODE (orig_addr);
+ gcc_assert (plus_or_lo_sum == PLUS || plus_or_lo_sum == LO_SUM);
+
+ offset = XEXP (orig_addr, 1);
+ new_addr = gen_rtx_fmt_ee (plus_or_lo_sum, ptr_mode, addis_reg, offset);
+ new_mem = change_address (orig_mem, target_mode, new_addr);
+
+ if (extend != UNKNOWN)
+ new_mem = gen_rtx_fmt_e (ZERO_EXTEND, extend_mode, new_mem);
+
+ emit_insn (gen_rtx_SET (VOIDmode, addis_reg, addis_value));
+ emit_insn (gen_rtx_SET (VOIDmode, target, new_mem));
+
+ if (extend == SIGN_EXTEND)
+ {
+ int sub_off = ((BYTES_BIG_ENDIAN)
+ ? GET_MODE_SIZE (extend_mode) - GET_MODE_SIZE (target_mode)
+ : 0);
+ rtx sign_reg
+ = simplify_subreg (target_mode, target, extend_mode, sub_off);
+
+ emit_insn (gen_rtx_SET (VOIDmode, target,
+ gen_rtx_SIGN_EXTEND (extend_mode, sign_reg)));
+ }
+
+ return;
+}
+
+/* Return a string to fuse an addis instruction with a gpr load to the same
+ register that we loaded up the addis instruction. The code is complicated,
+ so we call output_asm_insn directly, and just return "".
+
+ The operands are:
+ operands[0] register set with addis (must be same reg as target).
+ operands[1] value set via addis
+ operands[2] target register being loaded
+ operands[3] D-form memory reference using operands[0]. */
+
+const char *
+emit_fusion_gpr_load (rtx *operands)
+{
+ rtx addis_reg = operands[0];
+ rtx addis_value = operands[1];
+ rtx target = operands[2];
+ rtx mem = operands[3];
+ rtx fuse_ops[10];
+ rtx addr;
+ rtx load_offset;
+ const char *addis_str = NULL;
+ const char *load_str = NULL;
+ const char *extend_insn = NULL;
+ const char *mode_name = NULL;
+ char insn_template[80];
+ enum machine_mode mode;
+ const char *comment_str = ASM_COMMENT_START;
+ bool sign_p = false;
+
+ gcc_assert (REG_P (addis_reg) && REG_P (target));
+ gcc_assert (REGNO (addis_reg) == REGNO (target));
+
+ if (*comment_str == ' ')
+ comment_str++;
+
+ /* Allow sign/zero extension. */
+ if (GET_CODE (mem) == ZERO_EXTEND)
+ mem = XEXP (mem, 0);
+
+ else if (GET_CODE (mem) == SIGN_EXTEND && TARGET_P8_FUSION_SIGN)
+ {
+ sign_p = true;
+ mem = XEXP (mem, 0);
+ }
+
+ gcc_assert (MEM_P (mem));
+ addr = XEXP (mem, 0);
+ if (GET_CODE (addr) != PLUS && GET_CODE (addr) != LO_SUM)
+ gcc_unreachable ();
+
+ load_offset = XEXP (addr, 1);
+
+ /* Now emit the load instruction to the same register. */
+ mode = GET_MODE (mem);
+ switch (mode)
+ {
+ case QImode:
+ mode_name = "char";
+ load_str = "lbz";
+ extend_insn = "extsb %0,%0";
+ break;
+
+ case HImode:
+ mode_name = "short";
+ load_str = "lhz";
+ extend_insn = "extsh %0,%0";
+ break;
+
+ case SImode:
+ mode_name = "int";
+ load_str = "lwz";
+ extend_insn = "extsw %0,%0";
+ break;
+
+ case DImode:
+ if (TARGET_POWERPC64)
+ {
+ mode_name = "long";
+ load_str = "ld";
+ }
+ else
+ gcc_unreachable ();
+ break;
+
+ default:
+ gcc_unreachable ();
+ }
+
+ /* Emit the addis instruction. */
+ fuse_ops[0] = target;
+ if (satisfies_constraint_L (addis_value))
+ {
+ fuse_ops[1] = addis_value;
+ addis_str = "lis %0,%v1";
+ }
+
+ else if (GET_CODE (addis_value) == PLUS)
+ {
+ rtx op0 = XEXP (addis_value, 0);
+ rtx op1 = XEXP (addis_value, 1);
+
+ if (REG_P (op0) && CONST_INT_P (op1)
+ && satisfies_constraint_L (op1))
+ {
+ fuse_ops[1] = op0;
+ fuse_ops[2] = op1;
+ addis_str = "addis %0,%1,%v2";
+ }
+ }
+
+ else if (GET_CODE (addis_value) == HIGH)
+ {
+ rtx value = XEXP (addis_value, 0);
+ if (GET_CODE (value) == UNSPEC && XINT (value, 1) == UNSPEC_TOCREL)
+ {
+ fuse_ops[1] = XVECEXP (value, 0, 0); /* symbol ref. */
+ fuse_ops[2] = XVECEXP (value, 0, 1); /* TOC register. */
+ if (TARGET_ELF)
+ addis_str = "addis %0,%2,%1@toc@ha";
+
+ else if (TARGET_XCOFF)
+ addis_str = "addis %0,%1@u(%2)";
+
+ else
+ gcc_unreachable ();
+ }
+
+ else if (GET_CODE (value) == PLUS)
+ {
+ rtx op0 = XEXP (value, 0);
+ rtx op1 = XEXP (value, 1);
+
+ if (GET_CODE (op0) == UNSPEC
+ && XINT (op0, 1) == UNSPEC_TOCREL
+ && CONST_INT_P (op1))
+ {
+ fuse_ops[1] = XVECEXP (op0, 0, 0); /* symbol ref. */
+ fuse_ops[2] = XVECEXP (op0, 0, 1); /* TOC register. */
+ fuse_ops[3] = op1;
+ if (TARGET_ELF)
+ addis_str = "addis %0,%2,%1+%3@toc@ha";
+
+ else if (TARGET_XCOFF)
+ addis_str = "addis %0,%1+%3@u(%2)";
+
+ else
+ gcc_unreachable ();
+ }
+ }
+
+ else if (satisfies_constraint_L (value))
+ {
+ fuse_ops[1] = value;
+ addis_str = "lis %0,%v1";
+ }
+
+ else if (TARGET_ELF && !TARGET_POWERPC64 && CONSTANT_P (value))
+ {
+ fuse_ops[1] = value;
+ addis_str = "lis %0,%1@ha";
+ }
+ }
+
+ if (!addis_str)
+ fatal_insn ("Could not generate addis value for fusion", addis_value);
+
+ sprintf (insn_template, "%s\t\t%s gpr load fusion, type %s", addis_str,
+ comment_str, mode_name);
+ output_asm_insn (insn_template, fuse_ops);
+
+ /* Emit the D-form load instruction. */
+ if (CONST_INT_P (load_offset) && satisfies_constraint_I (load_offset))
+ {
+ sprintf (insn_template, "%s %%0,%%1(%%0)", load_str);
+ fuse_ops[1] = load_offset;
+ output_asm_insn (insn_template, fuse_ops);
+ }
+
+ else if (GET_CODE (load_offset) == UNSPEC
+ && XINT (load_offset, 1) == UNSPEC_TOCREL)
+ {
+ if (TARGET_ELF)
+ sprintf (insn_template, "%s %%0,%%1@toc@l(%%0)", load_str);
+
+ else if (TARGET_XCOFF)
+ sprintf (insn_template, "%s %%0,%%1@l(%%0)", load_str);
+
+ else
+ gcc_unreachable ();
+
+ fuse_ops[1] = XVECEXP (load_offset, 0, 0);
+ output_asm_insn (insn_template, fuse_ops);
+ }
+
+ else if (GET_CODE (load_offset) == PLUS
+ && GET_CODE (XEXP (load_offset, 0)) == UNSPEC
+ && XINT (XEXP (load_offset, 0), 1) == UNSPEC_TOCREL
+ && CONST_INT_P (XEXP (load_offset, 1)))
+ {
+ rtx tocrel_unspec = XEXP (load_offset, 0);
+ if (TARGET_ELF)
+ sprintf (insn_template, "%s %%0,%%1+%%2@toc@l(%%0)", load_str);
+
+ else if (TARGET_XCOFF)
+ sprintf (insn_template, "%s %%0,%%1+%%2@l(%%0)", load_str);
+
+ else
+ gcc_unreachable ();
+
+ fuse_ops[1] = XVECEXP (tocrel_unspec, 0, 0);
+ fuse_ops[2] = XEXP (load_offset, 1);
+ output_asm_insn (insn_template, fuse_ops);
+ }
+
+ else if (TARGET_ELF && !TARGET_POWERPC64 && CONSTANT_P (load_offset))
+ {
+ sprintf (insn_template, "%s %%0,%%1@l(%%0)", load_str);
+
+ fuse_ops[1] = load_offset;
+ output_asm_insn (insn_template, fuse_ops);
+ }
+
+ else
+ fatal_insn ("Unable to generate load offset for fusion", load_offset);
+
+ /* Handle sign extension. The peephole2 pass generates this as a separate
+ insn, but we handle it just in case it got reattached. */
+ if (sign_p)
+ {
+ gcc_assert (extend_insn != NULL);
+ output_asm_insn (extend_insn, fuse_ops);
+ }
+
+ return "";
+}
+
+
struct gcc_target targetm = TARGET_INITIALIZER;
#include "gt-rs6000.h"
diff --git a/gcc-4.8/gcc/config/rs6000/rs6000.h b/gcc-4.8/gcc/config/rs6000/rs6000.h
index 8a3608410..1dc71f6db 100644
--- a/gcc-4.8/gcc/config/rs6000/rs6000.h
+++ b/gcc-4.8/gcc/config/rs6000/rs6000.h
@@ -92,7 +92,7 @@
#ifdef HAVE_AS_POWER8
#define ASM_CPU_POWER8_SPEC "-mpower8"
#else
-#define ASM_CPU_POWER8_SPEC "-mpower4 -maltivec"
+#define ASM_CPU_POWER8_SPEC ASM_CPU_POWER7_SPEC
#endif
#ifdef HAVE_AS_DCI
@@ -164,6 +164,7 @@
%{mcpu=e6500: -me6500} \
%{maltivec: -maltivec} \
%{mvsx: -mvsx %{!maltivec: -maltivec} %{!mcpu*: %(asm_cpu_power7)}} \
+%{mpower8-vector|mcrypto|mdirect-move|mhtm: %{!mcpu*: %(asm_cpu_power8)}} \
-many"
#define CPP_DEFAULT_SPEC ""
@@ -277,6 +278,21 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
#define TARGET_POPCNTD 0
#endif
+/* Define the ISA 2.07 flags as 0 if the target assembler does not support the
+ waitasecond instruction. Allow -mpower8-fusion, since it does not add new
+ instructions. */
+
+#ifndef HAVE_AS_POWER8
+#undef TARGET_DIRECT_MOVE
+#undef TARGET_CRYPTO
+#undef TARGET_HTM
+#undef TARGET_P8_VECTOR
+#define TARGET_DIRECT_MOVE 0
+#define TARGET_CRYPTO 0
+#define TARGET_HTM 0
+#define TARGET_P8_VECTOR 0
+#endif
+
/* Define TARGET_LWSYNC_INSTRUCTION if the assembler knows about lwsync. If
not, generate the lwsync code as an integer constant. */
#ifdef HAVE_AS_LWSYNC
@@ -386,6 +402,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
#define TARGET_DEBUG_TARGET (rs6000_debug & MASK_DEBUG_TARGET)
#define TARGET_DEBUG_BUILTIN (rs6000_debug & MASK_DEBUG_BUILTIN)
+/* Describe the vector unit used for arithmetic operations. */
extern enum rs6000_vector rs6000_vector_unit[];
#define VECTOR_UNIT_NONE_P(MODE) \
@@ -394,12 +411,25 @@ extern enum rs6000_vector rs6000_vector_unit[];
#define VECTOR_UNIT_VSX_P(MODE) \
(rs6000_vector_unit[(MODE)] == VECTOR_VSX)
+#define VECTOR_UNIT_P8_VECTOR_P(MODE) \
+ (rs6000_vector_unit[(MODE)] == VECTOR_P8_VECTOR)
+
#define VECTOR_UNIT_ALTIVEC_P(MODE) \
(rs6000_vector_unit[(MODE)] == VECTOR_ALTIVEC)
+#define VECTOR_UNIT_VSX_OR_P8_VECTOR_P(MODE) \
+ (IN_RANGE ((int)rs6000_vector_unit[(MODE)], \
+ (int)VECTOR_VSX, \
+ (int)VECTOR_P8_VECTOR))
+
+/* VECTOR_UNIT_ALTIVEC_OR_VSX_P is used in places where we are using either
+ altivec (VMX) or VSX vector instructions. P8 vector support is upwards
+ compatible, so allow it as well, rather than changing all of the uses of the
+ macro. */
#define VECTOR_UNIT_ALTIVEC_OR_VSX_P(MODE) \
- (rs6000_vector_unit[(MODE)] == VECTOR_ALTIVEC \
- || rs6000_vector_unit[(MODE)] == VECTOR_VSX)
+ (IN_RANGE ((int)rs6000_vector_unit[(MODE)], \
+ (int)VECTOR_ALTIVEC, \
+ (int)VECTOR_P8_VECTOR))
/* Describe whether to use VSX loads or Altivec loads. For now, just use the
same unit as the vector unit we are using, but we may want to migrate to
@@ -412,12 +442,21 @@ extern enum rs6000_vector rs6000_vector_mem[];
#define VECTOR_MEM_VSX_P(MODE) \
(rs6000_vector_mem[(MODE)] == VECTOR_VSX)
+#define VECTOR_MEM_P8_VECTOR_P(MODE) \
+ (rs6000_vector_mem[(MODE)] == VECTOR_VSX)
+
#define VECTOR_MEM_ALTIVEC_P(MODE) \
(rs6000_vector_mem[(MODE)] == VECTOR_ALTIVEC)
+#define VECTOR_MEM_VSX_OR_P8_VECTOR_P(MODE) \
+ (IN_RANGE ((int)rs6000_vector_mem[(MODE)], \
+ (int)VECTOR_VSX, \
+ (int)VECTOR_P8_VECTOR))
+
#define VECTOR_MEM_ALTIVEC_OR_VSX_P(MODE) \
- (rs6000_vector_mem[(MODE)] == VECTOR_ALTIVEC \
- || rs6000_vector_mem[(MODE)] == VECTOR_VSX)
+ (IN_RANGE ((int)rs6000_vector_mem[(MODE)], \
+ (int)VECTOR_ALTIVEC, \
+ (int)VECTOR_P8_VECTOR))
/* Return the alignment of a given vector type, which is set based on the
vector unit use. VSX for instance can load 32 or 64 bit aligned words
@@ -429,6 +468,15 @@ extern int rs6000_vector_align[];
? rs6000_vector_align[(MODE)] \
: (int)GET_MODE_BITSIZE ((MODE)))
+/* Determine the element order to use for vector instructions. By
+ default we use big-endian element order when targeting big-endian,
+ and little-endian element order when targeting little-endian. For
+ programs being ported from BE Power to LE Power, it can sometimes
+ be useful to use big-endian element order when targeting little-endian.
+ This is set via -maltivec=be, for example. */
+#define VECTOR_ELT_ORDER_BIG \
+ (BYTES_BIG_ENDIAN || (rs6000_altivec_element_order == 2))
+
/* Alignment options for fields in structures for sub-targets following
AIX-like ABI.
ALIGN_POWER word-aligns FP doubles (default AIX ABI).
@@ -479,22 +527,45 @@ extern int rs6000_vector_align[];
#define TARGET_FCTIDUZ TARGET_POPCNTD
#define TARGET_FCTIWUZ TARGET_POPCNTD
+#define TARGET_XSCVDPSPN (TARGET_DIRECT_MOVE || TARGET_P8_VECTOR)
+#define TARGET_XSCVSPDPN (TARGET_DIRECT_MOVE || TARGET_P8_VECTOR)
+#define TARGET_VADDUQM (TARGET_P8_VECTOR && TARGET_POWERPC64)
+
+/* Byte/char syncs were added as phased in for ISA 2.06B, but are not present
+ in power7, so conditionalize them on p8 features. TImode syncs need quad
+ memory support. */
+#define TARGET_SYNC_HI_QI (TARGET_QUAD_MEMORY \
+ || TARGET_QUAD_MEMORY_ATOMIC \
+ || TARGET_DIRECT_MOVE)
+
+#define TARGET_SYNC_TI TARGET_QUAD_MEMORY_ATOMIC
+
+/* Power7 has both 32-bit load and store integer for the FPRs, so we don't need
+ to allocate the SDmode stack slot to get the value into the proper location
+ in the register. */
+#define TARGET_NO_SDMODE_STACK (TARGET_LFIWZX && TARGET_STFIWX && TARGET_DFP)
+
/* In switching from using target_flags to using rs6000_isa_flags, the options
machinery creates OPTION_MASK_<xxx> instead of MASK_<xxx>. For now map
OPTION_MASK_<xxx> back into MASK_<xxx>. */
#define MASK_ALTIVEC OPTION_MASK_ALTIVEC
#define MASK_CMPB OPTION_MASK_CMPB
+#define MASK_CRYPTO OPTION_MASK_CRYPTO
#define MASK_DFP OPTION_MASK_DFP
+#define MASK_DIRECT_MOVE OPTION_MASK_DIRECT_MOVE
#define MASK_DLMZB OPTION_MASK_DLMZB
#define MASK_EABI OPTION_MASK_EABI
#define MASK_FPRND OPTION_MASK_FPRND
+#define MASK_P8_FUSION OPTION_MASK_P8_FUSION
#define MASK_HARD_FLOAT OPTION_MASK_HARD_FLOAT
+#define MASK_HTM OPTION_MASK_HTM
#define MASK_ISEL OPTION_MASK_ISEL
#define MASK_MFCRF OPTION_MASK_MFCRF
#define MASK_MFPGPR OPTION_MASK_MFPGPR
#define MASK_MULHW OPTION_MASK_MULHW
#define MASK_MULTIPLE OPTION_MASK_MULTIPLE
#define MASK_NO_UPDATE OPTION_MASK_NO_UPDATE
+#define MASK_P8_VECTOR OPTION_MASK_P8_VECTOR
#define MASK_POPCNTB OPTION_MASK_POPCNTB
#define MASK_POPCNTD OPTION_MASK_POPCNTD
#define MASK_PPC_GFXOPT OPTION_MASK_PPC_GFXOPT
@@ -505,6 +576,7 @@ extern int rs6000_vector_align[];
#define MASK_STRING OPTION_MASK_STRING
#define MASK_UPDATE OPTION_MASK_UPDATE
#define MASK_VSX OPTION_MASK_VSX
+#define MASK_VSX_TIMODE OPTION_MASK_VSX_TIMODE
#ifndef IN_LIBGCC2
#define MASK_POWERPC64 OPTION_MASK_POWERPC64
@@ -551,13 +623,33 @@ extern int rs6000_vector_align[];
|| TARGET_CMPB /* ISA 2.05 */ \
|| TARGET_POPCNTD /* ISA 2.06 */ \
|| TARGET_ALTIVEC \
- || TARGET_VSX)))
+ || TARGET_VSX \
+ || TARGET_HARD_FLOAT)))
/* E500 cores only support plain "sync", not lwsync. */
#define TARGET_NO_LWSYNC (rs6000_cpu == PROCESSOR_PPC8540 \
|| rs6000_cpu == PROCESSOR_PPC8548)
+/* Whether SF/DF operations are supported on the E500. */
+#define TARGET_SF_SPE (TARGET_HARD_FLOAT && TARGET_SINGLE_FLOAT \
+ && !TARGET_FPRS)
+
+#define TARGET_DF_SPE (TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT \
+ && !TARGET_FPRS && TARGET_E500_DOUBLE)
+
+/* Whether SF/DF operations are supported by by the normal floating point unit
+ (or the vector/scalar unit). */
+#define TARGET_SF_FPR (TARGET_HARD_FLOAT && TARGET_FPRS \
+ && TARGET_SINGLE_FLOAT)
+
+#define TARGET_DF_FPR (TARGET_HARD_FLOAT && TARGET_FPRS \
+ && TARGET_DOUBLE_FLOAT)
+
+/* Whether SF/DF operations are supported by any hardware. */
+#define TARGET_SF_INSN (TARGET_SF_FPR || TARGET_SF_SPE)
+#define TARGET_DF_INSN (TARGET_DF_FPR || TARGET_DF_SPE)
+
/* Which machine supports the various reciprocal estimate instructions. */
#define TARGET_FRES (TARGET_HARD_FLOAT && TARGET_PPC_GFXOPT \
&& TARGET_FPRS && TARGET_SINGLE_FLOAT)
@@ -595,9 +687,6 @@ extern unsigned char rs6000_recip_bits[];
#define RS6000_RECIP_AUTO_RSQRTE_P(MODE) \
(rs6000_recip_bits[(int)(MODE)] & RS6000_RECIP_MASK_AUTO_RSQRTE)
-#define RS6000_RECIP_HIGH_PRECISION_P(MODE) \
- ((MODE) == SFmode || (MODE) == V4SFmode || TARGET_RECIP_PRECISION)
-
/* The default CPU for TARGET_OPTION_OVERRIDE. */
#define OPTION_TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT
@@ -760,12 +849,6 @@ extern unsigned rs6000_pointer_size;
/* No data type wants to be aligned rounder than this. */
#define BIGGEST_ALIGNMENT 128
-/* A C expression to compute the alignment for a variables in the
- local store. TYPE is the data type, and ALIGN is the alignment
- that the object would ordinarily have. */
-#define LOCAL_ALIGNMENT(TYPE, ALIGN) \
- DATA_ALIGNMENT (TYPE, ALIGN)
-
/* Alignment of field after `int : 0' in a structure. */
#define EMPTY_FIELD_BOUNDARY 32
@@ -775,8 +858,15 @@ extern unsigned rs6000_pointer_size;
/* A bit-field declared as `int' forces `int' alignment for the struct. */
#define PCC_BITFIELD_TYPE_MATTERS 1
-/* Make strings word-aligned so strcpy from constants will be faster.
- Make vector constants quadword aligned. */
+enum data_align { align_abi, align_opt, align_both };
+
+/* A C expression to compute the alignment for a variables in the
+ local store. TYPE is the data type, and ALIGN is the alignment
+ that the object would ordinarily have. */
+#define LOCAL_ALIGNMENT(TYPE, ALIGN) \
+ rs6000_data_alignment (TYPE, ALIGN, align_both)
+
+/* Make strings word-aligned so strcpy from constants will be faster. */
#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
(TREE_CODE (EXP) == STRING_CST \
&& (STRICT_ALIGNMENT || !optimize_size) \
@@ -784,21 +874,14 @@ extern unsigned rs6000_pointer_size;
? BITS_PER_WORD \
: (ALIGN))
-/* Make arrays of chars word-aligned for the same reasons.
- Align vectors to 128 bits. Align SPE vectors and E500 v2 doubles to
- 64 bits. */
+/* Make arrays of chars word-aligned for the same reasons. */
#define DATA_ALIGNMENT(TYPE, ALIGN) \
- (TREE_CODE (TYPE) == VECTOR_TYPE \
- ? (((TARGET_SPE && SPE_VECTOR_MODE (TYPE_MODE (TYPE))) \
- || (TARGET_PAIRED_FLOAT && PAIRED_VECTOR_MODE (TYPE_MODE (TYPE)))) \
- ? 64 : 128) \
- : ((TARGET_E500_DOUBLE \
- && TREE_CODE (TYPE) == REAL_TYPE \
- && TYPE_MODE (TYPE) == DFmode) \
- ? 64 \
- : (TREE_CODE (TYPE) == ARRAY_TYPE \
- && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
- && (ALIGN) < BITS_PER_WORD) ? BITS_PER_WORD : (ALIGN)))
+ rs6000_data_alignment (TYPE, ALIGN, align_opt)
+
+/* Align vectors to 128 bits. Align SPE vectors and E500 v2 doubles to
+ 64 bits. */
+#define DATA_ABI_ALIGNMENT(TYPE, ALIGN) \
+ rs6000_data_alignment (TYPE, ALIGN, align_abi)
/* Nonzero if move instructions will actually fail to work
when given unaligned data. */
@@ -842,15 +925,17 @@ extern unsigned rs6000_pointer_size;
in inline functions.
Another pseudo (not included in DWARF_FRAME_REGISTERS) is soft frame
- pointer, which is eventually eliminated in favor of SP or FP. */
+ pointer, which is eventually eliminated in favor of SP or FP.
-#define FIRST_PSEUDO_REGISTER 114
+ The 3 HTM registers aren't also included in DWARF_FRAME_REGISTERS. */
+
+#define FIRST_PSEUDO_REGISTER 117
/* This must be included for pre gcc 3.0 glibc compatibility. */
#define PRE_GCC3_DWARF_FRAME_REGISTERS 77
/* Add 32 dwarf columns for synthetic SPE registers. */
-#define DWARF_FRAME_REGISTERS ((FIRST_PSEUDO_REGISTER - 1) + 32)
+#define DWARF_FRAME_REGISTERS ((FIRST_PSEUDO_REGISTER - 4) + 32)
/* The SPE has an additional 32 synthetic registers, with DWARF debug
info numbering for these registers starting at 1200. While eh_frame
@@ -866,7 +951,7 @@ extern unsigned rs6000_pointer_size;
We must map them here to avoid huge unwinder tables mostly consisting
of unused space. */
#define DWARF_REG_TO_UNWIND_COLUMN(r) \
- ((r) > 1200 ? ((r) - 1200 + FIRST_PSEUDO_REGISTER - 1) : (r))
+ ((r) > 1200 ? ((r) - 1200 + (DWARF_FRAME_REGISTERS - 32)) : (r))
/* Use standard DWARF numbering for DWARF debugging information. */
#define DBX_REGISTER_NUMBER(REGNO) rs6000_dbx_register_number (REGNO)
@@ -906,7 +991,7 @@ extern unsigned rs6000_pointer_size;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
1, 1 \
- , 1, 1, 1 \
+ , 1, 1, 1, 1, 1, 1 \
}
/* 1 for registers not available across function calls.
@@ -926,7 +1011,7 @@ extern unsigned rs6000_pointer_size;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
1, 1 \
- , 1, 1, 1 \
+ , 1, 1, 1, 1, 1, 1 \
}
/* Like `CALL_USED_REGISTERS' except this macro doesn't require that
@@ -945,7 +1030,7 @@ extern unsigned rs6000_pointer_size;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0 \
- , 0, 0, 0 \
+ , 0, 0, 0, 0, 0, 0 \
}
#define TOTAL_ALTIVEC_REGS (LAST_ALTIVEC_REGNO - FIRST_ALTIVEC_REGNO + 1)
@@ -984,6 +1069,9 @@ extern unsigned rs6000_pointer_size;
vrsave, vscr (fixed)
spe_acc, spefscr (fixed)
sfp (fixed)
+ tfhar (fixed)
+ tfiar (fixed)
+ texasr (fixed)
*/
#if FIXED_R2 == 1
@@ -1004,7 +1092,9 @@ extern unsigned rs6000_pointer_size;
#define REG_ALLOC_ORDER \
{32, \
- 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, \
+ /* move fr13 (ie 45) later, so if we need TFmode, it does */ \
+ /* not use fr14 which is a saved register. */ \
+ 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 45, \
33, \
63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, \
50, 49, 48, 47, 46, \
@@ -1023,7 +1113,7 @@ extern unsigned rs6000_pointer_size;
96, 95, 94, 93, 92, 91, \
108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, \
109, 110, \
- 111, 112, 113 \
+ 111, 112, 113, 114, 115, 116 \
}
/* True if register is floating-point. */
@@ -1064,8 +1154,11 @@ extern unsigned rs6000_pointer_size;
#define VINT_REGNO_P(N) ALTIVEC_REGNO_P (N)
/* Alternate name for any vector register supporting logical operations, no
- matter which instruction set(s) are available. */
-#define VLOGICAL_REGNO_P(N) VFLOAT_REGNO_P (N)
+ matter which instruction set(s) are available. Allow GPRs as well as the
+ vector registers. */
+#define VLOGICAL_REGNO_P(N) \
+ (INT_REGNO_P (N) || ALTIVEC_REGNO_P (N) \
+ || (TARGET_VSX && FP_REGNO_P (N))) \
/* Return number of consecutive hard regs needed starting at reg REGNO
to hold something of mode MODE. */
@@ -1106,7 +1199,7 @@ extern unsigned rs6000_pointer_size;
#define ALTIVEC_OR_VSX_VECTOR_MODE(MODE) \
(ALTIVEC_VECTOR_MODE (MODE) || VSX_VECTOR_MODE (MODE) \
- || (MODE) == V2DImode)
+ || (MODE) == V2DImode || (MODE) == V1TImode)
#define SPE_VECTOR_MODE(MODE) \
((MODE) == V4HImode \
@@ -1125,28 +1218,32 @@ extern unsigned rs6000_pointer_size;
/* Value is 1 if it is a good idea to tie two pseudo registers
when one has mode MODE1 and one has mode MODE2.
If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
- for any hard reg, then this must be 0 for correct output. */
+ for any hard reg, then this must be 0 for correct output.
+
+ PTImode cannot tie with other modes because PTImode is restricted to even
+ GPR registers, and TImode can go in any GPR as well as VSX registers (PR
+ 57744). */
#define MODES_TIEABLE_P(MODE1, MODE2) \
- (SCALAR_FLOAT_MODE_P (MODE1) \
+ ((MODE1) == PTImode \
+ ? (MODE2) == PTImode \
+ : (MODE2) == PTImode \
+ ? 0 \
+ : SCALAR_FLOAT_MODE_P (MODE1) \
? SCALAR_FLOAT_MODE_P (MODE2) \
: SCALAR_FLOAT_MODE_P (MODE2) \
- ? SCALAR_FLOAT_MODE_P (MODE1) \
+ ? 0 \
: GET_MODE_CLASS (MODE1) == MODE_CC \
? GET_MODE_CLASS (MODE2) == MODE_CC \
: GET_MODE_CLASS (MODE2) == MODE_CC \
- ? GET_MODE_CLASS (MODE1) == MODE_CC \
+ ? 0 \
: SPE_VECTOR_MODE (MODE1) \
? SPE_VECTOR_MODE (MODE2) \
: SPE_VECTOR_MODE (MODE2) \
- ? SPE_VECTOR_MODE (MODE1) \
- : ALTIVEC_VECTOR_MODE (MODE1) \
- ? ALTIVEC_VECTOR_MODE (MODE2) \
- : ALTIVEC_VECTOR_MODE (MODE2) \
- ? ALTIVEC_VECTOR_MODE (MODE1) \
+ ? 0 \
: ALTIVEC_OR_VSX_VECTOR_MODE (MODE1) \
? ALTIVEC_OR_VSX_VECTOR_MODE (MODE2) \
: ALTIVEC_OR_VSX_VECTOR_MODE (MODE2) \
- ? ALTIVEC_OR_VSX_VECTOR_MODE (MODE1) \
+ ? 0 \
: 1)
/* Post-reload, we can't use any new AltiVec registers, as we already
@@ -1240,6 +1337,7 @@ enum reg_class
VSCR_REGS,
SPE_ACC_REGS,
SPEFSCR_REGS,
+ SPR_REGS,
NON_SPECIAL_REGS,
LINK_REGS,
CTR_REGS,
@@ -1270,6 +1368,7 @@ enum reg_class
"VSCR_REGS", \
"SPE_ACC_REGS", \
"SPEFSCR_REGS", \
+ "SPR_REGS", \
"NON_SPECIAL_REGS", \
"LINK_REGS", \
"CTR_REGS", \
@@ -1299,6 +1398,7 @@ enum reg_class
{ 0x00000000, 0x00000000, 0x00000000, 0x00004000 }, /* VSCR_REGS */ \
{ 0x00000000, 0x00000000, 0x00000000, 0x00008000 }, /* SPE_ACC_REGS */ \
{ 0x00000000, 0x00000000, 0x00000000, 0x00010000 }, /* SPEFSCR_REGS */ \
+ { 0x00000000, 0x00000000, 0x00000000, 0x00040000 }, /* SPR_REGS */ \
{ 0xffffffff, 0xffffffff, 0x00000008, 0x00020000 }, /* NON_SPECIAL_REGS */ \
{ 0x00000000, 0x00000000, 0x00000002, 0x00000000 }, /* LINK_REGS */ \
{ 0x00000000, 0x00000000, 0x00000004, 0x00000000 }, /* CTR_REGS */ \
@@ -1309,7 +1409,7 @@ enum reg_class
{ 0x00000000, 0x00000000, 0x00000ff0, 0x00000000 }, /* CR_REGS */ \
{ 0xffffffff, 0x00000000, 0x00000ffe, 0x00020000 }, /* NON_FLOAT_REGS */ \
{ 0x00000000, 0x00000000, 0x00001000, 0x00000000 }, /* CA_REGS */ \
- { 0xffffffff, 0xffffffff, 0xfffffffe, 0x0003ffff } /* ALL_REGS */ \
+ { 0xffffffff, 0xffffffff, 0xfffffffe, 0x0007ffff } /* ALL_REGS */ \
}
/* The same information, inverted:
@@ -1337,7 +1437,18 @@ enum r6000_reg_class_enum {
RS6000_CONSTRAINT_wa, /* Any VSX register */
RS6000_CONSTRAINT_wd, /* VSX register for V2DF */
RS6000_CONSTRAINT_wf, /* VSX register for V4SF */
+ RS6000_CONSTRAINT_wg, /* FPR register for -mmfpgpr */
+ RS6000_CONSTRAINT_wl, /* FPR register for LFIWAX */
+ RS6000_CONSTRAINT_wm, /* VSX register for direct move */
+ RS6000_CONSTRAINT_wr, /* GPR register if 64-bit */
RS6000_CONSTRAINT_ws, /* VSX register for DF */
+ RS6000_CONSTRAINT_wt, /* VSX register for TImode */
+ RS6000_CONSTRAINT_wu, /* Altivec register for float load/stores. */
+ RS6000_CONSTRAINT_wv, /* Altivec register for double load/stores. */
+ RS6000_CONSTRAINT_ww, /* FP or VSX register for vsx float ops. */
+ RS6000_CONSTRAINT_wx, /* FPR register for STFIWX */
+ RS6000_CONSTRAINT_wy, /* VSX register for SF */
+ RS6000_CONSTRAINT_wz, /* FPR register for LFIWZX */
RS6000_CONSTRAINT_MAX
};
@@ -1425,21 +1536,14 @@ extern enum reg_class rs6000_constraints[RS6000_CONSTRAINT_MAX];
arguments. */
#define FRAME_GROWS_DOWNWARD (flag_stack_protect != 0 || flag_asan != 0)
-/* Size of the outgoing register save area */
-#define RS6000_REG_SAVE ((DEFAULT_ABI == ABI_AIX \
- || DEFAULT_ABI == ABI_DARWIN) \
- ? (TARGET_64BIT ? 64 : 32) \
- : 0)
-
/* Size of the fixed area on the stack */
#define RS6000_SAVE_AREA \
- (((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN) ? 24 : 8) \
+ ((DEFAULT_ABI == ABI_V4 ? 8 : DEFAULT_ABI == ABI_ELFv2 ? 16 : 24) \
<< (TARGET_64BIT ? 1 : 0))
-/* MEM representing address to save the TOC register */
-#define RS6000_SAVE_TOC gen_rtx_MEM (Pmode, \
- plus_constant (Pmode, stack_pointer_rtx, \
- (TARGET_32BIT ? 20 : 40)))
+/* Stack offset for toc save slot. */
+#define RS6000_TOC_SAVE_SLOT \
+ ((DEFAULT_ABI == ABI_ELFv2 ? 12 : 20) << (TARGET_64BIT ? 1 : 0))
/* Align an address */
#define RS6000_ALIGN(n,a) (((n) + (a) - 1) & ~((a) - 1))
@@ -1489,7 +1593,7 @@ extern enum reg_class rs6000_constraints[RS6000_CONSTRAINT_MAX];
/* Define this if stack space is still allocated for a parameter passed
in a register. The value is the number of bytes allocated to this
area. */
-#define REG_PARM_STACK_SPACE(FNDECL) RS6000_REG_SAVE
+#define REG_PARM_STACK_SPACE(FNDECL) rs6000_reg_parm_stack_space((FNDECL))
/* Define this if the above stack space is to be considered part of the
space allocated by the caller. */
@@ -1522,7 +1626,7 @@ extern enum reg_class rs6000_constraints[RS6000_CONSTRAINT_MAX];
NONLOCAL needs twice Pmode to maintain both backchain and SP. */
#define STACK_SAVEAREA_MODE(LEVEL) \
(LEVEL == SAVE_FUNCTION ? VOIDmode \
- : LEVEL == SAVE_NONLOCAL ? (TARGET_32BIT ? DImode : TImode) : Pmode)
+ : LEVEL == SAVE_NONLOCAL ? (TARGET_32BIT ? DImode : PTImode) : Pmode)
/* Minimum and maximum general purpose registers used to hold arguments. */
#define GP_ARG_MIN_REG 3
@@ -1533,9 +1637,8 @@ extern enum reg_class rs6000_constraints[RS6000_CONSTRAINT_MAX];
#define FP_ARG_MIN_REG 33
#define FP_ARG_AIX_MAX_REG 45
#define FP_ARG_V4_MAX_REG 40
-#define FP_ARG_MAX_REG ((DEFAULT_ABI == ABI_AIX \
- || DEFAULT_ABI == ABI_DARWIN) \
- ? FP_ARG_AIX_MAX_REG : FP_ARG_V4_MAX_REG)
+#define FP_ARG_MAX_REG (DEFAULT_ABI == ABI_V4 \
+ ? FP_ARG_V4_MAX_REG : FP_ARG_AIX_MAX_REG)
#define FP_ARG_NUM_REG (FP_ARG_MAX_REG - FP_ARG_MIN_REG + 1)
/* Minimum and maximum AltiVec registers used to hold arguments. */
@@ -1543,10 +1646,17 @@ extern enum reg_class rs6000_constraints[RS6000_CONSTRAINT_MAX];
#define ALTIVEC_ARG_MAX_REG (ALTIVEC_ARG_MIN_REG + 11)
#define ALTIVEC_ARG_NUM_REG (ALTIVEC_ARG_MAX_REG - ALTIVEC_ARG_MIN_REG + 1)
+/* Maximum number of registers per ELFv2 homogeneous aggregate argument. */
+#define AGGR_ARG_NUM_REG 8
+
/* Return registers */
#define GP_ARG_RETURN GP_ARG_MIN_REG
#define FP_ARG_RETURN FP_ARG_MIN_REG
#define ALTIVEC_ARG_RETURN (FIRST_ALTIVEC_REGNO + 2)
+#define FP_ARG_MAX_RETURN (DEFAULT_ABI != ABI_ELFv2 ? FP_ARG_RETURN \
+ : (FP_ARG_RETURN + AGGR_ARG_NUM_REG - 1))
+#define ALTIVEC_ARG_MAX_RETURN (DEFAULT_ABI != ABI_ELFv2 ? ALTIVEC_ARG_RETURN \
+ : (ALTIVEC_ARG_RETURN + AGGR_ARG_NUM_REG - 1))
/* Flags for the call/call_value rtl operations set up by function_arg */
#define CALL_NORMAL 0x00000000 /* no special processing */
@@ -1566,8 +1676,10 @@ extern enum reg_class rs6000_constraints[RS6000_CONSTRAINT_MAX];
On RS/6000, this is r3, fp1, and v2 (for AltiVec). */
#define FUNCTION_VALUE_REGNO_P(N) \
((N) == GP_ARG_RETURN \
- || ((N) == FP_ARG_RETURN && TARGET_HARD_FLOAT && TARGET_FPRS) \
- || ((N) == ALTIVEC_ARG_RETURN && TARGET_ALTIVEC && TARGET_ALTIVEC_ABI))
+ || ((N) >= FP_ARG_RETURN && (N) <= FP_ARG_MAX_RETURN \
+ && TARGET_HARD_FLOAT && TARGET_FPRS) \
+ || ((N) >= ALTIVEC_ARG_RETURN && (N) <= ALTIVEC_ARG_MAX_RETURN \
+ && TARGET_ALTIVEC && TARGET_ALTIVEC_ABI))
/* 1 if N is a possible register number for function argument passing.
On RS/6000, these are r3-r10 and fp1-fp13.
@@ -1692,10 +1804,7 @@ typedef struct rs6000_args
rs6000_stack_info in rs6000.c for more information on how the different
abi's store the return address. */
#define RETURN_ADDRESS_OFFSET \
- ((DEFAULT_ABI == ABI_AIX \
- || DEFAULT_ABI == ABI_DARWIN) ? (TARGET_32BIT ? 8 : 16) : \
- (DEFAULT_ABI == ABI_V4) ? 4 : \
- (internal_error ("RETURN_ADDRESS_OFFSET not supported"), 0))
+ ((DEFAULT_ABI == ABI_V4 ? 4 : 8) << (TARGET_64BIT ? 1 : 0))
/* The current return address is in link register (65). The return address
of anything farther back is accessed normally at an offset of 8 from the
@@ -2215,6 +2324,9 @@ extern char rs6000_reg_names[][8]; /* register names (0 vs. %r0). */
&rs6000_reg_names[111][0], /* spe_acc */ \
&rs6000_reg_names[112][0], /* spefscr */ \
&rs6000_reg_names[113][0], /* sfp */ \
+ &rs6000_reg_names[114][0], /* tfhar */ \
+ &rs6000_reg_names[115][0], /* tfiar */ \
+ &rs6000_reg_names[116][0], /* texasr */ \
}
/* Table of additional register names to use in user input. */
@@ -2268,7 +2380,9 @@ extern char rs6000_reg_names[][8]; /* register names (0 vs. %r0). */
{"vs48", 93}, {"vs49", 94}, {"vs50", 95}, {"vs51", 96}, \
{"vs52", 97}, {"vs53", 98}, {"vs54", 99}, {"vs55", 100}, \
{"vs56", 101},{"vs57", 102},{"vs58", 103},{"vs59", 104}, \
- {"vs60", 105},{"vs61", 106},{"vs62", 107},{"vs63", 108} }
+ {"vs60", 105},{"vs61", 106},{"vs62", 107},{"vs63", 108}, \
+ /* Transactional Memory Facility (HTM) Registers. */ \
+ {"tfhar", 114}, {"tfiar", 115}, {"texasr", 116} }
/* This is how to output an element of a case-vector that is relative. */
@@ -2357,7 +2471,12 @@ extern int frame_pointer_needed;
#define RS6000_BTC_ATTR_MASK 0x00000700 /* Mask of the attributes. */
/* Miscellaneous information. */
-#define RS6000_BTC_OVERLOADED 0x4000000 /* function is overloaded. */
+#define RS6000_BTC_SPR 0x01000000 /* function references SPRs. */
+#define RS6000_BTC_VOID 0x02000000 /* function has no return value. */
+#define RS6000_BTC_OVERLOADED 0x04000000 /* function is overloaded. */
+#define RS6000_BTC_32BIT 0x08000000 /* function references SPRs. */
+#define RS6000_BTC_64BIT 0x10000000 /* function references SPRs. */
+#define RS6000_BTC_MISC_MASK 0x1f000000 /* Mask of the misc info. */
/* Convenience macros to document the instruction type. */
#define RS6000_BTC_MEM RS6000_BTC_MISC /* load/store touches mem. */
@@ -2369,6 +2488,9 @@ extern int frame_pointer_needed;
#define RS6000_BTM_ALWAYS 0 /* Always enabled. */
#define RS6000_BTM_ALTIVEC MASK_ALTIVEC /* VMX/altivec vectors. */
#define RS6000_BTM_VSX MASK_VSX /* VSX (vector/scalar). */
+#define RS6000_BTM_P8_VECTOR MASK_P8_VECTOR /* ISA 2.07 vector. */
+#define RS6000_BTM_CRYPTO MASK_CRYPTO /* crypto funcs. */
+#define RS6000_BTM_HTM MASK_HTM /* hardware TM funcs. */
#define RS6000_BTM_SPE MASK_STRING /* E500 */
#define RS6000_BTM_PAIRED MASK_MULHW /* 750CL paired insns. */
#define RS6000_BTM_FRE MASK_POPCNTB /* FRE instruction. */
@@ -2377,15 +2499,22 @@ extern int frame_pointer_needed;
#define RS6000_BTM_FRSQRTES MASK_POPCNTB /* FRSQRTES instruction. */
#define RS6000_BTM_POPCNTD MASK_POPCNTD /* Target supports ISA 2.06. */
#define RS6000_BTM_CELL MASK_FPRND /* Target is cell powerpc. */
+#define RS6000_BTM_DFP MASK_DFP /* Decimal floating point. */
+#define RS6000_BTM_HARD_FLOAT MASK_SOFT_FLOAT /* Hardware floating point. */
#define RS6000_BTM_COMMON (RS6000_BTM_ALTIVEC \
| RS6000_BTM_VSX \
+ | RS6000_BTM_P8_VECTOR \
+ | RS6000_BTM_CRYPTO \
| RS6000_BTM_FRE \
| RS6000_BTM_FRES \
| RS6000_BTM_FRSQRTE \
| RS6000_BTM_FRSQRTES \
+ | RS6000_BTM_HTM \
| RS6000_BTM_POPCNTD \
- | RS6000_BTM_CELL)
+ | RS6000_BTM_CELL \
+ | RS6000_BTM_DFP \
+ | RS6000_BTM_HARD_FLOAT)
/* Define builtin enum index. */
@@ -2395,6 +2524,7 @@ extern int frame_pointer_needed;
#undef RS6000_BUILTIN_A
#undef RS6000_BUILTIN_D
#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
#undef RS6000_BUILTIN_P
#undef RS6000_BUILTIN_Q
#undef RS6000_BUILTIN_S
@@ -2406,6 +2536,7 @@ extern int frame_pointer_needed;
#define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
#define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
+#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
#define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
@@ -2424,6 +2555,7 @@ enum rs6000_builtins
#undef RS6000_BUILTIN_A
#undef RS6000_BUILTIN_D
#undef RS6000_BUILTIN_E
+#undef RS6000_BUILTIN_H
#undef RS6000_BUILTIN_P
#undef RS6000_BUILTIN_Q
#undef RS6000_BUILTIN_S
@@ -2437,6 +2569,7 @@ enum rs6000_builtin_type_index
RS6000_BTI_opaque_p_V2SI,
RS6000_BTI_opaque_V4SI,
RS6000_BTI_V16QI,
+ RS6000_BTI_V1TI,
RS6000_BTI_V2SI,
RS6000_BTI_V2SF,
RS6000_BTI_V2DI,
@@ -2446,6 +2579,7 @@ enum rs6000_builtin_type_index
RS6000_BTI_V4SF,
RS6000_BTI_V8HI,
RS6000_BTI_unsigned_V16QI,
+ RS6000_BTI_unsigned_V1TI,
RS6000_BTI_unsigned_V8HI,
RS6000_BTI_unsigned_V4SI,
RS6000_BTI_unsigned_V2DI,
@@ -2471,8 +2605,13 @@ enum rs6000_builtin_type_index
RS6000_BTI_UINTSI, /* unsigned_intSI_type_node */
RS6000_BTI_INTDI, /* intDI_type_node */
RS6000_BTI_UINTDI, /* unsigned_intDI_type_node */
+ RS6000_BTI_INTTI, /* intTI_type_node */
+ RS6000_BTI_UINTTI, /* unsigned_intTI_type_node */
RS6000_BTI_float, /* float_type_node */
RS6000_BTI_double, /* double_type_node */
+ RS6000_BTI_long_double, /* long_double_type_node */
+ RS6000_BTI_dfloat64, /* dfloat64_type_node */
+ RS6000_BTI_dfloat128, /* dfloat128_type_node */
RS6000_BTI_void, /* void_type_node */
RS6000_BTI_MAX
};
@@ -2483,6 +2622,7 @@ enum rs6000_builtin_type_index
#define opaque_p_V2SI_type_node (rs6000_builtin_types[RS6000_BTI_opaque_p_V2SI])
#define opaque_V4SI_type_node (rs6000_builtin_types[RS6000_BTI_opaque_V4SI])
#define V16QI_type_node (rs6000_builtin_types[RS6000_BTI_V16QI])
+#define V1TI_type_node (rs6000_builtin_types[RS6000_BTI_V1TI])
#define V2DI_type_node (rs6000_builtin_types[RS6000_BTI_V2DI])
#define V2DF_type_node (rs6000_builtin_types[RS6000_BTI_V2DF])
#define V2SI_type_node (rs6000_builtin_types[RS6000_BTI_V2SI])
@@ -2492,6 +2632,7 @@ enum rs6000_builtin_type_index
#define V4SF_type_node (rs6000_builtin_types[RS6000_BTI_V4SF])
#define V8HI_type_node (rs6000_builtin_types[RS6000_BTI_V8HI])
#define unsigned_V16QI_type_node (rs6000_builtin_types[RS6000_BTI_unsigned_V16QI])
+#define unsigned_V1TI_type_node (rs6000_builtin_types[RS6000_BTI_unsigned_V1TI])
#define unsigned_V8HI_type_node (rs6000_builtin_types[RS6000_BTI_unsigned_V8HI])
#define unsigned_V4SI_type_node (rs6000_builtin_types[RS6000_BTI_unsigned_V4SI])
#define unsigned_V2DI_type_node (rs6000_builtin_types[RS6000_BTI_unsigned_V2DI])
@@ -2518,8 +2659,13 @@ enum rs6000_builtin_type_index
#define uintSI_type_internal_node (rs6000_builtin_types[RS6000_BTI_UINTSI])
#define intDI_type_internal_node (rs6000_builtin_types[RS6000_BTI_INTDI])
#define uintDI_type_internal_node (rs6000_builtin_types[RS6000_BTI_UINTDI])
+#define intTI_type_internal_node (rs6000_builtin_types[RS6000_BTI_INTTI])
+#define uintTI_type_internal_node (rs6000_builtin_types[RS6000_BTI_UINTTI])
#define float_type_internal_node (rs6000_builtin_types[RS6000_BTI_float])
#define double_type_internal_node (rs6000_builtin_types[RS6000_BTI_double])
+#define long_double_type_internal_node (rs6000_builtin_types[RS6000_BTI_long_double])
+#define dfloat64_type_internal_node (rs6000_builtin_types[RS6000_BTI_dfloat64])
+#define dfloat128_type_internal_node (rs6000_builtin_types[RS6000_BTI_dfloat128])
#define void_type_internal_node (rs6000_builtin_types[RS6000_BTI_void])
extern GTY(()) tree rs6000_builtin_types[RS6000_BTI_MAX];
diff --git a/gcc-4.8/gcc/config/rs6000/rs6000.md b/gcc-4.8/gcc/config/rs6000/rs6000.md
index ade39ea5f..8f1fd769b 100644
--- a/gcc-4.8/gcc/config/rs6000/rs6000.md
+++ b/gcc-4.8/gcc/config/rs6000/rs6000.md
@@ -25,10 +25,14 @@
;;
(define_constants
- [(STACK_POINTER_REGNUM 1)
+ [(FIRST_GPR_REGNO 0)
+ (STACK_POINTER_REGNUM 1)
(TOC_REGNUM 2)
(STATIC_CHAIN_REGNUM 11)
(HARD_FRAME_POINTER_REGNUM 31)
+ (LAST_GPR_REGNO 31)
+ (FIRST_FPR_REGNO 32)
+ (LAST_FPR_REGNO 63)
(LR_REGNO 65)
(CTR_REGNO 66)
(ARG_POINTER_REGNUM 67)
@@ -49,18 +53,9 @@
(SPE_ACC_REGNO 111)
(SPEFSCR_REGNO 112)
(FRAME_POINTER_REGNUM 113)
-
- ; ABI defined stack offsets for storing the TOC pointer with AIX calls.
- (TOC_SAVE_OFFSET_32BIT 20)
- (TOC_SAVE_OFFSET_64BIT 40)
-
- ; Function TOC offset in the AIX function descriptor.
- (AIX_FUNC_DESC_TOC_32BIT 4)
- (AIX_FUNC_DESC_TOC_64BIT 8)
-
- ; Static chain offset in the AIX function descriptor.
- (AIX_FUNC_DESC_SC_32BIT 8)
- (AIX_FUNC_DESC_SC_64BIT 16)
+ (TFHAR_REGNO 114)
+ (TFIAR_REGNO 115)
+ (TEXASR_REGNO 116)
])
;;
@@ -123,6 +118,22 @@
UNSPEC_LFIWZX
UNSPEC_FCTIWUZ
UNSPEC_GRP_END_NOP
+ UNSPEC_P8V_FMRGOW
+ UNSPEC_P8V_MTVSRWZ
+ UNSPEC_P8V_RELOAD_FROM_GPR
+ UNSPEC_P8V_MTVSRD
+ UNSPEC_P8V_XXPERMDI
+ UNSPEC_P8V_RELOAD_FROM_VSX
+ UNSPEC_ADDG6S
+ UNSPEC_CDTBCD
+ UNSPEC_CBCDTD
+ UNSPEC_DIVE
+ UNSPEC_DIVEO
+ UNSPEC_DIVEU
+ UNSPEC_DIVEUO
+ UNSPEC_UNPACK_128BIT
+ UNSPEC_PACK_128BIT
+ UNSPEC_LSQ
])
;;
@@ -142,7 +153,7 @@
;; Define an insn type attribute. This is used in function unit delay
;; computations.
-(define_attr "type" "integer,two,three,load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,store,store_ux,store_u,fpload,fpload_ux,fpload_u,fpstore,fpstore_ux,fpstore_u,vecload,vecstore,imul,imul2,imul3,lmul,idiv,ldiv,insert_word,branch,cmp,fast_compare,compare,var_delayed_compare,delayed_compare,imul_compare,lmul_compare,fpcompare,cr_logical,delayed_cr,mfcr,mfcrf,mtcr,mfjmpr,mtjmpr,fp,fpsimple,dmul,sdiv,ddiv,ssqrt,dsqrt,jmpreg,brinc,vecsimple,veccomplex,vecdiv,veccmp,veccmpsimple,vecperm,vecfloat,vecfdiv,vecdouble,isync,sync,load_l,store_c,shift,trap,insert_dword,var_shift_rotate,cntlz,exts,mffgpr,mftgpr,isel,popcnt"
+(define_attr "type" "integer,two,three,load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,store,store_ux,store_u,fpload,fpload_ux,fpload_u,fpstore,fpstore_ux,fpstore_u,vecload,vecstore,imul,imul2,imul3,lmul,idiv,ldiv,insert_word,branch,cmp,fast_compare,compare,var_delayed_compare,delayed_compare,imul_compare,lmul_compare,fpcompare,cr_logical,delayed_cr,mfcr,mfcrf,mtcr,mfjmpr,mtjmpr,fp,fpsimple,dmul,sdiv,ddiv,ssqrt,dsqrt,jmpreg,brinc,vecsimple,veccomplex,vecdiv,veccmp,veccmpsimple,vecperm,vecfloat,vecfdiv,vecdouble,isync,sync,load_l,store_c,shift,trap,insert_dword,var_shift_rotate,cntlz,exts,mffgpr,mftgpr,isel,popcnt,crypto,htm"
(const_string "integer"))
;; Define floating point instruction sub-types for use with Xfpu.md
@@ -164,7 +175,7 @@
;; Processor type -- this attribute must exactly match the processor_type
;; enumeration in rs6000.h.
-(define_attr "cpu" "rs64a,mpccore,ppc403,ppc405,ppc440,ppc476,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,ppc8548,ppce300c2,ppce300c3,ppce500mc,ppce500mc64,ppce5500,ppce6500,power4,power5,power6,power7,cell,ppca2,titan"
+(define_attr "cpu" "rs64a,mpccore,ppc403,ppc405,ppc440,ppc476,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,ppc8548,ppce300c2,ppce300c3,ppce500mc,ppce500mc64,ppce5500,ppce6500,power4,power5,power6,power7,cell,ppca2,titan,power8"
(const (symbol_ref "rs6000_cpu_attr")))
@@ -197,6 +208,7 @@
(include "power5.md")
(include "power6.md")
(include "power7.md")
+(include "power8.md")
(include "cell.md")
(include "xfpu.md")
(include "a2.md")
@@ -215,7 +227,7 @@
(define_mode_iterator GPR [SI (DI "TARGET_POWERPC64")])
; Any supported integer mode.
-(define_mode_iterator INT [QI HI SI DI TI])
+(define_mode_iterator INT [QI HI SI DI TI PTI])
; Any supported integer mode that fits in one register.
(define_mode_iterator INT1 [QI HI SI (DI "TARGET_POWERPC64")])
@@ -223,6 +235,12 @@
; extend modes for DImode
(define_mode_iterator QHSI [QI HI SI])
+; QImode or HImode for small atomic ops
+(define_mode_iterator QHI [QI HI])
+
+; HImode or SImode for sign extended fusion ops
+(define_mode_iterator HSI [HI SI])
+
; SImode or DImode, even if DImode doesn't fit in GPRs.
(define_mode_iterator SDI [SI DI])
@@ -230,6 +248,10 @@
; (one with a '.') will compare; and the size used for arithmetic carries.
(define_mode_iterator P [(SI "TARGET_32BIT") (DI "TARGET_64BIT")])
+; Iterator to add PTImode along with TImode (TImode can go in VSX registers,
+; PTImode is GPR only)
+(define_mode_iterator TI2 [TI PTI])
+
; Any hardware-supported floating-point mode
(define_mode_iterator FP [
(SF "TARGET_HARD_FLOAT
@@ -253,6 +275,50 @@
(V2DF "VECTOR_UNIT_ALTIVEC_OR_VSX_P (V2DFmode)")
])
+; Floating point move iterators to combine binary and decimal moves
+(define_mode_iterator FMOVE32 [SF SD])
+(define_mode_iterator FMOVE64 [DF DD])
+(define_mode_iterator FMOVE64X [DI DF DD])
+(define_mode_iterator FMOVE128 [(TF "!TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128")
+ (TD "TARGET_HARD_FLOAT && TARGET_FPRS")])
+
+; Iterators for 128 bit types for direct move
+(define_mode_iterator FMOVE128_GPR [(TI "TARGET_VSX_TIMODE")
+ (V16QI "")
+ (V8HI "")
+ (V4SI "")
+ (V4SF "")
+ (V2DI "")
+ (V2DF "")
+ (V1TI "")])
+
+; Whether a floating point move is ok, don't allow SD without hardware FP
+(define_mode_attr fmove_ok [(SF "")
+ (DF "")
+ (SD "TARGET_HARD_FLOAT && TARGET_FPRS")
+ (DD "")])
+
+; Convert REAL_VALUE to the appropriate bits
+(define_mode_attr real_value_to_target [(SF "REAL_VALUE_TO_TARGET_SINGLE")
+ (DF "REAL_VALUE_TO_TARGET_DOUBLE")
+ (SD "REAL_VALUE_TO_TARGET_DECIMAL32")
+ (DD "REAL_VALUE_TO_TARGET_DECIMAL64")])
+
+; Definitions for load to 32-bit fpr register
+(define_mode_attr f32_lr [(SF "f") (SD "wz")])
+(define_mode_attr f32_lm [(SF "m") (SD "Z")])
+(define_mode_attr f32_li [(SF "lfs%U1%X1 %0,%1") (SD "lfiwzx %0,%y1")])
+(define_mode_attr f32_lv [(SF "lxsspx %x0,%y1") (SD "lxsiwzx %x0,%y1")])
+
+; Definitions for store from 32-bit fpr register
+(define_mode_attr f32_sr [(SF "f") (SD "wx")])
+(define_mode_attr f32_sm [(SF "m") (SD "Z")])
+(define_mode_attr f32_si [(SF "stfs%U0%X0 %1,%0") (SD "stfiwx %1,%y0")])
+(define_mode_attr f32_sv [(SF "stxsspx %x1,%y0") (SD "stxsiwzx %x1,%y0")])
+
+; Definitions for 32-bit fpr direct move
+(define_mode_attr f32_dm [(SF "wn") (SD "wm")])
+
; These modes do not fit in integer registers in 32-bit mode.
; but on e500v2, the gpr are 64 bit registers
(define_mode_iterator DIFD [DI (DF "!TARGET_E500_DOUBLE") DD])
@@ -263,6 +329,25 @@
; Iterator for just SF/DF
(define_mode_iterator SFDF [SF DF])
+; SF/DF suffix for traditional floating instructions
+(define_mode_attr Ftrad [(SF "s") (DF "")])
+
+; SF/DF suffix for VSX instructions
+(define_mode_attr Fvsx [(SF "sp") (DF "dp")])
+
+; SF/DF constraint for arithmetic on traditional floating point registers
+(define_mode_attr Ff [(SF "f") (DF "d")])
+
+; SF/DF constraint for arithmetic on VSX registers
+(define_mode_attr Fv [(SF "wy") (DF "ws")])
+
+; s/d suffix for things like fp_addsub_s/fp_addsub_d
+(define_mode_attr Fs [(SF "s") (DF "d")])
+
+; FRE/FRES support
+(define_mode_attr Ffre [(SF "fres") (DF "fre")])
+(define_mode_attr FFRE [(SF "FRES") (DF "FRE")])
+
; Conditional returns.
(define_code_iterator any_return [return simple_return])
(define_code_attr return_pred [(return "direct_return ()")
@@ -271,7 +356,14 @@
; Various instructions that come in SI and DI forms.
; A generic w/d attribute, for things like cmpw/cmpd.
-(define_mode_attr wd [(QI "b") (HI "h") (SI "w") (DI "d")])
+(define_mode_attr wd [(QI "b")
+ (HI "h")
+ (SI "w")
+ (DI "d")
+ (V16QI "b")
+ (V8HI "h")
+ (V4SI "w")
+ (V2DI "d")])
; DImode bits
(define_mode_attr dbits [(QI "56") (HI "48") (SI "32")])
@@ -297,6 +389,8 @@
(define_mode_attr rreg [(SF "f")
(DF "ws")
+ (TF "f")
+ (TD "f")
(V4SF "wf")
(V2DF "wd")])
@@ -312,6 +406,87 @@
(define_mode_attr TARGET_FLOAT [(SF "TARGET_SINGLE_FLOAT")
(DF "TARGET_DOUBLE_FLOAT")])
+;; Mode iterator for logical operations on 128-bit types
+(define_mode_iterator BOOL_128 [TI
+ PTI
+ (V16QI "TARGET_ALTIVEC")
+ (V8HI "TARGET_ALTIVEC")
+ (V4SI "TARGET_ALTIVEC")
+ (V4SF "TARGET_ALTIVEC")
+ (V2DI "TARGET_ALTIVEC")
+ (V2DF "TARGET_ALTIVEC")
+ (V1TI "TARGET_ALTIVEC")])
+
+;; For the GPRs we use 3 constraints for register outputs, two that are the
+;; same as the output register, and a third where the output register is an
+;; early clobber, so we don't have to deal with register overlaps. For the
+;; vector types, we prefer to use the vector registers. For TI mode, allow
+;; either.
+
+;; Mode attribute for boolean operation register constraints for output
+(define_mode_attr BOOL_REGS_OUTPUT [(TI "&r,r,r,wa,v")
+ (PTI "&r,r,r")
+ (V16QI "wa,v,&?r,?r,?r")
+ (V8HI "wa,v,&?r,?r,?r")
+ (V4SI "wa,v,&?r,?r,?r")
+ (V4SF "wa,v,&?r,?r,?r")
+ (V2DI "wa,v,&?r,?r,?r")
+ (V2DF "wa,v,&?r,?r,?r")
+ (V1TI "wa,v,&?r,?r,?r")])
+
+;; Mode attribute for boolean operation register constraints for operand1
+(define_mode_attr BOOL_REGS_OP1 [(TI "r,0,r,wa,v")
+ (PTI "r,0,r")
+ (V16QI "wa,v,r,0,r")
+ (V8HI "wa,v,r,0,r")
+ (V4SI "wa,v,r,0,r")
+ (V4SF "wa,v,r,0,r")
+ (V2DI "wa,v,r,0,r")
+ (V2DF "wa,v,r,0,r")
+ (V1TI "wa,v,r,0,r")])
+
+;; Mode attribute for boolean operation register constraints for operand2
+(define_mode_attr BOOL_REGS_OP2 [(TI "r,r,0,wa,v")
+ (PTI "r,r,0")
+ (V16QI "wa,v,r,r,0")
+ (V8HI "wa,v,r,r,0")
+ (V4SI "wa,v,r,r,0")
+ (V4SF "wa,v,r,r,0")
+ (V2DI "wa,v,r,r,0")
+ (V2DF "wa,v,r,r,0")
+ (V1TI "wa,v,r,r,0")])
+
+;; Mode attribute for boolean operation register constraints for operand1
+;; for one_cmpl. To simplify things, we repeat the constraint where 0
+;; is used for operand1 or operand2
+(define_mode_attr BOOL_REGS_UNARY [(TI "r,0,0,wa,v")
+ (PTI "r,0,0")
+ (V16QI "wa,v,r,0,0")
+ (V8HI "wa,v,r,0,0")
+ (V4SI "wa,v,r,0,0")
+ (V4SF "wa,v,r,0,0")
+ (V2DI "wa,v,r,0,0")
+ (V2DF "wa,v,r,0,0")
+ (V1TI "wa,v,r,0,0")])
+
+;; Mode attribute for the clobber of CC0 for AND expansion.
+;; For the 128-bit types, we never do AND immediate, but we need to
+;; get the correct number of X's for the number of operands.
+(define_mode_attr BOOL_REGS_AND_CR0 [(TI "X,X,X,X,X")
+ (PTI "X,X,X")
+ (V16QI "X,X,X,X,X")
+ (V8HI "X,X,X,X,X")
+ (V4SI "X,X,X,X,X")
+ (V4SF "X,X,X,X,X")
+ (V2DI "X,X,X,X,X")
+ (V2DF "X,X,X,X,X")
+ (V1TI "X,X,X,X,X")])
+
+;; Mode attribute to give the correct type for integer divides
+(define_mode_attr idiv_ldiv [(SI "idiv")
+ (DI "ldiv")])
+
+
;; Start with fixed-point load and store insns. Here we put only the more
;; complex forms. Basic data transfer is done later.
@@ -324,11 +499,19 @@
(define_insn "*zero_extend<mode>di2_internal1"
[(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
(zero_extend:DI (match_operand:QHSI 1 "reg_or_mem_operand" "m,r")))]
- "TARGET_POWERPC64"
+ "TARGET_POWERPC64 && (<MODE>mode != SImode || !TARGET_LFIWZX)"
"@
l<wd>z%U1%X1 %0,%1
rldicl %0,%1,0,<dbits>"
- [(set_attr "type" "load,*")])
+ [(set_attr_alternative "type"
+ [(if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
+ (const_string "*")])])
(define_insn "*zero_extend<mode>di2_internal2"
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
@@ -382,6 +565,29 @@
(const_int 0)))]
"")
+(define_insn "*zero_extendsidi2_lfiwzx"
+ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,??wm,!wz,!wu")
+ (zero_extend:DI (match_operand:SI 1 "reg_or_mem_operand" "m,r,r,Z,Z")))]
+ "TARGET_POWERPC64 && TARGET_LFIWZX"
+ "@
+ lwz%U1%X1 %0,%1
+ rldicl %0,%1,0,32
+ mtvsrwz %x0,%1
+ lfiwzx %0,%y1
+ lxsiwzx %x0,%y1"
+ [(set_attr_alternative "type"
+ [(if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
+ (const_string "*")
+ (const_string "mffgpr")
+ (const_string "fpload")
+ (const_string "fpload")])])
+
(define_insn "extendqidi2"
[(set (match_operand:DI 0 "gpc_reg_operand" "=r")
(sign_extend:DI (match_operand:QI 1 "gpc_reg_operand" "r")))]
@@ -454,7 +660,15 @@
"@
lha%U1%X1 %0,%1
extsh %0,%1"
- [(set_attr "type" "load_ext,exts")])
+ [(set_attr_alternative "type"
+ [(if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ext_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ext_u")
+ (const_string "load_ext")))
+ (const_string "exts")])])
(define_insn ""
[(set (match_operand:DI 0 "gpc_reg_operand" "=r")
@@ -521,16 +735,47 @@
"TARGET_POWERPC64"
"")
-(define_insn ""
+(define_insn "*extendsidi2_lfiwax"
+ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,??wm,!wl,!wu")
+ (sign_extend:DI (match_operand:SI 1 "lwa_operand" "m,r,r,Z,Z")))]
+ "TARGET_POWERPC64 && TARGET_LFIWAX"
+ "@
+ lwa%U1%X1 %0,%1
+ extsw %0,%1
+ mtvsrwa %x0,%1
+ lfiwax %0,%y1
+ lxsiwax %x0,%y1"
+ [(set_attr_alternative "type"
+ [(if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ext_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ext_u")
+ (const_string "load_ext")))
+ (const_string "exts")
+ (const_string "mffgpr")
+ (const_string "fpload")
+ (const_string "fpload")])])
+
+(define_insn "*extendsidi2_nocell"
[(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
(sign_extend:DI (match_operand:SI 1 "lwa_operand" "m,r")))]
- "TARGET_POWERPC64 && rs6000_gen_cell_microcode"
+ "TARGET_POWERPC64 && rs6000_gen_cell_microcode && !TARGET_LFIWAX"
"@
lwa%U1%X1 %0,%1
extsw %0,%1"
- [(set_attr "type" "load_ext,exts")])
-
-(define_insn ""
+ [(set_attr_alternative "type"
+ [(if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ext_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ext_u")
+ (const_string "load_ext")))
+ (const_string "exts")])])
+
+(define_insn "*extendsidi2_nocell"
[(set (match_operand:DI 0 "gpc_reg_operand" "=r")
(sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "r")))]
"TARGET_POWERPC64 && !rs6000_gen_cell_microcode"
@@ -602,7 +847,15 @@
"@
lbz%U1%X1 %0,%1
rlwinm %0,%1,0,0xff"
- [(set_attr "type" "load,*")])
+ [(set_attr_alternative "type"
+ [(if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
+ (const_string "*")])])
(define_insn ""
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
@@ -722,7 +975,15 @@
"@
lbz%U1%X1 %0,%1
rlwinm %0,%1,0,0xff"
- [(set_attr "type" "load,*")])
+ [(set_attr_alternative "type"
+ [(if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
+ (const_string "*")])])
(define_insn ""
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
@@ -848,7 +1109,15 @@
"@
lhz%U1%X1 %0,%1
rlwinm %0,%1,0,0xffff"
- [(set_attr "type" "load,*")])
+ [(set_attr_alternative "type"
+ [(if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
+ (const_string "*")])])
(define_insn ""
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
@@ -915,7 +1184,15 @@
"@
lha%U1%X1 %0,%1
extsh %0,%1"
- [(set_attr "type" "load_ext,exts")])
+ [(set_attr_alternative "type"
+ [(if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ext_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ext_u")
+ (const_string "load_ext")))
+ (const_string "exts")])])
(define_insn ""
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
@@ -1658,7 +1935,19 @@
FAIL;
})
-(define_insn "one_cmpl<mode>2"
+(define_expand "one_cmpl<mode>2"
+ [(set (match_operand:SDI 0 "gpc_reg_operand" "")
+ (not:SDI (match_operand:SDI 1 "gpc_reg_operand" "")))]
+ ""
+{
+ if (<MODE>mode == DImode && !TARGET_POWERPC64)
+ {
+ rs6000_split_logical (operands, NOT, false, false, false, NULL_RTX);
+ DONE;
+ }
+})
+
+(define_insn "*one_cmpl<mode>2"
[(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
(not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r")))]
""
@@ -1935,7 +2224,9 @@
[(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
(unspec:GPR [(match_operand:GPR 1 "gpc_reg_operand" "r")] UNSPEC_PARITY))]
"TARGET_CMPB && TARGET_POPCNTB"
- "prty<wd> %0,%1")
+ "prty<wd> %0,%1"
+ [(set_attr "length" "4")
+ (set_attr "type" "popcnt")])
(define_expand "parity<mode>2"
[(set (match_operand:GPR 0 "gpc_reg_operand" "")
@@ -2412,7 +2703,7 @@
(match_operand:SI 2 "gpc_reg_operand" "r,r"))
(const_int 0)))
(clobber (match_scratch:SI 3 "=r,r"))]
- ""
+ "TARGET_32BIT"
"@
mullw. %3,%1,%2
#"
@@ -2425,7 +2716,7 @@
(match_operand:SI 2 "gpc_reg_operand" ""))
(const_int 0)))
(clobber (match_scratch:SI 3 ""))]
- "reload_completed"
+ "TARGET_32BIT && reload_completed"
[(set (match_dup 3)
(mult:SI (match_dup 1) (match_dup 2)))
(set (match_dup 0)
@@ -2440,7 +2731,7 @@
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
(mult:SI (match_dup 1) (match_dup 2)))]
- ""
+ "TARGET_32BIT"
"@
mullw. %0,%1,%2
#"
@@ -2454,7 +2745,7 @@
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
(mult:SI (match_dup 1) (match_dup 2)))]
- "reload_completed"
+ "TARGET_32BIT && reload_completed"
[(set (match_dup 0)
(mult:SI (match_dup 1) (match_dup 2)))
(set (match_dup 3)
@@ -2469,10 +2760,7 @@
(match_operand:GPR 2 "gpc_reg_operand" "r")))]
""
"div<wd>u %0,%1,%2"
- [(set (attr "type")
- (cond [(match_operand:SI 0 "" "")
- (const_string "idiv")]
- (const_string "ldiv")))])
+ [(set_attr "type" "<idiv_ldiv>")])
;; For powers of two we can do srai/aze for divide and then adjust for
@@ -2496,10 +2784,7 @@
(match_operand:GPR 2 "gpc_reg_operand" "r")))]
""
"div<wd> %0,%1,%2"
- [(set (attr "type")
- (cond [(match_operand:SI 0 "" "")
- (const_string "idiv")]
- (const_string "ldiv")))])
+ [(set_attr "type" "<idiv_ldiv>")])
(define_expand "mod<mode>3"
[(use (match_operand:GPR 0 "gpc_reg_operand" ""))
@@ -3698,20 +3983,33 @@
(const_int 0)))]
"")
-(define_insn "*rotlsi3_internal7"
+(define_insn "*rotlsi3_internal7le"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(zero_extend:SI
(subreg:QI
(rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "reg_or_cint_operand" "ri")) 0)))]
- ""
+ "!BYTES_BIG_ENDIAN"
"rlw%I2nm %0,%1,%h2,0xff"
[(set (attr "cell_micro")
(if_then_else (match_operand:SI 2 "const_int_operand" "")
(const_string "not")
(const_string "always")))])
-(define_insn "*rotlsi3_internal8"
+(define_insn "*rotlsi3_internal7be"
+ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
+ (zero_extend:SI
+ (subreg:QI
+ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
+ (match_operand:SI 2 "reg_or_cint_operand" "ri")) 3)))]
+ "BYTES_BIG_ENDIAN"
+ "rlw%I2nm %0,%1,%h2,0xff"
+ [(set (attr "cell_micro")
+ (if_then_else (match_operand:SI 2 "const_int_operand" "")
+ (const_string "not")
+ (const_string "always")))])
+
+(define_insn "*rotlsi3_internal8le"
[(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC (zero_extend:SI
(subreg:QI
@@ -3719,7 +4017,24 @@
(match_operand:SI 2 "reg_or_cint_operand" "r,i,r,i")) 0))
(const_int 0)))
(clobber (match_scratch:SI 3 "=r,r,r,r"))]
- ""
+ "!BYTES_BIG_ENDIAN"
+ "@
+ rlwnm. %3,%1,%2,0xff
+ rlwinm. %3,%1,%h2,0xff
+ #
+ #"
+ [(set_attr "type" "var_delayed_compare,delayed_compare,var_delayed_compare,delayed_compare")
+ (set_attr "length" "4,4,8,8")])
+
+(define_insn "*rotlsi3_internal8be"
+ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y")
+ (compare:CC (zero_extend:SI
+ (subreg:QI
+ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r,r")
+ (match_operand:SI 2 "reg_or_cint_operand" "r,i,r,i")) 3))
+ (const_int 0)))
+ (clobber (match_scratch:SI 3 "=r,r,r,r"))]
+ "BYTES_BIG_ENDIAN"
"@
rlwnm. %3,%1,%2,0xff
rlwinm. %3,%1,%h2,0xff
@@ -3736,7 +4051,7 @@
(match_operand:SI 2 "reg_or_cint_operand" "")) 0))
(const_int 0)))
(clobber (match_scratch:SI 3 ""))]
- "reload_completed"
+ "!BYTES_BIG_ENDIAN && reload_completed"
[(set (match_dup 3)
(zero_extend:SI (subreg:QI
(rotate:SI (match_dup 1)
@@ -3746,7 +4061,25 @@
(const_int 0)))]
"")
-(define_insn "*rotlsi3_internal9"
+(define_split
+ [(set (match_operand:CC 0 "cc_reg_not_micro_cr0_operand" "")
+ (compare:CC (zero_extend:SI
+ (subreg:QI
+ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "")
+ (match_operand:SI 2 "reg_or_cint_operand" "")) 3))
+ (const_int 0)))
+ (clobber (match_scratch:SI 3 ""))]
+ "BYTES_BIG_ENDIAN && reload_completed"
+ [(set (match_dup 3)
+ (zero_extend:SI (subreg:QI
+ (rotate:SI (match_dup 1)
+ (match_dup 2)) 3)))
+ (set (match_dup 0)
+ (compare:CC (match_dup 3)
+ (const_int 0)))]
+ "")
+
+(define_insn "*rotlsi3_internal9le"
[(set (match_operand:CC 3 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC (zero_extend:SI
(subreg:QI
@@ -3755,7 +4088,25 @@
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r")
(zero_extend:SI (subreg:QI (rotate:SI (match_dup 1) (match_dup 2)) 0)))]
- ""
+ "!BYTES_BIG_ENDIAN"
+ "@
+ rlwnm. %0,%1,%2,0xff
+ rlwinm. %0,%1,%h2,0xff
+ #
+ #"
+ [(set_attr "type" "var_delayed_compare,delayed_compare,var_delayed_compare,delayed_compare")
+ (set_attr "length" "4,4,8,8")])
+
+(define_insn "*rotlsi3_internal9be"
+ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,?y,?y")
+ (compare:CC (zero_extend:SI
+ (subreg:QI
+ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r,r")
+ (match_operand:SI 2 "reg_or_cint_operand" "r,i,r,i")) 3))
+ (const_int 0)))
+ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r")
+ (zero_extend:SI (subreg:QI (rotate:SI (match_dup 1) (match_dup 2)) 3)))]
+ "BYTES_BIG_ENDIAN"
"@
rlwnm. %0,%1,%2,0xff
rlwinm. %0,%1,%h2,0xff
@@ -3773,7 +4124,7 @@
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
(zero_extend:SI (subreg:QI (rotate:SI (match_dup 1) (match_dup 2)) 0)))]
- "reload_completed"
+ "!BYTES_BIG_ENDIAN && reload_completed"
[(set (match_dup 0)
(zero_extend:SI (subreg:QI (rotate:SI (match_dup 1) (match_dup 2)) 0)))
(set (match_dup 3)
@@ -3781,20 +4132,48 @@
(const_int 0)))]
"")
-(define_insn "*rotlsi3_internal10"
+(define_split
+ [(set (match_operand:CC 3 "cc_reg_not_micro_cr0_operand" "")
+ (compare:CC (zero_extend:SI
+ (subreg:QI
+ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "")
+ (match_operand:SI 2 "reg_or_cint_operand" "")) 3))
+ (const_int 0)))
+ (set (match_operand:SI 0 "gpc_reg_operand" "")
+ (zero_extend:SI (subreg:QI (rotate:SI (match_dup 1) (match_dup 2)) 3)))]
+ "BYTES_BIG_ENDIAN && reload_completed"
+ [(set (match_dup 0)
+ (zero_extend:SI (subreg:QI (rotate:SI (match_dup 1) (match_dup 2)) 3)))
+ (set (match_dup 3)
+ (compare:CC (match_dup 0)
+ (const_int 0)))]
+ "")
+
+(define_insn "*rotlsi3_internal10le"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
(zero_extend:SI
(subreg:HI
(rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_cint_operand" "r,i")) 0)))]
- ""
+ "!BYTES_BIG_ENDIAN"
"@
rlwnm %0,%1,%2,0xffff
rlwinm %0,%1,%h2,0xffff"
[(set_attr "type" "var_shift_rotate,integer")])
+(define_insn "*rotlsi3_internal10be"
+ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
+ (zero_extend:SI
+ (subreg:HI
+ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
+ (match_operand:SI 2 "reg_or_cint_operand" "r,i")) 2)))]
+ "BYTES_BIG_ENDIAN"
+ "@
+ rlwnm %0,%1,%2,0xffff
+ rlwinm %0,%1,%h2,0xffff"
+ [(set_attr "type" "var_shift_rotate,integer")])
-(define_insn "*rotlsi3_internal11"
+(define_insn "*rotlsi3_internal11le"
[(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC (zero_extend:SI
(subreg:HI
@@ -3802,7 +4181,24 @@
(match_operand:SI 2 "reg_or_cint_operand" "r,i,r,i")) 0))
(const_int 0)))
(clobber (match_scratch:SI 3 "=r,r,r,r"))]
- ""
+ "!BYTES_BIG_ENDIAN"
+ "@
+ rlwnm. %3,%1,%2,0xffff
+ rlwinm. %3,%1,%h2,0xffff
+ #
+ #"
+ [(set_attr "type" "var_delayed_compare,delayed_compare,var_delayed_compare,delayed_compare")
+ (set_attr "length" "4,4,8,8")])
+
+(define_insn "*rotlsi3_internal11be"
+ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y")
+ (compare:CC (zero_extend:SI
+ (subreg:HI
+ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r,r")
+ (match_operand:SI 2 "reg_or_cint_operand" "r,i,r,i")) 2))
+ (const_int 0)))
+ (clobber (match_scratch:SI 3 "=r,r,r,r"))]
+ "BYTES_BIG_ENDIAN"
"@
rlwnm. %3,%1,%2,0xffff
rlwinm. %3,%1,%h2,0xffff
@@ -3819,7 +4215,7 @@
(match_operand:SI 2 "reg_or_cint_operand" "")) 0))
(const_int 0)))
(clobber (match_scratch:SI 3 ""))]
- "reload_completed"
+ "!BYTES_BIG_ENDIAN && reload_completed"
[(set (match_dup 3)
(zero_extend:SI (subreg:HI
(rotate:SI (match_dup 1)
@@ -3829,7 +4225,25 @@
(const_int 0)))]
"")
-(define_insn "*rotlsi3_internal12"
+(define_split
+ [(set (match_operand:CC 0 "cc_reg_not_micro_cr0_operand" "")
+ (compare:CC (zero_extend:SI
+ (subreg:HI
+ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "")
+ (match_operand:SI 2 "reg_or_cint_operand" "")) 2))
+ (const_int 0)))
+ (clobber (match_scratch:SI 3 ""))]
+ "BYTES_BIG_ENDIAN && reload_completed"
+ [(set (match_dup 3)
+ (zero_extend:SI (subreg:HI
+ (rotate:SI (match_dup 1)
+ (match_dup 2)) 2)))
+ (set (match_dup 0)
+ (compare:CC (match_dup 3)
+ (const_int 0)))]
+ "")
+
+(define_insn "*rotlsi3_internal12le"
[(set (match_operand:CC 3 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC (zero_extend:SI
(subreg:HI
@@ -3838,7 +4252,25 @@
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r")
(zero_extend:SI (subreg:HI (rotate:SI (match_dup 1) (match_dup 2)) 0)))]
- ""
+ "!BYTES_BIG_ENDIAN"
+ "@
+ rlwnm. %0,%1,%2,0xffff
+ rlwinm. %0,%1,%h2,0xffff
+ #
+ #"
+ [(set_attr "type" "var_delayed_compare,delayed_compare,var_delayed_compare,delayed_compare")
+ (set_attr "length" "4,4,8,8")])
+
+(define_insn "*rotlsi3_internal12be"
+ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,?y,?y")
+ (compare:CC (zero_extend:SI
+ (subreg:HI
+ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r,r")
+ (match_operand:SI 2 "reg_or_cint_operand" "r,i,r,i")) 2))
+ (const_int 0)))
+ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r")
+ (zero_extend:SI (subreg:HI (rotate:SI (match_dup 1) (match_dup 2)) 2)))]
+ "BYTES_BIG_ENDIAN"
"@
rlwnm. %0,%1,%2,0xffff
rlwinm. %0,%1,%h2,0xffff
@@ -3856,7 +4288,7 @@
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
(zero_extend:SI (subreg:HI (rotate:SI (match_dup 1) (match_dup 2)) 0)))]
- "reload_completed"
+ "!BYTES_BIG_ENDIAN && reload_completed"
[(set (match_dup 0)
(zero_extend:SI (subreg:HI (rotate:SI (match_dup 1) (match_dup 2)) 0)))
(set (match_dup 3)
@@ -3864,6 +4296,23 @@
(const_int 0)))]
"")
+(define_split
+ [(set (match_operand:CC 3 "cc_reg_not_micro_cr0_operand" "")
+ (compare:CC (zero_extend:SI
+ (subreg:HI
+ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "")
+ (match_operand:SI 2 "reg_or_cint_operand" "")) 2))
+ (const_int 0)))
+ (set (match_operand:SI 0 "gpc_reg_operand" "")
+ (zero_extend:SI (subreg:HI (rotate:SI (match_dup 1) (match_dup 2)) 2)))]
+ "BYTES_BIG_ENDIAN && reload_completed"
+ [(set (match_dup 0)
+ (zero_extend:SI (subreg:HI (rotate:SI (match_dup 1) (match_dup 2)) 2)))
+ (set (match_dup 3)
+ (compare:CC (match_dup 0)
+ (const_int 0)))]
+ "")
+
(define_insn "ashlsi3"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
(ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
@@ -4054,7 +4503,7 @@
#
#
#"
- [(set_attr "type" "delayed_compare,var_delayed_compare,delayed_compare,delayed_compare,var_delayed_compare,delayed_compare")
+ [(set_attr "type" "fast_compare,var_delayed_compare,delayed_compare,delayed_compare,var_delayed_compare,delayed_compare")
(set_attr "length" "4,4,4,8,8,8")])
(define_split
@@ -4086,7 +4535,7 @@
#
#
#"
- [(set_attr "type" "delayed_compare,var_delayed_compare,delayed_compare,delayed_compare,var_delayed_compare,delayed_compare")
+ [(set_attr "type" "fast_compare,var_delayed_compare,delayed_compare,delayed_compare,var_delayed_compare,delayed_compare")
(set_attr "length" "4,4,4,8,8,8")])
(define_split
@@ -4177,16 +4626,25 @@
(const_int 0)))]
"")
-(define_insn ""
+(define_insn "*lshiftrt_internal1le"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(zero_extend:SI
(subreg:QI
(lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "const_int_operand" "i")) 0)))]
- "includes_rshift_p (operands[2], GEN_INT (255))"
+ "!BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (255))"
"rlwinm %0,%1,%s2,0xff")
-(define_insn ""
+(define_insn "*lshiftrt_internal1be"
+ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
+ (zero_extend:SI
+ (subreg:QI
+ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
+ (match_operand:SI 2 "const_int_operand" "i")) 3)))]
+ "BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (255))"
+ "rlwinm %0,%1,%s2,0xff")
+
+(define_insn "*lshiftrt_internal2le"
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
(compare:CC
(zero_extend:SI
@@ -4195,7 +4653,23 @@
(match_operand:SI 2 "const_int_operand" "i,i")) 0))
(const_int 0)))
(clobber (match_scratch:SI 3 "=r,r"))]
- "includes_rshift_p (operands[2], GEN_INT (255))"
+ "!BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (255))"
+ "@
+ rlwinm. %3,%1,%s2,0xff
+ #"
+ [(set_attr "type" "delayed_compare")
+ (set_attr "length" "4,8")])
+
+(define_insn "*lshiftrt_internal2be"
+ [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
+ (compare:CC
+ (zero_extend:SI
+ (subreg:QI
+ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
+ (match_operand:SI 2 "const_int_operand" "i,i")) 3))
+ (const_int 0)))
+ (clobber (match_scratch:SI 3 "=r,r"))]
+ "BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (255))"
"@
rlwinm. %3,%1,%s2,0xff
#"
@@ -4211,7 +4685,7 @@
(match_operand:SI 2 "const_int_operand" "")) 0))
(const_int 0)))
(clobber (match_scratch:SI 3 ""))]
- "includes_rshift_p (operands[2], GEN_INT (255)) && reload_completed"
+ "!BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (255)) && reload_completed"
[(set (match_dup 3)
(zero_extend:SI (subreg:QI
(lshiftrt:SI (match_dup 1)
@@ -4221,7 +4695,26 @@
(const_int 0)))]
"")
-(define_insn ""
+(define_split
+ [(set (match_operand:CC 0 "cc_reg_not_micro_cr0_operand" "")
+ (compare:CC
+ (zero_extend:SI
+ (subreg:QI
+ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "")
+ (match_operand:SI 2 "const_int_operand" "")) 3))
+ (const_int 0)))
+ (clobber (match_scratch:SI 3 ""))]
+ "BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (255)) && reload_completed"
+ [(set (match_dup 3)
+ (zero_extend:SI (subreg:QI
+ (lshiftrt:SI (match_dup 1)
+ (match_dup 2)) 3)))
+ (set (match_dup 0)
+ (compare:CC (match_dup 3)
+ (const_int 0)))]
+ "")
+
+(define_insn "*lshiftrt_internal3le"
[(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
(compare:CC
(zero_extend:SI
@@ -4231,7 +4724,24 @@
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
(zero_extend:SI (subreg:QI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))]
- "includes_rshift_p (operands[2], GEN_INT (255))"
+ "!BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (255))"
+ "@
+ rlwinm. %0,%1,%s2,0xff
+ #"
+ [(set_attr "type" "delayed_compare")
+ (set_attr "length" "4,8")])
+
+(define_insn "*lshiftrt_internal3be"
+ [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
+ (compare:CC
+ (zero_extend:SI
+ (subreg:QI
+ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
+ (match_operand:SI 2 "const_int_operand" "i,i")) 3))
+ (const_int 0)))
+ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
+ (zero_extend:SI (subreg:QI (lshiftrt:SI (match_dup 1) (match_dup 2)) 3)))]
+ "BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (255))"
"@
rlwinm. %0,%1,%s2,0xff
#"
@@ -4248,7 +4758,7 @@
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
(zero_extend:SI (subreg:QI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))]
- "includes_rshift_p (operands[2], GEN_INT (255)) && reload_completed"
+ "!BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (255)) && reload_completed"
[(set (match_dup 0)
(zero_extend:SI (subreg:QI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))
(set (match_dup 3)
@@ -4256,16 +4766,43 @@
(const_int 0)))]
"")
-(define_insn ""
+(define_split
+ [(set (match_operand:CC 3 "cc_reg_not_micro_cr0_operand" "")
+ (compare:CC
+ (zero_extend:SI
+ (subreg:QI
+ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "")
+ (match_operand:SI 2 "const_int_operand" "")) 3))
+ (const_int 0)))
+ (set (match_operand:SI 0 "gpc_reg_operand" "")
+ (zero_extend:SI (subreg:QI (lshiftrt:SI (match_dup 1) (match_dup 2)) 3)))]
+ "BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (255)) && reload_completed"
+ [(set (match_dup 0)
+ (zero_extend:SI (subreg:QI (lshiftrt:SI (match_dup 1) (match_dup 2)) 3)))
+ (set (match_dup 3)
+ (compare:CC (match_dup 0)
+ (const_int 0)))]
+ "")
+
+(define_insn "*lshiftrt_internal4le"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(zero_extend:SI
(subreg:HI
(lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "const_int_operand" "i")) 0)))]
- "includes_rshift_p (operands[2], GEN_INT (65535))"
+ "!BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (65535))"
"rlwinm %0,%1,%s2,0xffff")
-(define_insn ""
+(define_insn "*lshiftrt_internal4be"
+ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
+ (zero_extend:SI
+ (subreg:HI
+ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
+ (match_operand:SI 2 "const_int_operand" "i")) 2)))]
+ "BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (65535))"
+ "rlwinm %0,%1,%s2,0xffff")
+
+(define_insn "*lshiftrt_internal5le"
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
(compare:CC
(zero_extend:SI
@@ -4274,7 +4811,23 @@
(match_operand:SI 2 "const_int_operand" "i,i")) 0))
(const_int 0)))
(clobber (match_scratch:SI 3 "=r,r"))]
- "includes_rshift_p (operands[2], GEN_INT (65535))"
+ "!BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (65535))"
+ "@
+ rlwinm. %3,%1,%s2,0xffff
+ #"
+ [(set_attr "type" "delayed_compare")
+ (set_attr "length" "4,8")])
+
+(define_insn "*lshiftrt_internal5be"
+ [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
+ (compare:CC
+ (zero_extend:SI
+ (subreg:HI
+ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
+ (match_operand:SI 2 "const_int_operand" "i,i")) 2))
+ (const_int 0)))
+ (clobber (match_scratch:SI 3 "=r,r"))]
+ "BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (65535))"
"@
rlwinm. %3,%1,%s2,0xffff
#"
@@ -4290,7 +4843,7 @@
(match_operand:SI 2 "const_int_operand" "")) 0))
(const_int 0)))
(clobber (match_scratch:SI 3 ""))]
- "includes_rshift_p (operands[2], GEN_INT (65535)) && reload_completed"
+ "!BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (65535)) && reload_completed"
[(set (match_dup 3)
(zero_extend:SI (subreg:HI
(lshiftrt:SI (match_dup 1)
@@ -4300,7 +4853,26 @@
(const_int 0)))]
"")
-(define_insn ""
+(define_split
+ [(set (match_operand:CC 0 "cc_reg_not_micro_cr0_operand" "")
+ (compare:CC
+ (zero_extend:SI
+ (subreg:HI
+ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "")
+ (match_operand:SI 2 "const_int_operand" "")) 2))
+ (const_int 0)))
+ (clobber (match_scratch:SI 3 ""))]
+ "BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (65535)) && reload_completed"
+ [(set (match_dup 3)
+ (zero_extend:SI (subreg:HI
+ (lshiftrt:SI (match_dup 1)
+ (match_dup 2)) 2)))
+ (set (match_dup 0)
+ (compare:CC (match_dup 3)
+ (const_int 0)))]
+ "")
+
+(define_insn "*lshiftrt_internal5le"
[(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
(compare:CC
(zero_extend:SI
@@ -4310,7 +4882,24 @@
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
(zero_extend:SI (subreg:HI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))]
- "includes_rshift_p (operands[2], GEN_INT (65535))"
+ "!BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (65535))"
+ "@
+ rlwinm. %0,%1,%s2,0xffff
+ #"
+ [(set_attr "type" "delayed_compare")
+ (set_attr "length" "4,8")])
+
+(define_insn "*lshiftrt_internal5be"
+ [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
+ (compare:CC
+ (zero_extend:SI
+ (subreg:HI
+ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
+ (match_operand:SI 2 "const_int_operand" "i,i")) 2))
+ (const_int 0)))
+ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
+ (zero_extend:SI (subreg:HI (lshiftrt:SI (match_dup 1) (match_dup 2)) 2)))]
+ "BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (65535))"
"@
rlwinm. %0,%1,%s2,0xffff
#"
@@ -4327,7 +4916,7 @@
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
(zero_extend:SI (subreg:HI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))]
- "includes_rshift_p (operands[2], GEN_INT (65535)) && reload_completed"
+ "!BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (65535)) && reload_completed"
[(set (match_dup 0)
(zero_extend:SI (subreg:HI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))
(set (match_dup 3)
@@ -4335,6 +4924,24 @@
(const_int 0)))]
"")
+(define_split
+ [(set (match_operand:CC 3 "cc_reg_not_micro_cr0_operand" "")
+ (compare:CC
+ (zero_extend:SI
+ (subreg:HI
+ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "")
+ (match_operand:SI 2 "const_int_operand" "")) 2))
+ (const_int 0)))
+ (set (match_operand:SI 0 "gpc_reg_operand" "")
+ (zero_extend:SI (subreg:HI (lshiftrt:SI (match_dup 1) (match_dup 2)) 2)))]
+ "BYTES_BIG_ENDIAN && includes_rshift_p (operands[2], GEN_INT (65535)) && reload_completed"
+ [(set (match_dup 0)
+ (zero_extend:SI (subreg:HI (lshiftrt:SI (match_dup 1) (match_dup 2)) 2)))
+ (set (match_dup 3)
+ (compare:CC (match_dup 0)
+ (const_int 0)))]
+ "")
+
(define_insn "ashrsi3"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
(ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
@@ -4455,224 +5062,226 @@
(const_int 0)))]
"")
-;; Floating-point insns, excluding normal data motion.
-;;
-;; PowerPC has a full set of single-precision floating point instructions.
-;;
-;; For the POWER architecture, we pretend that we have both SFmode and
-;; DFmode insns, while, in fact, all fp insns are actually done in double.
-;; The only conversions we will do will be when storing to memory. In that
-;; case, we will use the "frsp" instruction before storing.
-;;
-;; Note that when we store into a single-precision memory location, we need to
-;; use the frsp insn first. If the register being stored isn't dead, we
-;; need a scratch register for the frsp. But this is difficult when the store
-;; is done by reload. It is not incorrect to do the frsp on the register in
-;; this case, we just lose precision that we would have otherwise gotten but
-;; is not guaranteed. Perhaps this should be tightened up at some point.
-
-(define_expand "extendsfdf2"
- [(set (match_operand:DF 0 "gpc_reg_operand" "")
- (float_extend:DF (match_operand:SF 1 "reg_or_none500mem_operand" "")))]
- "TARGET_HARD_FLOAT && ((TARGET_FPRS && TARGET_DOUBLE_FLOAT) || TARGET_E500_DOUBLE)"
- "")
-
-(define_insn_and_split "*extendsfdf2_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=d,?d,d")
- (float_extend:DF (match_operand:SF 1 "reg_or_mem_operand" "0,f,m")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT"
- "@
- #
- fmr %0,%1
- lfs%U1%X1 %0,%1"
- "&& reload_completed && REG_P (operands[1]) && REGNO (operands[0]) == REGNO (operands[1])"
- [(const_int 0)]
-{
- emit_note (NOTE_INSN_DELETED);
- DONE;
-}
- [(set_attr "type" "fp,fp,fpload")])
-
-(define_expand "truncdfsf2"
- [(set (match_operand:SF 0 "gpc_reg_operand" "")
- (float_truncate:SF (match_operand:DF 1 "gpc_reg_operand" "")))]
- "TARGET_HARD_FLOAT && ((TARGET_FPRS && TARGET_DOUBLE_FLOAT) || TARGET_E500_DOUBLE)"
- "")
-
-(define_insn "*truncdfsf2_fpr"
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (float_truncate:SF (match_operand:DF 1 "gpc_reg_operand" "d")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT"
- "frsp %0,%1"
- [(set_attr "type" "fp")])
-
-(define_expand "negsf2"
- [(set (match_operand:SF 0 "gpc_reg_operand" "")
- (neg:SF (match_operand:SF 1 "gpc_reg_operand" "")))]
- "TARGET_HARD_FLOAT && TARGET_SINGLE_FLOAT"
- "")
-(define_insn "*negsf2"
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (neg:SF (match_operand:SF 1 "gpc_reg_operand" "f")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT"
- "fneg %0,%1"
- [(set_attr "type" "fp")])
+;; Floating-point insns, excluding normal data motion. We combine the SF/DF
+;; modes here, and also add in conditional vsx/power8-vector support to access
+;; values in the traditional Altivec registers if the appropriate
+;; -mupper-regs-{df,sf} option is enabled.
-(define_expand "abssf2"
- [(set (match_operand:SF 0 "gpc_reg_operand" "")
- (abs:SF (match_operand:SF 1 "gpc_reg_operand" "")))]
- "TARGET_HARD_FLOAT && TARGET_SINGLE_FLOAT"
+(define_expand "abs<mode>2"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "")
+ (abs:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "")))]
+ "TARGET_<MODE>_INSN"
"")
-(define_insn "*abssf2"
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (abs:SF (match_operand:SF 1 "gpc_reg_operand" "f")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT"
- "fabs %0,%1"
- [(set_attr "type" "fp")])
+(define_insn "*abs<mode>2_fpr"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (abs:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")))]
+ "TARGET_<MODE>_FPR"
+ "@
+ fabs %0,%1
+ xsabsdp %x0,%x1"
+ [(set_attr "type" "fp")
+ (set_attr "fp_type" "fp_addsub_<Fs>")])
-(define_insn ""
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (neg:SF (abs:SF (match_operand:SF 1 "gpc_reg_operand" "f"))))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT"
- "fnabs %0,%1"
- [(set_attr "type" "fp")])
+(define_insn "*nabs<mode>2_fpr"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (neg:SFDF
+ (abs:SFDF
+ (match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>"))))]
+ "TARGET_<MODE>_FPR"
+ "@
+ fnabs %0,%1
+ xsnabsdp %x0,%x1"
+ [(set_attr "type" "fp")
+ (set_attr "fp_type" "fp_addsub_<Fs>")])
-(define_expand "addsf3"
- [(set (match_operand:SF 0 "gpc_reg_operand" "")
- (plus:SF (match_operand:SF 1 "gpc_reg_operand" "")
- (match_operand:SF 2 "gpc_reg_operand" "")))]
- "TARGET_HARD_FLOAT && TARGET_SINGLE_FLOAT"
+(define_expand "neg<mode>2"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "")
+ (neg:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "")))]
+ "TARGET_<MODE>_INSN"
"")
-(define_insn ""
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (plus:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
- (match_operand:SF 2 "gpc_reg_operand" "f")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT"
- "fadds %0,%1,%2"
+(define_insn "*neg<mode>2_fpr"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (neg:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")))]
+ "TARGET_<MODE>_FPR"
+ "@
+ fneg %0,%1
+ xsnegdp %x0,%x1"
[(set_attr "type" "fp")
- (set_attr "fp_type" "fp_addsub_s")])
+ (set_attr "fp_type" "fp_addsub_<Fs>")])
-(define_expand "subsf3"
- [(set (match_operand:SF 0 "gpc_reg_operand" "")
- (minus:SF (match_operand:SF 1 "gpc_reg_operand" "")
- (match_operand:SF 2 "gpc_reg_operand" "")))]
- "TARGET_HARD_FLOAT && TARGET_SINGLE_FLOAT"
+(define_expand "add<mode>3"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "")
+ (plus:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "")
+ (match_operand:SFDF 2 "gpc_reg_operand" "")))]
+ "TARGET_<MODE>_INSN"
"")
-(define_insn ""
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (minus:SF (match_operand:SF 1 "gpc_reg_operand" "f")
- (match_operand:SF 2 "gpc_reg_operand" "f")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT"
- "fsubs %0,%1,%2"
+(define_insn "*add<mode>3_fpr"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (plus:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "%<Ff>,<Fv>")
+ (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>")))]
+ "TARGET_<MODE>_FPR"
+ "@
+ fadd<Ftrad> %0,%1,%2
+ xsadd<Fvsx> %x0,%x1,%x2"
[(set_attr "type" "fp")
- (set_attr "fp_type" "fp_addsub_s")])
+ (set_attr "fp_type" "fp_addsub_<Fs>")])
-(define_expand "mulsf3"
- [(set (match_operand:SF 0 "gpc_reg_operand" "")
- (mult:SF (match_operand:SF 1 "gpc_reg_operand" "")
- (match_operand:SF 2 "gpc_reg_operand" "")))]
- "TARGET_HARD_FLOAT && TARGET_SINGLE_FLOAT"
+(define_expand "sub<mode>3"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "")
+ (minus:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "")
+ (match_operand:SFDF 2 "gpc_reg_operand" "")))]
+ "TARGET_<MODE>_INSN"
"")
-(define_insn ""
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
- (match_operand:SF 2 "gpc_reg_operand" "f")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT"
- "fmuls %0,%1,%2"
+(define_insn "*sub<mode>3_fpr"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (minus:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")
+ (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>")))]
+ "TARGET_<MODE>_FPR"
+ "@
+ fsub<Ftrad> %0,%1,%2
+ xssub<Fvsx> %x0,%x1,%x2"
[(set_attr "type" "fp")
- (set_attr "fp_type" "fp_mul_s")])
+ (set_attr "fp_type" "fp_addsub_<Fs>")])
-(define_expand "divsf3"
- [(set (match_operand:SF 0 "gpc_reg_operand" "")
- (div:SF (match_operand:SF 1 "gpc_reg_operand" "")
- (match_operand:SF 2 "gpc_reg_operand" "")))]
- "TARGET_HARD_FLOAT && TARGET_SINGLE_FLOAT && !TARGET_SIMPLE_FPU"
+(define_expand "mul<mode>3"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "")
+ (mult:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "")
+ (match_operand:SFDF 2 "gpc_reg_operand" "")))]
+ "TARGET_<MODE>_INSN"
"")
-(define_insn ""
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (div:SF (match_operand:SF 1 "gpc_reg_operand" "f")
- (match_operand:SF 2 "gpc_reg_operand" "f")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS
- && TARGET_SINGLE_FLOAT && !TARGET_SIMPLE_FPU"
- "fdivs %0,%1,%2"
- [(set_attr "type" "sdiv")])
-
-(define_insn "fres"
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (unspec:SF [(match_operand:SF 1 "gpc_reg_operand" "f")] UNSPEC_FRES))]
- "TARGET_FRES"
- "fres %0,%1"
+(define_insn "*mul<mode>3_fpr"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (mult:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "%<Ff>,<Fv>")
+ (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>")))]
+ "TARGET_<MODE>_FPR"
+ "@
+ fmul<Ftrad> %0,%1,%2
+ xsmul<Fvsx> %x0,%x1,%x2"
+ [(set_attr "type" "dmul")
+ (set_attr "fp_type" "fp_mul_<Fs>")])
+
+(define_expand "div<mode>3"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "")
+ (div:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "")
+ (match_operand:SFDF 2 "gpc_reg_operand" "")))]
+ "TARGET_<MODE>_INSN && !TARGET_SIMPLE_FPU"
+ "")
+
+(define_insn "*div<mode>3_fpr"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (div:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")
+ (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>")))]
+ "TARGET_<MODE>_FPR && !TARGET_SIMPLE_FPU"
+ "@
+ fdiv<Ftrad> %0,%1,%2
+ xsdiv<Fvsx> %x0,%x1,%x2"
+ [(set_attr "type" "<Fs>div")
+ (set_attr "fp_type" "fp_div_<Fs>")])
+
+(define_insn "sqrt<mode>2"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (sqrt:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")))]
+ "TARGET_<MODE>_FPR && !TARGET_SIMPLE_FPU
+ && (TARGET_PPC_GPOPT || (<MODE>mode == SFmode && TARGET_XILINX_FPU))"
+ "@
+ fsqrt<Ftrad> %0,%1
+ xssqrt<Fvsx> %x0,%x1"
+ [(set_attr "type" "<Fs>sqrt")
+ (set_attr "fp_type" "fp_sqrt_<Fs>")])
+
+;; Floating point reciprocal approximation
+(define_insn "fre<Fs>"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")]
+ UNSPEC_FRES))]
+ "TARGET_<FFRE>"
+ "@
+ fre<Ftrad> %0,%1
+ xsre<Fvsx> %x0,%x1"
[(set_attr "type" "fp")])
-; builtin fmaf support
-(define_insn "*fmasf4_fpr"
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (fma:SF (match_operand:SF 1 "gpc_reg_operand" "f")
- (match_operand:SF 2 "gpc_reg_operand" "f")
- (match_operand:SF 3 "gpc_reg_operand" "f")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT"
- "fmadds %0,%1,%2,%3"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_maddsub_s")])
+(define_insn "*rsqrt<mode>2"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")]
+ UNSPEC_RSQRT))]
+ "RS6000_RECIP_HAVE_RSQRTE_P (<MODE>mode)"
+ "@
+ frsqrte<Ftrad> %0,%1
+ xsrsqrte<Fvsx> %x0,%x1"
+ [(set_attr "type" "fp")])
-(define_insn "*fmssf4_fpr"
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (fma:SF (match_operand:SF 1 "gpc_reg_operand" "f")
- (match_operand:SF 2 "gpc_reg_operand" "f")
- (neg:SF (match_operand:SF 3 "gpc_reg_operand" "f"))))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT"
- "fmsubs %0,%1,%2,%3"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_maddsub_s")])
+;; Floating point comparisons
+(define_insn "*cmp<mode>_fpr"
+ [(set (match_operand:CCFP 0 "cc_reg_operand" "=y,y")
+ (compare:CCFP (match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")
+ (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>")))]
+ "TARGET_<MODE>_FPR"
+ "@
+ fcmpu %0,%1,%2
+ xscmpudp %0,%x1,%x2"
+ [(set_attr "type" "fpcompare")])
-(define_insn "*nfmasf4_fpr"
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (neg:SF (fma:SF (match_operand:SF 1 "gpc_reg_operand" "f")
- (match_operand:SF 2 "gpc_reg_operand" "f")
- (match_operand:SF 3 "gpc_reg_operand" "f"))))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT"
- "fnmadds %0,%1,%2,%3"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_maddsub_s")])
+;; Floating point conversions
+(define_expand "extendsfdf2"
+ [(set (match_operand:DF 0 "gpc_reg_operand" "")
+ (float_extend:DF (match_operand:SF 1 "reg_or_none500mem_operand" "")))]
+ "TARGET_HARD_FLOAT && ((TARGET_FPRS && TARGET_DOUBLE_FLOAT) || TARGET_E500_DOUBLE)"
+ "")
-(define_insn "*nfmssf4_fpr"
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (neg:SF (fma:SF (match_operand:SF 1 "gpc_reg_operand" "f")
- (match_operand:SF 2 "gpc_reg_operand" "f")
- (neg:SF (match_operand:SF 3 "gpc_reg_operand" "f")))))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT"
- "fnmsubs %0,%1,%2,%3"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_maddsub_s")])
+(define_insn_and_split "*extendsfdf2_fpr"
+ [(set (match_operand:DF 0 "gpc_reg_operand" "=d,?d,d,ws,?ws,wv")
+ (float_extend:DF (match_operand:SF 1 "reg_or_mem_operand" "0,f,m,0,wy,Z")))]
+ "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT"
+ "@
+ #
+ fmr %0,%1
+ lfs%U1%X1 %0,%1
+ #
+ xxlor %x0,%x1,%x1
+ lxsspx %x0,%y1"
+ "&& reload_completed && REG_P (operands[1]) && REGNO (operands[0]) == REGNO (operands[1])"
+ [(const_int 0)]
+{
+ emit_note (NOTE_INSN_DELETED);
+ DONE;
+}
+ [(set_attr_alternative "type"
+ [(const_string "fp")
+ (const_string "fp")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_u")
+ (const_string "fpload")))
+ (const_string "fp")
+ (const_string "vecsimple")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_u")
+ (const_string "fpload")))])])
-(define_expand "sqrtsf2"
+(define_expand "truncdfsf2"
[(set (match_operand:SF 0 "gpc_reg_operand" "")
- (sqrt:SF (match_operand:SF 1 "gpc_reg_operand" "")))]
- "(TARGET_PPC_GPOPT || TARGET_XILINX_FPU)
- && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT
- && !TARGET_SIMPLE_FPU"
+ (float_truncate:SF (match_operand:DF 1 "gpc_reg_operand" "")))]
+ "TARGET_HARD_FLOAT && ((TARGET_FPRS && TARGET_DOUBLE_FLOAT) || TARGET_E500_DOUBLE)"
"")
-(define_insn ""
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (sqrt:SF (match_operand:SF 1 "gpc_reg_operand" "f")))]
- "(TARGET_PPC_GPOPT || TARGET_XILINX_FPU) && TARGET_HARD_FLOAT
- && TARGET_FPRS && TARGET_SINGLE_FLOAT && !TARGET_SIMPLE_FPU"
- "fsqrts %0,%1"
- [(set_attr "type" "ssqrt")])
-
-(define_insn "*rsqrtsf_internal1"
+(define_insn "*truncdfsf2_fpr"
[(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (unspec:SF [(match_operand:SF 1 "gpc_reg_operand" "f")]
- UNSPEC_RSQRT))]
- "TARGET_FRSQRTES"
- "frsqrtes %0,%1"
+ (float_truncate:SF (match_operand:DF 1 "gpc_reg_operand" "d")))]
+ "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT"
+ "frsp %0,%1"
[(set_attr "type" "fp")])
;; This expander is here to avoid FLOAT_WORDS_BIGENDIAN tests in
@@ -4742,37 +5351,82 @@
;; Use an unspec rather providing an if-then-else in RTL, to prevent the
;; compiler from optimizing -0.0
(define_insn "copysign<mode>3_fcpsgn"
- [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<rreg2>")
- (unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "<rreg2>")
- (match_operand:SFDF 2 "gpc_reg_operand" "<rreg2>")]
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")
+ (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>")]
UNSPEC_COPYSIGN))]
- "TARGET_CMPB && !VECTOR_UNIT_VSX_P (<MODE>mode)"
- "fcpsgn %0,%2,%1"
+ "TARGET_<MODE>_FPR && TARGET_CMPB"
+ "@
+ fcpsgn %0,%2,%1
+ xscpsgn<Fvsx> %x0,%x2,%x1"
[(set_attr "type" "fp")])
;; For MIN, MAX, and conditional move, we use DEFINE_EXPAND's that involve a
;; fsel instruction and some auxiliary computations. Then we just have a
;; single DEFINE_INSN for fsel and the define_splits to make them if made by
;; combine.
-(define_expand "smaxsf3"
- [(set (match_operand:SF 0 "gpc_reg_operand" "")
- (if_then_else:SF (ge (match_operand:SF 1 "gpc_reg_operand" "")
- (match_operand:SF 2 "gpc_reg_operand" ""))
+;; For MIN, MAX on non-VSX machines, and conditional move all of the time, we
+;; use DEFINE_EXPAND's that involve a fsel instruction and some auxiliary
+;; computations. Then we just have a single DEFINE_INSN for fsel and the
+;; define_splits to make them if made by combine. On VSX machines we have the
+;; min/max instructions.
+;;
+;; On VSX, we only check for TARGET_VSX instead of checking for a vsx/p8 vector
+;; to allow either DF/SF to use only traditional registers.
+
+(define_expand "smax<mode>3"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "")
+ (if_then_else:SFDF (ge (match_operand:SFDF 1 "gpc_reg_operand" "")
+ (match_operand:SFDF 2 "gpc_reg_operand" ""))
(match_dup 1)
(match_dup 2)))]
- "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT && TARGET_FPRS
- && TARGET_SINGLE_FLOAT && !flag_trapping_math"
- "{ rs6000_emit_minmax (operands[0], SMAX, operands[1], operands[2]); DONE;}")
+ "TARGET_<MODE>_FPR && TARGET_PPC_GFXOPT && !flag_trapping_math"
+{
+ rs6000_emit_minmax (operands[0], SMAX, operands[1], operands[2]);
+ DONE;
+})
-(define_expand "sminsf3"
- [(set (match_operand:SF 0 "gpc_reg_operand" "")
- (if_then_else:SF (ge (match_operand:SF 1 "gpc_reg_operand" "")
- (match_operand:SF 2 "gpc_reg_operand" ""))
+(define_insn "*smax<mode>3_vsx"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (smax:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "%<Ff>,<Fv>")
+ (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>")))]
+ "TARGET_<MODE>_FPR && TARGET_VSX"
+ "xsmaxdp %x0,%x1,%x2"
+ [(set_attr "type" "fp")])
+
+(define_expand "smin<mode>3"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "")
+ (if_then_else:SFDF (ge (match_operand:SFDF 1 "gpc_reg_operand" "")
+ (match_operand:SFDF 2 "gpc_reg_operand" ""))
(match_dup 2)
(match_dup 1)))]
- "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT && TARGET_FPRS
- && TARGET_SINGLE_FLOAT && !flag_trapping_math"
- "{ rs6000_emit_minmax (operands[0], SMIN, operands[1], operands[2]); DONE;}")
+ "TARGET_<MODE>_FPR && TARGET_PPC_GFXOPT && !flag_trapping_math"
+{
+ rs6000_emit_minmax (operands[0], SMIN, operands[1], operands[2]);
+ DONE;
+})
+
+(define_insn "*smin<mode>3_vsx"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (smin:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "%<Ff>,<Fv>")
+ (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>")))]
+ "TARGET_<MODE>_FPR && TARGET_VSX"
+ "xsmindp %x0,%x1,%x2"
+ [(set_attr "type" "fp")])
+
+(define_split
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "")
+ (match_operator:SFDF 3 "min_max_operator"
+ [(match_operand:SFDF 1 "gpc_reg_operand" "")
+ (match_operand:SFDF 2 "gpc_reg_operand" "")]))]
+ "TARGET_<MODE>_FPR && TARGET_PPC_GFXOPT && !flag_trapping_math
+ && !TARGET_VSX"
+ [(const_int 0)]
+{
+ rs6000_emit_minmax (operands[0], GET_CODE (operands[3]), operands[1],
+ operands[2]);
+ DONE;
+})
(define_split
[(set (match_operand:SF 0 "gpc_reg_operand" "")
@@ -4904,208 +5558,9 @@
"fsel %0,%1,%2,%3"
[(set_attr "type" "fp")])
-(define_expand "negdf2"
- [(set (match_operand:DF 0 "gpc_reg_operand" "")
- (neg:DF (match_operand:DF 1 "gpc_reg_operand" "")))]
- "TARGET_HARD_FLOAT && ((TARGET_FPRS && TARGET_DOUBLE_FLOAT) || TARGET_E500_DOUBLE)"
- "")
-
-(define_insn "*negdf2_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=d")
- (neg:DF (match_operand:DF 1 "gpc_reg_operand" "d")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && !VECTOR_UNIT_VSX_P (DFmode)"
- "fneg %0,%1"
- [(set_attr "type" "fp")])
-
-(define_expand "absdf2"
- [(set (match_operand:DF 0 "gpc_reg_operand" "")
- (abs:DF (match_operand:DF 1 "gpc_reg_operand" "")))]
- "TARGET_HARD_FLOAT && ((TARGET_FPRS && TARGET_DOUBLE_FLOAT) || TARGET_E500_DOUBLE)"
- "")
-
-(define_insn "*absdf2_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=d")
- (abs:DF (match_operand:DF 1 "gpc_reg_operand" "d")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && !VECTOR_UNIT_VSX_P (DFmode)"
- "fabs %0,%1"
- [(set_attr "type" "fp")])
-
-(define_insn "*nabsdf2_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=d")
- (neg:DF (abs:DF (match_operand:DF 1 "gpc_reg_operand" "d"))))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && !VECTOR_UNIT_VSX_P (DFmode)"
- "fnabs %0,%1"
- [(set_attr "type" "fp")])
-
-(define_expand "adddf3"
- [(set (match_operand:DF 0 "gpc_reg_operand" "")
- (plus:DF (match_operand:DF 1 "gpc_reg_operand" "")
- (match_operand:DF 2 "gpc_reg_operand" "")))]
- "TARGET_HARD_FLOAT && ((TARGET_FPRS && TARGET_DOUBLE_FLOAT) || TARGET_E500_DOUBLE)"
- "")
-
-(define_insn "*adddf3_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=d")
- (plus:DF (match_operand:DF 1 "gpc_reg_operand" "%d")
- (match_operand:DF 2 "gpc_reg_operand" "d")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && !VECTOR_UNIT_VSX_P (DFmode)"
- "fadd %0,%1,%2"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_addsub_d")])
-
-(define_expand "subdf3"
- [(set (match_operand:DF 0 "gpc_reg_operand" "")
- (minus:DF (match_operand:DF 1 "gpc_reg_operand" "")
- (match_operand:DF 2 "gpc_reg_operand" "")))]
- "TARGET_HARD_FLOAT && ((TARGET_FPRS && TARGET_DOUBLE_FLOAT) || TARGET_E500_DOUBLE)"
- "")
-
-(define_insn "*subdf3_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=d")
- (minus:DF (match_operand:DF 1 "gpc_reg_operand" "d")
- (match_operand:DF 2 "gpc_reg_operand" "d")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && !VECTOR_UNIT_VSX_P (DFmode)"
- "fsub %0,%1,%2"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_addsub_d")])
-
-(define_expand "muldf3"
- [(set (match_operand:DF 0 "gpc_reg_operand" "")
- (mult:DF (match_operand:DF 1 "gpc_reg_operand" "")
- (match_operand:DF 2 "gpc_reg_operand" "")))]
- "TARGET_HARD_FLOAT && ((TARGET_FPRS && TARGET_DOUBLE_FLOAT) || TARGET_E500_DOUBLE)"
- "")
-
-(define_insn "*muldf3_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=d")
- (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%d")
- (match_operand:DF 2 "gpc_reg_operand" "d")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && !VECTOR_UNIT_VSX_P (DFmode)"
- "fmul %0,%1,%2"
- [(set_attr "type" "dmul")
- (set_attr "fp_type" "fp_mul_d")])
-
-(define_expand "divdf3"
- [(set (match_operand:DF 0 "gpc_reg_operand" "")
- (div:DF (match_operand:DF 1 "gpc_reg_operand" "")
- (match_operand:DF 2 "gpc_reg_operand" "")))]
- "TARGET_HARD_FLOAT
- && ((TARGET_FPRS && TARGET_DOUBLE_FLOAT) || TARGET_E500_DOUBLE)
- && !TARGET_SIMPLE_FPU"
- "")
-
-(define_insn "*divdf3_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=d")
- (div:DF (match_operand:DF 1 "gpc_reg_operand" "d")
- (match_operand:DF 2 "gpc_reg_operand" "d")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT && !TARGET_SIMPLE_FPU
- && !VECTOR_UNIT_VSX_P (DFmode)"
- "fdiv %0,%1,%2"
- [(set_attr "type" "ddiv")])
-
-(define_insn "*fred_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
- (unspec:DF [(match_operand:DF 1 "gpc_reg_operand" "f")] UNSPEC_FRES))]
- "TARGET_FRE && !VECTOR_UNIT_VSX_P (DFmode)"
- "fre %0,%1"
- [(set_attr "type" "fp")])
-
-(define_insn "*rsqrtdf_internal1"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=d")
- (unspec:DF [(match_operand:DF 1 "gpc_reg_operand" "d")]
- UNSPEC_RSQRT))]
- "TARGET_FRSQRTE && !VECTOR_UNIT_VSX_P (DFmode)"
- "frsqrte %0,%1"
- [(set_attr "type" "fp")])
-
-; builtin fma support
-(define_insn "*fmadf4_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
- (fma:DF (match_operand:DF 1 "gpc_reg_operand" "f")
- (match_operand:DF 2 "gpc_reg_operand" "f")
- (match_operand:DF 3 "gpc_reg_operand" "f")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && VECTOR_UNIT_NONE_P (DFmode)"
- "fmadd %0,%1,%2,%3"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_maddsub_d")])
-
-(define_insn "*fmsdf4_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
- (fma:DF (match_operand:DF 1 "gpc_reg_operand" "f")
- (match_operand:DF 2 "gpc_reg_operand" "f")
- (neg:DF (match_operand:DF 3 "gpc_reg_operand" "f"))))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && VECTOR_UNIT_NONE_P (DFmode)"
- "fmsub %0,%1,%2,%3"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_maddsub_d")])
-
-(define_insn "*nfmadf4_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
- (neg:DF (fma:DF (match_operand:DF 1 "gpc_reg_operand" "f")
- (match_operand:DF 2 "gpc_reg_operand" "f")
- (match_operand:DF 3 "gpc_reg_operand" "f"))))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && VECTOR_UNIT_NONE_P (DFmode)"
- "fnmadd %0,%1,%2,%3"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_maddsub_d")])
-
-(define_insn "*nfmsdf4_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
- (neg:DF (fma:DF (match_operand:DF 1 "gpc_reg_operand" "f")
- (match_operand:DF 2 "gpc_reg_operand" "f")
- (neg:DF (match_operand:DF 3 "gpc_reg_operand" "f")))))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && VECTOR_UNIT_NONE_P (DFmode)"
- "fnmsub %0,%1,%2,%3"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_maddsub_d")])
-
-(define_expand "sqrtdf2"
- [(set (match_operand:DF 0 "gpc_reg_operand" "")
- (sqrt:DF (match_operand:DF 1 "gpc_reg_operand" "")))]
- "TARGET_PPC_GPOPT && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT"
- "")
-
-(define_insn "*sqrtdf2_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=d")
- (sqrt:DF (match_operand:DF 1 "gpc_reg_operand" "d")))]
- "TARGET_PPC_GPOPT && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && !VECTOR_UNIT_VSX_P (DFmode)"
- "fsqrt %0,%1"
- [(set_attr "type" "dsqrt")])
-
;; The conditional move instructions allow us to perform max and min
;; operations even when
-(define_expand "smaxdf3"
- [(set (match_operand:DF 0 "gpc_reg_operand" "")
- (if_then_else:DF (ge (match_operand:DF 1 "gpc_reg_operand" "")
- (match_operand:DF 2 "gpc_reg_operand" ""))
- (match_dup 1)
- (match_dup 2)))]
- "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && !flag_trapping_math"
- "{ rs6000_emit_minmax (operands[0], SMAX, operands[1], operands[2]); DONE;}")
-
-(define_expand "smindf3"
- [(set (match_operand:DF 0 "gpc_reg_operand" "")
- (if_then_else:DF (ge (match_operand:DF 1 "gpc_reg_operand" "")
- (match_operand:DF 2 "gpc_reg_operand" ""))
- (match_dup 2)
- (match_dup 1)))]
- "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && !flag_trapping_math"
- "{ rs6000_emit_minmax (operands[0], SMIN, operands[1], operands[2]); DONE;}")
-
(define_split
[(set (match_operand:DF 0 "gpc_reg_operand" "")
(match_operator:DF 3 "min_max_operator"
@@ -5159,12 +5614,15 @@
; We don't define lfiwax/lfiwzx with the normal definition, because we
; don't want to support putting SImode in FPR registers.
(define_insn "lfiwax"
- [(set (match_operand:DI 0 "gpc_reg_operand" "=d")
- (unspec:DI [(match_operand:SI 1 "indexed_or_indirect_operand" "Z")]
+ [(set (match_operand:DI 0 "gpc_reg_operand" "=d,wm,!wm")
+ (unspec:DI [(match_operand:SI 1 "reg_or_indexed_operand" "Z,Z,r")]
UNSPEC_LFIWAX))]
"TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT && TARGET_LFIWAX"
- "lfiwax %0,%y1"
- [(set_attr "type" "fpload")])
+ "@
+ lfiwax %0,%y1
+ lxsiwax %x0,%y1
+ mtvsrwa %x0,%1"
+ [(set_attr "type" "fpload,fpload,mffgpr")])
; This split must be run before register allocation because it allocates the
; memory slot that is needed to move values to/from the FPR. We don't allocate
@@ -5186,7 +5644,8 @@
rtx src = operands[1];
rtx tmp;
- if (!MEM_P (src) && TARGET_MFPGPR && TARGET_POWERPC64)
+ if (!MEM_P (src) && TARGET_POWERPC64
+ && (TARGET_MFPGPR || TARGET_DIRECT_MOVE))
tmp = convert_to_mode (DImode, src, false);
else
{
@@ -5235,12 +5694,15 @@
(set_attr "type" "fpload")])
(define_insn "lfiwzx"
- [(set (match_operand:DI 0 "gpc_reg_operand" "=d")
- (unspec:DI [(match_operand:SI 1 "indexed_or_indirect_operand" "Z")]
+ [(set (match_operand:DI 0 "gpc_reg_operand" "=d,wm,!wm")
+ (unspec:DI [(match_operand:SI 1 "reg_or_indexed_operand" "Z,Z,r")]
UNSPEC_LFIWZX))]
"TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT && TARGET_LFIWZX"
- "lfiwzx %0,%y1"
- [(set_attr "type" "fpload")])
+ "@
+ lfiwzx %0,%y1
+ lxsiwzx %x0,%y1
+ mtvsrwz %x0,%1"
+ [(set_attr "type" "fpload,fpload,mftgpr")])
(define_insn_and_split "floatunssi<mode>2_lfiwzx"
[(set (match_operand:SFDF 0 "gpc_reg_operand" "=d")
@@ -5257,7 +5719,8 @@
rtx src = operands[1];
rtx tmp;
- if (!MEM_P (src) && TARGET_MFPGPR && TARGET_POWERPC64)
+ if (!MEM_P (src) && TARGET_POWERPC64
+ && (TARGET_MFPGPR || TARGET_DIRECT_MOVE))
tmp = convert_to_mode (DImode, src, true);
else
{
@@ -5548,7 +6011,7 @@
emit_insn (gen_stfiwx (dest, tmp));
DONE;
}
- else if (TARGET_MFPGPR && TARGET_POWERPC64)
+ else if (TARGET_POWERPC64 && (TARGET_MFPGPR || TARGET_DIRECT_MOVE))
{
dest = gen_lowpart (DImode, dest);
emit_move_insn (dest, tmp);
@@ -5642,7 +6105,7 @@
emit_insn (gen_stfiwx (dest, tmp));
DONE;
}
- else if (TARGET_MFPGPR && TARGET_POWERPC64)
+ else if (TARGET_POWERPC64 && (TARGET_MFPGPR || TARGET_DIRECT_MOVE))
{
dest = gen_lowpart (DImode, dest);
emit_move_insn (dest, tmp);
@@ -5781,66 +6244,52 @@
[(set (match_operand:DI 0 "gpc_reg_operand" "=d")
(unspec:DI [(match_operand:SFDF 1 "gpc_reg_operand" "<rreg2>")]
UNSPEC_FCTID))]
- "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS && <TARGET_FLOAT>"
+ "TARGET_<MODE>_FPR && TARGET_FPRND"
"fctid %0,%1"
[(set_attr "type" "fp")])
-(define_expand "btrunc<mode>2"
- [(set (match_operand:SFDF 0 "gpc_reg_operand" "")
- (unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "")]
- UNSPEC_FRIZ))]
- "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS && <TARGET_FLOAT>"
- "")
-
-(define_insn "*btrunc<mode>2_fpr"
- [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<rreg2>")
- (unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "<rreg2>")]
+(define_insn "btrunc<mode>2"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")]
UNSPEC_FRIZ))]
- "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS && <TARGET_FLOAT>
- && !VECTOR_UNIT_VSX_P (<MODE>mode)"
- "friz %0,%1"
- [(set_attr "type" "fp")])
+ "TARGET_<MODE>_FPR && TARGET_FPRND"
+ "@
+ friz %0,%1
+ xsrdpiz %x0,%x1"
+ [(set_attr "type" "fp")
+ (set_attr "fp_type" "fp_addsub_<Fs>")])
-(define_expand "ceil<mode>2"
- [(set (match_operand:SFDF 0 "gpc_reg_operand" "")
- (unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "")]
+(define_insn "ceil<mode>2"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")]
UNSPEC_FRIP))]
- "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS && <TARGET_FLOAT>"
- "")
-
-(define_insn "*ceil<mode>2_fpr"
- [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<rreg2>")
- (unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "<rreg2>")]
- UNSPEC_FRIP))]
- "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS && <TARGET_FLOAT>
- && !VECTOR_UNIT_VSX_P (<MODE>mode)"
- "frip %0,%1"
- [(set_attr "type" "fp")])
-
-(define_expand "floor<mode>2"
- [(set (match_operand:SFDF 0 "gpc_reg_operand" "")
- (unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "")]
- UNSPEC_FRIM))]
- "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS && <TARGET_FLOAT>"
- "")
+ "TARGET_<MODE>_FPR && TARGET_FPRND"
+ "@
+ frip %0,%1
+ xsrdpip %x0,%x1"
+ [(set_attr "type" "fp")
+ (set_attr "fp_type" "fp_addsub_<Fs>")])
-(define_insn "*floor<mode>2_fpr"
- [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<rreg2>")
- (unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "<rreg2>")]
+(define_insn "floor<mode>2"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>")
+ (unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")]
UNSPEC_FRIM))]
- "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS && <TARGET_FLOAT>
- && !VECTOR_UNIT_VSX_P (<MODE>mode)"
- "frim %0,%1"
- [(set_attr "type" "fp")])
+ "TARGET_<MODE>_FPR && TARGET_FPRND"
+ "@
+ frim %0,%1
+ xsrdpim %x0,%x1"
+ [(set_attr "type" "fp")
+ (set_attr "fp_type" "fp_addsub_<Fs>")])
;; No VSX equivalent to frin
(define_insn "round<mode>2"
[(set (match_operand:SFDF 0 "gpc_reg_operand" "=<rreg2>")
(unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "<rreg2>")]
UNSPEC_FRIN))]
- "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS && <TARGET_FLOAT>"
+ "TARGET_<MODE>_FPR && TARGET_FPRND"
"frin %0,%1"
- [(set_attr "type" "fp")])
+ [(set_attr "type" "fp")
+ (set_attr "fp_type" "fp_addsub_<Fs>")])
; An UNSPEC is used so we don't have to support SImode in FP registers.
(define_insn "stfiwx"
@@ -6084,6 +6533,49 @@
[(set_attr "length" "8")
(set_attr "type" "fpload")])
+;; Define the TImode operations that can be done in a small number
+;; of instructions. The & constraints are to prevent the register
+;; allocator from allocating registers that overlap with the inputs
+;; (for example, having an input in 7,8 and an output in 6,7). We
+;; also allow for the output being the same as one of the inputs.
+
+(define_insn "addti3"
+ [(set (match_operand:TI 0 "gpc_reg_operand" "=&r,&r,r,r")
+ (plus:TI (match_operand:TI 1 "gpc_reg_operand" "%r,r,0,0")
+ (match_operand:TI 2 "reg_or_short_operand" "r,I,r,I")))]
+ "TARGET_64BIT"
+{
+ if (WORDS_BIG_ENDIAN)
+ return (GET_CODE (operands[2])) != CONST_INT
+ ? \"addc %L0,%L1,%L2\;adde %0,%1,%2\"
+ : \"addic %L0,%L1,%2\;add%G2e %0,%1\";
+ else
+ return (GET_CODE (operands[2])) != CONST_INT
+ ? \"addc %0,%1,%2\;adde %L0,%L1,%L2\"
+ : \"addic %0,%1,%2\;add%G2e %L0,%L1\";
+}
+ [(set_attr "type" "two")
+ (set_attr "length" "8")])
+
+(define_insn "subti3"
+ [(set (match_operand:TI 0 "gpc_reg_operand" "=&r,&r,r,r,r")
+ (minus:TI (match_operand:TI 1 "reg_or_short_operand" "r,I,0,r,I")
+ (match_operand:TI 2 "gpc_reg_operand" "r,r,r,0,0")))]
+ "TARGET_64BIT"
+{
+ if (WORDS_BIG_ENDIAN)
+ return (GET_CODE (operands[1]) != CONST_INT)
+ ? \"subfc %L0,%L2,%L1\;subfe %0,%2,%1\"
+ : \"subfic %L0,%L2,%1\;subf%G1e %0,%2\";
+ else
+ return (GET_CODE (operands[1]) != CONST_INT)
+ ? \"subfc %0,%2,%1\;subfe %L0,%L2,%L1\"
+ : \"subfic %0,%2,%1\;subf%G1e %L0,%L2\";
+}
+ [(set_attr "type" "two")
+ (set_attr "length" "8")])
+
+
;; Define the DImode operations that can be done in a small number
;; of instructions. The & constraints are to prevent the register
;; allocator from allocating registers that overlap with the inputs
@@ -6260,11 +6752,11 @@
[(set_attr "type" "two,three")
(set_attr "length" "8,12")])
-(define_insn "*ashrdisi3_noppc64"
+(define_insn "*ashrdisi3_noppc64be"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(subreg:SI (ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
(const_int 32)) 4))]
- "TARGET_32BIT && !TARGET_POWERPC64"
+ "TARGET_32BIT && !TARGET_POWERPC64 && WORDS_BIG_ENDIAN"
"*
{
if (REGNO (operands[0]) == REGNO (operands[1]))
@@ -6551,19 +7043,31 @@
(const_int 0)))]
"")
-(define_insn "*rotldi3_internal7"
+(define_insn "*rotldi3_internal7le"
[(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
(zero_extend:DI
(subreg:QI
(rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
(match_operand:DI 2 "reg_or_cint_operand" "r,i")) 0)))]
- "TARGET_POWERPC64"
+ "TARGET_POWERPC64 && !BYTES_BIG_ENDIAN"
+ "@
+ rldcl %0,%1,%2,56
+ rldicl %0,%1,%H2,56"
+ [(set_attr "type" "var_shift_rotate,integer")])
+
+(define_insn "*rotldi3_internal7be"
+ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
+ (zero_extend:DI
+ (subreg:QI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
+ (match_operand:DI 2 "reg_or_cint_operand" "r,i")) 7)))]
+ "TARGET_POWERPC64 && BYTES_BIG_ENDIAN"
"@
rldcl %0,%1,%2,56
rldicl %0,%1,%H2,56"
[(set_attr "type" "var_shift_rotate,integer")])
-(define_insn "*rotldi3_internal8"
+(define_insn "*rotldi3_internal8le"
[(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC (zero_extend:DI
(subreg:QI
@@ -6571,7 +7075,24 @@
(match_operand:DI 2 "reg_or_cint_operand" "r,i,r,i")) 0))
(const_int 0)))
(clobber (match_scratch:DI 3 "=r,r,r,r"))]
- "TARGET_64BIT"
+ "TARGET_64BIT && !BYTES_BIG_ENDIAN"
+ "@
+ rldcl. %3,%1,%2,56
+ rldicl. %3,%1,%H2,56
+ #
+ #"
+ [(set_attr "type" "var_delayed_compare,delayed_compare,var_delayed_compare,delayed_compare")
+ (set_attr "length" "4,4,8,8")])
+
+(define_insn "*rotldi3_internal8be"
+ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y")
+ (compare:CC (zero_extend:DI
+ (subreg:QI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r,r,r,r")
+ (match_operand:DI 2 "reg_or_cint_operand" "r,i,r,i")) 7))
+ (const_int 0)))
+ (clobber (match_scratch:DI 3 "=r,r,r,r"))]
+ "TARGET_64BIT && BYTES_BIG_ENDIAN"
"@
rldcl. %3,%1,%2,56
rldicl. %3,%1,%H2,56
@@ -6588,7 +7109,7 @@
(match_operand:DI 2 "reg_or_cint_operand" "")) 0))
(const_int 0)))
(clobber (match_scratch:DI 3 ""))]
- "TARGET_POWERPC64 && reload_completed"
+ "TARGET_POWERPC64 && !BYTES_BIG_ENDIAN && reload_completed"
[(set (match_dup 3)
(zero_extend:DI (subreg:QI
(rotate:DI (match_dup 1)
@@ -6598,7 +7119,25 @@
(const_int 0)))]
"")
-(define_insn "*rotldi3_internal9"
+(define_split
+ [(set (match_operand:CC 0 "cc_reg_not_micro_cr0_operand" "")
+ (compare:CC (zero_extend:DI
+ (subreg:QI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "")
+ (match_operand:DI 2 "reg_or_cint_operand" "")) 7))
+ (const_int 0)))
+ (clobber (match_scratch:DI 3 ""))]
+ "TARGET_POWERPC64 && BYTES_BIG_ENDIAN && reload_completed"
+ [(set (match_dup 3)
+ (zero_extend:DI (subreg:QI
+ (rotate:DI (match_dup 1)
+ (match_dup 2)) 7)))
+ (set (match_dup 0)
+ (compare:CC (match_dup 3)
+ (const_int 0)))]
+ "")
+
+(define_insn "*rotldi3_internal9le"
[(set (match_operand:CC 3 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC (zero_extend:DI
(subreg:QI
@@ -6607,7 +7146,25 @@
(const_int 0)))
(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r")
(zero_extend:DI (subreg:QI (rotate:DI (match_dup 1) (match_dup 2)) 0)))]
- "TARGET_64BIT"
+ "TARGET_64BIT && !BYTES_BIG_ENDIAN"
+ "@
+ rldcl. %0,%1,%2,56
+ rldicl. %0,%1,%H2,56
+ #
+ #"
+ [(set_attr "type" "var_delayed_compare,delayed_compare,var_delayed_compare,delayed_compare")
+ (set_attr "length" "4,4,8,8")])
+
+(define_insn "*rotldi3_internal9be"
+ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,?y,?y")
+ (compare:CC (zero_extend:DI
+ (subreg:QI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r,r,r,r")
+ (match_operand:DI 2 "reg_or_cint_operand" "r,i,r,i")) 7))
+ (const_int 0)))
+ (set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r")
+ (zero_extend:DI (subreg:QI (rotate:DI (match_dup 1) (match_dup 2)) 7)))]
+ "TARGET_64BIT && BYTES_BIG_ENDIAN"
"@
rldcl. %0,%1,%2,56
rldicl. %0,%1,%H2,56
@@ -6625,7 +7182,7 @@
(const_int 0)))
(set (match_operand:DI 0 "gpc_reg_operand" "")
(zero_extend:DI (subreg:QI (rotate:DI (match_dup 1) (match_dup 2)) 0)))]
- "TARGET_POWERPC64 && reload_completed"
+ "TARGET_POWERPC64 && !BYTES_BIG_ENDIAN && reload_completed"
[(set (match_dup 0)
(zero_extend:DI (subreg:QI (rotate:DI (match_dup 1) (match_dup 2)) 0)))
(set (match_dup 3)
@@ -6633,19 +7190,48 @@
(const_int 0)))]
"")
-(define_insn "*rotldi3_internal10"
+(define_split
+ [(set (match_operand:CC 3 "cc_reg_not_micro_cr0_operand" "")
+ (compare:CC (zero_extend:DI
+ (subreg:QI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "")
+ (match_operand:DI 2 "reg_or_cint_operand" "")) 7))
+ (const_int 0)))
+ (set (match_operand:DI 0 "gpc_reg_operand" "")
+ (zero_extend:DI (subreg:QI (rotate:DI (match_dup 1) (match_dup 2)) 7)))]
+ "TARGET_POWERPC64 && BYTES_BIG_ENDIAN && reload_completed"
+ [(set (match_dup 0)
+ (zero_extend:DI (subreg:QI (rotate:DI (match_dup 1) (match_dup 2)) 7)))
+ (set (match_dup 3)
+ (compare:CC (match_dup 0)
+ (const_int 0)))]
+ "")
+
+(define_insn "*rotldi3_internal10le"
[(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
(zero_extend:DI
(subreg:HI
(rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
(match_operand:DI 2 "reg_or_cint_operand" "r,i")) 0)))]
- "TARGET_POWERPC64"
+ "TARGET_POWERPC64 && !BYTES_BIG_ENDIAN"
"@
rldcl %0,%1,%2,48
rldicl %0,%1,%H2,48"
[(set_attr "type" "var_shift_rotate,integer")])
-(define_insn "*rotldi3_internal11"
+(define_insn "*rotldi3_internal10be"
+ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
+ (zero_extend:DI
+ (subreg:HI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
+ (match_operand:DI 2 "reg_or_cint_operand" "r,i")) 6)))]
+ "TARGET_POWERPC64 && BYTES_BIG_ENDIAN"
+ "@
+ rldcl %0,%1,%2,48
+ rldicl %0,%1,%H2,48"
+ [(set_attr "type" "var_shift_rotate,integer")])
+
+(define_insn "*rotldi3_internal11le"
[(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC (zero_extend:DI
(subreg:HI
@@ -6653,7 +7239,24 @@
(match_operand:DI 2 "reg_or_cint_operand" "r,i,r,i")) 0))
(const_int 0)))
(clobber (match_scratch:DI 3 "=r,r,r,r"))]
- "TARGET_64BIT"
+ "TARGET_64BIT && !BYTES_BIG_ENDIAN"
+ "@
+ rldcl. %3,%1,%2,48
+ rldicl. %3,%1,%H2,48
+ #
+ #"
+ [(set_attr "type" "var_delayed_compare,delayed_compare,var_delayed_compare,delayed_compare")
+ (set_attr "length" "4,4,8,8")])
+
+(define_insn "*rotldi3_internal11be"
+ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y")
+ (compare:CC (zero_extend:DI
+ (subreg:HI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r,r,r,r")
+ (match_operand:DI 2 "reg_or_cint_operand" "r,i,r,i")) 6))
+ (const_int 0)))
+ (clobber (match_scratch:DI 3 "=r,r,r,r"))]
+ "TARGET_64BIT && BYTES_BIG_ENDIAN"
"@
rldcl. %3,%1,%2,48
rldicl. %3,%1,%H2,48
@@ -6670,7 +7273,7 @@
(match_operand:DI 2 "reg_or_cint_operand" "")) 0))
(const_int 0)))
(clobber (match_scratch:DI 3 ""))]
- "TARGET_POWERPC64 && reload_completed"
+ "TARGET_POWERPC64 && !BYTES_BIG_ENDIAN && reload_completed"
[(set (match_dup 3)
(zero_extend:DI (subreg:HI
(rotate:DI (match_dup 1)
@@ -6680,7 +7283,25 @@
(const_int 0)))]
"")
-(define_insn "*rotldi3_internal12"
+(define_split
+ [(set (match_operand:CC 0 "cc_reg_not_micro_cr0_operand" "")
+ (compare:CC (zero_extend:DI
+ (subreg:HI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "")
+ (match_operand:DI 2 "reg_or_cint_operand" "")) 6))
+ (const_int 0)))
+ (clobber (match_scratch:DI 3 ""))]
+ "TARGET_POWERPC64 && BYTES_BIG_ENDIAN && reload_completed"
+ [(set (match_dup 3)
+ (zero_extend:DI (subreg:HI
+ (rotate:DI (match_dup 1)
+ (match_dup 2)) 6)))
+ (set (match_dup 0)
+ (compare:CC (match_dup 3)
+ (const_int 0)))]
+ "")
+
+(define_insn "*rotldi3_internal12le"
[(set (match_operand:CC 3 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC (zero_extend:DI
(subreg:HI
@@ -6689,7 +7310,25 @@
(const_int 0)))
(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r")
(zero_extend:DI (subreg:HI (rotate:DI (match_dup 1) (match_dup 2)) 0)))]
- "TARGET_64BIT"
+ "TARGET_64BIT && !BYTES_BIG_ENDIAN"
+ "@
+ rldcl. %0,%1,%2,48
+ rldicl. %0,%1,%H2,48
+ #
+ #"
+ [(set_attr "type" "var_delayed_compare,delayed_compare,var_delayed_compare,delayed_compare")
+ (set_attr "length" "4,4,8,8")])
+
+(define_insn "*rotldi3_internal12be"
+ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,?y,?y")
+ (compare:CC (zero_extend:DI
+ (subreg:HI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r,r,r,r")
+ (match_operand:DI 2 "reg_or_cint_operand" "r,i,r,i")) 6))
+ (const_int 0)))
+ (set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r")
+ (zero_extend:DI (subreg:HI (rotate:DI (match_dup 1) (match_dup 2)) 6)))]
+ "TARGET_64BIT && BYTES_BIG_ENDIAN"
"@
rldcl. %0,%1,%2,48
rldicl. %0,%1,%H2,48
@@ -6707,7 +7346,7 @@
(const_int 0)))
(set (match_operand:DI 0 "gpc_reg_operand" "")
(zero_extend:DI (subreg:HI (rotate:DI (match_dup 1) (match_dup 2)) 0)))]
- "TARGET_POWERPC64 && reload_completed"
+ "TARGET_POWERPC64 && !BYTES_BIG_ENDIAN && reload_completed"
[(set (match_dup 0)
(zero_extend:DI (subreg:HI (rotate:DI (match_dup 1) (match_dup 2)) 0)))
(set (match_dup 3)
@@ -6715,19 +7354,48 @@
(const_int 0)))]
"")
-(define_insn "*rotldi3_internal13"
+(define_split
+ [(set (match_operand:CC 3 "cc_reg_not_micro_cr0_operand" "")
+ (compare:CC (zero_extend:DI
+ (subreg:HI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "")
+ (match_operand:DI 2 "reg_or_cint_operand" "")) 6))
+ (const_int 0)))
+ (set (match_operand:DI 0 "gpc_reg_operand" "")
+ (zero_extend:DI (subreg:HI (rotate:DI (match_dup 1) (match_dup 2)) 6)))]
+ "TARGET_POWERPC64 && BYTES_BIG_ENDIAN && reload_completed"
+ [(set (match_dup 0)
+ (zero_extend:DI (subreg:HI (rotate:DI (match_dup 1) (match_dup 2)) 6)))
+ (set (match_dup 3)
+ (compare:CC (match_dup 0)
+ (const_int 0)))]
+ "")
+
+(define_insn "*rotldi3_internal13le"
[(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
(zero_extend:DI
(subreg:SI
(rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
(match_operand:DI 2 "reg_or_cint_operand" "r,i")) 0)))]
- "TARGET_POWERPC64"
+ "TARGET_POWERPC64 && !BYTES_BIG_ENDIAN"
+ "@
+ rldcl %0,%1,%2,32
+ rldicl %0,%1,%H2,32"
+ [(set_attr "type" "var_shift_rotate,integer")])
+
+(define_insn "*rotldi3_internal13be"
+ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
+ (zero_extend:DI
+ (subreg:SI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
+ (match_operand:DI 2 "reg_or_cint_operand" "r,i")) 4)))]
+ "TARGET_POWERPC64 && BYTES_BIG_ENDIAN"
"@
rldcl %0,%1,%2,32
rldicl %0,%1,%H2,32"
[(set_attr "type" "var_shift_rotate,integer")])
-(define_insn "*rotldi3_internal14"
+(define_insn "*rotldi3_internal14le"
[(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC (zero_extend:DI
(subreg:SI
@@ -6735,7 +7403,24 @@
(match_operand:DI 2 "reg_or_cint_operand" "r,i,r,i")) 0))
(const_int 0)))
(clobber (match_scratch:DI 3 "=r,r,r,r"))]
- "TARGET_64BIT"
+ "TARGET_64BIT && !BYTES_BIG_ENDIAN"
+ "@
+ rldcl. %3,%1,%2,32
+ rldicl. %3,%1,%H2,32
+ #
+ #"
+ [(set_attr "type" "var_delayed_compare,delayed_compare,var_delayed_compare,delayed_compare")
+ (set_attr "length" "4,4,8,8")])
+
+(define_insn "*rotldi3_internal14be"
+ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y")
+ (compare:CC (zero_extend:DI
+ (subreg:SI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r,r,r,r")
+ (match_operand:DI 2 "reg_or_cint_operand" "r,i,r,i")) 4))
+ (const_int 0)))
+ (clobber (match_scratch:DI 3 "=r,r,r,r"))]
+ "TARGET_64BIT && BYTES_BIG_ENDIAN"
"@
rldcl. %3,%1,%2,32
rldicl. %3,%1,%H2,32
@@ -6752,7 +7437,7 @@
(match_operand:DI 2 "reg_or_cint_operand" "")) 0))
(const_int 0)))
(clobber (match_scratch:DI 3 ""))]
- "TARGET_POWERPC64 && reload_completed"
+ "TARGET_POWERPC64 && !BYTES_BIG_ENDIAN && reload_completed"
[(set (match_dup 3)
(zero_extend:DI (subreg:SI
(rotate:DI (match_dup 1)
@@ -6762,7 +7447,25 @@
(const_int 0)))]
"")
-(define_insn "*rotldi3_internal15"
+(define_split
+ [(set (match_operand:CC 0 "cc_reg_not_micro_cr0_operand" "")
+ (compare:CC (zero_extend:DI
+ (subreg:SI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "")
+ (match_operand:DI 2 "reg_or_cint_operand" "")) 4))
+ (const_int 0)))
+ (clobber (match_scratch:DI 3 ""))]
+ "TARGET_POWERPC64 && BYTES_BIG_ENDIAN && reload_completed"
+ [(set (match_dup 3)
+ (zero_extend:DI (subreg:SI
+ (rotate:DI (match_dup 1)
+ (match_dup 2)) 4)))
+ (set (match_dup 0)
+ (compare:CC (match_dup 3)
+ (const_int 0)))]
+ "")
+
+(define_insn "*rotldi3_internal15le"
[(set (match_operand:CC 3 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC (zero_extend:DI
(subreg:SI
@@ -6771,7 +7474,25 @@
(const_int 0)))
(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r")
(zero_extend:DI (subreg:SI (rotate:DI (match_dup 1) (match_dup 2)) 0)))]
- "TARGET_64BIT"
+ "TARGET_64BIT && !BYTES_BIG_ENDIAN"
+ "@
+ rldcl. %0,%1,%2,32
+ rldicl. %0,%1,%H2,32
+ #
+ #"
+ [(set_attr "type" "var_delayed_compare,delayed_compare,var_delayed_compare,delayed_compare")
+ (set_attr "length" "4,4,8,8")])
+
+(define_insn "*rotldi3_internal15be"
+ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,?y,?y")
+ (compare:CC (zero_extend:DI
+ (subreg:SI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r,r,r,r")
+ (match_operand:DI 2 "reg_or_cint_operand" "r,i,r,i")) 4))
+ (const_int 0)))
+ (set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r")
+ (zero_extend:DI (subreg:SI (rotate:DI (match_dup 1) (match_dup 2)) 4)))]
+ "TARGET_64BIT && BYTES_BIG_ENDIAN"
"@
rldcl. %0,%1,%2,32
rldicl. %0,%1,%H2,32
@@ -6789,7 +7510,7 @@
(const_int 0)))
(set (match_operand:DI 0 "gpc_reg_operand" "")
(zero_extend:DI (subreg:SI (rotate:DI (match_dup 1) (match_dup 2)) 0)))]
- "TARGET_POWERPC64 && reload_completed"
+ "TARGET_POWERPC64 && !BYTES_BIG_ENDIAN && reload_completed"
[(set (match_dup 0)
(zero_extend:DI (subreg:SI (rotate:DI (match_dup 1) (match_dup 2)) 0)))
(set (match_dup 3)
@@ -6797,6 +7518,23 @@
(const_int 0)))]
"")
+(define_split
+ [(set (match_operand:CC 3 "cc_reg_not_micro_cr0_operand" "")
+ (compare:CC (zero_extend:DI
+ (subreg:SI
+ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "")
+ (match_operand:DI 2 "reg_or_cint_operand" "")) 4))
+ (const_int 0)))
+ (set (match_operand:DI 0 "gpc_reg_operand" "")
+ (zero_extend:DI (subreg:SI (rotate:DI (match_dup 1) (match_dup 2)) 4)))]
+ "TARGET_POWERPC64 && BYTES_BIG_ENDIAN && reload_completed"
+ [(set (match_dup 0)
+ (zero_extend:DI (subreg:SI (rotate:DI (match_dup 1) (match_dup 2)) 4)))
+ (set (match_dup 3)
+ (compare:CC (match_dup 0)
+ (const_int 0)))]
+ "")
+
(define_expand "ashldi3"
[(set (match_operand:DI 0 "gpc_reg_operand" "")
(ashift:DI (match_operand:DI 1 "gpc_reg_operand" "")
@@ -7195,10 +7933,19 @@
[(parallel
[(set (match_operand:DI 0 "gpc_reg_operand" "")
(and:DI (match_operand:DI 1 "gpc_reg_operand" "")
- (match_operand:DI 2 "and64_2_operand" "")))
+ (match_operand:DI 2 "reg_or_cint_operand" "")))
(clobber (match_scratch:CC 3 ""))])]
- "TARGET_POWERPC64"
- "")
+ ""
+{
+ if (!TARGET_POWERPC64)
+ {
+ rtx cc = gen_rtx_SCRATCH (CCmode);
+ rs6000_split_logical (operands, AND, false, false, false, cc);
+ DONE;
+ }
+ else if (!and64_2_operand (operands[2], DImode))
+ operands[2] = force_reg (DImode, operands[2]);
+})
(define_insn "anddi3_mc"
[(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r,r,r")
@@ -7379,11 +8126,17 @@
(define_expand "iordi3"
[(set (match_operand:DI 0 "gpc_reg_operand" "")
(ior:DI (match_operand:DI 1 "gpc_reg_operand" "")
- (match_operand:DI 2 "reg_or_logical_cint_operand" "")))]
- "TARGET_POWERPC64"
- "
+ (match_operand:DI 2 "reg_or_cint_operand" "")))]
+ ""
{
- if (non_logical_cint_operand (operands[2], DImode))
+ if (!TARGET_POWERPC64)
+ {
+ rs6000_split_logical (operands, IOR, false, false, false, NULL_RTX);
+ DONE;
+ }
+ else if (!reg_or_logical_cint_operand (operands[2], DImode))
+ operands[2] = force_reg (DImode, operands[2]);
+ else if (non_logical_cint_operand (operands[2], DImode))
{
HOST_WIDE_INT value;
rtx tmp = ((!can_create_pseudo_p ()
@@ -7408,15 +8161,21 @@
emit_insn (gen_iordi3 (operands[0], tmp, GEN_INT (value & 0xffff)));
DONE;
}
-}")
+})
(define_expand "xordi3"
[(set (match_operand:DI 0 "gpc_reg_operand" "")
(xor:DI (match_operand:DI 1 "gpc_reg_operand" "")
- (match_operand:DI 2 "reg_or_logical_cint_operand" "")))]
- "TARGET_POWERPC64"
- "
+ (match_operand:DI 2 "reg_or_cint_operand" "")))]
+ ""
{
+ if (!TARGET_POWERPC64)
+ {
+ rs6000_split_logical (operands, XOR, false, false, false, NULL_RTX);
+ DONE;
+ }
+ else if (!reg_or_logical_cint_operand (operands[2], DImode))
+ operands[2] = force_reg (DImode, operands[2]);
if (non_logical_cint_operand (operands[2], DImode))
{
HOST_WIDE_INT value;
@@ -7442,7 +8201,7 @@
emit_insn (gen_xordi3 (operands[0], tmp, GEN_INT (value & 0xffff)));
DONE;
}
-}")
+})
(define_insn "*booldi3_internal1"
[(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r")
@@ -7678,6 +8437,384 @@
(compare:CC (match_dup 0)
(const_int 0)))]
"")
+
+;; Eqv operation.
+(define_insn "*eqv<mode>3"
+ [(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
+ (not:GPR
+ (xor:GPR (match_operand:GPR 1 "gpc_reg_operand" "r")
+ (match_operand:GPR 2 "gpc_reg_operand" "r"))))]
+ ""
+ "eqv %0,%1,%2"
+ [(set_attr "type" "integer")
+ (set_attr "length" "4")])
+
+
+;; 128-bit logical operations expanders
+
+(define_expand "and<mode>3"
+ [(parallel [(set (match_operand:BOOL_128 0 "vlogical_operand" "")
+ (and:BOOL_128
+ (match_operand:BOOL_128 1 "vlogical_operand" "")
+ (match_operand:BOOL_128 2 "vlogical_operand" "")))
+ (clobber (match_scratch:CC 3 ""))])]
+ ""
+ "")
+
+(define_expand "ior<mode>3"
+ [(set (match_operand:BOOL_128 0 "vlogical_operand" "")
+ (ior:BOOL_128 (match_operand:BOOL_128 1 "vlogical_operand" "")
+ (match_operand:BOOL_128 2 "vlogical_operand" "")))]
+ ""
+ "")
+
+(define_expand "xor<mode>3"
+ [(set (match_operand:BOOL_128 0 "vlogical_operand" "")
+ (xor:BOOL_128 (match_operand:BOOL_128 1 "vlogical_operand" "")
+ (match_operand:BOOL_128 2 "vlogical_operand" "")))]
+ ""
+ "")
+
+(define_expand "one_cmpl<mode>2"
+ [(set (match_operand:BOOL_128 0 "vlogical_operand" "")
+ (not:BOOL_128 (match_operand:BOOL_128 1 "vlogical_operand" "")))]
+ ""
+ "")
+
+(define_expand "nor<mode>3"
+ [(set (match_operand:BOOL_128 0 "vlogical_operand" "")
+ (and:BOOL_128
+ (not:BOOL_128 (match_operand:BOOL_128 1 "vlogical_operand" ""))
+ (not:BOOL_128 (match_operand:BOOL_128 2 "vlogical_operand" ""))))]
+ ""
+ "")
+
+(define_expand "andc<mode>3"
+ [(set (match_operand:BOOL_128 0 "vlogical_operand" "")
+ (and:BOOL_128
+ (not:BOOL_128 (match_operand:BOOL_128 2 "vlogical_operand" ""))
+ (match_operand:BOOL_128 1 "vlogical_operand" "")))]
+ ""
+ "")
+
+;; Power8 vector logical instructions.
+(define_expand "eqv<mode>3"
+ [(set (match_operand:BOOL_128 0 "vlogical_operand" "")
+ (not:BOOL_128
+ (xor:BOOL_128 (match_operand:BOOL_128 1 "vlogical_operand" "")
+ (match_operand:BOOL_128 2 "vlogical_operand" ""))))]
+ "<MODE>mode == TImode || <MODE>mode == PTImode || TARGET_P8_VECTOR"
+ "")
+
+;; Rewrite nand into canonical form
+(define_expand "nand<mode>3"
+ [(set (match_operand:BOOL_128 0 "vlogical_operand" "")
+ (ior:BOOL_128
+ (not:BOOL_128 (match_operand:BOOL_128 1 "vlogical_operand" ""))
+ (not:BOOL_128 (match_operand:BOOL_128 2 "vlogical_operand" ""))))]
+ "<MODE>mode == TImode || <MODE>mode == PTImode || TARGET_P8_VECTOR"
+ "")
+
+;; The canonical form is to have the negated element first, so we need to
+;; reverse arguments.
+(define_expand "orc<mode>3"
+ [(set (match_operand:BOOL_128 0 "vlogical_operand" "")
+ (ior:BOOL_128
+ (not:BOOL_128 (match_operand:BOOL_128 2 "vlogical_operand" ""))
+ (match_operand:BOOL_128 1 "vlogical_operand" "")))]
+ "<MODE>mode == TImode || <MODE>mode == PTImode || TARGET_P8_VECTOR"
+ "")
+
+;; 128-bit logical operations insns and split operations
+(define_insn_and_split "*and<mode>3_internal"
+ [(set (match_operand:BOOL_128 0 "vlogical_operand" "=<BOOL_REGS_OUTPUT>")
+ (and:BOOL_128
+ (match_operand:BOOL_128 1 "vlogical_operand" "%<BOOL_REGS_OP1>")
+ (match_operand:BOOL_128 2 "vlogical_operand" "<BOOL_REGS_OP2>")))
+ (clobber (match_scratch:CC 3 "<BOOL_REGS_AND_CR0>"))]
+ ""
+{
+ if (TARGET_VSX && vsx_register_operand (operands[0], <MODE>mode))
+ return "xxland %x0,%x1,%x2";
+
+ if (TARGET_ALTIVEC && altivec_register_operand (operands[0], <MODE>mode))
+ return "vand %0,%1,%2";
+
+ return "#";
+}
+ "reload_completed && int_reg_operand (operands[0], <MODE>mode)"
+ [(const_int 0)]
+{
+ rs6000_split_logical (operands, AND, false, false, false, operands[3]);
+ DONE;
+}
+ [(set (attr "type")
+ (if_then_else
+ (match_test "vsx_register_operand (operands[0], <MODE>mode)")
+ (const_string "vecsimple")
+ (const_string "integer")))
+ (set (attr "length")
+ (if_then_else
+ (match_test "vsx_register_operand (operands[0], <MODE>mode)")
+ (const_string "4")
+ (if_then_else
+ (match_test "TARGET_POWERPC64")
+ (const_string "8")
+ (const_string "16"))))])
+
+;; 128-bit IOR/XOR
+(define_insn_and_split "*bool<mode>3_internal"
+ [(set (match_operand:BOOL_128 0 "vlogical_operand" "=<BOOL_REGS_OUTPUT>")
+ (match_operator:BOOL_128 3 "boolean_or_operator"
+ [(match_operand:BOOL_128 1 "vlogical_operand" "%<BOOL_REGS_OP1>")
+ (match_operand:BOOL_128 2 "vlogical_operand" "<BOOL_REGS_OP2>")]))]
+ ""
+{
+ if (TARGET_VSX && vsx_register_operand (operands[0], <MODE>mode))
+ return "xxl%q3 %x0,%x1,%x2";
+
+ if (TARGET_ALTIVEC && altivec_register_operand (operands[0], <MODE>mode))
+ return "v%q3 %0,%1,%2";
+
+ return "#";
+}
+ "reload_completed && int_reg_operand (operands[0], <MODE>mode)"
+ [(const_int 0)]
+{
+ rs6000_split_logical (operands, GET_CODE (operands[3]), false, false, false,
+ NULL_RTX);
+ DONE;
+}
+ [(set (attr "type")
+ (if_then_else
+ (match_test "vsx_register_operand (operands[0], <MODE>mode)")
+ (const_string "vecsimple")
+ (const_string "integer")))
+ (set (attr "length")
+ (if_then_else
+ (match_test "vsx_register_operand (operands[0], <MODE>mode)")
+ (const_string "4")
+ (if_then_else
+ (match_test "TARGET_POWERPC64")
+ (const_string "8")
+ (const_string "16"))))])
+
+;; 128-bit ANDC/ORC
+(define_insn_and_split "*boolc<mode>3_internal1"
+ [(set (match_operand:BOOL_128 0 "vlogical_operand" "=<BOOL_REGS_OUTPUT>")
+ (match_operator:BOOL_128 3 "boolean_operator"
+ [(not:BOOL_128
+ (match_operand:BOOL_128 2 "vlogical_operand" "<BOOL_REGS_OP1>"))
+ (match_operand:BOOL_128 1 "vlogical_operand" "<BOOL_REGS_OP2>")]))]
+ "TARGET_P8_VECTOR || (GET_CODE (operands[3]) == AND)"
+{
+ if (TARGET_VSX && vsx_register_operand (operands[0], <MODE>mode))
+ return "xxl%q3 %x0,%x1,%x2";
+
+ if (TARGET_ALTIVEC && altivec_register_operand (operands[0], <MODE>mode))
+ return "v%q3 %0,%1,%2";
+
+ return "#";
+}
+ "(TARGET_P8_VECTOR || (GET_CODE (operands[3]) == AND))
+ && reload_completed && int_reg_operand (operands[0], <MODE>mode)"
+ [(const_int 0)]
+{
+ rs6000_split_logical (operands, GET_CODE (operands[3]), false, true, false,
+ NULL_RTX);
+ DONE;
+}
+ [(set (attr "type")
+ (if_then_else
+ (match_test "vsx_register_operand (operands[0], <MODE>mode)")
+ (const_string "vecsimple")
+ (const_string "integer")))
+ (set (attr "length")
+ (if_then_else
+ (match_test "vsx_register_operand (operands[0], <MODE>mode)")
+ (const_string "4")
+ (if_then_else
+ (match_test "TARGET_POWERPC64")
+ (const_string "8")
+ (const_string "16"))))])
+
+(define_insn_and_split "*boolc<mode>3_internal2"
+ [(set (match_operand:TI2 0 "int_reg_operand" "=&r,r,r")
+ (match_operator:TI2 3 "boolean_operator"
+ [(not:TI2
+ (match_operand:TI2 1 "int_reg_operand" "r,0,r"))
+ (match_operand:TI2 2 "int_reg_operand" "r,r,0")]))]
+ "!TARGET_P8_VECTOR && (GET_CODE (operands[3]) != AND)"
+ "#"
+ "reload_completed && !TARGET_P8_VECTOR && (GET_CODE (operands[3]) != AND)"
+ [(const_int 0)]
+{
+ rs6000_split_logical (operands, GET_CODE (operands[3]), false, true, false,
+ NULL_RTX);
+ DONE;
+}
+ [(set_attr "type" "integer")
+ (set (attr "length")
+ (if_then_else
+ (match_test "TARGET_POWERPC64")
+ (const_string "8")
+ (const_string "16")))])
+
+;; 128-bit NAND/NOR
+(define_insn_and_split "*boolcc<mode>3_internal1"
+ [(set (match_operand:BOOL_128 0 "vlogical_operand" "=<BOOL_REGS_OUTPUT>")
+ (match_operator:BOOL_128 3 "boolean_operator"
+ [(not:BOOL_128
+ (match_operand:BOOL_128 1 "vlogical_operand" "<BOOL_REGS_OP1>"))
+ (not:BOOL_128
+ (match_operand:BOOL_128 2 "vlogical_operand" "<BOOL_REGS_OP2>"))]))]
+ "TARGET_P8_VECTOR || (GET_CODE (operands[3]) == AND)"
+{
+ if (TARGET_VSX && vsx_register_operand (operands[0], <MODE>mode))
+ return "xxl%q3 %x0,%x1,%x2";
+
+ if (TARGET_ALTIVEC && altivec_register_operand (operands[0], <MODE>mode))
+ return "v%q3 %0,%1,%2";
+
+ return "#";
+}
+ "(TARGET_P8_VECTOR || (GET_CODE (operands[3]) == AND))
+ && reload_completed && int_reg_operand (operands[0], <MODE>mode)"
+ [(const_int 0)]
+{
+ rs6000_split_logical (operands, GET_CODE (operands[3]), false, true, true,
+ NULL_RTX);
+ DONE;
+}
+ [(set (attr "type")
+ (if_then_else
+ (match_test "vsx_register_operand (operands[0], <MODE>mode)")
+ (const_string "vecsimple")
+ (const_string "integer")))
+ (set (attr "length")
+ (if_then_else
+ (match_test "vsx_register_operand (operands[0], <MODE>mode)")
+ (const_string "4")
+ (if_then_else
+ (match_test "TARGET_POWERPC64")
+ (const_string "8")
+ (const_string "16"))))])
+
+(define_insn_and_split "*boolcc<mode>3_internal2"
+ [(set (match_operand:TI2 0 "int_reg_operand" "=&r,r,r")
+ (match_operator:TI2 3 "boolean_operator"
+ [(not:TI2
+ (match_operand:TI2 1 "int_reg_operand" "r,0,r"))
+ (not:TI2
+ (match_operand:TI2 2 "int_reg_operand" "r,r,0"))]))]
+ "!TARGET_P8_VECTOR && (GET_CODE (operands[3]) != AND)"
+ "#"
+ "reload_completed && !TARGET_P8_VECTOR && (GET_CODE (operands[3]) != AND)"
+ [(const_int 0)]
+{
+ rs6000_split_logical (operands, GET_CODE (operands[3]), false, true, true,
+ NULL_RTX);
+ DONE;
+}
+ [(set_attr "type" "integer")
+ (set (attr "length")
+ (if_then_else
+ (match_test "TARGET_POWERPC64")
+ (const_string "8")
+ (const_string "16")))])
+
+
+;; 128-bit EQV
+(define_insn_and_split "*eqv<mode>3_internal1"
+ [(set (match_operand:BOOL_128 0 "vlogical_operand" "=<BOOL_REGS_OUTPUT>")
+ (not:BOOL_128
+ (xor:BOOL_128
+ (match_operand:BOOL_128 1 "vlogical_operand" "<BOOL_REGS_OP1>")
+ (match_operand:BOOL_128 2 "vlogical_operand" "<BOOL_REGS_OP2>"))))]
+ "TARGET_P8_VECTOR"
+{
+ if (vsx_register_operand (operands[0], <MODE>mode))
+ return "xxleqv %x0,%x1,%x2";
+
+ return "#";
+}
+ "TARGET_P8_VECTOR && reload_completed
+ && int_reg_operand (operands[0], <MODE>mode)"
+ [(const_int 0)]
+{
+ rs6000_split_logical (operands, XOR, true, false, false, NULL_RTX);
+ DONE;
+}
+ [(set (attr "type")
+ (if_then_else
+ (match_test "vsx_register_operand (operands[0], <MODE>mode)")
+ (const_string "vecsimple")
+ (const_string "integer")))
+ (set (attr "length")
+ (if_then_else
+ (match_test "vsx_register_operand (operands[0], <MODE>mode)")
+ (const_string "4")
+ (if_then_else
+ (match_test "TARGET_POWERPC64")
+ (const_string "8")
+ (const_string "16"))))])
+
+(define_insn_and_split "*eqv<mode>3_internal2"
+ [(set (match_operand:TI2 0 "int_reg_operand" "=&r,r,r")
+ (not:TI2
+ (xor:TI2
+ (match_operand:TI2 1 "int_reg_operand" "r,0,r")
+ (match_operand:TI2 2 "int_reg_operand" "r,r,0"))))]
+ "!TARGET_P8_VECTOR"
+ "#"
+ "reload_completed && !TARGET_P8_VECTOR"
+ [(const_int 0)]
+{
+ rs6000_split_logical (operands, XOR, true, false, false, NULL_RTX);
+ DONE;
+}
+ [(set_attr "type" "integer")
+ (set (attr "length")
+ (if_then_else
+ (match_test "TARGET_POWERPC64")
+ (const_string "8")
+ (const_string "16")))])
+
+;; 128-bit one's complement
+(define_insn_and_split "*one_cmpl<mode>3_internal"
+ [(set (match_operand:BOOL_128 0 "vlogical_operand" "=<BOOL_REGS_OUTPUT>")
+ (not:BOOL_128
+ (match_operand:BOOL_128 1 "vlogical_operand" "<BOOL_REGS_UNARY>")))]
+ ""
+{
+ if (TARGET_VSX && vsx_register_operand (operands[0], <MODE>mode))
+ return "xxlnor %x0,%x1,%x1";
+
+ if (TARGET_ALTIVEC && altivec_register_operand (operands[0], <MODE>mode))
+ return "vnor %0,%1,%1";
+
+ return "#";
+}
+ "reload_completed && int_reg_operand (operands[0], <MODE>mode)"
+ [(const_int 0)]
+{
+ rs6000_split_logical (operands, NOT, false, false, false, NULL_RTX);
+ DONE;
+}
+ [(set (attr "type")
+ (if_then_else
+ (match_test "vsx_register_operand (operands[0], <MODE>mode)")
+ (const_string "vecsimple")
+ (const_string "integer")))
+ (set (attr "length")
+ (if_then_else
+ (match_test "vsx_register_operand (operands[0], <MODE>mode)")
+ (const_string "4")
+ (if_then_else
+ (match_test "TARGET_POWERPC64")
+ (const_string "8")
+ (const_string "16"))))])
+
;; Now define ways of moving data around.
@@ -7765,7 +8902,31 @@
mt%0 %1
mt%0 %1
nop"
- [(set_attr "type" "*,*,load,store,*,*,*,mfjmpr,mtjmpr,*,*")
+ [(set_attr_alternative "type"
+ [(const_string "*")
+ (const_string "*")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "store_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "store_u")
+ (const_string "store")))
+ (const_string "*")
+ (const_string "*")
+ (const_string "*")
+ (const_string "mfjmpr")
+ (const_string "mtjmpr")
+ (const_string "*")
+ (const_string "*")])
+
(set_attr "length" "4,4,4,4,4,4,8,4,4,4,4")])
(define_insn "*movsi_internal1_single"
@@ -7787,7 +8948,44 @@
nop
stfs%U0%X0 %1,%0
lfs%U1%X1 %0,%1"
- [(set_attr "type" "*,*,load,store,*,*,*,mfjmpr,mtjmpr,*,*,*,*")
+ [(set_attr_alternative "type"
+ [(const_string "*")
+ (const_string "*")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "store_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "store_u")
+ (const_string "store")))
+ (const_string "*")
+ (const_string "*")
+ (const_string "*")
+ (const_string "mfjmpr")
+ (const_string "mtjmpr")
+ (const_string "*")
+ (const_string "*")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_u")
+ (const_string "fpstore")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_u")
+ (const_string "fpload")))])
(set_attr "length" "4,4,4,4,4,4,8,4,4,4,4,4,4")])
;; Split a load of a large constant into the appropriate two-insn
@@ -7822,7 +9020,7 @@
cmp<wd>i %2,%0,0
mr. %0,%1
#"
- [(set_attr "type" "cmp,compare,cmp")
+ [(set_attr "type" "cmp,fast_compare,cmp")
(set_attr "length" "4,4,8")])
(define_split
@@ -7850,7 +9048,26 @@
mf%1 %0
mt%0 %1
nop"
- [(set_attr "type" "*,load,store,*,mfjmpr,mtjmpr,*")])
+ [(set_attr_alternative "type"
+ [(const_string "*")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "store_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "store_u")
+ (const_string "store")))
+ (const_string "*")
+ (const_string "mfjmpr")
+ (const_string "mtjmpr")
+ (const_string "*")])])
(define_expand "mov<mode>"
[(set (match_operand:INT 0 "general_operand" "")
@@ -7871,7 +9088,26 @@
mf%1 %0
mt%0 %1
nop"
- [(set_attr "type" "*,load,store,*,mfjmpr,mtjmpr,*")])
+ [(set_attr_alternative "type"
+ [(const_string "*")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "store_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "store_u")
+ (const_string "store")))
+ (const_string "*")
+ (const_string "mfjmpr")
+ (const_string "mtjmpr")
+ (const_string "*")])])
;; Here is how to move condition codes around. When we store CC data in
;; an integer register or memory, we store just the high-order 4 bits.
@@ -7899,7 +9135,7 @@
mf%1 %0
mt%0 %1
lwz%U1%X1 %0,%1
- stw%U0%U1 %1,%0"
+ stw%U0%X0 %1,%0"
[(set (attr "type")
(cond [(eq_attr "alternative" "0,3")
(const_string "cr_logical")
@@ -7912,9 +9148,23 @@
(eq_attr "alternative" "9")
(const_string "mtjmpr")
(eq_attr "alternative" "10")
- (const_string "load")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1],
+ VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
(eq_attr "alternative" "11")
- (const_string "store")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0],
+ VOIDmode)")
+ (const_string "store_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "store_u")
+ (const_string "store")))
(match_test "TARGET_MFCRF")
(const_string "mfcrf")
]
@@ -7926,15 +9176,17 @@
;; can produce floating-point values in fixed-point registers. Unless the
;; value is a simple constant or already in memory, we deal with this by
;; allocating memory and copying the value explicitly via that memory location.
-(define_expand "movsf"
- [(set (match_operand:SF 0 "nonimmediate_operand" "")
- (match_operand:SF 1 "any_operand" ""))]
- ""
- "{ rs6000_emit_move (operands[0], operands[1], SFmode); DONE; }")
+
+;; Move 32-bit binary/decimal floating point
+(define_expand "mov<mode>"
+ [(set (match_operand:FMOVE32 0 "nonimmediate_operand" "")
+ (match_operand:FMOVE32 1 "any_operand" ""))]
+ "<fmove_ok>"
+ "{ rs6000_emit_move (operands[0], operands[1], <MODE>mode); DONE; }")
(define_split
- [(set (match_operand:SF 0 "gpc_reg_operand" "")
- (match_operand:SF 1 "const_double_operand" ""))]
+ [(set (match_operand:FMOVE32 0 "gpc_reg_operand" "")
+ (match_operand:FMOVE32 1 "const_double_operand" ""))]
"reload_completed
&& ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
|| (GET_CODE (operands[0]) == SUBREG
@@ -7947,42 +9199,89 @@
REAL_VALUE_TYPE rv;
REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
- REAL_VALUE_TO_TARGET_SINGLE (rv, l);
+ <real_value_to_target> (rv, l);
if (! TARGET_POWERPC64)
- operands[2] = operand_subword (operands[0], 0, 0, SFmode);
+ operands[2] = operand_subword (operands[0], 0, 0, <MODE>mode);
else
operands[2] = gen_lowpart (SImode, operands[0]);
operands[3] = gen_int_mode (l, SImode);
}")
-(define_insn "*movsf_hardfloat"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=!r,!r,m,f,f,m,*c*l,!r,*h,!r,!r")
- (match_operand:SF 1 "input_operand" "r,m,r,f,m,f,r,h,0,G,Fn"))]
- "(gpc_reg_operand (operands[0], SFmode)
- || gpc_reg_operand (operands[1], SFmode))
+(define_insn "mov<mode>_hardfloat"
+ [(set (match_operand:FMOVE32 0 "nonimmediate_operand" "=!r,!r,m,f,wa,wa,<f32_lr>,<f32_sm>,wu,Z,?<f32_dm>,?r,*c*l,!r,*h,!r,!r")
+ (match_operand:FMOVE32 1 "input_operand" "r,m,r,f,wa,j,<f32_lm>,<f32_sr>,Z,wu,r,<f32_dm>,r,h,0,G,Fn"))]
+ "(gpc_reg_operand (operands[0], <MODE>mode)
+ || gpc_reg_operand (operands[1], <MODE>mode))
&& (TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT)"
"@
mr %0,%1
lwz%U1%X1 %0,%1
stw%U0%X0 %1,%0
fmr %0,%1
- lfs%U1%X1 %0,%1
- stfs%U0%X0 %1,%0
+ xxlor %x0,%x1,%x1
+ xxlxor %x0,%x0,%x0
+ <f32_li>
+ <f32_si>
+ <f32_lv>
+ <f32_sv>
+ mtvsrwz %x0,%1
+ mfvsrwz %0,%x1
mt%0 %1
mf%1 %0
nop
#
#"
- [(set_attr "type" "*,load,store,fp,fpload,fpstore,mtjmpr,mfjmpr,*,*,*")
- (set_attr "length" "4,4,4,4,4,4,4,4,4,4,8")])
-
-(define_insn "*movsf_softfloat"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=r,cl,r,r,m,r,r,r,r,*h")
- (match_operand:SF 1 "input_operand" "r,r,h,m,r,I,L,G,Fn,0"))]
- "(gpc_reg_operand (operands[0], SFmode)
- || gpc_reg_operand (operands[1], SFmode))
+ [(set_attr_alternative "type"
+ [(const_string "*")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "store_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "store_u")
+ (const_string "store")))
+ (const_string "fp")
+ (const_string "vecsimple")
+ (const_string "vecsimple")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_u")
+ (const_string "fpload")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_u")
+ (const_string "fpstore")))
+ (const_string "fpload")
+ (const_string "fpstore")
+ (const_string "mftgpr")
+ (const_string "mffgpr")
+ (const_string "mtjmpr")
+ (const_string "mfjmpr")
+ (const_string "*")
+ (const_string "*")
+ (const_string "*")])
+ (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8")])
+
+(define_insn "*mov<mode>_softfloat"
+ [(set (match_operand:FMOVE32 0 "nonimmediate_operand" "=r,cl,r,r,m,r,r,r,r,*h")
+ (match_operand:FMOVE32 1 "input_operand" "r,r,h,m,r,I,L,G,Fn,0"))]
+ "(gpc_reg_operand (operands[0], <MODE>mode)
+ || gpc_reg_operand (operands[1], <MODE>mode))
&& (TARGET_SOFT_FLOAT || !TARGET_FPRS)"
"@
mr %0,%1
@@ -7995,19 +9294,42 @@
#
#
nop"
- [(set_attr "type" "*,mtjmpr,mfjmpr,load,store,*,*,*,*,*")
+ [(set_attr_alternative "type"
+ [(const_string "*")
+ (const_string "mtjmpr")
+ (const_string "mfjmpr")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "store_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "store_u")
+ (const_string "store")))
+ (const_string "*")
+ (const_string "*")
+ (const_string "*")
+ (const_string "*")
+ (const_string "*")])
(set_attr "length" "4,4,4,4,4,4,4,4,8,4")])
-(define_expand "movdf"
- [(set (match_operand:DF 0 "nonimmediate_operand" "")
- (match_operand:DF 1 "any_operand" ""))]
+;; Move 64-bit binary/decimal floating point
+(define_expand "mov<mode>"
+ [(set (match_operand:FMOVE64 0 "nonimmediate_operand" "")
+ (match_operand:FMOVE64 1 "any_operand" ""))]
""
- "{ rs6000_emit_move (operands[0], operands[1], DFmode); DONE; }")
+ "{ rs6000_emit_move (operands[0], operands[1], <MODE>mode); DONE; }")
(define_split
- [(set (match_operand:DF 0 "gpc_reg_operand" "")
- (match_operand:DF 1 "const_int_operand" ""))]
+ [(set (match_operand:FMOVE64 0 "gpc_reg_operand" "")
+ (match_operand:FMOVE64 1 "const_int_operand" ""))]
"! TARGET_POWERPC64 && reload_completed
&& ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
|| (GET_CODE (operands[0]) == SUBREG
@@ -8020,8 +9342,8 @@
int endian = (WORDS_BIG_ENDIAN == 0);
HOST_WIDE_INT value = INTVAL (operands[1]);
- operands[2] = operand_subword (operands[0], endian, 0, DFmode);
- operands[3] = operand_subword (operands[0], 1 - endian, 0, DFmode);
+ operands[2] = operand_subword (operands[0], endian, 0, <MODE>mode);
+ operands[3] = operand_subword (operands[0], 1 - endian, 0, <MODE>mode);
#if HOST_BITS_PER_WIDE_INT == 32
operands[4] = (value & 0x80000000) ? constm1_rtx : const0_rtx;
#else
@@ -8031,8 +9353,8 @@
}")
(define_split
- [(set (match_operand:DF 0 "gpc_reg_operand" "")
- (match_operand:DF 1 "const_double_operand" ""))]
+ [(set (match_operand:FMOVE64 0 "gpc_reg_operand" "")
+ (match_operand:FMOVE64 1 "const_double_operand" ""))]
"! TARGET_POWERPC64 && reload_completed
&& ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
|| (GET_CODE (operands[0]) == SUBREG
@@ -8047,17 +9369,17 @@
REAL_VALUE_TYPE rv;
REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
- REAL_VALUE_TO_TARGET_DOUBLE (rv, l);
+ <real_value_to_target> (rv, l);
- operands[2] = operand_subword (operands[0], endian, 0, DFmode);
- operands[3] = operand_subword (operands[0], 1 - endian, 0, DFmode);
+ operands[2] = operand_subword (operands[0], endian, 0, <MODE>mode);
+ operands[3] = operand_subword (operands[0], 1 - endian, 0, <MODE>mode);
operands[4] = gen_int_mode (l[endian], SImode);
operands[5] = gen_int_mode (l[1 - endian], SImode);
}")
(define_split
- [(set (match_operand:DF 0 "gpc_reg_operand" "")
- (match_operand:DF 1 "const_double_operand" ""))]
+ [(set (match_operand:FMOVE64 0 "gpc_reg_operand" "")
+ (match_operand:FMOVE64 1 "const_double_operand" ""))]
"TARGET_POWERPC64 && reload_completed
&& ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
|| (GET_CODE (operands[0]) == SUBREG
@@ -8074,7 +9396,7 @@
#endif
REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
- REAL_VALUE_TO_TARGET_DOUBLE (rv, l);
+ <real_value_to_target> (rv, l);
operands[2] = gen_lowpart (DImode, operands[0]);
/* HIGHPART is lower memory address when WORDS_BIG_ENDIAN. */
@@ -8099,21 +9421,18 @@
;; since the D-form version of the memory instructions does not need a GPR for
;; reloading.
-(define_insn "*movdf_hardfloat32"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=m,d,d,ws,?wa,Z,?Z,ws,?wa,wa,Y,r,!r,!r,!r,!r")
- (match_operand:DF 1 "input_operand" "d,m,d,Z,Z,ws,wa,ws,wa,j,r,Y,r,G,H,F"))]
+(define_insn "*mov<mode>_hardfloat32"
+ [(set (match_operand:FMOVE64 0 "nonimmediate_operand" "=m,d,d,wv,Z,wa,wa,Y,r,!r,!r,!r,!r")
+ (match_operand:FMOVE64 1 "input_operand" "d,m,d,Z,wv,wa,j,r,Y,r,G,H,F"))]
"! TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && (gpc_reg_operand (operands[0], DFmode)
- || gpc_reg_operand (operands[1], DFmode))"
+ && (gpc_reg_operand (operands[0], <MODE>mode)
+ || gpc_reg_operand (operands[1], <MODE>mode))"
"@
stfd%U0%X0 %1,%0
lfd%U1%X1 %0,%1
fmr %0,%1
lxsd%U1x %x0,%y1
- lxsd%U1x %x0,%y1
stxsd%U0x %x1,%y0
- stxsd%U0x %x1,%y0
- xxlor %x0,%x1,%x1
xxlor %x0,%x1,%x1
xxlxor %x0,%x0,%x0
#
@@ -8122,115 +9441,141 @@
#
#
#"
- [(set_attr "type" "fpstore,fpload,fp,fpload,fpload,fpstore,fpstore,vecsimple,vecsimple,vecsimple,store,load,two,fp,fp,*")
- (set_attr "length" "4,4,4,4,4,4,4,4,4,4,8,8,8,8,12,16")])
-
-(define_insn "*movdf_softfloat32"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=Y,r,r,r,r,r")
- (match_operand:DF 1 "input_operand" "r,Y,r,G,H,F"))]
+ [(set_attr_alternative "type"
+ [(if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_u")
+ (const_string "fpstore")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_u")
+ (const_string "fpload")))
+ (const_string "fp")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_ux")
+ (const_string "fpload"))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_ux")
+ (const_string "fpstore"))
+ (const_string "vecsimple")
+ (const_string "vecsimple")
+ (const_string "store")
+ (const_string "load")
+ (const_string "two")
+ (const_string "fp")
+ (const_string "fp")
+ (const_string "*")])
+ (set_attr "length" "4,4,4,4,4,4,4,8,8,8,8,12,16")])
+
+(define_insn "*mov<mode>_softfloat32"
+ [(set (match_operand:FMOVE64 0 "nonimmediate_operand" "=Y,r,r,r,r,r")
+ (match_operand:FMOVE64 1 "input_operand" "r,Y,r,G,H,F"))]
"! TARGET_POWERPC64
&& ((TARGET_FPRS && TARGET_SINGLE_FLOAT)
- || TARGET_SOFT_FLOAT || TARGET_E500_SINGLE)
- && (gpc_reg_operand (operands[0], DFmode)
- || gpc_reg_operand (operands[1], DFmode))"
+ || TARGET_SOFT_FLOAT || TARGET_E500_SINGLE
+ || (<MODE>mode == DDmode && TARGET_E500_DOUBLE))
+ && (gpc_reg_operand (operands[0], <MODE>mode)
+ || gpc_reg_operand (operands[1], <MODE>mode))"
"#"
[(set_attr "type" "store,load,two,*,*,*")
(set_attr "length" "8,8,8,8,12,16")])
-;; Reload patterns to support gpr load/store with misaligned mem.
-;; and multiple gpr load/store at offset >= 0xfffc
-(define_expand "reload_<mode>_store"
- [(parallel [(match_operand 0 "memory_operand" "=m")
- (match_operand 1 "gpc_reg_operand" "r")
- (match_operand:GPR 2 "register_operand" "=&b")])]
- ""
-{
- rs6000_secondary_reload_gpr (operands[1], operands[0], operands[2], true);
- DONE;
-})
-
-(define_expand "reload_<mode>_load"
- [(parallel [(match_operand 0 "gpc_reg_operand" "=r")
- (match_operand 1 "memory_operand" "m")
- (match_operand:GPR 2 "register_operand" "=b")])]
- ""
-{
- rs6000_secondary_reload_gpr (operands[0], operands[1], operands[2], false);
- DONE;
-})
-
-; ld/std require word-aligned displacements -> 'Y' constraint.
-; List Y->r and r->Y before r->r for reload.
-(define_insn "*movdf_hardfloat64_mfpgpr"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=Y,r,!r,ws,?wa,ws,?wa,Z,?Z,m,d,d,wa,*c*l,!r,*h,!r,!r,!r,r,d")
- (match_operand:DF 1 "input_operand" "r,Y,r,ws,?wa,Z,Z,ws,wa,d,m,d,j,r,h,0,G,H,F,d,r"))]
- "TARGET_POWERPC64 && TARGET_MFPGPR && TARGET_HARD_FLOAT && TARGET_FPRS
- && TARGET_DOUBLE_FLOAT
- && (gpc_reg_operand (operands[0], DFmode)
- || gpc_reg_operand (operands[1], DFmode))"
- "@
- std%U0%X0 %1,%0
- ld%U1%X1 %0,%1
- mr %0,%1
- xxlor %x0,%x1,%x1
- xxlor %x0,%x1,%x1
- lxsd%U1x %x0,%y1
- lxsd%U1x %x0,%y1
- stxsd%U0x %x1,%y0
- stxsd%U0x %x1,%y0
- stfd%U0%X0 %1,%0
- lfd%U1%X1 %0,%1
- fmr %0,%1
- xxlxor %x0,%x0,%x0
- mt%0 %1
- mf%1 %0
- nop
- #
- #
- #
- mftgpr %0,%1
- mffgpr %0,%1"
- [(set_attr "type" "store,load,*,fp,fp,fpload,fpload,fpstore,fpstore,fpstore,fpload,fp,vecsimple,mtjmpr,mfjmpr,*,*,*,*,mftgpr,mffgpr")
- (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,12,16,4,4")])
-
; ld/std require word-aligned displacements -> 'Y' constraint.
; List Y->r and r->Y before r->r for reload.
-(define_insn "*movdf_hardfloat64"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=m,d,d,Y,r,!r,ws,?wa,Z,?Z,ws,?wa,wa,*c*l,!r,*h,!r,!r,!r")
- (match_operand:DF 1 "input_operand" "d,m,d,r,Y,r,Z,Z,ws,wa,ws,wa,j,r,h,0,G,H,F"))]
- "TARGET_POWERPC64 && !TARGET_MFPGPR && TARGET_HARD_FLOAT && TARGET_FPRS
- && TARGET_DOUBLE_FLOAT
- && (gpc_reg_operand (operands[0], DFmode)
- || gpc_reg_operand (operands[1], DFmode))"
+(define_insn "*mov<mode>_hardfloat64"
+ [(set (match_operand:FMOVE64 0 "nonimmediate_operand" "=m,d,d,wv,Z,wa,wa,Y,r,!r,*c*l,!r,*h,!r,!r,!r,r,wg,r,wm")
+ (match_operand:FMOVE64 1 "input_operand" "d,m,d,Z,wv,wa,j,r,Y,r,r,h,0,G,H,F,wg,r,wm,r"))]
+ "TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
+ && (gpc_reg_operand (operands[0], <MODE>mode)
+ || gpc_reg_operand (operands[1], <MODE>mode))"
"@
stfd%U0%X0 %1,%0
lfd%U1%X1 %0,%1
fmr %0,%1
- std%U0%X0 %1,%0
- ld%U1%X1 %0,%1
- mr %0,%1
- lxsd%U1x %x0,%y1
lxsd%U1x %x0,%y1
stxsd%U0x %x1,%y0
- stxsd%U0x %x1,%y0
- xxlor %x0,%x1,%x1
xxlor %x0,%x1,%x1
xxlxor %x0,%x0,%x0
+ std%U0%X0 %1,%0
+ ld%U1%X1 %0,%1
+ mr %0,%1
mt%0 %1
mf%1 %0
nop
#
#
- #"
- [(set_attr "type" "fpstore,fpload,fp,store,load,*,fpload,fpload,fpstore,fpstore,vecsimple,vecsimple,vecsimple,mtjmpr,mfjmpr,*,*,*,*")
- (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,12,16")])
-
-(define_insn "*movdf_softfloat64"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=Y,r,r,cl,r,r,r,r,*h")
- (match_operand:DF 1 "input_operand" "r,Y,r,r,h,G,H,F,0"))]
+ #
+ mftgpr %0,%1
+ mffgpr %0,%1
+ mfvsrd %0,%x1
+ mtvsrd %x0,%1"
+ [(set_attr_alternative "type"
+ [(if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_u")
+ (const_string "fpstore")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_u")
+ (const_string "fpload")))
+ (const_string "fp")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_ux")
+ (const_string "fpload"))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_ux")
+ (const_string "fpstore"))
+ (const_string "vecsimple")
+ (const_string "vecsimple")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "store_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "store_u")
+ (const_string "store")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
+ (const_string "*")
+ (const_string "mtjmpr")
+ (const_string "mfjmpr")
+ (const_string "*")
+ (const_string "*")
+ (const_string "*")
+ (const_string "*")
+ (const_string "mftgpr")
+ (const_string "mffgpr")
+ (const_string "mftgpr")
+ (const_string "mffgpr")])
+ (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4,4,4,8,12,16,4,4,4,4")])
+
+(define_insn "*mov<mode>_softfloat64"
+ [(set (match_operand:FMOVE64 0 "nonimmediate_operand" "=Y,r,r,cl,r,r,r,r,*h")
+ (match_operand:FMOVE64 1 "input_operand" "r,Y,r,r,h,G,H,F,0"))]
"TARGET_POWERPC64 && (TARGET_SOFT_FLOAT || !TARGET_FPRS)
- && (gpc_reg_operand (operands[0], DFmode)
- || gpc_reg_operand (operands[1], DFmode))"
+ && (gpc_reg_operand (operands[0], <MODE>mode)
+ || gpc_reg_operand (operands[1], <MODE>mode))"
"@
std%U0%X0 %1,%0
ld%U1%X1 %0,%1
@@ -8241,38 +9586,87 @@
#
#
nop"
- [(set_attr "type" "store,load,*,mtjmpr,mfjmpr,*,*,*,*")
+ [(set_attr_alternative "type"
+ [(if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "store_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "store_u")
+ (const_string "store")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
+ (const_string "*")
+ (const_string "mtjmpr")
+ (const_string "mfjmpr")
+ (const_string "*")
+ (const_string "*")
+ (const_string "*")
+ (const_string "*")])
(set_attr "length" "4,4,4,4,4,8,12,16,4")])
-(define_expand "movtf"
- [(set (match_operand:TF 0 "general_operand" "")
- (match_operand:TF 1 "any_operand" ""))]
- "!TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128"
- "{ rs6000_emit_move (operands[0], operands[1], TFmode); DONE; }")
+(define_expand "mov<mode>"
+ [(set (match_operand:FMOVE128 0 "general_operand" "")
+ (match_operand:FMOVE128 1 "any_operand" ""))]
+ ""
+ "{ rs6000_emit_move (operands[0], operands[1], <MODE>mode); DONE; }")
;; It's important to list Y->r and r->Y before r->r because otherwise
;; reload, given m->r, will try to pick r->r and reload it, which
;; doesn't make progress.
-(define_insn_and_split "*movtf_internal"
- [(set (match_operand:TF 0 "nonimmediate_operand" "=m,d,d,Y,r,r")
- (match_operand:TF 1 "input_operand" "d,m,d,r,YGHF,r"))]
- "!TARGET_IEEEQUAD
- && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_LONG_DOUBLE_128
- && (gpc_reg_operand (operands[0], TFmode)
- || gpc_reg_operand (operands[1], TFmode))"
+
+;; We can't split little endian direct moves of TDmode, because the words are
+;; not swapped like they are for TImode or TFmode. Subregs therefore are
+;; problematical. Don't allow direct move for this case.
+
+(define_insn_and_split "*mov<mode>_64bit_dm"
+ [(set (match_operand:FMOVE128 0 "nonimmediate_operand" "=m,d,d,Y,r,r,r,wm")
+ (match_operand:FMOVE128 1 "input_operand" "d,m,d,r,YGHF,r,wm,r"))]
+ "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_POWERPC64
+ && (<MODE>mode != TDmode || WORDS_BIG_ENDIAN)
+ && (gpc_reg_operand (operands[0], <MODE>mode)
+ || gpc_reg_operand (operands[1], <MODE>mode))"
+ "#"
+ "&& reload_completed"
+ [(pc)]
+{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; }
+ [(set_attr "length" "8,8,8,12,12,8,8,8")])
+
+(define_insn_and_split "*movtd_64bit_nodm"
+ [(set (match_operand:TD 0 "nonimmediate_operand" "=m,d,d,Y,r,r")
+ (match_operand:TD 1 "input_operand" "d,m,d,r,YGHF,r"))]
+ "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_POWERPC64 && !WORDS_BIG_ENDIAN
+ && (gpc_reg_operand (operands[0], TDmode)
+ || gpc_reg_operand (operands[1], TDmode))"
+ "#"
+ "&& reload_completed"
+ [(pc)]
+{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; }
+ [(set_attr "length" "8,8,8,12,12,8")])
+
+(define_insn_and_split "*mov<mode>_32bit"
+ [(set (match_operand:FMOVE128 0 "nonimmediate_operand" "=m,d,d,Y,r,r")
+ (match_operand:FMOVE128 1 "input_operand" "d,m,d,r,YGHF,r"))]
+ "TARGET_HARD_FLOAT && TARGET_FPRS && !TARGET_POWERPC64
+ && (gpc_reg_operand (operands[0], <MODE>mode)
+ || gpc_reg_operand (operands[1], <MODE>mode))"
"#"
"&& reload_completed"
[(pc)]
{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; }
[(set_attr "length" "8,8,8,20,20,16")])
-(define_insn_and_split "*movtf_softfloat"
- [(set (match_operand:TF 0 "rs6000_nonimmediate_operand" "=Y,r,r")
- (match_operand:TF 1 "input_operand" "r,YGHF,r"))]
- "!TARGET_IEEEQUAD
- && (TARGET_SOFT_FLOAT || !TARGET_FPRS) && TARGET_LONG_DOUBLE_128
- && (gpc_reg_operand (operands[0], TFmode)
- || gpc_reg_operand (operands[1], TFmode))"
+(define_insn_and_split "*mov<mode>_softfloat"
+ [(set (match_operand:FMOVE128 0 "rs6000_nonimmediate_operand" "=Y,r,r")
+ (match_operand:FMOVE128 1 "input_operand" "r,YGHF,r"))]
+ "(TARGET_SOFT_FLOAT || !TARGET_FPRS)
+ && (gpc_reg_operand (operands[0], <MODE>mode)
+ || gpc_reg_operand (operands[1], <MODE>mode))"
"#"
"&& reload_completed"
[(pc)]
@@ -8557,6 +9951,252 @@
operands[6] = simplify_gen_subreg (DFmode, operands[0], TFmode, lo_word);
}")
+;; Reload helper functions used by rs6000_secondary_reload. The patterns all
+;; must have 3 arguments, and scratch register constraint must be a single
+;; constraint.
+
+;; Reload patterns to support gpr load/store with misaligned mem.
+;; and multiple gpr load/store at offset >= 0xfffc
+(define_expand "reload_<mode>_store"
+ [(parallel [(match_operand 0 "memory_operand" "=m")
+ (match_operand 1 "gpc_reg_operand" "r")
+ (match_operand:GPR 2 "register_operand" "=&b")])]
+ ""
+{
+ rs6000_secondary_reload_gpr (operands[1], operands[0], operands[2], true);
+ DONE;
+})
+
+(define_expand "reload_<mode>_load"
+ [(parallel [(match_operand 0 "gpc_reg_operand" "=r")
+ (match_operand 1 "memory_operand" "m")
+ (match_operand:GPR 2 "register_operand" "=b")])]
+ ""
+{
+ rs6000_secondary_reload_gpr (operands[0], operands[1], operands[2], false);
+ DONE;
+})
+
+
+;; Power8 merge instructions to allow direct move to/from floating point
+;; registers in 32-bit mode. We use TF mode to get two registers to move the
+;; individual 32-bit parts across. Subreg doesn't work too well on the TF
+;; value, since it is allocated in reload and not all of the flow information
+;; is setup for it. We have two patterns to do the two moves between gprs and
+;; fprs. There isn't a dependancy between the two, but we could potentially
+;; schedule other instructions between the two instructions. TFmode is
+;; currently limited to traditional FPR registers. If/when this is changed, we
+;; will need to revist %L to make sure it works with VSX registers, or add an
+;; %x version of %L.
+
+(define_insn "p8_fmrgow_<mode>"
+ [(set (match_operand:FMOVE64X 0 "register_operand" "=d")
+ (unspec:FMOVE64X [(match_operand:TF 1 "register_operand" "d")]
+ UNSPEC_P8V_FMRGOW))]
+ "!TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+ "fmrgow %0,%1,%L1"
+ [(set_attr "type" "vecperm")])
+
+(define_insn "p8_mtvsrwz_1"
+ [(set (match_operand:TF 0 "register_operand" "=d")
+ (unspec:TF [(match_operand:SI 1 "register_operand" "r")]
+ UNSPEC_P8V_MTVSRWZ))]
+ "!TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+ "mtvsrwz %x0,%1"
+ [(set_attr "type" "mftgpr")])
+
+(define_insn "p8_mtvsrwz_2"
+ [(set (match_operand:TF 0 "register_operand" "+d")
+ (unspec:TF [(match_dup 0)
+ (match_operand:SI 1 "register_operand" "r")]
+ UNSPEC_P8V_MTVSRWZ))]
+ "!TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+ "mtvsrwz %L0,%1"
+ [(set_attr "type" "mftgpr")])
+
+(define_insn_and_split "reload_fpr_from_gpr<mode>"
+ [(set (match_operand:FMOVE64X 0 "register_operand" "=ws")
+ (unspec:FMOVE64X [(match_operand:FMOVE64X 1 "register_operand" "r")]
+ UNSPEC_P8V_RELOAD_FROM_GPR))
+ (clobber (match_operand:TF 2 "register_operand" "=d"))]
+ "!TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+ "#"
+ "&& reload_completed"
+ [(const_int 0)]
+{
+ rtx dest = operands[0];
+ rtx src = operands[1];
+ rtx tmp = operands[2];
+ rtx gpr_hi_reg = gen_highpart (SImode, src);
+ rtx gpr_lo_reg = gen_lowpart (SImode, src);
+
+ emit_insn (gen_p8_mtvsrwz_1 (tmp, gpr_hi_reg));
+ emit_insn (gen_p8_mtvsrwz_2 (tmp, gpr_lo_reg));
+ emit_insn (gen_p8_fmrgow_<mode> (dest, tmp));
+ DONE;
+}
+ [(set_attr "length" "12")
+ (set_attr "type" "three")])
+
+;; Move 128 bit values from GPRs to VSX registers in 64-bit mode
+(define_insn "p8_mtvsrd_1"
+ [(set (match_operand:TF 0 "register_operand" "=ws")
+ (unspec:TF [(match_operand:DI 1 "register_operand" "r")]
+ UNSPEC_P8V_MTVSRD))]
+ "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+ "mtvsrd %0,%1"
+ [(set_attr "type" "mftgpr")])
+
+(define_insn "p8_mtvsrd_2"
+ [(set (match_operand:TF 0 "register_operand" "+ws")
+ (unspec:TF [(match_dup 0)
+ (match_operand:DI 1 "register_operand" "r")]
+ UNSPEC_P8V_MTVSRD))]
+ "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+ "mtvsrd %L0,%1"
+ [(set_attr "type" "mftgpr")])
+
+(define_insn "p8_xxpermdi_<mode>"
+ [(set (match_operand:FMOVE128_GPR 0 "register_operand" "=wa")
+ (unspec:FMOVE128_GPR [(match_operand:TF 1 "register_operand" "ws")]
+ UNSPEC_P8V_XXPERMDI))]
+ "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+ "xxpermdi %x0,%1,%L1,0"
+ [(set_attr "type" "vecperm")])
+
+(define_insn_and_split "reload_vsx_from_gpr<mode>"
+ [(set (match_operand:FMOVE128_GPR 0 "register_operand" "=wa")
+ (unspec:FMOVE128_GPR
+ [(match_operand:FMOVE128_GPR 1 "register_operand" "r")]
+ UNSPEC_P8V_RELOAD_FROM_GPR))
+ (clobber (match_operand:TF 2 "register_operand" "=ws"))]
+ "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+ "#"
+ "&& reload_completed"
+ [(const_int 0)]
+{
+ rtx dest = operands[0];
+ rtx src = operands[1];
+ rtx tmp = operands[2];
+ rtx gpr_hi_reg = gen_highpart (DImode, src);
+ rtx gpr_lo_reg = gen_lowpart (DImode, src);
+
+ emit_insn (gen_p8_mtvsrd_1 (tmp, gpr_hi_reg));
+ emit_insn (gen_p8_mtvsrd_2 (tmp, gpr_lo_reg));
+ emit_insn (gen_p8_xxpermdi_<mode> (dest, tmp));
+}
+ [(set_attr "length" "12")
+ (set_attr "type" "three")])
+
+(define_split
+ [(set (match_operand:FMOVE128_GPR 0 "nonimmediate_operand" "")
+ (match_operand:FMOVE128_GPR 1 "input_operand" ""))]
+ "reload_completed
+ && (int_reg_operand (operands[0], <MODE>mode)
+ || int_reg_operand (operands[1], <MODE>mode))"
+ [(pc)]
+{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; })
+
+;; Move SFmode to a VSX from a GPR register. Because scalar floating point
+;; type is stored internally as double precision in the VSX registers, we have
+;; to convert it from the vector format.
+
+(define_insn_and_split "reload_vsx_from_gprsf"
+ [(set (match_operand:SF 0 "register_operand" "=wa")
+ (unspec:SF [(match_operand:SF 1 "register_operand" "r")]
+ UNSPEC_P8V_RELOAD_FROM_GPR))
+ (clobber (match_operand:DI 2 "register_operand" "=r"))]
+ "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+ "#"
+ "&& reload_completed"
+ [(const_int 0)]
+{
+ rtx op0 = operands[0];
+ rtx op1 = operands[1];
+ rtx op2 = operands[2];
+ rtx op0_di = simplify_gen_subreg (DImode, op0, SFmode, 0);
+ rtx op1_di = simplify_gen_subreg (DImode, op1, SFmode, 0);
+
+ /* Move SF value to upper 32-bits for xscvspdpn. */
+ emit_insn (gen_ashldi3 (op2, op1_di, GEN_INT (32)));
+ emit_move_insn (op0_di, op2);
+ emit_insn (gen_vsx_xscvspdpn_directmove (op0, op0));
+ DONE;
+}
+ [(set_attr "length" "8")
+ (set_attr "type" "two")])
+
+;; Move 128 bit values from VSX registers to GPRs in 64-bit mode by doing a
+;; normal 64-bit move, followed by an xxpermdi to get the bottom 64-bit value,
+;; and then doing a move of that.
+(define_insn "p8_mfvsrd_3_<mode>"
+ [(set (match_operand:DF 0 "register_operand" "=r")
+ (unspec:DF [(match_operand:FMOVE128_GPR 1 "register_operand" "wa")]
+ UNSPEC_P8V_RELOAD_FROM_VSX))]
+ "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+ "mfvsrd %0,%x1"
+ [(set_attr "type" "mftgpr")])
+
+(define_insn_and_split "reload_gpr_from_vsx<mode>"
+ [(set (match_operand:FMOVE128_GPR 0 "register_operand" "=r")
+ (unspec:FMOVE128_GPR
+ [(match_operand:FMOVE128_GPR 1 "register_operand" "wa")]
+ UNSPEC_P8V_RELOAD_FROM_VSX))
+ (clobber (match_operand:FMOVE128_GPR 2 "register_operand" "=wa"))]
+ "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+ "#"
+ "&& reload_completed"
+ [(const_int 0)]
+{
+ rtx dest = operands[0];
+ rtx src = operands[1];
+ rtx tmp = operands[2];
+ rtx gpr_hi_reg = gen_highpart (DFmode, dest);
+ rtx gpr_lo_reg = gen_lowpart (DFmode, dest);
+
+ emit_insn (gen_p8_mfvsrd_3_<mode> (gpr_hi_reg, src));
+ emit_insn (gen_vsx_xxpermdi_<mode> (tmp, src, src, GEN_INT (3)));
+ emit_insn (gen_p8_mfvsrd_3_<mode> (gpr_lo_reg, tmp));
+}
+ [(set_attr "length" "12")
+ (set_attr "type" "three")])
+
+;; Move SFmode to a GPR from a VSX register. Because scalar floating point
+;; type is stored internally as double precision, we have to convert it to the
+;; vector format.
+
+(define_insn_and_split "reload_gpr_from_vsxsf"
+ [(set (match_operand:SF 0 "register_operand" "=r")
+ (unspec:SF [(match_operand:SF 1 "register_operand" "wa")]
+ UNSPEC_P8V_RELOAD_FROM_VSX))
+ (clobber (match_operand:V4SF 2 "register_operand" "=wa"))]
+ "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+ "#"
+ "&& reload_completed"
+ [(const_int 0)]
+{
+ rtx op0 = operands[0];
+ rtx op1 = operands[1];
+ rtx op2 = operands[2];
+ rtx diop0 = simplify_gen_subreg (DImode, op0, SFmode, 0);
+
+ emit_insn (gen_vsx_xscvdpspn_scalar (op2, op1));
+ emit_insn (gen_p8_mfvsrd_4_disf (diop0, op2));
+ emit_insn (gen_lshrdi3 (diop0, diop0, GEN_INT (32)));
+ DONE;
+}
+ [(set_attr "length" "12")
+ (set_attr "type" "three")])
+
+(define_insn "p8_mfvsrd_4_disf"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (unspec:DI [(match_operand:V4SF 1 "register_operand" "wa")]
+ UNSPEC_P8V_RELOAD_FROM_VSX))]
+ "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+ "mfvsrd %0,%x1"
+ [(set_attr "type" "mftgpr")])
+
+
;; Next come the multi-word integer load and store and the load and store
;; multiple insns.
@@ -8565,8 +10205,8 @@
;; Use of fprs is disparaged slightly otherwise reload prefers to reload
;; a gpr into a fpr instead of reloading an invalid 'Y' address
(define_insn "*movdi_internal32"
- [(set (match_operand:DI 0 "rs6000_nonimmediate_operand" "=Y,r,r,?m,?*d,?*d,r,?wa")
- (match_operand:DI 1 "input_operand" "r,Y,r,d,m,d,IJKnGHF,O"))]
+ [(set (match_operand:DI 0 "rs6000_nonimmediate_operand" "=Y,r,r,?m,?*d,?*d,r")
+ (match_operand:DI 1 "input_operand" "r,Y,r,d,m,d,IJKnGHF"))]
"! TARGET_POWERPC64
&& (gpc_reg_operand (operands[0], DImode)
|| gpc_reg_operand (operands[1], DImode))"
@@ -8577,15 +10217,34 @@
stfd%U0%X0 %1,%0
lfd%U1%X1 %0,%1
fmr %0,%1
- #
- xxlxor %x0,%x0,%x0"
- [(set_attr "type" "store,load,*,fpstore,fpload,fp,*,vecsimple")])
+ #"
+ [(set_attr_alternative "type"
+ [(const_string "store")
+ (const_string "load")
+ (const_string "*")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_u")
+ (const_string "fpstore")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_u")
+ (const_string "fpload")))
+ (const_string "fp")
+ (const_string "*")])])
(define_split
[(set (match_operand:DI 0 "gpc_reg_operand" "")
(match_operand:DI 1 "const_int_operand" ""))]
"! TARGET_POWERPC64 && reload_completed
- && gpr_or_gpr_p (operands[0], operands[1])"
+ && gpr_or_gpr_p (operands[0], operands[1])
+ && !direct_move_p (operands[0], operands[1])"
[(set (match_dup 2) (match_dup 4))
(set (match_dup 3) (match_dup 1))]
"
@@ -8607,38 +10266,15 @@
[(set (match_operand:DIFD 0 "rs6000_nonimmediate_operand" "")
(match_operand:DIFD 1 "input_operand" ""))]
"reload_completed && !TARGET_POWERPC64
- && gpr_or_gpr_p (operands[0], operands[1])"
+ && gpr_or_gpr_p (operands[0], operands[1])
+ && !direct_move_p (operands[0], operands[1])"
[(pc)]
{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; })
-(define_insn "*movdi_mfpgpr"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=Y,r,r,r,r,r,?m,?*d,?*d,r,*h,*h,r,?*d")
- (match_operand:DI 1 "input_operand" "r,Y,r,I,L,nF,d,m,d,*h,r,0,*d,r"))]
- "TARGET_POWERPC64 && TARGET_MFPGPR && TARGET_HARD_FLOAT && TARGET_FPRS
- && (gpc_reg_operand (operands[0], DImode)
- || gpc_reg_operand (operands[1], DImode))"
- "@
- std%U0%X0 %1,%0
- ld%U1%X1 %0,%1
- mr %0,%1
- li %0,%1
- lis %0,%v1
- #
- stfd%U0%X0 %1,%0
- lfd%U1%X1 %0,%1
- fmr %0,%1
- mf%1 %0
- mt%0 %1
- nop
- mftgpr %0,%1
- mffgpr %0,%1"
- [(set_attr "type" "store,load,*,*,*,*,fpstore,fpload,fp,mfjmpr,mtjmpr,*,mftgpr,mffgpr")
- (set_attr "length" "4,4,4,4,4,20,4,4,4,4,4,4,4,4")])
-
(define_insn "*movdi_internal64"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=Y,r,r,r,r,r,?m,?*d,?*d,r,*h,*h,?wa")
- (match_operand:DI 1 "input_operand" "r,Y,r,I,L,nF,d,m,d,*h,r,0,O"))]
- "TARGET_POWERPC64 && (!TARGET_MFPGPR || !TARGET_HARD_FLOAT || !TARGET_FPRS)
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=Y,r,r,r,r,r,?m,?*d,?*d,r,*h,*h,r,?*wg,r,?*wm")
+ (match_operand:DI 1 "input_operand" "r,Y,r,I,L,nF,d,m,d,*h,r,0,*wg,r,*wm,r"))]
+ "TARGET_POWERPC64
&& (gpc_reg_operand (operands[0], DImode)
|| gpc_reg_operand (operands[1], DImode))"
"@
@@ -8654,9 +10290,52 @@
mf%1 %0
mt%0 %1
nop
- xxlxor %x0,%x0,%x0"
- [(set_attr "type" "store,load,*,*,*,*,fpstore,fpload,fp,mfjmpr,mtjmpr,*,vecsimple")
- (set_attr "length" "4,4,4,4,4,20,4,4,4,4,4,4,4")])
+ mftgpr %0,%1
+ mffgpr %0,%1
+ mfvsrd %0,%x1
+ mtvsrd %x0,%1"
+ [(set_attr_alternative "type"
+ [(if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "store_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "store_u")
+ (const_string "store")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "load_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "load_u")
+ (const_string "load")))
+ (const_string "*")
+ (const_string "*")
+ (const_string "*")
+ (const_string "*")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "fpstore_u")
+ (const_string "fpstore")))
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_u")
+ (const_string "fpload")))
+ (const_string "fp")
+ (const_string "mfjmpr")
+ (const_string "mtjmpr")
+ (const_string "*")
+ (const_string "mftgpr")
+ (const_string "mffgpr")
+ (const_string "mftgpr")
+ (const_string "mffgpr")])
+ (set_attr "length" "4,4,4,4,4,20,4,4,4,4,4,4,4,4,4,4")])
;; immediate value valid for a single instruction hiding in a const_double
(define_insn ""
@@ -8719,14 +10398,16 @@
FAIL;
}")
-;; TImode is similar, except that we usually want to compute the address into
-;; a register and use lsi/stsi (the exception is during reload).
+;; TImode/PTImode is similar, except that we usually want to compute the
+;; address into a register and use lsi/stsi (the exception is during reload).
-(define_insn "*movti_string"
- [(set (match_operand:TI 0 "reg_or_mem_operand" "=Q,Y,????r,????r,????r,r")
- (match_operand:TI 1 "input_operand" "r,r,Q,Y,r,n"))]
+(define_insn "*mov<mode>_string"
+ [(set (match_operand:TI2 0 "reg_or_mem_operand" "=Q,Y,????r,????r,????r,r")
+ (match_operand:TI2 1 "input_operand" "r,r,Q,Y,r,n"))]
"! TARGET_POWERPC64
- && (gpc_reg_operand (operands[0], TImode) || gpc_reg_operand (operands[1], TImode))"
+ && (<MODE>mode != TImode || VECTOR_MEM_NONE_P (TImode))
+ && (gpc_reg_operand (operands[0], <MODE>mode)
+ || gpc_reg_operand (operands[1], <MODE>mode))"
"*
{
switch (which_alternative)
@@ -8756,27 +10437,32 @@
(const_string "always")
(const_string "conditional")))])
-(define_insn "*movti_ppc64"
- [(set (match_operand:TI 0 "nonimmediate_operand" "=Y,r,r")
- (match_operand:TI 1 "input_operand" "r,Y,r"))]
- "(TARGET_POWERPC64 && (gpc_reg_operand (operands[0], TImode)
- || gpc_reg_operand (operands[1], TImode)))
- && VECTOR_MEM_NONE_P (TImode)"
- "#"
- [(set_attr "type" "store,load,*")])
+(define_insn "*mov<mode>_ppc64"
+ [(set (match_operand:TI2 0 "nonimmediate_operand" "=wQ,Y,r,r,r,r")
+ (match_operand:TI2 1 "input_operand" "r,r,wQ,Y,r,n"))]
+ "(TARGET_POWERPC64 && VECTOR_MEM_NONE_P (<MODE>mode)
+ && (gpc_reg_operand (operands[0], <MODE>mode)
+ || gpc_reg_operand (operands[1], <MODE>mode)))"
+{
+ return rs6000_output_move_128bit (operands);
+}
+ [(set_attr "type" "store,store,load,load,*,*")
+ (set_attr "length" "8")])
(define_split
- [(set (match_operand:TI 0 "gpc_reg_operand" "")
- (match_operand:TI 1 "const_double_operand" ""))]
- "TARGET_POWERPC64 && VECTOR_MEM_NONE_P (TImode)"
+ [(set (match_operand:TI2 0 "int_reg_operand" "")
+ (match_operand:TI2 1 "const_double_operand" ""))]
+ "TARGET_POWERPC64
+ && (VECTOR_MEM_NONE_P (<MODE>mode)
+ || (reload_completed && INT_REGNO_P (REGNO (operands[0]))))"
[(set (match_dup 2) (match_dup 4))
(set (match_dup 3) (match_dup 5))]
"
{
operands[2] = operand_subword_force (operands[0], WORDS_BIG_ENDIAN == 0,
- TImode);
+ <MODE>mode);
operands[3] = operand_subword_force (operands[0], WORDS_BIG_ENDIAN != 0,
- TImode);
+ <MODE>mode);
if (GET_CODE (operands[1]) == CONST_DOUBLE)
{
operands[4] = GEN_INT (CONST_DOUBLE_HIGH (operands[1]));
@@ -8792,10 +10478,12 @@
}")
(define_split
- [(set (match_operand:TI 0 "nonimmediate_operand" "")
- (match_operand:TI 1 "input_operand" ""))]
- "reload_completed && VECTOR_MEM_NONE_P (TImode)
- && gpr_or_gpr_p (operands[0], operands[1])"
+ [(set (match_operand:TI2 0 "nonimmediate_operand" "")
+ (match_operand:TI2 1 "input_operand" ""))]
+ "reload_completed
+ && gpr_or_gpr_p (operands[0], operands[1])
+ && !direct_move_p (operands[0], operands[1])
+ && !quad_load_store_p (operands[0], operands[1])"
[(pc)]
{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; })
@@ -9651,7 +11339,7 @@
(match_operand:TLSmode 2 "rs6000_tls_symbol_ref" "")]
UNSPEC_TLSGD)
(clobber (reg:SI LR_REGNO))]
- "HAVE_AS_TLS && DEFAULT_ABI == ABI_AIX"
+ "HAVE_AS_TLS && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)"
{
if (TARGET_CMODEL != CMODEL_SMALL)
return "addis %0,%1,%2@got@tlsgd@ha\;addi %0,%0,%2@got@tlsgd@l\;"
@@ -9723,7 +11411,7 @@
(unspec:TLSmode [(match_dup 1) (match_dup 2)] UNSPEC_TLSGD)))
(set (match_dup 0)
(lo_sum:TLSmode (match_dup 3)
- (unspec:TLSmode [(match_dup 2)] UNSPEC_TLSGD)))]
+ (unspec:TLSmode [(match_dup 1) (match_dup 2)] UNSPEC_TLSGD)))]
"
{
operands[3] = gen_reg_rtx (TARGET_64BIT ? DImode : SImode);
@@ -9746,7 +11434,8 @@
(define_insn "*tls_gd_low<TLSmode:tls_abi_suffix>"
[(set (match_operand:TLSmode 0 "gpc_reg_operand" "=b")
(lo_sum:TLSmode (match_operand:TLSmode 1 "gpc_reg_operand" "b")
- (unspec:TLSmode [(match_operand:TLSmode 2 "rs6000_tls_symbol_ref" "")]
+ (unspec:TLSmode [(match_operand:TLSmode 3 "gpc_reg_operand" "b")
+ (match_operand:TLSmode 2 "rs6000_tls_symbol_ref" "")]
UNSPEC_TLSGD)))]
"HAVE_AS_TLS && TARGET_TLS_MARKERS && TARGET_CMODEL != CMODEL_SMALL"
"addi %0,%1,%2@got@tlsgd@l"
@@ -9759,7 +11448,8 @@
(unspec:TLSmode [(match_operand:TLSmode 3 "rs6000_tls_symbol_ref" "")]
UNSPEC_TLSGD)
(clobber (reg:SI LR_REGNO))]
- "HAVE_AS_TLS && DEFAULT_ABI == ABI_AIX && TARGET_TLS_MARKERS"
+ "HAVE_AS_TLS && TARGET_TLS_MARKERS
+ && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)"
"bl %z1(%3@tlsgd)\;nop"
[(set_attr "type" "branch")
(set_attr "length" "8")])
@@ -9791,7 +11481,7 @@
(unspec:TLSmode [(match_operand:TLSmode 1 "gpc_reg_operand" "b")]
UNSPEC_TLSLD)
(clobber (reg:SI LR_REGNO))]
- "HAVE_AS_TLS && DEFAULT_ABI == ABI_AIX"
+ "HAVE_AS_TLS && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)"
{
if (TARGET_CMODEL != CMODEL_SMALL)
return "addis %0,%1,%&@got@tlsld@ha\;addi %0,%0,%&@got@tlsld@l\;"
@@ -9858,7 +11548,7 @@
(unspec:TLSmode [(const_int 0) (match_dup 1)] UNSPEC_TLSLD)))
(set (match_dup 0)
(lo_sum:TLSmode (match_dup 2)
- (unspec:TLSmode [(const_int 0)] UNSPEC_TLSLD)))]
+ (unspec:TLSmode [(const_int 0) (match_dup 1)] UNSPEC_TLSLD)))]
"
{
operands[2] = gen_reg_rtx (TARGET_64BIT ? DImode : SImode);
@@ -9881,7 +11571,9 @@
(define_insn "*tls_ld_low<TLSmode:tls_abi_suffix>"
[(set (match_operand:TLSmode 0 "gpc_reg_operand" "=b")
(lo_sum:TLSmode (match_operand:TLSmode 1 "gpc_reg_operand" "b")
- (unspec:TLSmode [(const_int 0)] UNSPEC_TLSLD)))]
+ (unspec:TLSmode [(const_int 0)
+ (match_operand:TLSmode 2 "gpc_reg_operand" "b")]
+ UNSPEC_TLSLD)))]
"HAVE_AS_TLS && TARGET_TLS_MARKERS && TARGET_CMODEL != CMODEL_SMALL"
"addi %0,%1,%&@got@tlsld@l"
[(set_attr "length" "4")])
@@ -9892,7 +11584,8 @@
(match_operand 2 "" "g")))
(unspec:TLSmode [(const_int 0)] UNSPEC_TLSLD)
(clobber (reg:SI LR_REGNO))]
- "HAVE_AS_TLS && DEFAULT_ABI == ABI_AIX && TARGET_TLS_MARKERS"
+ "HAVE_AS_TLS && TARGET_TLS_MARKERS
+ && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)"
"bl %z1(%&@tlsld)\;nop"
[(set_attr "type" "branch")
(set_attr "length" "8")])
@@ -9953,7 +11646,7 @@
(unspec:TLSmode [(match_dup 1) (match_dup 2)] UNSPEC_TLSGOTDTPREL)))
(set (match_dup 0)
(lo_sum:TLSmode (match_dup 3)
- (unspec:TLSmode [(match_dup 2)] UNSPEC_TLSGOTDTPREL)))]
+ (unspec:TLSmode [(match_dup 1) (match_dup 2)] UNSPEC_TLSGOTDTPREL)))]
"
{
operands[3] = gen_reg_rtx (TARGET_64BIT ? DImode : SImode);
@@ -9976,7 +11669,8 @@
(define_insn "*tls_got_dtprel_low<TLSmode:tls_abi_suffix>"
[(set (match_operand:TLSmode 0 "gpc_reg_operand" "=r")
(lo_sum:TLSmode (match_operand:TLSmode 1 "gpc_reg_operand" "b")
- (unspec:TLSmode [(match_operand:TLSmode 2 "rs6000_tls_symbol_ref" "")]
+ (unspec:TLSmode [(match_operand:TLSmode 3 "gpc_reg_operand" "b")
+ (match_operand:TLSmode 2 "rs6000_tls_symbol_ref" "")]
UNSPEC_TLSGOTDTPREL)))]
"HAVE_AS_TLS && TARGET_CMODEL != CMODEL_SMALL"
"l<TLSmode:tls_insn_suffix> %0,%2@got@dtprel@l(%1)"
@@ -10022,7 +11716,7 @@
(unspec:TLSmode [(match_dup 1) (match_dup 2)] UNSPEC_TLSGOTTPREL)))
(set (match_dup 0)
(lo_sum:TLSmode (match_dup 3)
- (unspec:TLSmode [(match_dup 2)] UNSPEC_TLSGOTTPREL)))]
+ (unspec:TLSmode [(match_dup 1) (match_dup 2)] UNSPEC_TLSGOTTPREL)))]
"
{
operands[3] = gen_reg_rtx (TARGET_64BIT ? DImode : SImode);
@@ -10045,7 +11739,8 @@
(define_insn "*tls_got_tprel_low<TLSmode:tls_abi_suffix>"
[(set (match_operand:TLSmode 0 "gpc_reg_operand" "=r")
(lo_sum:TLSmode (match_operand:TLSmode 1 "gpc_reg_operand" "b")
- (unspec:TLSmode [(match_operand:TLSmode 2 "rs6000_tls_symbol_ref" "")]
+ (unspec:TLSmode [(match_operand:TLSmode 3 "gpc_reg_operand" "b")
+ (match_operand:TLSmode 2 "rs6000_tls_symbol_ref" "")]
UNSPEC_TLSGOTTPREL)))]
"HAVE_AS_TLS && TARGET_CMODEL != CMODEL_SMALL"
"l<TLSmode:tls_insn_suffix> %0,%2@got@tprel@l(%1)"
@@ -10261,7 +11956,7 @@
[(parallel [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(unspec:SI [(const_int 0)] UNSPEC_TOC))
(use (reg:SI 2))])]
- "DEFAULT_ABI == ABI_AIX && TARGET_32BIT"
+ "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2) && TARGET_32BIT"
"*
{
char buf[30];
@@ -10276,7 +11971,7 @@
[(parallel [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
(unspec:DI [(const_int 0)] UNSPEC_TOC))
(use (reg:DI 2))])]
- "DEFAULT_ABI == ABI_AIX && TARGET_64BIT"
+ "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2) && TARGET_64BIT"
"*
{
char buf[30];
@@ -10306,7 +12001,7 @@
[(parallel [(set (reg:SI LR_REGNO)
(match_operand:SI 0 "immediate_operand" "s"))
(use (unspec [(match_dup 0)] UNSPEC_TOC))])]
- "TARGET_ELF && DEFAULT_ABI != ABI_AIX
+ "TARGET_ELF && DEFAULT_ABI == ABI_V4
&& (flag_pic == 2 || (flag_pic && TARGET_SECURE_PLT))"
"")
@@ -10314,7 +12009,7 @@
[(set (reg:SI LR_REGNO)
(match_operand:SI 0 "immediate_operand" "s"))
(use (unspec [(match_dup 0)] UNSPEC_TOC))]
- "!TARGET_LINK_STACK && TARGET_ELF && DEFAULT_ABI != ABI_AIX
+ "!TARGET_LINK_STACK && TARGET_ELF && DEFAULT_ABI == ABI_V4
&& (flag_pic == 2 || (flag_pic && TARGET_SECURE_PLT))"
"bcl 20,31,%0\\n%0:"
[(set_attr "type" "branch")
@@ -10324,7 +12019,7 @@
[(set (reg:SI LR_REGNO)
(match_operand:SI 0 "immediate_operand" "s"))
(use (unspec [(match_dup 0)] UNSPEC_TOC))]
- "TARGET_LINK_STACK && TARGET_ELF && DEFAULT_ABI != ABI_AIX
+ "TARGET_LINK_STACK && TARGET_ELF && DEFAULT_ABI == ABI_V4
&& (flag_pic == 2 || (flag_pic && TARGET_SECURE_PLT))"
"*
{
@@ -10344,7 +12039,7 @@
(label_ref (match_operand 1 "" ""))]
UNSPEC_TOCPTR))
(match_dup 1)])]
- "TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2"
+ "TARGET_ELF && DEFAULT_ABI == ABI_V4 && flag_pic == 2"
"")
(define_insn "load_toc_v4_PIC_1b_normal"
@@ -10353,7 +12048,7 @@
(label_ref (match_operand 1 "" ""))]
UNSPEC_TOCPTR))
(match_dup 1)]
- "!TARGET_LINK_STACK && TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2"
+ "!TARGET_LINK_STACK && TARGET_ELF && DEFAULT_ABI == ABI_V4 && flag_pic == 2"
"bcl 20,31,$+8\;.long %0-$"
[(set_attr "type" "branch")
(set_attr "length" "8")])
@@ -10364,7 +12059,7 @@
(label_ref (match_operand 1 "" ""))]
UNSPEC_TOCPTR))
(match_dup 1)]
- "TARGET_LINK_STACK && TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2"
+ "TARGET_LINK_STACK && TARGET_ELF && DEFAULT_ABI == ABI_V4 && flag_pic == 2"
"*
{
char name[32];
@@ -10382,7 +12077,7 @@
(mem:SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
(minus:SI (match_operand:SI 2 "immediate_operand" "s")
(match_operand:SI 3 "immediate_operand" "s")))))]
- "TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2"
+ "TARGET_ELF && DEFAULT_ABI == ABI_V4 && flag_pic == 2"
"lwz %0,%2-%3(%1)"
[(set_attr "type" "load")])
@@ -10392,7 +12087,7 @@
(high:SI
(minus:SI (match_operand:SI 2 "symbol_ref_operand" "s")
(match_operand:SI 3 "symbol_ref_operand" "s")))))]
- "TARGET_ELF && TARGET_SECURE_PLT && DEFAULT_ABI != ABI_AIX && flag_pic"
+ "TARGET_ELF && TARGET_SECURE_PLT && DEFAULT_ABI == ABI_V4 && flag_pic"
"addis %0,%1,%2-%3@ha")
(define_insn "load_toc_v4_PIC_3c"
@@ -10400,7 +12095,7 @@
(lo_sum:SI (match_operand:SI 1 "gpc_reg_operand" "b")
(minus:SI (match_operand:SI 2 "symbol_ref_operand" "s")
(match_operand:SI 3 "symbol_ref_operand" "s"))))]
- "TARGET_ELF && TARGET_SECURE_PLT && DEFAULT_ABI != ABI_AIX && flag_pic"
+ "TARGET_ELF && TARGET_SECURE_PLT && DEFAULT_ABI == ABI_V4 && flag_pic"
"addi %0,%1,%2-%3@l")
;; If the TOC is shared over a translation unit, as happens with all
@@ -10542,8 +12237,13 @@
operands[0] = XEXP (operands[0], 0);
+ if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
+ {
+ rs6000_call_aix (NULL_RTX, operands[0], operands[1], operands[2]);
+ DONE;
+ }
+
if (GET_CODE (operands[0]) != SYMBOL_REF
- || (DEFAULT_ABI == ABI_AIX && !SYMBOL_REF_FUNCTION_P (operands[0]))
|| (DEFAULT_ABI != ABI_DARWIN && (INTVAL (operands[2]) & CALL_LONG) != 0))
{
if (INTVAL (operands[2]) & CALL_LONG)
@@ -10556,12 +12256,6 @@
operands[0] = force_reg (Pmode, operands[0]);
break;
- case ABI_AIX:
- /* AIX function pointers are really pointers to a three word
- area. */
- rs6000_call_indirect_aix (NULL_RTX, operands[0], operands[1]);
- DONE;
-
default:
gcc_unreachable ();
}
@@ -10587,8 +12281,13 @@
operands[1] = XEXP (operands[1], 0);
+ if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
+ {
+ rs6000_call_aix (operands[0], operands[1], operands[2], operands[3]);
+ DONE;
+ }
+
if (GET_CODE (operands[1]) != SYMBOL_REF
- || (DEFAULT_ABI == ABI_AIX && !SYMBOL_REF_FUNCTION_P (operands[1]))
|| (DEFAULT_ABI != ABI_DARWIN && (INTVAL (operands[3]) & CALL_LONG) != 0))
{
if (INTVAL (operands[3]) & CALL_LONG)
@@ -10601,12 +12300,6 @@
operands[1] = force_reg (Pmode, operands[1]);
break;
- case ABI_AIX:
- /* AIX function pointers are really pointers to a three word
- area. */
- rs6000_call_indirect_aix (operands[0], operands[1], operands[2]);
- DONE;
-
default:
gcc_unreachable ();
}
@@ -10698,135 +12391,6 @@
[(set_attr "type" "branch")
(set_attr "length" "4,8")])
-;; Call to indirect functions with the AIX abi using a 3 word descriptor.
-;; Operand0 is the addresss of the function to call
-;; Operand1 is the flag for System V.4 for unprototyped or FP registers
-;; Operand2 is the location in the function descriptor to load r2 from
-;; Operand3 is the stack location to hold the current TOC pointer
-
-(define_insn "call_indirect_aix<ptrsize>"
- [(call (mem:SI (match_operand:P 0 "register_operand" "c,*l"))
- (match_operand 1 "" "g,g"))
- (use (match_operand:P 2 "memory_operand" "<ptrm>,<ptrm>"))
- (set (reg:P TOC_REGNUM) (match_operand:P 3 "memory_operand" "<ptrm>,<ptrm>"))
- (use (reg:P STATIC_CHAIN_REGNUM))
- (clobber (reg:P LR_REGNO))]
- "DEFAULT_ABI == ABI_AIX && TARGET_POINTERS_TO_NESTED_FUNCTIONS"
- "<ptrload> 2,%2\;b%T0l\;<ptrload> 2,%3"
- [(set_attr "type" "jmpreg")
- (set_attr "length" "12")])
-
-;; Like call_indirect_aix<ptrsize>, but no use of the static chain
-;; Operand0 is the addresss of the function to call
-;; Operand1 is the flag for System V.4 for unprototyped or FP registers
-;; Operand2 is the location in the function descriptor to load r2 from
-;; Operand3 is the stack location to hold the current TOC pointer
-
-(define_insn "call_indirect_aix<ptrsize>_nor11"
- [(call (mem:SI (match_operand:P 0 "register_operand" "c,*l"))
- (match_operand 1 "" "g,g"))
- (use (match_operand:P 2 "memory_operand" "<ptrm>,<ptrm>"))
- (set (reg:P TOC_REGNUM) (match_operand:P 3 "memory_operand" "<ptrm>,<ptrm>"))
- (clobber (reg:P LR_REGNO))]
- "DEFAULT_ABI == ABI_AIX && !TARGET_POINTERS_TO_NESTED_FUNCTIONS"
- "<ptrload> 2,%2\;b%T0l\;<ptrload> 2,%3"
- [(set_attr "type" "jmpreg")
- (set_attr "length" "12")])
-
-;; Operand0 is the return result of the function
-;; Operand1 is the addresss of the function to call
-;; Operand2 is the flag for System V.4 for unprototyped or FP registers
-;; Operand3 is the location in the function descriptor to load r2 from
-;; Operand4 is the stack location to hold the current TOC pointer
-
-(define_insn "call_value_indirect_aix<ptrsize>"
- [(set (match_operand 0 "" "")
- (call (mem:SI (match_operand:P 1 "register_operand" "c,*l"))
- (match_operand 2 "" "g,g")))
- (use (match_operand:P 3 "memory_operand" "<ptrm>,<ptrm>"))
- (set (reg:P TOC_REGNUM) (match_operand:P 4 "memory_operand" "<ptrm>,<ptrm>"))
- (use (reg:P STATIC_CHAIN_REGNUM))
- (clobber (reg:P LR_REGNO))]
- "DEFAULT_ABI == ABI_AIX && TARGET_POINTERS_TO_NESTED_FUNCTIONS"
- "<ptrload> 2,%3\;b%T1l\;<ptrload> 2,%4"
- [(set_attr "type" "jmpreg")
- (set_attr "length" "12")])
-
-;; Like call_value_indirect_aix<ptrsize>, but no use of the static chain
-;; Operand0 is the return result of the function
-;; Operand1 is the addresss of the function to call
-;; Operand2 is the flag for System V.4 for unprototyped or FP registers
-;; Operand3 is the location in the function descriptor to load r2 from
-;; Operand4 is the stack location to hold the current TOC pointer
-
-(define_insn "call_value_indirect_aix<ptrsize>_nor11"
- [(set (match_operand 0 "" "")
- (call (mem:SI (match_operand:P 1 "register_operand" "c,*l"))
- (match_operand 2 "" "g,g")))
- (use (match_operand:P 3 "memory_operand" "<ptrm>,<ptrm>"))
- (set (reg:P TOC_REGNUM) (match_operand:P 4 "memory_operand" "<ptrm>,<ptrm>"))
- (clobber (reg:P LR_REGNO))]
- "DEFAULT_ABI == ABI_AIX && !TARGET_POINTERS_TO_NESTED_FUNCTIONS"
- "<ptrload> 2,%3\;b%T1l\;<ptrload> 2,%4"
- [(set_attr "type" "jmpreg")
- (set_attr "length" "12")])
-
-;; Call to function which may be in another module. Restore the TOC
-;; pointer (r2) after the call unless this is System V.
-;; Operand2 is nonzero if we are using the V.4 calling sequence and
-;; either the function was not prototyped, or it was prototyped as a
-;; variable argument function. It is > 0 if FP registers were passed
-;; and < 0 if they were not.
-
-(define_insn "*call_nonlocal_aix32"
- [(call (mem:SI (match_operand:SI 0 "symbol_ref_operand" "s"))
- (match_operand 1 "" "g"))
- (use (match_operand:SI 2 "immediate_operand" "O"))
- (clobber (reg:SI LR_REGNO))]
- "TARGET_32BIT
- && DEFAULT_ABI == ABI_AIX
- && (INTVAL (operands[2]) & CALL_LONG) == 0"
- "bl %z0\;nop"
- [(set_attr "type" "branch")
- (set_attr "length" "8")])
-
-(define_insn "*call_nonlocal_aix64"
- [(call (mem:SI (match_operand:DI 0 "symbol_ref_operand" "s"))
- (match_operand 1 "" "g"))
- (use (match_operand:SI 2 "immediate_operand" "O"))
- (clobber (reg:SI LR_REGNO))]
- "TARGET_64BIT
- && DEFAULT_ABI == ABI_AIX
- && (INTVAL (operands[2]) & CALL_LONG) == 0"
- "bl %z0\;nop"
- [(set_attr "type" "branch")
- (set_attr "length" "8")])
-
-(define_insn "*call_value_nonlocal_aix32"
- [(set (match_operand 0 "" "")
- (call (mem:SI (match_operand:SI 1 "symbol_ref_operand" "s"))
- (match_operand 2 "" "g")))
- (use (match_operand:SI 3 "immediate_operand" "O"))
- (clobber (reg:SI LR_REGNO))]
- "TARGET_32BIT
- && DEFAULT_ABI == ABI_AIX
- && (INTVAL (operands[3]) & CALL_LONG) == 0"
- "bl %z1\;nop"
- [(set_attr "type" "branch")
- (set_attr "length" "8")])
-
-(define_insn "*call_value_nonlocal_aix64"
- [(set (match_operand 0 "" "")
- (call (mem:SI (match_operand:DI 1 "symbol_ref_operand" "s"))
- (match_operand 2 "" "g")))
- (use (match_operand:SI 3 "immediate_operand" "O"))
- (clobber (reg:SI LR_REGNO))]
- "TARGET_64BIT
- && DEFAULT_ABI == ABI_AIX
- && (INTVAL (operands[3]) & CALL_LONG) == 0"
- "bl %z1\;nop"
- [(set_attr "type" "branch")
- (set_attr "length" "8")])
;; A function pointer under System V is just a normal pointer
;; operands[0] is the function pointer
@@ -11009,6 +12573,104 @@
[(set_attr "type" "branch,branch")
(set_attr "length" "4,8")])
+
+;; Call to AIX abi function in the same module.
+
+(define_insn "*call_local_aix<mode>"
+ [(call (mem:SI (match_operand:P 0 "current_file_function_operand" "s"))
+ (match_operand 1 "" "g"))
+ (clobber (reg:P LR_REGNO))]
+ "DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2"
+ "bl %z0"
+ [(set_attr "type" "branch")
+ (set_attr "length" "4")])
+
+(define_insn "*call_value_local_aix<mode>"
+ [(set (match_operand 0 "" "")
+ (call (mem:SI (match_operand:P 1 "current_file_function_operand" "s"))
+ (match_operand 2 "" "g")))
+ (clobber (reg:P LR_REGNO))]
+ "DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2"
+ "bl %z1"
+ [(set_attr "type" "branch")
+ (set_attr "length" "4")])
+
+;; Call to AIX abi function which may be in another module.
+;; Restore the TOC pointer (r2) after the call.
+
+(define_insn "*call_nonlocal_aix<mode>"
+ [(call (mem:SI (match_operand:P 0 "symbol_ref_operand" "s"))
+ (match_operand 1 "" "g"))
+ (clobber (reg:P LR_REGNO))]
+ "DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2"
+ "bl %z0\;nop"
+ [(set_attr "type" "branch")
+ (set_attr "length" "8")])
+
+(define_insn "*call_value_nonlocal_aix<mode>"
+ [(set (match_operand 0 "" "")
+ (call (mem:SI (match_operand:P 1 "symbol_ref_operand" "s"))
+ (match_operand 2 "" "g")))
+ (clobber (reg:P LR_REGNO))]
+ "DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2"
+ "bl %z1\;nop"
+ [(set_attr "type" "branch")
+ (set_attr "length" "8")])
+
+;; Call to indirect functions with the AIX abi using a 3 word descriptor.
+;; Operand0 is the addresss of the function to call
+;; Operand2 is the location in the function descriptor to load r2 from
+;; Operand3 is the stack location to hold the current TOC pointer
+
+(define_insn "*call_indirect_aix<mode>"
+ [(call (mem:SI (match_operand:P 0 "register_operand" "c,*l"))
+ (match_operand 1 "" "g,g"))
+ (use (match_operand:P 2 "memory_operand" "<ptrm>,<ptrm>"))
+ (set (reg:P TOC_REGNUM) (match_operand:P 3 "memory_operand" "<ptrm>,<ptrm>"))
+ (clobber (reg:P LR_REGNO))]
+ "DEFAULT_ABI == ABI_AIX"
+ "<ptrload> 2,%2\;b%T0l\;<ptrload> 2,%3"
+ [(set_attr "type" "jmpreg")
+ (set_attr "length" "12")])
+
+(define_insn "*call_value_indirect_aix<mode>"
+ [(set (match_operand 0 "" "")
+ (call (mem:SI (match_operand:P 1 "register_operand" "c,*l"))
+ (match_operand 2 "" "g,g")))
+ (use (match_operand:P 3 "memory_operand" "<ptrm>,<ptrm>"))
+ (set (reg:P TOC_REGNUM) (match_operand:P 4 "memory_operand" "<ptrm>,<ptrm>"))
+ (clobber (reg:P LR_REGNO))]
+ "DEFAULT_ABI == ABI_AIX"
+ "<ptrload> 2,%3\;b%T1l\;<ptrload> 2,%4"
+ [(set_attr "type" "jmpreg")
+ (set_attr "length" "12")])
+
+;; Call to indirect functions with the ELFv2 ABI.
+;; Operand0 is the addresss of the function to call
+;; Operand2 is the stack location to hold the current TOC pointer
+
+(define_insn "*call_indirect_elfv2<mode>"
+ [(call (mem:SI (match_operand:P 0 "register_operand" "c,*l"))
+ (match_operand 1 "" "g,g"))
+ (set (reg:P TOC_REGNUM) (match_operand:P 2 "memory_operand" "<ptrm>,<ptrm>"))
+ (clobber (reg:P LR_REGNO))]
+ "DEFAULT_ABI == ABI_ELFv2"
+ "b%T0l\;<ptrload> 2,%2"
+ [(set_attr "type" "jmpreg")
+ (set_attr "length" "8")])
+
+(define_insn "*call_value_indirect_elfv2<mode>"
+ [(set (match_operand 0 "" "")
+ (call (mem:SI (match_operand:P 1 "register_operand" "c,*l"))
+ (match_operand 2 "" "g,g")))
+ (set (reg:P TOC_REGNUM) (match_operand:P 3 "memory_operand" "<ptrm>,<ptrm>"))
+ (clobber (reg:P LR_REGNO))]
+ "DEFAULT_ABI == ABI_ELFv2"
+ "b%T1l\;<ptrload> 2,%3"
+ [(set_attr "type" "jmpreg")
+ (set_attr "length" "8")])
+
+
;; Call subroutine returning any type.
(define_expand "untyped_call"
[(parallel [(call (match_operand 0 "" "")
@@ -11056,6 +12718,39 @@
gcc_assert (GET_CODE (operands[1]) == CONST_INT);
operands[0] = XEXP (operands[0], 0);
+
+ if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
+ {
+ rs6000_sibcall_aix (NULL_RTX, operands[0], operands[1], operands[2]);
+ DONE;
+ }
+}")
+
+(define_expand "sibcall_value"
+ [(parallel [(set (match_operand 0 "register_operand" "")
+ (call (mem:SI (match_operand 1 "address_operand" ""))
+ (match_operand 2 "" "")))
+ (use (match_operand 3 "" ""))
+ (use (reg:SI LR_REGNO))
+ (simple_return)])]
+ ""
+ "
+{
+#if TARGET_MACHO
+ if (MACHOPIC_INDIRECT)
+ operands[1] = machopic_indirect_call_target (operands[1]);
+#endif
+
+ gcc_assert (GET_CODE (operands[1]) == MEM);
+ gcc_assert (GET_CODE (operands[2]) == CONST_INT);
+
+ operands[1] = XEXP (operands[1], 0);
+
+ if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
+ {
+ rs6000_sibcall_aix (operands[0], operands[1], operands[2], operands[3]);
+ DONE;
+ }
}")
;; this and similar patterns must be marked as using LR, otherwise
@@ -11123,7 +12818,6 @@
[(set_attr "type" "branch")
(set_attr "length" "4,8")])
-
(define_insn "*sibcall_value_local64"
[(set (match_operand 0 "" "")
(call (mem:SI (match_operand:DI 1 "current_file_function_operand" "s,s"))
@@ -11145,35 +12839,6 @@
[(set_attr "type" "branch")
(set_attr "length" "4,8")])
-(define_insn "*sibcall_nonlocal_aix<mode>"
- [(call (mem:SI (match_operand:P 0 "call_operand" "s,c"))
- (match_operand 1 "" "g,g"))
- (use (match_operand:SI 2 "immediate_operand" "O,O"))
- (use (reg:SI LR_REGNO))
- (simple_return)]
- "DEFAULT_ABI == ABI_AIX
- && (INTVAL (operands[2]) & CALL_LONG) == 0"
- "@
- b %z0
- b%T0"
- [(set_attr "type" "branch")
- (set_attr "length" "4")])
-
-(define_insn "*sibcall_value_nonlocal_aix<mode>"
- [(set (match_operand 0 "" "")
- (call (mem:SI (match_operand:P 1 "call_operand" "s,c"))
- (match_operand 2 "" "g,g")))
- (use (match_operand:SI 3 "immediate_operand" "O,O"))
- (use (reg:SI LR_REGNO))
- (simple_return)]
- "DEFAULT_ABI == ABI_AIX
- && (INTVAL (operands[3]) & CALL_LONG) == 0"
- "@
- b %z1
- b%T1"
- [(set_attr "type" "branch")
- (set_attr "length" "4")])
-
(define_insn "*sibcall_nonlocal_sysv<mode>"
[(call (mem:SI (match_operand:P 0 "call_operand" "s,s,c,c"))
(match_operand 1 "" ""))
@@ -11204,27 +12869,6 @@
[(set_attr "type" "branch")
(set_attr "length" "4,8,4,8")])
-(define_expand "sibcall_value"
- [(parallel [(set (match_operand 0 "register_operand" "")
- (call (mem:SI (match_operand 1 "address_operand" ""))
- (match_operand 2 "" "")))
- (use (match_operand 3 "" ""))
- (use (reg:SI LR_REGNO))
- (simple_return)])]
- ""
- "
-{
-#if TARGET_MACHO
- if (MACHOPIC_INDIRECT)
- operands[1] = machopic_indirect_call_target (operands[1]);
-#endif
-
- gcc_assert (GET_CODE (operands[1]) == MEM);
- gcc_assert (GET_CODE (operands[2]) == CONST_INT);
-
- operands[1] = XEXP (operands[1], 0);
-}")
-
(define_insn "*sibcall_value_nonlocal_sysv<mode>"
[(set (match_operand 0 "" "")
(call (mem:SI (match_operand:P 1 "call_operand" "s,s,c,c"))
@@ -11256,6 +12900,31 @@
[(set_attr "type" "branch")
(set_attr "length" "4,8,4,8")])
+;; AIX ABI sibling call patterns.
+
+(define_insn "*sibcall_aix<mode>"
+ [(call (mem:SI (match_operand:P 0 "call_operand" "s,c"))
+ (match_operand 1 "" "g,g"))
+ (simple_return)]
+ "DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2"
+ "@
+ b %z0
+ b%T0"
+ [(set_attr "type" "branch")
+ (set_attr "length" "4")])
+
+(define_insn "*sibcall_value_aix<mode>"
+ [(set (match_operand 0 "" "")
+ (call (mem:SI (match_operand:P 1 "call_operand" "s,c"))
+ (match_operand 2 "" "g,g")))
+ (simple_return)]
+ "DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2"
+ "@
+ b %z1
+ b%T1"
+ [(set_attr "type" "branch")
+ (set_attr "length" "4")])
+
(define_expand "sibcall_epilogue"
[(use (const_int 0))]
""
@@ -11294,7 +12963,14 @@
operands[1] = gen_rtx_REG (Pmode, 0);
return "st<wd>%U0%X0 %1,%0";
}
- [(set_attr "type" "store")
+ [(set (attr "type")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
+ (const_string "store_ux")
+ (if_then_else
+ (match_test "update_address_mem (operands[0], VOIDmode)")
+ (const_string "store_u")
+ (const_string "store"))))
(set_attr "length" "4")])
(define_insn "probe_stack_range<P:mode>"
@@ -11589,23 +13265,6 @@
[(set (match_dup 3) (compare:CCUNS (match_dup 1) (match_dup 2)))
(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 4)))])
-(define_insn "*cmpsf_internal1"
- [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
- (compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "f")
- (match_operand:SF 2 "gpc_reg_operand" "f")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT"
- "fcmpu %0,%1,%2"
- [(set_attr "type" "fpcompare")])
-
-(define_insn "*cmpdf_internal1"
- [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
- (compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "d")
- (match_operand:DF 2 "gpc_reg_operand" "d")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && !VECTOR_UNIT_VSX_P (DFmode)"
- "fcmpu %0,%1,%2"
- [(set_attr "type" "fpcompare")])
-
;; Only need to compare second words if first words equal
(define_insn "*cmptf_internal1"
[(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
@@ -13501,6 +15160,14 @@
"mfcr %0"
[(set_attr "type" "mfcr")])
+(define_insn "*crsave"
+ [(match_parallel 0 "crsave_operation"
+ [(set (match_operand:SI 1 "memory_operand" "=m")
+ (match_operand:SI 2 "gpc_reg_operand" "r"))])]
+ ""
+ "stw %2,%1"
+ [(set_attr "type" "store")])
+
(define_insn "*stmw"
[(match_parallel 0 "stmw_operation"
[(set (match_operand:SI 1 "memory_operand" "=m")
@@ -13885,7 +15552,7 @@
(match_operand:P 2 "gpc_reg_operand" "r")] UNSPEC_BPERM))]
"TARGET_POPCNTD"
"bpermd %0,%1,%2"
- [(set_attr "type" "integer")])
+ [(set_attr "type" "popcnt")])
;; Builtin fma support. Handle
@@ -13900,6 +15567,20 @@
""
"")
+(define_insn "*fma<mode>4_fpr"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>,<Fv>")
+ (fma:SFDF
+ (match_operand:SFDF 1 "gpc_reg_operand" "%<Ff>,<Fv>,<Fv>")
+ (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>,0")
+ (match_operand:SFDF 3 "gpc_reg_operand" "<Ff>,0,<Fv>")))]
+ "TARGET_<MODE>_FPR"
+ "@
+ fmadd<Ftrad> %0,%1,%2,%3
+ xsmadda<Fvsx> %x0,%x1,%x2
+ xsmaddm<Fvsx> %x0,%x1,%x3"
+ [(set_attr "type" "fp")
+ (set_attr "fp_type" "fp_maddsub_<Fs>")])
+
; Altivec only has fma and nfms.
(define_expand "fms<mode>4"
[(set (match_operand:FMA_F 0 "register_operand" "")
@@ -13910,6 +15591,20 @@
"!VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
"")
+(define_insn "*fms<mode>4_fpr"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>,<Fv>")
+ (fma:SFDF
+ (match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>,<Fv>")
+ (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>,0")
+ (neg:SFDF (match_operand:SFDF 3 "gpc_reg_operand" "<Ff>,0,<Fv>"))))]
+ "TARGET_<MODE>_FPR"
+ "@
+ fmsub<Ftrad> %0,%1,%2,%3
+ xsmsuba<Fvsx> %x0,%x1,%x2
+ xsmsubm<Fvsx> %x0,%x1,%x3"
+ [(set_attr "type" "fp")
+ (set_attr "fp_type" "fp_maddsub_<Fs>")])
+
;; If signed zeros are ignored, -(a * b - c) = -a * b + c.
(define_expand "fnma<mode>4"
[(set (match_operand:FMA_F 0 "register_operand" "")
@@ -13943,6 +15638,21 @@
"!VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
"")
+(define_insn "*nfma<mode>4_fpr"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>,<Fv>")
+ (neg:SFDF
+ (fma:SFDF
+ (match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>,<Fv>")
+ (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>,0")
+ (match_operand:SFDF 3 "gpc_reg_operand" "<Ff>,0,<Fv>"))))]
+ "TARGET_<MODE>_FPR"
+ "@
+ fnmadd<Ftrad> %0,%1,%2,%3
+ xsnmadda<Fvsx> %x0,%x1,%x2
+ xsnmaddm<Fvsx> %x0,%x1,%x3"
+ [(set_attr "type" "fp")
+ (set_attr "fp_type" "fp_maddsub_<Fs>")])
+
; Not an official optab name, but used from builtins.
(define_expand "nfms<mode>4"
[(set (match_operand:FMA_F 0 "register_operand" "")
@@ -13954,6 +15664,23 @@
""
"")
+(define_insn "*nfmssf4_fpr"
+ [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,<Fv>,<Fv>")
+ (neg:SFDF
+ (fma:SFDF
+ (match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>,<Fv>")
+ (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>,0")
+ (neg:SFDF
+ (match_operand:SFDF 3 "gpc_reg_operand" "<Ff>,0,<Fv>")))))]
+ "TARGET_<MODE>_FPR"
+ "@
+ fnmsub<Ftrad> %0,%1,%2,%3
+ xsnmsuba<Fvsx> %x0,%x1,%x2
+ xsnmsubm<Fvsx> %x0,%x1,%x3"
+ [(set_attr "type" "fp")
+ (set_attr "fp_type" "fp_maddsub_<Fs>")])
+
+
(define_expand "rs6000_get_timebase"
[(use (match_operand:DI 0 "gpc_reg_operand" ""))]
""
@@ -14020,6 +15747,228 @@
})
+;; Power8 fusion support for fusing an addis instruction with a D-form load of
+;; a GPR. The addis instruction must be adjacent to the load, and use the same
+;; register that is being loaded. The fused ops must be physically adjacent.
+
+;; We use define_peephole for the actual addis/load, and the register used to
+;; hold the addis value must be the same as the register being loaded. We use
+;; define_peephole2 to change the register used for addis to be the register
+;; being loaded, since we can look at whether it is dead after the load insn.
+
+(define_peephole
+ [(set (match_operand:P 0 "base_reg_operand" "")
+ (match_operand:P 1 "fusion_gpr_addis" ""))
+ (set (match_operand:INT1 2 "base_reg_operand" "")
+ (match_operand:INT1 3 "fusion_gpr_mem_load" ""))]
+ "TARGET_P8_FUSION && fusion_gpr_load_p (operands, false)"
+{
+ return emit_fusion_gpr_load (operands);
+}
+ [(set_attr "type" "load")
+ (set_attr "length" "8")])
+
+(define_peephole2
+ [(set (match_operand:P 0 "base_reg_operand" "")
+ (match_operand:P 1 "fusion_gpr_addis" ""))
+ (set (match_operand:INT1 2 "base_reg_operand" "")
+ (match_operand:INT1 3 "fusion_gpr_mem_load" ""))]
+ "TARGET_P8_FUSION
+ && (REGNO (operands[0]) != REGNO (operands[2])
+ || GET_CODE (operands[3]) == SIGN_EXTEND)
+ && fusion_gpr_load_p (operands, true)"
+ [(const_int 0)]
+{
+ expand_fusion_gpr_load (operands);
+ DONE;
+})
+
+
+;; Miscellaneous ISA 2.06 (power7) instructions
+(define_insn "addg6s"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (unspec:SI [(match_operand:SI 1 "register_operand" "r")
+ (match_operand:SI 2 "register_operand" "r")]
+ UNSPEC_ADDG6S))]
+ "TARGET_POPCNTD"
+ "addg6s %0,%1,%2"
+ [(set_attr "type" "integer")
+ (set_attr "length" "4")])
+
+(define_insn "cdtbcd"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (unspec:SI [(match_operand:SI 1 "register_operand" "r")]
+ UNSPEC_CDTBCD))]
+ "TARGET_POPCNTD"
+ "cdtbcd %0,%1"
+ [(set_attr "type" "integer")
+ (set_attr "length" "4")])
+
+(define_insn "cbcdtd"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (unspec:SI [(match_operand:SI 1 "register_operand" "r")]
+ UNSPEC_CBCDTD))]
+ "TARGET_POPCNTD"
+ "cbcdtd %0,%1"
+ [(set_attr "type" "integer")
+ (set_attr "length" "4")])
+
+(define_int_iterator UNSPEC_DIV_EXTEND [UNSPEC_DIVE
+ UNSPEC_DIVEO
+ UNSPEC_DIVEU
+ UNSPEC_DIVEUO])
+
+(define_int_attr div_extend [(UNSPEC_DIVE "e")
+ (UNSPEC_DIVEO "eo")
+ (UNSPEC_DIVEU "eu")
+ (UNSPEC_DIVEUO "euo")])
+
+(define_insn "div<div_extend>_<mode>"
+ [(set (match_operand:GPR 0 "register_operand" "=r")
+ (unspec:GPR [(match_operand:GPR 1 "register_operand" "r")
+ (match_operand:GPR 2 "register_operand" "r")]
+ UNSPEC_DIV_EXTEND))]
+ "TARGET_POPCNTD"
+ "div<wd><div_extend> %0,%1,%2"
+ [(set_attr "type" "<idiv_ldiv>")])
+
+
+;; Pack/unpack 128-bit floating point types that take 2 scalar registers
+
+; Type of the 64-bit part when packing/unpacking 128-bit floating point types
+(define_mode_attr FP128_64 [(TF "DF") (TD "DI")])
+
+(define_expand "unpack<mode>"
+ [(set (match_operand:<FP128_64> 0 "nonimmediate_operand" "")
+ (unspec:<FP128_64>
+ [(match_operand:FMOVE128 1 "register_operand" "")
+ (match_operand:QI 2 "const_0_to_1_operand" "")]
+ UNSPEC_UNPACK_128BIT))]
+ ""
+ "")
+
+;; The Advance Toolchain 7.0-3 added private builtins: __builtin_longdouble_dw0
+;; and __builtin_longdouble_dw1 to optimize glibc. Add support for these
+;; builtins here.
+
+(define_expand "unpacktf_0"
+ [(set (match_operand:DF 0 "nonimmediate_operand" "")
+ (unspec:DF [(match_operand:TF 1 "register_operand" "")
+ (const_int 0)]
+ UNSPEC_UNPACK_128BIT))]
+ ""
+ "")
+
+(define_expand "unpacktf_1"
+ [(set (match_operand:DF 0 "nonimmediate_operand" "")
+ (unspec:DF [(match_operand:TF 1 "register_operand" "")
+ (const_int 1)]
+ UNSPEC_UNPACK_128BIT))]
+ ""
+ "")
+
+(define_insn_and_split "unpack<mode>_dm"
+ [(set (match_operand:<FP128_64> 0 "nonimmediate_operand" "=d,m,d,r,m")
+ (unspec:<FP128_64>
+ [(match_operand:FMOVE128 1 "register_operand" "d,d,r,d,r")
+ (match_operand:QI 2 "const_0_to_1_operand" "i,i,i,i,i")]
+ UNSPEC_UNPACK_128BIT))]
+ "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+ "#"
+ "&& reload_completed"
+ [(set (match_dup 0) (match_dup 3))]
+{
+ unsigned fp_regno = REGNO (operands[1]) + UINTVAL (operands[2]);
+
+ if (REG_P (operands[0]) && REGNO (operands[0]) == fp_regno)
+ {
+ emit_note (NOTE_INSN_DELETED);
+ DONE;
+ }
+
+ operands[3] = gen_rtx_REG (<FP128_64>mode, fp_regno);
+}
+ [(set_attr "type" "fp,fpstore,mffgpr,mftgpr,store")
+ (set_attr "length" "4")])
+
+(define_insn_and_split "unpack<mode>_nodm"
+ [(set (match_operand:<FP128_64> 0 "nonimmediate_operand" "=d,m")
+ (unspec:<FP128_64>
+ [(match_operand:FMOVE128 1 "register_operand" "d,d")
+ (match_operand:QI 2 "const_0_to_1_operand" "i,i")]
+ UNSPEC_UNPACK_128BIT))]
+ "!TARGET_POWERPC64 || !TARGET_DIRECT_MOVE"
+ "#"
+ "&& reload_completed"
+ [(set (match_dup 0) (match_dup 3))]
+{
+ unsigned fp_regno = REGNO (operands[1]) + UINTVAL (operands[2]);
+
+ if (REG_P (operands[0]) && REGNO (operands[0]) == fp_regno)
+ {
+ emit_note (NOTE_INSN_DELETED);
+ DONE;
+ }
+
+ operands[3] = gen_rtx_REG (<FP128_64>mode, fp_regno);
+}
+ [(set_attr "type" "fp,fpstore")
+ (set_attr "length" "4")])
+
+(define_insn_and_split "pack<mode>"
+ [(set (match_operand:FMOVE128 0 "register_operand" "=d,&d")
+ (unspec:FMOVE128
+ [(match_operand:<FP128_64> 1 "register_operand" "0,d")
+ (match_operand:<FP128_64> 2 "register_operand" "d,d")]
+ UNSPEC_PACK_128BIT))]
+ ""
+ "@
+ fmr %L0,%2
+ #"
+ "&& reload_completed && REGNO (operands[0]) != REGNO (operands[1])"
+ [(set (match_dup 3) (match_dup 1))
+ (set (match_dup 4) (match_dup 2))]
+{
+ unsigned dest_hi = REGNO (operands[0]);
+ unsigned dest_lo = dest_hi + 1;
+
+ gcc_assert (!IN_RANGE (REGNO (operands[1]), dest_hi, dest_lo));
+ gcc_assert (!IN_RANGE (REGNO (operands[2]), dest_hi, dest_lo));
+
+ operands[3] = gen_rtx_REG (<FP128_64>mode, dest_hi);
+ operands[4] = gen_rtx_REG (<FP128_64>mode, dest_lo);
+}
+ [(set_attr "type" "fp,fp")
+ (set_attr "length" "4,8")])
+
+(define_insn "unpackv1ti"
+ [(set (match_operand:DI 0 "register_operand" "=d,d")
+ (unspec:DI [(match_operand:V1TI 1 "register_operand" "0,wa")
+ (match_operand:QI 2 "const_0_to_1_operand" "O,i")]
+ UNSPEC_UNPACK_128BIT))]
+ "TARGET_VSX"
+{
+ if (REGNO (operands[0]) == REGNO (operands[1]) && INTVAL (operands[2]) == 0)
+ return ASM_COMMENT_START " xxpermdi to same register";
+
+ operands[3] = GEN_INT (INTVAL (operands[2]) == 0 ? 0 : 3);
+ return "xxpermdi %x0,%x1,%x1,%3";
+}
+ [(set_attr "type" "vecperm")
+ (set_attr "length" "4")])
+
+(define_insn "packv1ti"
+ [(set (match_operand:V1TI 0 "register_operand" "=wa")
+ (unspec:V1TI
+ [(match_operand:DI 1 "register_operand" "d")
+ (match_operand:DI 2 "register_operand" "d")]
+ UNSPEC_PACK_128BIT))]
+ "TARGET_VSX"
+ "xxpermdi %x0,%x1,%x2,0"
+ [(set_attr "type" "vecperm")
+ (set_attr "length" "4")])
+
+
(include "sync.md")
(include "vector.md")
@@ -14028,3 +15977,5 @@
(include "spe.md")
(include "dfp.md")
(include "paired.md")
+(include "crypto.md")
+(include "htm.md")
diff --git a/gcc-4.8/gcc/config/rs6000/rs6000.opt b/gcc-4.8/gcc/config/rs6000/rs6000.opt
index 8e3cea121..5b56eb0da 100644
--- a/gcc-4.8/gcc/config/rs6000/rs6000.opt
+++ b/gcc-4.8/gcc/config/rs6000/rs6000.opt
@@ -1,6 +1,6 @@
; Options for the rs6000 port of the compiler
;
-; Copyright (C) 2005-2013 Free Software Foundation, Inc.
+; Copyright (C) 2005-2014 Free Software Foundation, Inc.
; Contributed by Aldy Hernandez <aldy@quesejoda.com>.
;
; This file is part of GCC.
@@ -137,6 +137,14 @@ maltivec
Target Report Mask(ALTIVEC) Var(rs6000_isa_flags)
Use AltiVec instructions
+maltivec=le
+Target Report RejectNegative Var(rs6000_altivec_element_order, 1) Save
+Generate Altivec instructions using little-endian element order
+
+maltivec=be
+Target Report RejectNegative Var(rs6000_altivec_element_order, 2)
+Generate Altivec instructions using big-endian element order
+
mhard-dfp
Target Report Mask(DFP) Var(rs6000_isa_flags)
Use decimal floating point instructions
@@ -181,13 +189,16 @@ mvsx
Target Report Mask(VSX) Var(rs6000_isa_flags)
Use vector/scalar (VSX) instructions
+mvsx-scalar-float
+Target Undocumented Report Var(TARGET_VSX_SCALAR_FLOAT) Init(1)
+; If -mpower8-vector, use VSX arithmetic instructions for SFmode (on by default)
+
mvsx-scalar-double
-Target Undocumented Report Var(TARGET_VSX_SCALAR_DOUBLE) Init(-1)
-; If -mvsx, use VSX arithmetic instructions for scalar double (on by default)
+Target Undocumented Report Var(TARGET_VSX_SCALAR_DOUBLE) Init(1)
+; If -mvsx, use VSX arithmetic instructions for DFmode (on by default)
mvsx-scalar-memory
-Target Undocumented Report Var(TARGET_VSX_SCALAR_MEMORY)
-; If -mvsx, use VSX scalar memory reference instructions for scalar double (off by default)
+Target Undocumented Report Alias(mupper-regs-df)
mvsx-align-128
Target Undocumented Report Var(TARGET_VSX_ALIGN_128)
@@ -363,6 +374,14 @@ mabi=no-spe
Target RejectNegative Var(rs6000_spe_abi, 0)
Do not use the SPE ABI extensions
+mabi=elfv1
+Target RejectNegative Var(rs6000_elf_abi, 1) Save
+Use the ELFv1 ABI
+
+mabi=elfv2
+Target RejectNegative Var(rs6000_elf_abi, 2)
+Use the ELFv2 ABI
+
; These are here for testing during development only, do not document
; in the manual please.
@@ -443,6 +462,10 @@ mlong-double-
Target RejectNegative Joined UInteger Var(rs6000_long_double_type_size) Save
-mlong-double-<n> Specify size of long double (64 or 128 bits)
+mlra
+Target Report Var(rs6000_lra_flag) Init(0) Save
+Use LRA instead of reload
+
msched-costly-dep=
Target RejectNegative Joined Var(rs6000_sched_costly_dep_str)
Determine which dependences between insns are considered costly
@@ -514,3 +537,51 @@ Use/do not use r11 to hold the static link in calls to functions via pointers.
msave-toc-indirect
Target Report Var(TARGET_SAVE_TOC_INDIRECT) Save
Control whether we save the TOC in the prologue for indirect calls or generate the save inline
+
+mvsx-timode
+Target Undocumented Mask(VSX_TIMODE) Var(rs6000_isa_flags)
+Allow 128-bit integers in VSX registers
+
+mpower8-fusion
+Target Report Mask(P8_FUSION) Var(rs6000_isa_flags)
+Fuse certain integer operations together for better performance on power8
+
+mpower8-fusion-sign
+Target Undocumented Mask(P8_FUSION_SIGN) Var(rs6000_isa_flags)
+Allow sign extension in fusion operations
+
+mpower8-vector
+Target Report Mask(P8_VECTOR) Var(rs6000_isa_flags)
+Use/do not use vector and scalar instructions added in ISA 2.07.
+
+mcrypto
+Target Report Mask(CRYPTO) Var(rs6000_isa_flags)
+Use ISA 2.07 crypto instructions
+
+mdirect-move
+Target Report Mask(DIRECT_MOVE) Var(rs6000_isa_flags)
+Use ISA 2.07 direct move between GPR & VSX register instructions
+
+mhtm
+Target Report Mask(HTM) Var(rs6000_isa_flags)
+Use ISA 2.07 transactional memory (HTM) instructions
+
+mquad-memory
+Target Report Mask(QUAD_MEMORY) Var(rs6000_isa_flags)
+Generate the quad word memory instructions (lq/stq).
+
+mquad-memory-atomic
+Target Report Mask(QUAD_MEMORY_ATOMIC) Var(rs6000_isa_flags)
+Generate the quad word memory atomic instructions (lqarx/stqcx).
+
+mcompat-align-parm
+Target Report Var(rs6000_compat_align_parm) Init(1) Save
+Generate aggregate parameter passing code with at most 64-bit alignment.
+
+mupper-regs-df
+Target Undocumented Mask(UPPER_REGS_DF) Var(rs6000_isa_flags)
+Allow double variables in upper registers with -mcpu=power7 or -mvsx
+
+mupper-regs-sf
+Target Undocumented Mask(UPPER_REGS_SF) Var(rs6000_isa_flags)
+Allow float variables in upper registers with -mcpu=power8 or -mp8-vector
diff --git a/gcc-4.8/gcc/config/rs6000/sync.md b/gcc-4.8/gcc/config/rs6000/sync.md
index 252e2690a..74b59ec2c 100644
--- a/gcc-4.8/gcc/config/rs6000/sync.md
+++ b/gcc-4.8/gcc/config/rs6000/sync.md
@@ -1,5 +1,5 @@
;; Machine description for PowerPC synchronization instructions.
-;; Copyright (C) 2005-2013 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
;; Contributed by Geoffrey Keating.
;; This file is part of GCC.
@@ -18,14 +18,23 @@
;; along with GCC; see the file COPYING3. If not see
;; <http://www.gnu.org/licenses/>.
-(define_mode_attr larx [(SI "lwarx") (DI "ldarx")])
-(define_mode_attr stcx [(SI "stwcx.") (DI "stdcx.")])
+(define_mode_attr larx [(QI "lbarx")
+ (HI "lharx")
+ (SI "lwarx")
+ (DI "ldarx")
+ (TI "lqarx")])
+
+(define_mode_attr stcx [(QI "stbcx.")
+ (HI "sthcx.")
+ (SI "stwcx.")
+ (DI "stdcx.")
+ (TI "stqcx.")])
(define_code_iterator FETCHOP [plus minus ior xor and])
(define_code_attr fetchop_name
[(plus "add") (minus "sub") (ior "or") (xor "xor") (and "and")])
(define_code_attr fetchop_pred
- [(plus "add_operand") (minus "gpc_reg_operand")
+ [(plus "add_operand") (minus "int_reg_operand")
(ior "logical_operand") (xor "logical_operand") (and "and_operand")])
(define_expand "mem_thread_fence"
@@ -98,10 +107,17 @@
"isync"
[(set_attr "type" "isync")])
+;; Types that we should provide atomic instructions for.
+(define_mode_iterator AINT [QI
+ HI
+ SI
+ (DI "TARGET_POWERPC64")
+ (TI "TARGET_SYNC_TI")])
+
;; The control dependency used for load dependency described
;; in B.2.3 of the Power ISA 2.06B.
(define_insn "loadsync_<mode>"
- [(unspec_volatile:BLK [(match_operand:INT1 0 "register_operand" "r")]
+ [(unspec_volatile:BLK [(match_operand:AINT 0 "register_operand" "r")]
UNSPECV_ISYNC)
(clobber (match_scratch:CC 1 "=y"))]
""
@@ -109,18 +125,73 @@
[(set_attr "type" "isync")
(set_attr "length" "12")])
+(define_insn "load_quadpti"
+ [(set (match_operand:PTI 0 "quad_int_reg_operand" "=&r")
+ (unspec:PTI
+ [(match_operand:TI 1 "quad_memory_operand" "wQ")] UNSPEC_LSQ))]
+ "TARGET_SYNC_TI
+ && !reg_mentioned_p (operands[0], operands[1])"
+ "lq %0,%1"
+ [(set_attr "type" "load")
+ (set_attr "length" "4")])
+
(define_expand "atomic_load<mode>"
- [(set (match_operand:INT1 0 "register_operand" "") ;; output
- (match_operand:INT1 1 "memory_operand" "")) ;; memory
+ [(set (match_operand:AINT 0 "register_operand" "") ;; output
+ (match_operand:AINT 1 "memory_operand" "")) ;; memory
(use (match_operand:SI 2 "const_int_operand" ""))] ;; model
""
{
+ if (<MODE>mode == TImode && !TARGET_SYNC_TI)
+ FAIL;
+
enum memmodel model = (enum memmodel) INTVAL (operands[2]);
if (model == MEMMODEL_SEQ_CST)
emit_insn (gen_hwsync ());
+ if (<MODE>mode != TImode)
emit_move_insn (operands[0], operands[1]);
+ else
+ {
+ rtx op0 = operands[0];
+ rtx op1 = operands[1];
+ rtx pti_reg = gen_reg_rtx (PTImode);
+
+ // Can't have indexed address for 'lq'
+ if (indexed_address (XEXP (op1, 0), TImode))
+ {
+ rtx old_addr = XEXP (op1, 0);
+ rtx new_addr = force_reg (Pmode, old_addr);
+ operands[1] = op1 = replace_equiv_address (op1, new_addr);
+ }
+
+ emit_insn (gen_load_quadpti (pti_reg, op1));
+
+ /* For 4.8 we need to do explicit dword copies, even in big endian mode,
+ unless we are using the LRA register allocator. The 4.9 register
+ allocator is smart enough to assign an even/odd pair. */
+ if (WORDS_BIG_ENDIAN && rs6000_lra_flag)
+ emit_move_insn (op0, gen_lowpart (TImode, pti_reg));
+ else
+ {
+ rtx op0_lo = gen_lowpart (DImode, op0);
+ rtx op0_hi = gen_highpart (DImode, op0);
+ rtx pti_lo = gen_lowpart (DImode, pti_reg);
+ rtx pti_hi = gen_highpart (DImode, pti_reg);
+
+ emit_insn (gen_rtx_CLOBBER (VOIDmode, op0));
+ if (WORDS_BIG_ENDIAN)
+ {
+ emit_move_insn (op0_hi, pti_hi);
+ emit_move_insn (op0_lo, pti_lo);
+ }
+ else
+ {
+ emit_move_insn (op0_hi, pti_lo);
+ emit_move_insn (op0_lo, pti_hi);
+ }
+ }
+ }
switch (model)
{
@@ -129,16 +200,7 @@
case MEMMODEL_CONSUME:
case MEMMODEL_ACQUIRE:
case MEMMODEL_SEQ_CST:
- if (GET_MODE (operands[0]) == QImode)
- emit_insn (gen_loadsync_qi (operands[0]));
- else if (GET_MODE (operands[0]) == HImode)
- emit_insn (gen_loadsync_hi (operands[0]));
- else if (GET_MODE (operands[0]) == SImode)
- emit_insn (gen_loadsync_si (operands[0]));
- else if (GET_MODE (operands[0]) == DImode)
- emit_insn (gen_loadsync_di (operands[0]));
- else
- gcc_unreachable ();
+ emit_insn (gen_loadsync_<mode> (operands[0]));
break;
default:
gcc_unreachable ();
@@ -146,12 +208,24 @@
DONE;
})
+(define_insn "store_quadpti"
+ [(set (match_operand:PTI 0 "quad_memory_operand" "=wQ")
+ (unspec:PTI
+ [(match_operand:PTI 1 "quad_int_reg_operand" "r")] UNSPEC_LSQ))]
+ "TARGET_SYNC_TI"
+ "stq %1,%0"
+ [(set_attr "type" "store")
+ (set_attr "length" "4")])
+
(define_expand "atomic_store<mode>"
- [(set (match_operand:INT1 0 "memory_operand" "") ;; memory
- (match_operand:INT1 1 "register_operand" "")) ;; input
+ [(set (match_operand:AINT 0 "memory_operand" "") ;; memory
+ (match_operand:AINT 1 "register_operand" "")) ;; input
(use (match_operand:SI 2 "const_int_operand" ""))] ;; model
""
{
+ if (<MODE>mode == TImode && !TARGET_SYNC_TI)
+ FAIL;
+
enum memmodel model = (enum memmodel) INTVAL (operands[2]);
switch (model)
{
@@ -166,39 +240,224 @@
default:
gcc_unreachable ();
}
+ if (<MODE>mode != TImode)
emit_move_insn (operands[0], operands[1]);
+ else
+ {
+ rtx op0 = operands[0];
+ rtx op1 = operands[1];
+ rtx pti_reg = gen_reg_rtx (PTImode);
+
+ // Can't have indexed address for 'stq'
+ if (indexed_address (XEXP (op0, 0), TImode))
+ {
+ rtx old_addr = XEXP (op0, 0);
+ rtx new_addr = force_reg (Pmode, old_addr);
+ operands[0] = op0 = replace_equiv_address (op0, new_addr);
+ }
+
+ /* For 4.8 we need to do explicit dword copies, even in big endian mode,
+ unless we are using the LRA register allocator. The 4.9 register
+ allocator is smart enough to assign an even/odd pair. */
+ if (WORDS_BIG_ENDIAN && rs6000_lra_flag)
+ emit_move_insn (pti_reg, gen_lowpart (PTImode, op1));
+ else
+ {
+ rtx op1_lo = gen_lowpart (DImode, op1);
+ rtx op1_hi = gen_highpart (DImode, op1);
+ rtx pti_lo = gen_lowpart (DImode, pti_reg);
+ rtx pti_hi = gen_highpart (DImode, pti_reg);
+
+ emit_insn (gen_rtx_CLOBBER (VOIDmode, pti_reg));
+ if (WORDS_BIG_ENDIAN)
+ {
+ emit_move_insn (pti_hi, op1_hi);
+ emit_move_insn (pti_lo, op1_lo);
+ }
+ else
+ {
+ emit_move_insn (pti_hi, op1_lo);
+ emit_move_insn (pti_lo, op1_hi);
+ }
+ }
+
+ emit_insn (gen_store_quadpti (gen_lowpart (PTImode, op0), pti_reg));
+ }
+
DONE;
})
-;; ??? Power ISA 2.06B says that there *is* a load-{byte,half}-and-reserve
-;; opcode that is "phased-in". Not implemented as of Power7, so not yet used,
-;; but let's prepare the macros anyway.
-
-(define_mode_iterator ATOMIC [SI (DI "TARGET_POWERPC64")])
+;; Any supported integer mode that has atomic l<x>arx/st<x>cx. instrucitons
+;; other than the quad memory operations, which have special restrictions.
+;; Byte/halfword atomic instructions were added in ISA 2.06B, but were phased
+;; in and did not show up until power8. TImode atomic lqarx/stqcx. require
+;; special handling due to even/odd register requirements.
+(define_mode_iterator ATOMIC [(QI "TARGET_SYNC_HI_QI")
+ (HI "TARGET_SYNC_HI_QI")
+ SI
+ (DI "TARGET_POWERPC64")])
(define_insn "load_locked<mode>"
- [(set (match_operand:ATOMIC 0 "gpc_reg_operand" "=r")
+ [(set (match_operand:ATOMIC 0 "int_reg_operand" "=r")
(unspec_volatile:ATOMIC
[(match_operand:ATOMIC 1 "memory_operand" "Z")] UNSPECV_LL))]
""
"<larx> %0,%y1"
[(set_attr "type" "load_l")])
+(define_insn "load_locked<QHI:mode>_si"
+ [(set (match_operand:SI 0 "int_reg_operand" "=r")
+ (unspec_volatile:SI
+ [(match_operand:QHI 1 "memory_operand" "Z")] UNSPECV_LL))]
+ "TARGET_SYNC_HI_QI"
+ "<QHI:larx> %0,%y1"
+ [(set_attr "type" "load_l")])
+
+;; Use PTImode to get even/odd register pairs.
+
+;; Use a temporary register to force getting an even register for the
+;; lqarx/stqcrx. instructions. Under AT 7.0, we need use an explicit copy,
+;; even in big endian mode, unless we are using the LRA register allocator. In
+;; GCC 4.9, the register allocator is smart enough to assign a even/odd
+;; register pair.
+
+;; On little endian systems where non-atomic quad word load/store instructions
+;; are not used, the address can be register+offset, so make sure the address
+;; is indexed or indirect before register allocation.
+
+(define_expand "load_lockedti"
+ [(use (match_operand:TI 0 "quad_int_reg_operand" ""))
+ (use (match_operand:TI 1 "memory_operand" ""))]
+ "TARGET_SYNC_TI"
+{
+ rtx op0 = operands[0];
+ rtx op1 = operands[1];
+ rtx pti = gen_reg_rtx (PTImode);
+
+ if (!indexed_or_indirect_operand (op1, TImode))
+ {
+ rtx old_addr = XEXP (op1, 0);
+ rtx new_addr = force_reg (Pmode, old_addr);
+ operands[1] = op1 = change_address (op1, TImode, new_addr);
+ }
+
+ emit_insn (gen_load_lockedpti (pti, op1));
+ if (WORDS_BIG_ENDIAN && rs6000_lra_flag)
+ emit_move_insn (op0, gen_lowpart (TImode, pti));
+ else
+ {
+ rtx op0_lo = gen_lowpart (DImode, op0);
+ rtx op0_hi = gen_highpart (DImode, op0);
+ rtx pti_lo = gen_lowpart (DImode, pti);
+ rtx pti_hi = gen_highpart (DImode, pti);
+
+ emit_insn (gen_rtx_CLOBBER (VOIDmode, op0));
+ if (WORDS_BIG_ENDIAN)
+ {
+ emit_move_insn (op0_hi, pti_hi);
+ emit_move_insn (op0_lo, pti_lo);
+ }
+ else
+ {
+ emit_move_insn (op0_hi, pti_lo);
+ emit_move_insn (op0_lo, pti_hi);
+ }
+ }
+ DONE;
+})
+
+(define_insn "load_lockedpti"
+ [(set (match_operand:PTI 0 "quad_int_reg_operand" "=&r")
+ (unspec_volatile:PTI
+ [(match_operand:TI 1 "indexed_or_indirect_operand" "Z")] UNSPECV_LL))]
+ "TARGET_SYNC_TI
+ && !reg_mentioned_p (operands[0], operands[1])
+ && quad_int_reg_operand (operands[0], PTImode)"
+ "lqarx %0,%y1"
+ [(set_attr "type" "load_l")])
+
(define_insn "store_conditional<mode>"
[(set (match_operand:CC 0 "cc_reg_operand" "=x")
(unspec_volatile:CC [(const_int 0)] UNSPECV_SC))
(set (match_operand:ATOMIC 1 "memory_operand" "=Z")
- (match_operand:ATOMIC 2 "gpc_reg_operand" "r"))]
+ (match_operand:ATOMIC 2 "int_reg_operand" "r"))]
""
"<stcx> %2,%y1"
[(set_attr "type" "store_c")])
+;; Use a temporary register to force getting an even register for the
+;; lqarx/stqcrx. instructions. Under AT 7.0, we need use an explicit copy,
+;; even in big endian mode. In GCC 4.9, the register allocator is smart enough
+;; to assign a even/odd register pair.
+
+;; On little endian systems where non-atomic quad word load/store instructions
+;; are not used, the address can be register+offset, so make sure the address
+;; is indexed or indirect before register allocation.
+
+(define_expand "store_conditionalti"
+ [(use (match_operand:CC 0 "cc_reg_operand" ""))
+ (use (match_operand:TI 1 "memory_operand" ""))
+ (use (match_operand:TI 2 "quad_int_reg_operand" ""))]
+ "TARGET_SYNC_TI"
+{
+ rtx op0 = operands[0];
+ rtx op1 = operands[1];
+ rtx op2 = operands[2];
+ rtx addr = XEXP (op1, 0);
+ rtx pti_mem;
+ rtx pti_reg;
+
+ if (!indexed_or_indirect_operand (op1, TImode))
+ {
+ rtx new_addr = force_reg (Pmode, addr);
+ operands[1] = op1 = change_address (op1, TImode, new_addr);
+ addr = new_addr;
+ }
+
+ pti_mem = change_address (op1, PTImode, addr);
+ pti_reg = gen_reg_rtx (PTImode);
+
+ if (WORDS_BIG_ENDIAN && rs6000_lra_flag)
+ emit_move_insn (pti_reg, gen_lowpart (PTImode, op2));
+ else
+ {
+ rtx op2_lo = gen_lowpart (DImode, op2);
+ rtx op2_hi = gen_highpart (DImode, op2);
+ rtx pti_lo = gen_lowpart (DImode, pti_reg);
+ rtx pti_hi = gen_highpart (DImode, pti_reg);
+
+ emit_insn (gen_rtx_CLOBBER (VOIDmode, op0));
+ if (WORDS_BIG_ENDIAN)
+ {
+ emit_move_insn (pti_hi, op2_hi);
+ emit_move_insn (pti_lo, op2_lo);
+ }
+ else
+ {
+ emit_move_insn (pti_hi, op2_lo);
+ emit_move_insn (pti_lo, op2_hi);
+ }
+ }
+
+ emit_insn (gen_store_conditionalpti (op0, pti_mem, pti_reg));
+ DONE;
+})
+
+(define_insn "store_conditionalpti"
+ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
+ (unspec_volatile:CC [(const_int 0)] UNSPECV_SC))
+ (set (match_operand:PTI 1 "indexed_or_indirect_operand" "=Z")
+ (match_operand:PTI 2 "quad_int_reg_operand" "r"))]
+ "TARGET_SYNC_TI && quad_int_reg_operand (operands[2], PTImode)"
+ "stqcx. %2,%y1"
+ [(set_attr "type" "store_c")])
+
(define_expand "atomic_compare_and_swap<mode>"
- [(match_operand:SI 0 "gpc_reg_operand" "") ;; bool out
- (match_operand:INT1 1 "gpc_reg_operand" "") ;; val out
- (match_operand:INT1 2 "memory_operand" "") ;; memory
- (match_operand:INT1 3 "reg_or_short_operand" "") ;; expected
- (match_operand:INT1 4 "gpc_reg_operand" "") ;; desired
+ [(match_operand:SI 0 "int_reg_operand" "") ;; bool out
+ (match_operand:AINT 1 "int_reg_operand" "") ;; val out
+ (match_operand:AINT 2 "memory_operand" "") ;; memory
+ (match_operand:AINT 3 "reg_or_short_operand" "") ;; expected
+ (match_operand:AINT 4 "int_reg_operand" "") ;; desired
(match_operand:SI 5 "const_int_operand" "") ;; is_weak
(match_operand:SI 6 "const_int_operand" "") ;; model succ
(match_operand:SI 7 "const_int_operand" "")] ;; model fail
@@ -209,9 +468,9 @@
})
(define_expand "atomic_exchange<mode>"
- [(match_operand:INT1 0 "gpc_reg_operand" "") ;; output
- (match_operand:INT1 1 "memory_operand" "") ;; memory
- (match_operand:INT1 2 "gpc_reg_operand" "") ;; input
+ [(match_operand:AINT 0 "int_reg_operand" "") ;; output
+ (match_operand:AINT 1 "memory_operand" "") ;; memory
+ (match_operand:AINT 2 "int_reg_operand" "") ;; input
(match_operand:SI 3 "const_int_operand" "")] ;; model
""
{
@@ -220,9 +479,9 @@
})
(define_expand "atomic_<fetchop_name><mode>"
- [(match_operand:INT1 0 "memory_operand" "") ;; memory
- (FETCHOP:INT1 (match_dup 0)
- (match_operand:INT1 1 "<fetchop_pred>" "")) ;; operand
+ [(match_operand:AINT 0 "memory_operand" "") ;; memory
+ (FETCHOP:AINT (match_dup 0)
+ (match_operand:AINT 1 "<fetchop_pred>" "")) ;; operand
(match_operand:SI 2 "const_int_operand" "")] ;; model
""
{
@@ -232,8 +491,8 @@
})
(define_expand "atomic_nand<mode>"
- [(match_operand:INT1 0 "memory_operand" "") ;; memory
- (match_operand:INT1 1 "gpc_reg_operand" "") ;; operand
+ [(match_operand:AINT 0 "memory_operand" "") ;; memory
+ (match_operand:AINT 1 "int_reg_operand" "") ;; operand
(match_operand:SI 2 "const_int_operand" "")] ;; model
""
{
@@ -243,10 +502,10 @@
})
(define_expand "atomic_fetch_<fetchop_name><mode>"
- [(match_operand:INT1 0 "gpc_reg_operand" "") ;; output
- (match_operand:INT1 1 "memory_operand" "") ;; memory
- (FETCHOP:INT1 (match_dup 1)
- (match_operand:INT1 2 "<fetchop_pred>" "")) ;; operand
+ [(match_operand:AINT 0 "int_reg_operand" "") ;; output
+ (match_operand:AINT 1 "memory_operand" "") ;; memory
+ (FETCHOP:AINT (match_dup 1)
+ (match_operand:AINT 2 "<fetchop_pred>" "")) ;; operand
(match_operand:SI 3 "const_int_operand" "")] ;; model
""
{
@@ -256,9 +515,9 @@
})
(define_expand "atomic_fetch_nand<mode>"
- [(match_operand:INT1 0 "gpc_reg_operand" "") ;; output
- (match_operand:INT1 1 "memory_operand" "") ;; memory
- (match_operand:INT1 2 "gpc_reg_operand" "") ;; operand
+ [(match_operand:AINT 0 "int_reg_operand" "") ;; output
+ (match_operand:AINT 1 "memory_operand" "") ;; memory
+ (match_operand:AINT 2 "int_reg_operand" "") ;; operand
(match_operand:SI 3 "const_int_operand" "")] ;; model
""
{
@@ -268,10 +527,10 @@
})
(define_expand "atomic_<fetchop_name>_fetch<mode>"
- [(match_operand:INT1 0 "gpc_reg_operand" "") ;; output
- (match_operand:INT1 1 "memory_operand" "") ;; memory
- (FETCHOP:INT1 (match_dup 1)
- (match_operand:INT1 2 "<fetchop_pred>" "")) ;; operand
+ [(match_operand:AINT 0 "int_reg_operand" "") ;; output
+ (match_operand:AINT 1 "memory_operand" "") ;; memory
+ (FETCHOP:AINT (match_dup 1)
+ (match_operand:AINT 2 "<fetchop_pred>" "")) ;; operand
(match_operand:SI 3 "const_int_operand" "")] ;; model
""
{
@@ -281,9 +540,9 @@
})
(define_expand "atomic_nand_fetch<mode>"
- [(match_operand:INT1 0 "gpc_reg_operand" "") ;; output
- (match_operand:INT1 1 "memory_operand" "") ;; memory
- (match_operand:INT1 2 "gpc_reg_operand" "") ;; operand
+ [(match_operand:AINT 0 "int_reg_operand" "") ;; output
+ (match_operand:AINT 1 "memory_operand" "") ;; memory
+ (match_operand:AINT 2 "int_reg_operand" "") ;; operand
(match_operand:SI 3 "const_int_operand" "")] ;; model
""
{
diff --git a/gcc-4.8/gcc/config/rs6000/sysv4.h b/gcc-4.8/gcc/config/rs6000/sysv4.h
index fabc22c8c..965751b4f 100644
--- a/gcc-4.8/gcc/config/rs6000/sysv4.h
+++ b/gcc-4.8/gcc/config/rs6000/sysv4.h
@@ -45,7 +45,7 @@
& (OPTION_MASK_RELOCATABLE \
| OPTION_MASK_MINIMAL_TOC)) \
&& flag_pic > 1) \
- || DEFAULT_ABI == ABI_AIX)
+ || DEFAULT_ABI != ABI_V4)
#define TARGET_BITFIELD_TYPE (! TARGET_NO_BITFIELD_TYPE)
#define TARGET_BIG_ENDIAN (! TARGET_LITTLE_ENDIAN)
@@ -147,7 +147,7 @@ do { \
rs6000_sdata_name); \
} \
\
- else if (flag_pic && DEFAULT_ABI != ABI_AIX \
+ else if (flag_pic && DEFAULT_ABI == ABI_V4 \
&& (rs6000_sdata == SDATA_EABI \
|| rs6000_sdata == SDATA_SYSV)) \
{ \
@@ -173,14 +173,14 @@ do { \
error ("-mrelocatable and -mno-minimal-toc are incompatible"); \
} \
\
- if (TARGET_RELOCATABLE && rs6000_current_abi == ABI_AIX) \
+ if (TARGET_RELOCATABLE && rs6000_current_abi != ABI_V4) \
{ \
rs6000_isa_flags &= ~OPTION_MASK_RELOCATABLE; \
error ("-mrelocatable and -mcall-%s are incompatible", \
rs6000_abi_name); \
} \
\
- if (!TARGET_64BIT && flag_pic > 1 && rs6000_current_abi == ABI_AIX) \
+ if (!TARGET_64BIT && flag_pic > 1 && rs6000_current_abi != ABI_V4) \
{ \
flag_pic = 0; \
error ("-fPIC and -mcall-%s are incompatible", \
@@ -193,7 +193,7 @@ do { \
} \
\
/* Treat -fPIC the same as -mrelocatable. */ \
- if (flag_pic > 1 && DEFAULT_ABI != ABI_AIX) \
+ if (flag_pic > 1 && DEFAULT_ABI == ABI_V4) \
{ \
rs6000_isa_flags |= OPTION_MASK_RELOCATABLE | OPTION_MASK_MINIMAL_TOC; \
TARGET_NO_FP_IN_TOC = 1; \
@@ -317,7 +317,7 @@ do { \
/* Put PC relative got entries in .got2. */
#define MINIMAL_TOC_SECTION_ASM_OP \
- (TARGET_RELOCATABLE || (flag_pic && DEFAULT_ABI != ABI_AIX) \
+ (TARGET_RELOCATABLE || (flag_pic && DEFAULT_ABI == ABI_V4) \
? "\t.section\t\".got2\",\"aw\"" : "\t.section\t\".got1\",\"aw\"")
#define SDATA_SECTION_ASM_OP "\t.section\t\".sdata\",\"aw\""
@@ -522,8 +522,6 @@ extern int fixuplabelno;
#define ENDIAN_SELECT(BIG_OPT, LITTLE_OPT, DEFAULT_OPT) \
"%{mlittle|mlittle-endian:" LITTLE_OPT ";" \
"mbig|mbig-endian:" BIG_OPT ";" \
- "mcall-aixdesc|mcall-freebsd|mcall-netbsd|" \
- "mcall-openbsd|mcall-linux:" BIG_OPT ";" \
"mcall-i960-old:" LITTLE_OPT ";" \
":" DEFAULT_OPT "}"
@@ -536,25 +534,12 @@ extern int fixuplabelno;
%{memb|msdata=eabi: -memb}" \
ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
-#define CC1_ENDIAN_BIG_SPEC ""
-
-#define CC1_ENDIAN_LITTLE_SPEC "\
-%{!mstrict-align: %{!mno-strict-align: \
- %{!mcall-i960-old: \
- -mstrict-align \
- } \
-}}"
-
-#define CC1_ENDIAN_DEFAULT_SPEC "%(cc1_endian_big)"
-
#ifndef CC1_SECURE_PLT_DEFAULT_SPEC
#define CC1_SECURE_PLT_DEFAULT_SPEC ""
#endif
-/* Pass -G xxx to the compiler and set correct endian mode. */
+/* Pass -G xxx to the compiler. */
#define CC1_SPEC "%{G*} %(cc1_cpu)" \
- ENDIAN_SELECT(" %(cc1_endian_big)", " %(cc1_endian_little)", \
- " %(cc1_endian_default)") \
"%{meabi: %{!mcall-*: -mcall-sysv }} \
%{!meabi: %{!mno-eabi: \
%{mrelocatable: -meabi } \
@@ -912,9 +897,6 @@ ncrtn.o%s"
{ "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \
{ "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \
{ "link_os_default", LINK_OS_DEFAULT_SPEC }, \
- { "cc1_endian_big", CC1_ENDIAN_BIG_SPEC }, \
- { "cc1_endian_little", CC1_ENDIAN_LITTLE_SPEC }, \
- { "cc1_endian_default", CC1_ENDIAN_DEFAULT_SPEC }, \
{ "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \
{ "cpp_os_ads", CPP_OS_ADS_SPEC }, \
{ "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
diff --git a/gcc-4.8/gcc/config/rs6000/sysv4le.h b/gcc-4.8/gcc/config/rs6000/sysv4le.h
index 3901122a7..28da1c99c 100644
--- a/gcc-4.8/gcc/config/rs6000/sysv4le.h
+++ b/gcc-4.8/gcc/config/rs6000/sysv4le.h
@@ -22,9 +22,6 @@
#undef TARGET_DEFAULT
#define TARGET_DEFAULT MASK_LITTLE_ENDIAN
-#undef CC1_ENDIAN_DEFAULT_SPEC
-#define CC1_ENDIAN_DEFAULT_SPEC "%(cc1_endian_little)"
-
#undef DEFAULT_ASM_ENDIAN
#define DEFAULT_ASM_ENDIAN " -mlittle"
@@ -34,3 +31,7 @@
#undef MULTILIB_DEFAULTS
#define MULTILIB_DEFAULTS { "mlittle", "mcall-sysv" }
+
+/* Little-endian PowerPC64 Linux uses the ELF v2 ABI by default. */
+#define LINUX64_DEFAULT_ABI_ELFv2
+
diff --git a/gcc-4.8/gcc/config/rs6000/t-linux64 b/gcc-4.8/gcc/config/rs6000/t-linux64
index 9175de2ff..70e928dd7 100644
--- a/gcc-4.8/gcc/config/rs6000/t-linux64
+++ b/gcc-4.8/gcc/config/rs6000/t-linux64
@@ -25,8 +25,8 @@
# it doesn't tell anything about the 32bit libraries on those systems. Set
# MULTILIB_OSDIRNAMES according to what is found on the target.
-MULTILIB_OPTIONS = m64/m32
-MULTILIB_DIRNAMES = 64 32
-MULTILIB_EXTRA_OPTS = fPIC
-MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:powerpc64-linux-gnu)
-MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)
+MULTILIB_OPTIONS := m64/m32
+MULTILIB_DIRNAMES := 64 32
+MULTILIB_EXTRA_OPTS :=
+MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu)
+MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)
diff --git a/gcc-4.8/gcc/config/rs6000/t-linux64bele b/gcc-4.8/gcc/config/rs6000/t-linux64bele
new file mode 100644
index 000000000..97c1ee6fb
--- /dev/null
+++ b/gcc-4.8/gcc/config/rs6000/t-linux64bele
@@ -0,0 +1,7 @@
+#rs6000/t-linux64end
+
+MULTILIB_OPTIONS += mlittle
+MULTILIB_DIRNAMES += le
+MULTILIB_OSDIRNAMES += $(subst =,.mlittle=,$(subst lible32,lib32le,$(subst lible64,lib64le,$(subst lib,lible,$(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES))))))
+MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mlittle%,$(MULTILIB_OSDIRNAMES)))
+MULTILIB_MATCHES := ${MULTILIB_MATCHES_ENDIAN}
diff --git a/gcc-4.8/gcc/config/rs6000/t-linux64le b/gcc-4.8/gcc/config/rs6000/t-linux64le
new file mode 100644
index 000000000..0cf38e152
--- /dev/null
+++ b/gcc-4.8/gcc/config/rs6000/t-linux64le
@@ -0,0 +1,3 @@
+#rs6000/t-linux64le
+
+MULTILIB_OSDIRNAMES := $(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES))
diff --git a/gcc-4.8/gcc/config/rs6000/t-linux64lebe b/gcc-4.8/gcc/config/rs6000/t-linux64lebe
new file mode 100644
index 000000000..2e63bdb9f
--- /dev/null
+++ b/gcc-4.8/gcc/config/rs6000/t-linux64lebe
@@ -0,0 +1,7 @@
+#rs6000/t-linux64leend
+
+MULTILIB_OPTIONS += mbig
+MULTILIB_DIRNAMES += be
+MULTILIB_OSDIRNAMES += $(subst =,.mbig=,$(subst libbe32,lib32be,$(subst libbe64,lib64be,$(subst lib,libbe,$(subst le-linux,-linux,$(MULTILIB_OSDIRNAMES))))))
+MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mbig%,$(MULTILIB_OSDIRNAMES)))
+MULTILIB_MATCHES := ${MULTILIB_MATCHES_ENDIAN}
diff --git a/gcc-4.8/gcc/config/rs6000/t-rs6000 b/gcc-4.8/gcc/config/rs6000/t-rs6000
index 52c183915..81372dfb1 100644
--- a/gcc-4.8/gcc/config/rs6000/t-rs6000
+++ b/gcc-4.8/gcc/config/rs6000/t-rs6000
@@ -60,6 +60,7 @@ MD_INCLUDES = $(srcdir)/config/rs6000/rs64.md \
$(srcdir)/config/rs6000/power5.md \
$(srcdir)/config/rs6000/power6.md \
$(srcdir)/config/rs6000/power7.md \
+ $(srcdir)/config/rs6000/power8.md \
$(srcdir)/config/rs6000/cell.md \
$(srcdir)/config/rs6000/xfpu.md \
$(srcdir)/config/rs6000/a2.md \
@@ -70,6 +71,8 @@ MD_INCLUDES = $(srcdir)/config/rs6000/rs64.md \
$(srcdir)/config/rs6000/vector.md \
$(srcdir)/config/rs6000/vsx.md \
$(srcdir)/config/rs6000/altivec.md \
+ $(srcdir)/config/rs6000/crypto.md \
+ $(srcdir)/config/rs6000/htm.md \
$(srcdir)/config/rs6000/spe.md \
$(srcdir)/config/rs6000/dfp.md \
$(srcdir)/config/rs6000/paired.md
diff --git a/gcc-4.8/gcc/config/rs6000/vector.md b/gcc-4.8/gcc/config/rs6000/vector.md
index 5a6e1fb30..5c45ec3f9 100644
--- a/gcc-4.8/gcc/config/rs6000/vector.md
+++ b/gcc-4.8/gcc/config/rs6000/vector.md
@@ -24,28 +24,28 @@
;; Vector int modes
-(define_mode_iterator VEC_I [V16QI V8HI V4SI])
+(define_mode_iterator VEC_I [V16QI V8HI V4SI V2DI])
;; Vector float modes
(define_mode_iterator VEC_F [V4SF V2DF])
;; Vector arithmetic modes
-(define_mode_iterator VEC_A [V16QI V8HI V4SI V4SF V2DF])
+(define_mode_iterator VEC_A [V16QI V8HI V4SI V2DI V4SF V2DF])
;; Vector modes that need alginment via permutes
(define_mode_iterator VEC_K [V16QI V8HI V4SI V4SF])
;; Vector logical modes
-(define_mode_iterator VEC_L [V16QI V8HI V4SI V2DI V4SF V2DF TI])
+(define_mode_iterator VEC_L [V16QI V8HI V4SI V2DI V4SF V2DF V1TI TI])
;; Vector modes for moves. Don't do TImode here.
-(define_mode_iterator VEC_M [V16QI V8HI V4SI V2DI V4SF V2DF])
+(define_mode_iterator VEC_M [V16QI V8HI V4SI V2DI V4SF V2DF V1TI])
;; Vector modes for types that don't need a realignment under VSX
-(define_mode_iterator VEC_N [V4SI V4SF V2DI V2DF])
+(define_mode_iterator VEC_N [V4SI V4SF V2DI V2DF V1TI])
;; Vector comparison modes
-(define_mode_iterator VEC_C [V16QI V8HI V4SI V4SF V2DF])
+(define_mode_iterator VEC_C [V16QI V8HI V4SI V2DI V4SF V2DF])
;; Vector init/extract modes
(define_mode_iterator VEC_E [V16QI V8HI V4SI V2DI V4SF V2DF])
@@ -54,7 +54,8 @@
(define_mode_iterator VEC_64 [V2DI V2DF])
;; Vector reload iterator
-(define_mode_iterator VEC_R [V16QI V8HI V4SI V2DI V4SF V2DF DF TI])
+(define_mode_iterator VEC_R [V16QI V8HI V4SI V2DI V4SF V2DF V1TI
+ SF SD SI DF DD DI TI])
;; Base type from vector mode
(define_mode_attr VEC_base [(V16QI "QI")
@@ -63,6 +64,7 @@
(V2DI "DI")
(V4SF "SF")
(V2DF "DF")
+ (V1TI "TI")
(TI "TI")])
;; Same size integer type for floating point data
@@ -88,7 +90,8 @@
(smax "smax")])
-;; Vector move instructions.
+;; Vector move instructions. Little-endian VSX loads and stores require
+;; special handling to circumvent "element endianness."
(define_expand "mov<mode>"
[(set (match_operand:VEC_M 0 "nonimmediate_operand" "")
(match_operand:VEC_M 1 "any_operand" ""))]
@@ -104,6 +107,15 @@
&& !vlogical_operand (operands[1], <MODE>mode))
operands[1] = force_reg (<MODE>mode, operands[1]);
}
+ if (!BYTES_BIG_ENDIAN
+ && VECTOR_MEM_VSX_P (<MODE>mode)
+ && !gpr_or_gpr_p (operands[0], operands[1])
+ && (memory_operand (operands[0], <MODE>mode)
+ ^ memory_operand (operands[1], <MODE>mode)))
+ {
+ rs6000_emit_le_vsx_move (operands[0], operands[1], <MODE>mode);
+ DONE;
+ }
})
;; Generic vector floating point load/store instructions. These will match
@@ -126,7 +138,9 @@
(match_operand:VEC_L 1 "input_operand" ""))]
"VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode)
&& reload_completed
- && gpr_or_gpr_p (operands[0], operands[1])"
+ && gpr_or_gpr_p (operands[0], operands[1])
+ && !direct_move_p (operands[0], operands[1])
+ && !quad_load_store_p (operands[0], operands[1])"
[(pc)]
{
rs6000_split_multireg_move (operands[0], operands[1]);
@@ -249,7 +263,7 @@
[(set (match_operand:VEC_F 0 "vfloat_operand" "")
(mult:VEC_F (match_operand:VEC_F 1 "vfloat_operand" "")
(match_operand:VEC_F 2 "vfloat_operand" "")))]
- "VECTOR_UNIT_VSX_P (<MODE>mode) || VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)"
{
if (<MODE>mode == V4SFmode && VECTOR_UNIT_ALTIVEC_P (<MODE>mode))
{
@@ -395,7 +409,7 @@
(match_operand:VEC_I 5 "vint_operand" "")])
(match_operand:VEC_I 1 "vint_operand" "")
(match_operand:VEC_I 2 "vint_operand" "")))]
- "VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)"
"
{
if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
@@ -451,7 +465,7 @@
(match_operand:VEC_I 5 "vint_operand" "")])
(match_operand:VEC_I 1 "vint_operand" "")
(match_operand:VEC_I 2 "vint_operand" "")))]
- "VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)"
"
{
if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
@@ -505,14 +519,14 @@
[(set (match_operand:VEC_I 0 "vint_operand" "")
(gtu:VEC_I (match_operand:VEC_I 1 "vint_operand" "")
(match_operand:VEC_I 2 "vint_operand" "")))]
- "VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)"
"")
(define_expand "vector_geu<mode>"
[(set (match_operand:VEC_I 0 "vint_operand" "")
(geu:VEC_I (match_operand:VEC_I 1 "vint_operand" "")
(match_operand:VEC_I 2 "vint_operand" "")))]
- "VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)"
"")
(define_insn_and_split "*vector_uneq<mode>"
@@ -595,8 +609,8 @@
(ge:VEC_F (match_dup 2)
(match_dup 1)))
(set (match_dup 0)
- (not:VEC_F (ior:VEC_F (match_dup 3)
- (match_dup 4))))]
+ (and:VEC_F (not:VEC_F (match_dup 3))
+ (not:VEC_F (match_dup 4))))]
"
{
operands[3] = gen_reg_rtx (<MODE>mode);
@@ -708,47 +722,18 @@
"")
-;; Vector logical instructions
-(define_expand "xor<mode>3"
- [(set (match_operand:VEC_L 0 "vlogical_operand" "")
- (xor:VEC_L (match_operand:VEC_L 1 "vlogical_operand" "")
- (match_operand:VEC_L 2 "vlogical_operand" "")))]
- "VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode)"
- "")
-
-(define_expand "ior<mode>3"
- [(set (match_operand:VEC_L 0 "vlogical_operand" "")
- (ior:VEC_L (match_operand:VEC_L 1 "vlogical_operand" "")
- (match_operand:VEC_L 2 "vlogical_operand" "")))]
- "VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode)"
- "")
-
-(define_expand "and<mode>3"
- [(set (match_operand:VEC_L 0 "vlogical_operand" "")
- (and:VEC_L (match_operand:VEC_L 1 "vlogical_operand" "")
- (match_operand:VEC_L 2 "vlogical_operand" "")))]
- "VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode)"
- "")
+;; Vector count leading zeros
+(define_expand "clz<mode>2"
+ [(set (match_operand:VEC_I 0 "register_operand" "")
+ (clz:VEC_I (match_operand:VEC_I 1 "register_operand" "")))]
+ "TARGET_P8_VECTOR")
-(define_expand "one_cmpl<mode>2"
- [(set (match_operand:VEC_L 0 "vlogical_operand" "")
- (not:VEC_L (match_operand:VEC_L 1 "vlogical_operand" "")))]
- "VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode)"
- "")
+;; Vector population count
+(define_expand "popcount<mode>2"
+ [(set (match_operand:VEC_I 0 "register_operand" "")
+ (popcount:VEC_I (match_operand:VEC_I 1 "register_operand" "")))]
+ "TARGET_P8_VECTOR")
-(define_expand "nor<mode>3"
- [(set (match_operand:VEC_L 0 "vlogical_operand" "")
- (not:VEC_L (ior:VEC_L (match_operand:VEC_L 1 "vlogical_operand" "")
- (match_operand:VEC_L 2 "vlogical_operand" ""))))]
- "VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode)"
- "")
-
-(define_expand "andc<mode>3"
- [(set (match_operand:VEC_L 0 "vlogical_operand" "")
- (and:VEC_L (not:VEC_L (match_operand:VEC_L 2 "vlogical_operand" ""))
- (match_operand:VEC_L 1 "vlogical_operand" "")))]
- "VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode)"
- "")
;; Same size conversions
(define_expand "float<VEC_int><mode>2"
@@ -889,7 +874,7 @@
{
rtx reg = gen_reg_rtx (V4SFmode);
- rs6000_expand_interleave (reg, operands[1], operands[1], true);
+ rs6000_expand_interleave (reg, operands[1], operands[1], BYTES_BIG_ENDIAN);
emit_insn (gen_vsx_xvcvspdp (operands[0], reg));
DONE;
})
@@ -901,7 +886,7 @@
{
rtx reg = gen_reg_rtx (V4SFmode);
- rs6000_expand_interleave (reg, operands[1], operands[1], false);
+ rs6000_expand_interleave (reg, operands[1], operands[1], !BYTES_BIG_ENDIAN);
emit_insn (gen_vsx_xvcvspdp (operands[0], reg));
DONE;
})
@@ -913,7 +898,7 @@
{
rtx reg = gen_reg_rtx (V4SImode);
- rs6000_expand_interleave (reg, operands[1], operands[1], true);
+ rs6000_expand_interleave (reg, operands[1], operands[1], BYTES_BIG_ENDIAN);
emit_insn (gen_vsx_xvcvsxwdp (operands[0], reg));
DONE;
})
@@ -925,7 +910,7 @@
{
rtx reg = gen_reg_rtx (V4SImode);
- rs6000_expand_interleave (reg, operands[1], operands[1], false);
+ rs6000_expand_interleave (reg, operands[1], operands[1], !BYTES_BIG_ENDIAN);
emit_insn (gen_vsx_xvcvsxwdp (operands[0], reg));
DONE;
})
@@ -937,7 +922,7 @@
{
rtx reg = gen_reg_rtx (V4SImode);
- rs6000_expand_interleave (reg, operands[1], operands[1], true);
+ rs6000_expand_interleave (reg, operands[1], operands[1], BYTES_BIG_ENDIAN);
emit_insn (gen_vsx_xvcvuxwdp (operands[0], reg));
DONE;
})
@@ -949,7 +934,7 @@
{
rtx reg = gen_reg_rtx (V4SImode);
- rs6000_expand_interleave (reg, operands[1], operands[1], false);
+ rs6000_expand_interleave (reg, operands[1], operands[1], !BYTES_BIG_ENDIAN);
emit_insn (gen_vsx_xvcvuxwdp (operands[0], reg));
DONE;
})
@@ -963,8 +948,19 @@
(match_operand:V16QI 3 "vlogical_operand" "")]
"VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode)"
{
- emit_insn (gen_altivec_vperm_<mode> (operands[0], operands[1], operands[2],
- operands[3]));
+ if (BYTES_BIG_ENDIAN)
+ emit_insn (gen_altivec_vperm_<mode> (operands[0], operands[1],
+ operands[2], operands[3]));
+ else
+ {
+ /* We have changed lvsr to lvsl, so to complete the transformation
+ of vperm for LE, we must swap the inputs. */
+ rtx unspec = gen_rtx_UNSPEC (<MODE>mode,
+ gen_rtvec (3, operands[2],
+ operands[1], operands[3]),
+ UNSPEC_VPERM);
+ emit_move_insn (operands[0], unspec);
+ }
DONE;
})
@@ -1064,7 +1060,7 @@
[(set (match_operand:VEC_I 0 "vint_operand" "")
(rotate:VEC_I (match_operand:VEC_I 1 "vint_operand" "")
(match_operand:VEC_I 2 "vint_operand" "")))]
- "TARGET_ALTIVEC"
+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)"
"")
;; Expanders for arithmetic shift left on each vector element
@@ -1072,7 +1068,7 @@
[(set (match_operand:VEC_I 0 "vint_operand" "")
(ashift:VEC_I (match_operand:VEC_I 1 "vint_operand" "")
(match_operand:VEC_I 2 "vint_operand" "")))]
- "TARGET_ALTIVEC"
+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)"
"")
;; Expanders for logical shift right on each vector element
@@ -1080,7 +1076,7 @@
[(set (match_operand:VEC_I 0 "vint_operand" "")
(lshiftrt:VEC_I (match_operand:VEC_I 1 "vint_operand" "")
(match_operand:VEC_I 2 "vint_operand" "")))]
- "TARGET_ALTIVEC"
+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)"
"")
;; Expanders for arithmetic shift right on each vector element
@@ -1088,7 +1084,7 @@
[(set (match_operand:VEC_I 0 "vint_operand" "")
(ashiftrt:VEC_I (match_operand:VEC_I 1 "vint_operand" "")
(match_operand:VEC_I 2 "vint_operand" "")))]
- "TARGET_ALTIVEC"
+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)"
"")
;; Vector reduction expanders for VSX
diff --git a/gcc-4.8/gcc/config/rs6000/vsx.md b/gcc-4.8/gcc/config/rs6000/vsx.md
index 3fafd9b27..5f5e4a3b8 100644
--- a/gcc-4.8/gcc/config/rs6000/vsx.md
+++ b/gcc-4.8/gcc/config/rs6000/vsx.md
@@ -34,11 +34,20 @@
(define_mode_iterator VSX_F [V4SF V2DF])
;; Iterator for logical types supported by VSX
-(define_mode_iterator VSX_L [V16QI V8HI V4SI V2DI V4SF V2DF TI])
+(define_mode_iterator VSX_L [V16QI V8HI V4SI V2DI V4SF V2DF V1TI TI])
;; Iterator for memory move. Handle TImode specially to allow
;; it to use gprs as well as vsx registers.
-(define_mode_iterator VSX_M [V16QI V8HI V4SI V2DI V4SF V2DF])
+(define_mode_iterator VSX_M [V16QI V8HI V4SI V2DI V4SF V2DF V1TI])
+
+(define_mode_iterator VSX_M2 [V16QI
+ V8HI
+ V4SI
+ V2DI
+ V4SF
+ V2DF
+ V1TI
+ (TI "TARGET_VSX_TIMODE")])
;; Map into the appropriate load/store name based on the type
(define_mode_attr VSm [(V16QI "vw4")
@@ -48,7 +57,8 @@
(V2DF "vd2")
(V2DI "vd2")
(DF "d")
- (TI "vw4")])
+ (V1TI "vd2")
+ (TI "vd2")])
;; Map into the appropriate suffix based on the type
(define_mode_attr VSs [(V16QI "sp")
@@ -59,7 +69,8 @@
(V2DI "dp")
(DF "dp")
(SF "sp")
- (TI "sp")])
+ (V1TI "dp")
+ (TI "dp")])
;; Map the register class used
(define_mode_attr VSr [(V16QI "v")
@@ -70,7 +81,8 @@
(V2DF "wd")
(DF "ws")
(SF "d")
- (TI "wd")])
+ (V1TI "v")
+ (TI "wt")])
;; Map the register class used for float<->int conversions
(define_mode_attr VSr2 [(V2DF "wd")
@@ -115,7 +127,7 @@
(V4SF "v")
(V2DI "v")
(V2DF "v")
- (TI "v")
+ (V1TI "v")
(DF "s")])
;; Appropriate type for add ops (and other simple FP ops)
@@ -173,7 +185,8 @@
(V2DF "vecdouble")])
;; Map the scalar mode for a vector type
-(define_mode_attr VS_scalar [(V2DF "DF")
+(define_mode_attr VS_scalar [(V1TI "TI")
+ (V2DF "DF")
(V2DI "DI")
(V4SF "SF")
(V4SI "SI")
@@ -184,7 +197,8 @@
(define_mode_attr VS_double [(V4SI "V8SI")
(V4SF "V8SF")
(V2DI "V4DI")
- (V2DF "V4DF")])
+ (V2DF "V4DF")
+ (V1TI "V2TI")])
;; Constants for creating unspecs
(define_c_enum "unspec"
@@ -192,6 +206,8 @@
UNSPEC_VSX_CVDPSXWS
UNSPEC_VSX_CVDPUXWS
UNSPEC_VSX_CVSPDP
+ UNSPEC_VSX_CVSPDPN
+ UNSPEC_VSX_CVDPSPN
UNSPEC_VSX_CVSXWDP
UNSPEC_VSX_CVUXWDP
UNSPEC_VSX_CVSXDSP
@@ -204,77 +220,394 @@
UNSPEC_VSX_ROUND_I
UNSPEC_VSX_ROUND_IC
UNSPEC_VSX_SLDWI
+ UNSPEC_VSX_XXSPLTW
])
;; VSX moves
-(define_insn "*vsx_mov<mode>"
- [(set (match_operand:VSX_M 0 "nonimmediate_operand" "=Z,<VSr>,<VSr>,?Z,?wa,?wa,*Y,*r,*r,<VSr>,?wa,*r,v,wZ,v")
- (match_operand:VSX_M 1 "input_operand" "<VSr>,Z,<VSr>,wa,Z,wa,r,Y,r,j,j,j,W,v,wZ"))]
- "VECTOR_MEM_VSX_P (<MODE>mode)
- && (register_operand (operands[0], <MODE>mode)
- || register_operand (operands[1], <MODE>mode))"
+
+;; The patterns for LE permuted loads and stores come before the general
+;; VSX moves so they match first.
+(define_insn_and_split "*vsx_le_perm_load_<mode>"
+ [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
+ (match_operand:VSX_D 1 "memory_operand" "Z"))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX"
+ "#"
+ "!BYTES_BIG_ENDIAN && TARGET_VSX"
+ [(set (match_dup 2)
+ (vec_select:<MODE>
+ (match_dup 1)
+ (parallel [(const_int 1) (const_int 0)])))
+ (set (match_dup 0)
+ (vec_select:<MODE>
+ (match_dup 2)
+ (parallel [(const_int 1) (const_int 0)])))]
+ "
{
- switch (which_alternative)
- {
- case 0:
- case 3:
- gcc_assert (MEM_P (operands[0])
- && GET_CODE (XEXP (operands[0], 0)) != PRE_INC
- && GET_CODE (XEXP (operands[0], 0)) != PRE_DEC
- && GET_CODE (XEXP (operands[0], 0)) != PRE_MODIFY);
- return "stx<VSm>x %x1,%y0";
+ operands[2] = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (operands[0])
+ : operands[0];
+}
+ "
+ [(set_attr "type" "vecload")
+ (set_attr "length" "8")])
- case 1:
- case 4:
- gcc_assert (MEM_P (operands[1])
- && GET_CODE (XEXP (operands[1], 0)) != PRE_INC
- && GET_CODE (XEXP (operands[1], 0)) != PRE_DEC
- && GET_CODE (XEXP (operands[1], 0)) != PRE_MODIFY);
- return "lx<VSm>x %x0,%y1";
+(define_insn_and_split "*vsx_le_perm_load_<mode>"
+ [(set (match_operand:VSX_W 0 "vsx_register_operand" "=wa")
+ (match_operand:VSX_W 1 "memory_operand" "Z"))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX"
+ "#"
+ "!BYTES_BIG_ENDIAN && TARGET_VSX"
+ [(set (match_dup 2)
+ (vec_select:<MODE>
+ (match_dup 1)
+ (parallel [(const_int 2) (const_int 3)
+ (const_int 0) (const_int 1)])))
+ (set (match_dup 0)
+ (vec_select:<MODE>
+ (match_dup 2)
+ (parallel [(const_int 2) (const_int 3)
+ (const_int 0) (const_int 1)])))]
+ "
+{
+ operands[2] = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (operands[0])
+ : operands[0];
+}
+ "
+ [(set_attr "type" "vecload")
+ (set_attr "length" "8")])
- case 2:
- case 5:
- return "xxlor %x0,%x1,%x1";
+(define_insn_and_split "*vsx_le_perm_load_v8hi"
+ [(set (match_operand:V8HI 0 "vsx_register_operand" "=wa")
+ (match_operand:V8HI 1 "memory_operand" "Z"))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX"
+ "#"
+ "!BYTES_BIG_ENDIAN && TARGET_VSX"
+ [(set (match_dup 2)
+ (vec_select:V8HI
+ (match_dup 1)
+ (parallel [(const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)])))
+ (set (match_dup 0)
+ (vec_select:V8HI
+ (match_dup 2)
+ (parallel [(const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)])))]
+ "
+{
+ operands[2] = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (operands[0])
+ : operands[0];
+}
+ "
+ [(set_attr "type" "vecload")
+ (set_attr "length" "8")])
- case 6:
- case 7:
- case 8:
- case 11:
- return "#";
+(define_insn_and_split "*vsx_le_perm_load_v16qi"
+ [(set (match_operand:V16QI 0 "vsx_register_operand" "=wa")
+ (match_operand:V16QI 1 "memory_operand" "Z"))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX"
+ "#"
+ "!BYTES_BIG_ENDIAN && TARGET_VSX"
+ [(set (match_dup 2)
+ (vec_select:V16QI
+ (match_dup 1)
+ (parallel [(const_int 8) (const_int 9)
+ (const_int 10) (const_int 11)
+ (const_int 12) (const_int 13)
+ (const_int 14) (const_int 15)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)
+ (const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)])))
+ (set (match_dup 0)
+ (vec_select:V16QI
+ (match_dup 2)
+ (parallel [(const_int 8) (const_int 9)
+ (const_int 10) (const_int 11)
+ (const_int 12) (const_int 13)
+ (const_int 14) (const_int 15)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)
+ (const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)])))]
+ "
+{
+ operands[2] = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (operands[0])
+ : operands[0];
+}
+ "
+ [(set_attr "type" "vecload")
+ (set_attr "length" "8")])
- case 9:
- case 10:
- return "xxlxor %x0,%x0,%x0";
+(define_insn "*vsx_le_perm_store_<mode>"
+ [(set (match_operand:VSX_D 0 "memory_operand" "=Z")
+ (match_operand:VSX_D 1 "vsx_register_operand" "+wa"))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX"
+ "#"
+ [(set_attr "type" "vecstore")
+ (set_attr "length" "12")])
+
+(define_split
+ [(set (match_operand:VSX_D 0 "memory_operand" "")
+ (match_operand:VSX_D 1 "vsx_register_operand" ""))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX && !reload_completed"
+ [(set (match_dup 2)
+ (vec_select:<MODE>
+ (match_dup 1)
+ (parallel [(const_int 1) (const_int 0)])))
+ (set (match_dup 0)
+ (vec_select:<MODE>
+ (match_dup 2)
+ (parallel [(const_int 1) (const_int 0)])))]
+{
+ operands[2] = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (operands[1])
+ : operands[1];
+})
- case 12:
- return output_vec_const_move (operands);
+;; The post-reload split requires that we re-permute the source
+;; register in case it is still live.
+(define_split
+ [(set (match_operand:VSX_D 0 "memory_operand" "")
+ (match_operand:VSX_D 1 "vsx_register_operand" ""))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX && reload_completed"
+ [(set (match_dup 1)
+ (vec_select:<MODE>
+ (match_dup 1)
+ (parallel [(const_int 1) (const_int 0)])))
+ (set (match_dup 0)
+ (vec_select:<MODE>
+ (match_dup 1)
+ (parallel [(const_int 1) (const_int 0)])))
+ (set (match_dup 1)
+ (vec_select:<MODE>
+ (match_dup 1)
+ (parallel [(const_int 1) (const_int 0)])))]
+ "")
- case 13:
- gcc_assert (MEM_P (operands[0])
- && GET_CODE (XEXP (operands[0], 0)) != PRE_INC
- && GET_CODE (XEXP (operands[0], 0)) != PRE_DEC
- && GET_CODE (XEXP (operands[0], 0)) != PRE_MODIFY);
- return "stvx %1,%y0";
+(define_insn "*vsx_le_perm_store_<mode>"
+ [(set (match_operand:VSX_W 0 "memory_operand" "=Z")
+ (match_operand:VSX_W 1 "vsx_register_operand" "+wa"))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX"
+ "#"
+ [(set_attr "type" "vecstore")
+ (set_attr "length" "12")])
+
+(define_split
+ [(set (match_operand:VSX_W 0 "memory_operand" "")
+ (match_operand:VSX_W 1 "vsx_register_operand" ""))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX && !reload_completed"
+ [(set (match_dup 2)
+ (vec_select:<MODE>
+ (match_dup 1)
+ (parallel [(const_int 2) (const_int 3)
+ (const_int 0) (const_int 1)])))
+ (set (match_dup 0)
+ (vec_select:<MODE>
+ (match_dup 2)
+ (parallel [(const_int 2) (const_int 3)
+ (const_int 0) (const_int 1)])))]
+{
+ operands[2] = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (operands[1])
+ : operands[1];
+})
- case 14:
- gcc_assert (MEM_P (operands[0])
- && GET_CODE (XEXP (operands[0], 0)) != PRE_INC
- && GET_CODE (XEXP (operands[0], 0)) != PRE_DEC
- && GET_CODE (XEXP (operands[0], 0)) != PRE_MODIFY);
- return "lvx %0,%y1";
+;; The post-reload split requires that we re-permute the source
+;; register in case it is still live.
+(define_split
+ [(set (match_operand:VSX_W 0 "memory_operand" "")
+ (match_operand:VSX_W 1 "vsx_register_operand" ""))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX && reload_completed"
+ [(set (match_dup 1)
+ (vec_select:<MODE>
+ (match_dup 1)
+ (parallel [(const_int 2) (const_int 3)
+ (const_int 0) (const_int 1)])))
+ (set (match_dup 0)
+ (vec_select:<MODE>
+ (match_dup 1)
+ (parallel [(const_int 2) (const_int 3)
+ (const_int 0) (const_int 1)])))
+ (set (match_dup 1)
+ (vec_select:<MODE>
+ (match_dup 1)
+ (parallel [(const_int 2) (const_int 3)
+ (const_int 0) (const_int 1)])))]
+ "")
- default:
- gcc_unreachable ();
- }
+(define_insn "*vsx_le_perm_store_v8hi"
+ [(set (match_operand:V8HI 0 "memory_operand" "=Z")
+ (match_operand:V8HI 1 "vsx_register_operand" "+wa"))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX"
+ "#"
+ [(set_attr "type" "vecstore")
+ (set_attr "length" "12")])
+
+(define_split
+ [(set (match_operand:V8HI 0 "memory_operand" "")
+ (match_operand:V8HI 1 "vsx_register_operand" ""))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX && !reload_completed"
+ [(set (match_dup 2)
+ (vec_select:V8HI
+ (match_dup 1)
+ (parallel [(const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)])))
+ (set (match_dup 0)
+ (vec_select:V8HI
+ (match_dup 2)
+ (parallel [(const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)])))]
+{
+ operands[2] = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (operands[1])
+ : operands[1];
+})
+
+;; The post-reload split requires that we re-permute the source
+;; register in case it is still live.
+(define_split
+ [(set (match_operand:V8HI 0 "memory_operand" "")
+ (match_operand:V8HI 1 "vsx_register_operand" ""))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX && reload_completed"
+ [(set (match_dup 1)
+ (vec_select:V8HI
+ (match_dup 1)
+ (parallel [(const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)])))
+ (set (match_dup 0)
+ (vec_select:V8HI
+ (match_dup 1)
+ (parallel [(const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)])))
+ (set (match_dup 1)
+ (vec_select:V8HI
+ (match_dup 1)
+ (parallel [(const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)])))]
+ "")
+
+(define_insn "*vsx_le_perm_store_v16qi"
+ [(set (match_operand:V16QI 0 "memory_operand" "=Z")
+ (match_operand:V16QI 1 "vsx_register_operand" "+wa"))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX"
+ "#"
+ [(set_attr "type" "vecstore")
+ (set_attr "length" "12")])
+
+(define_split
+ [(set (match_operand:V16QI 0 "memory_operand" "")
+ (match_operand:V16QI 1 "vsx_register_operand" ""))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX && !reload_completed"
+ [(set (match_dup 2)
+ (vec_select:V16QI
+ (match_dup 1)
+ (parallel [(const_int 8) (const_int 9)
+ (const_int 10) (const_int 11)
+ (const_int 12) (const_int 13)
+ (const_int 14) (const_int 15)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)
+ (const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)])))
+ (set (match_dup 0)
+ (vec_select:V16QI
+ (match_dup 2)
+ (parallel [(const_int 8) (const_int 9)
+ (const_int 10) (const_int 11)
+ (const_int 12) (const_int 13)
+ (const_int 14) (const_int 15)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)
+ (const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)])))]
+{
+ operands[2] = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (operands[1])
+ : operands[1];
+})
+
+;; The post-reload split requires that we re-permute the source
+;; register in case it is still live.
+(define_split
+ [(set (match_operand:V16QI 0 "memory_operand" "")
+ (match_operand:V16QI 1 "vsx_register_operand" ""))]
+ "!BYTES_BIG_ENDIAN && TARGET_VSX && reload_completed"
+ [(set (match_dup 1)
+ (vec_select:V16QI
+ (match_dup 1)
+ (parallel [(const_int 8) (const_int 9)
+ (const_int 10) (const_int 11)
+ (const_int 12) (const_int 13)
+ (const_int 14) (const_int 15)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)
+ (const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)])))
+ (set (match_dup 0)
+ (vec_select:V16QI
+ (match_dup 1)
+ (parallel [(const_int 8) (const_int 9)
+ (const_int 10) (const_int 11)
+ (const_int 12) (const_int 13)
+ (const_int 14) (const_int 15)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)
+ (const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)])))
+ (set (match_dup 1)
+ (vec_select:V16QI
+ (match_dup 1)
+ (parallel [(const_int 8) (const_int 9)
+ (const_int 10) (const_int 11)
+ (const_int 12) (const_int 13)
+ (const_int 14) (const_int 15)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)
+ (const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)])))]
+ "")
+
+
+(define_insn "*vsx_mov<mode>"
+ [(set (match_operand:VSX_M 0 "nonimmediate_operand" "=Z,<VSr>,<VSr>,?Z,?wa,?wa,wQ,?&r,??Y,??r,??r,<VSr>,?wa,*r,v,wZ, v")
+ (match_operand:VSX_M 1 "input_operand" "<VSr>,Z,<VSr>,wa,Z,wa,r,wQ,r,Y,r,j,j,j,W,v,wZ"))]
+ "VECTOR_MEM_VSX_P (<MODE>mode)
+ && (register_operand (operands[0], <MODE>mode)
+ || register_operand (operands[1], <MODE>mode))"
+{
+ return rs6000_output_move_128bit (operands);
}
- [(set_attr "type" "vecstore,vecload,vecsimple,vecstore,vecload,vecsimple,*,*,*,vecsimple,vecsimple,*,*,vecstore,vecload")])
-
-;; Unlike other VSX moves, allow the GPRs, since a normal use of TImode is for
-;; unions. However for plain data movement, slightly favor the vector loads
-(define_insn "*vsx_movti"
- [(set (match_operand:TI 0 "nonimmediate_operand" "=Z,wa,wa,?Y,?r,?r,wa,v,v,wZ")
- (match_operand:TI 1 "input_operand" "wa,Z,wa,r,Y,r,j,W,wZ,v"))]
- "VECTOR_MEM_VSX_P (TImode)
+ [(set_attr "type" "vecstore,vecload,vecsimple,vecstore,vecload,vecsimple,load,store,store,load, *,vecsimple,vecsimple,*, *,vecstore,vecload")
+ (set_attr "length" "4,4,4,4,4,4,12,12,12,12,16,4,4,*,16,4,4")])
+
+;; Unlike other VSX moves, allow the GPRs even for reloading, since a normal
+;; use of TImode is for unions. However for plain data movement, slightly
+;; favor the vector loads
+(define_insn "*vsx_movti_64bit"
+ [(set (match_operand:TI 0 "nonimmediate_operand" "=Z,wa,wa,wa,v,v,wZ,wQ,&r,Y,r,r,?r")
+ (match_operand:TI 1 "input_operand" "wa,Z,wa,O,W,wZ,v,r,wQ,r,Y,r,n"))]
+ "TARGET_POWERPC64 && VECTOR_MEM_VSX_P (TImode)
+ && (register_operand (operands[0], TImode)
+ || register_operand (operands[1], TImode))"
+{
+ return rs6000_output_move_128bit (operands);
+}
+ [(set_attr "type" "vecstore,vecload,vecsimple,vecsimple,vecsimple,vecstore,vecload,store,load,store,load,*,*")
+ (set_attr "length" "4,4,4,4,16,4,4,8,8,8,8,8,8")])
+
+(define_insn "*vsx_movti_32bit"
+ [(set (match_operand:TI 0 "nonimmediate_operand" "=Z,wa,wa,wa,v, v,wZ,Q,Y,????r,????r,????r,r")
+ (match_operand:TI 1 "input_operand" "wa, Z,wa, O,W,wZ, v,r,r, Q, Y, r,n"))]
+ "! TARGET_POWERPC64 && VECTOR_MEM_VSX_P (TImode)
&& (register_operand (operands[0], TImode)
|| register_operand (operands[1], TImode))"
{
@@ -290,27 +623,45 @@
return "xxlor %x0,%x1,%x1";
case 3:
+ return "xxlxor %x0,%x0,%x0";
+
case 4:
+ return output_vec_const_move (operands);
+
case 5:
- return "#";
+ return "stvx %1,%y0";
case 6:
- return "xxlxor %x0,%x0,%x0";
+ return "lvx %0,%y1";
case 7:
- return output_vec_const_move (operands);
+ if (TARGET_STRING)
+ return \"stswi %1,%P0,16\";
case 8:
- return "stvx %1,%y0";
+ return \"#\";
case 9:
- return "lvx %0,%y1";
+ /* If the address is not used in the output, we can use lsi. Otherwise,
+ fall through to generating four loads. */
+ if (TARGET_STRING
+ && ! reg_overlap_mentioned_p (operands[0], operands[1]))
+ return \"lswi %0,%P1,16\";
+ /* ... fall through ... */
+ case 10:
+ case 11:
+ case 12:
+ return \"#\";
default:
gcc_unreachable ();
}
}
- [(set_attr "type" "vecstore,vecload,vecsimple,*,*,*,vecsimple,*,vecstore,vecload")])
+ [(set_attr "type" "vecstore,vecload,vecsimple,vecsimple,vecsimple,vecstore,vecload,store_ux,store_ux,load_ux,load_ux, *, *")
+ (set_attr "length" " 4, 4, 4, 4, 8, 4, 4, 16, 16, 16, 16,16,16")
+ (set (attr "cell_micro") (if_then_else (match_test "TARGET_STRING")
+ (const_string "always")
+ (const_string "conditional")))])
;; Explicit load/store expanders for the builtin functions
(define_expand "vsx_load_<mode>"
@@ -320,46 +671,48 @@
"")
(define_expand "vsx_store_<mode>"
- [(set (match_operand:VEC_M 0 "memory_operand" "")
- (match_operand:VEC_M 1 "vsx_register_operand" ""))]
+ [(set (match_operand:VSX_M 0 "memory_operand" "")
+ (match_operand:VSX_M 1 "vsx_register_operand" ""))]
"VECTOR_MEM_VSX_P (<MODE>mode)"
"")
-;; VSX scalar and vector floating point arithmetic instructions
+;; VSX vector floating point arithmetic instructions. The VSX scalar
+;; instructions are now combined with the insn for the traditional floating
+;; point unit.
(define_insn "*vsx_add<mode>3"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (plus:VSX_B (match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")
- (match_operand:VSX_B 2 "vsx_register_operand" "<VSr>,wa")))]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (plus:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")
+ (match_operand:VSX_F 2 "vsx_register_operand" "<VSr>,wa")))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>add<VSs> %x0,%x1,%x2"
+ "xvadd<VSs> %x0,%x1,%x2"
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
(define_insn "*vsx_sub<mode>3"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (minus:VSX_B (match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")
- (match_operand:VSX_B 2 "vsx_register_operand" "<VSr>,wa")))]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (minus:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")
+ (match_operand:VSX_F 2 "vsx_register_operand" "<VSr>,wa")))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>sub<VSs> %x0,%x1,%x2"
+ "xvsub<VSs> %x0,%x1,%x2"
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
(define_insn "*vsx_mul<mode>3"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (mult:VSX_B (match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")
- (match_operand:VSX_B 2 "vsx_register_operand" "<VSr>,wa")))]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (mult:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")
+ (match_operand:VSX_F 2 "vsx_register_operand" "<VSr>,wa")))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>mul<VSs> %x0,%x1,%x2"
- [(set_attr "type" "<VStype_mul>")
+ "xvmul<VSs> %x0,%x1,%x2"
+ [(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_mul>")])
(define_insn "*vsx_div<mode>3"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (div:VSX_B (match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")
- (match_operand:VSX_B 2 "vsx_register_operand" "<VSr>,wa")))]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (div:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")
+ (match_operand:VSX_F 2 "vsx_register_operand" "<VSr>,wa")))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>div<VSs> %x0,%x1,%x2"
+ "xvdiv<VSs> %x0,%x1,%x2"
[(set_attr "type" "<VStype_div>")
(set_attr "fp_type" "<VSfptype_div>")])
@@ -402,94 +755,72 @@
(set_attr "fp_type" "<VSfptype_simple>")])
(define_insn "vsx_fre<mode>2"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (unspec:VSX_B [(match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (unspec:VSX_F [(match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")]
UNSPEC_FRES))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>re<VSs> %x0,%x1"
+ "xvre<VSs> %x0,%x1"
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
(define_insn "*vsx_neg<mode>2"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (neg:VSX_B (match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")))]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (neg:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>neg<VSs> %x0,%x1"
+ "xvneg<VSs> %x0,%x1"
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
(define_insn "*vsx_abs<mode>2"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (abs:VSX_B (match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")))]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (abs:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>abs<VSs> %x0,%x1"
+ "xvabs<VSs> %x0,%x1"
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
(define_insn "vsx_nabs<mode>2"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (neg:VSX_B
- (abs:VSX_B
- (match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa"))))]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (neg:VSX_F
+ (abs:VSX_F
+ (match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa"))))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>nabs<VSs> %x0,%x1"
+ "xvnabs<VSs> %x0,%x1"
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
(define_insn "vsx_smax<mode>3"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (smax:VSX_B (match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")
- (match_operand:VSX_B 2 "vsx_register_operand" "<VSr>,wa")))]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (smax:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")
+ (match_operand:VSX_F 2 "vsx_register_operand" "<VSr>,wa")))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>max<VSs> %x0,%x1,%x2"
+ "xvmax<VSs> %x0,%x1,%x2"
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
(define_insn "*vsx_smin<mode>3"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (smin:VSX_B (match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")
- (match_operand:VSX_B 2 "vsx_register_operand" "<VSr>,wa")))]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (smin:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")
+ (match_operand:VSX_F 2 "vsx_register_operand" "<VSr>,wa")))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>min<VSs> %x0,%x1,%x2"
+ "xvmin<VSs> %x0,%x1,%x2"
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
-;; Special VSX version of smin/smax for single precision floating point. Since
-;; both numbers are rounded to single precision, we can just use the DP version
-;; of the instruction.
-
-(define_insn "*vsx_smaxsf3"
- [(set (match_operand:SF 0 "vsx_register_operand" "=f")
- (smax:SF (match_operand:SF 1 "vsx_register_operand" "f")
- (match_operand:SF 2 "vsx_register_operand" "f")))]
- "VECTOR_UNIT_VSX_P (DFmode)"
- "xsmaxdp %x0,%x1,%x2"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_addsub_d")])
-
-(define_insn "*vsx_sminsf3"
- [(set (match_operand:SF 0 "vsx_register_operand" "=f")
- (smin:SF (match_operand:SF 1 "vsx_register_operand" "f")
- (match_operand:SF 2 "vsx_register_operand" "f")))]
- "VECTOR_UNIT_VSX_P (DFmode)"
- "xsmindp %x0,%x1,%x2"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_addsub_d")])
-
(define_insn "*vsx_sqrt<mode>2"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (sqrt:VSX_B (match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")))]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (sqrt:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>sqrt<VSs> %x0,%x1"
+ "xvsqrt<VSs> %x0,%x1"
[(set_attr "type" "<VStype_sqrt>")
(set_attr "fp_type" "<VSfptype_sqrt>")])
(define_insn "*vsx_rsqrte<mode>2"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (unspec:VSX_B [(match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (unspec:VSX_F [(match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")]
UNSPEC_RSQRT))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>rsqrte<VSs> %x0,%x1"
+ "xvrsqrte<VSs> %x0,%x1"
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
@@ -528,26 +859,10 @@
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
-;; Fused vector multiply/add instructions Support the classical DF versions of
-;; fma, which allows the target to be a separate register from the 3 inputs.
-;; Under VSX, the target must be either the addend or the first multiply.
-;; Where we can, also do the same for the Altivec V4SF fmas.
-
-(define_insn "*vsx_fmadf4"
- [(set (match_operand:DF 0 "vsx_register_operand" "=ws,ws,?wa,?wa,d")
- (fma:DF
- (match_operand:DF 1 "vsx_register_operand" "%ws,ws,wa,wa,d")
- (match_operand:DF 2 "vsx_register_operand" "ws,0,wa,0,d")
- (match_operand:DF 3 "vsx_register_operand" "0,ws,0,wa,d")))]
- "VECTOR_UNIT_VSX_P (DFmode)"
- "@
- xsmaddadp %x0,%x1,%x2
- xsmaddmdp %x0,%x1,%x3
- xsmaddadp %x0,%x1,%x2
- xsmaddmdp %x0,%x1,%x3
- fmadd %0,%1,%2,%3"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_maddsub_d")])
+;; Fused vector multiply/add instructions. Support the classical Altivec
+;; versions of fma, which allows the target to be a separate register from the
+;; 3 inputs. Under VSX, the target must be either the addend or the first
+;; multiply.
(define_insn "*vsx_fmav4sf4"
[(set (match_operand:V4SF 0 "vsx_register_operand" "=ws,ws,?wa,?wa,v")
@@ -578,23 +893,6 @@
xvmaddmdp %x0,%x1,%x3"
[(set_attr "type" "vecdouble")])
-(define_insn "*vsx_fmsdf4"
- [(set (match_operand:DF 0 "vsx_register_operand" "=ws,ws,?wa,?wa,d")
- (fma:DF
- (match_operand:DF 1 "vsx_register_operand" "%ws,ws,wa,wa,d")
- (match_operand:DF 2 "vsx_register_operand" "ws,0,wa,0,d")
- (neg:DF
- (match_operand:DF 3 "vsx_register_operand" "0,ws,0,wa,d"))))]
- "VECTOR_UNIT_VSX_P (DFmode)"
- "@
- xsmsubadp %x0,%x1,%x2
- xsmsubmdp %x0,%x1,%x3
- xsmsubadp %x0,%x1,%x2
- xsmsubmdp %x0,%x1,%x3
- fmsub %0,%1,%2,%3"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_maddsub_d")])
-
(define_insn "*vsx_fms<mode>4"
[(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,<VSr>,?wa,?wa")
(fma:VSX_F
@@ -604,29 +902,12 @@
(match_operand:VSX_F 3 "vsx_register_operand" "0,<VSr>,0,wa"))))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
"@
- x<VSv>msuba<VSs> %x0,%x1,%x2
- x<VSv>msubm<VSs> %x0,%x1,%x3
- x<VSv>msuba<VSs> %x0,%x1,%x2
- x<VSv>msubm<VSs> %x0,%x1,%x3"
+ xvmsuba<VSs> %x0,%x1,%x2
+ xvmsubm<VSs> %x0,%x1,%x3
+ xvmsuba<VSs> %x0,%x1,%x2
+ xvmsubm<VSs> %x0,%x1,%x3"
[(set_attr "type" "<VStype_mul>")])
-(define_insn "*vsx_nfmadf4"
- [(set (match_operand:DF 0 "vsx_register_operand" "=ws,ws,?wa,?wa,d")
- (neg:DF
- (fma:DF
- (match_operand:DF 1 "vsx_register_operand" "ws,ws,wa,wa,d")
- (match_operand:DF 2 "vsx_register_operand" "ws,0,wa,0,d")
- (match_operand:DF 3 "vsx_register_operand" "0,ws,0,wa,d"))))]
- "VECTOR_UNIT_VSX_P (DFmode)"
- "@
- xsnmaddadp %x0,%x1,%x2
- xsnmaddmdp %x0,%x1,%x3
- xsnmaddadp %x0,%x1,%x2
- xsnmaddmdp %x0,%x1,%x3
- fnmadd %0,%1,%2,%3"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_maddsub_d")])
-
(define_insn "*vsx_nfma<mode>4"
[(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,<VSr>,?wa,?wa")
(neg:VSX_F
@@ -636,31 +917,13 @@
(match_operand:VSX_F 3 "vsx_register_operand" "0,<VSr>,0,wa"))))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
"@
- x<VSv>nmadda<VSs> %x0,%x1,%x2
- x<VSv>nmaddm<VSs> %x0,%x1,%x3
- x<VSv>nmadda<VSs> %x0,%x1,%x2
- x<VSv>nmaddm<VSs> %x0,%x1,%x3"
+ xvnmadda<VSs> %x0,%x1,%x2
+ xvnmaddm<VSs> %x0,%x1,%x3
+ xvnmadda<VSs> %x0,%x1,%x2
+ xvnmaddm<VSs> %x0,%x1,%x3"
[(set_attr "type" "<VStype_mul>")
(set_attr "fp_type" "<VSfptype_mul>")])
-(define_insn "*vsx_nfmsdf4"
- [(set (match_operand:DF 0 "vsx_register_operand" "=ws,ws,?wa,?wa,d")
- (neg:DF
- (fma:DF
- (match_operand:DF 1 "vsx_register_operand" "%ws,ws,wa,wa,d")
- (match_operand:DF 2 "vsx_register_operand" "ws,0,wa,0,d")
- (neg:DF
- (match_operand:DF 3 "vsx_register_operand" "0,ws,0,wa,d")))))]
- "VECTOR_UNIT_VSX_P (DFmode)"
- "@
- xsnmsubadp %x0,%x1,%x2
- xsnmsubmdp %x0,%x1,%x3
- xsnmsubadp %x0,%x1,%x2
- xsnmsubmdp %x0,%x1,%x3
- fnmsub %0,%1,%2,%3"
- [(set_attr "type" "fp")
- (set_attr "fp_type" "fp_maddsub_d")])
-
(define_insn "*vsx_nfmsv4sf4"
[(set (match_operand:V4SF 0 "vsx_register_operand" "=wf,wf,?wa,?wa,v")
(neg:V4SF
@@ -722,16 +985,6 @@
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
-;; Floating point scalar compare
-(define_insn "*vsx_cmpdf_internal1"
- [(set (match_operand:CCFP 0 "cc_reg_operand" "=y,?y")
- (compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "ws,wa")
- (match_operand:DF 2 "gpc_reg_operand" "ws,wa")))]
- "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && VECTOR_UNIT_VSX_P (DFmode)"
- "xscmpudp %0,%x1,%x2"
- [(set_attr "type" "fpcompare")])
-
;; Compare vectors producing a vector result and a predicate, setting CR6 to
;; indicate a combined status
(define_insn "*vsx_eq_<mode>_p"
@@ -798,13 +1051,13 @@
;; Copy sign
(define_insn "vsx_copysign<mode>3"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (unspec:VSX_B
- [(match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")
- (match_operand:VSX_B 2 "vsx_register_operand" "<VSr>,wa")]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (unspec:VSX_F
+ [(match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")
+ (match_operand:VSX_F 2 "vsx_register_operand" "<VSr>,wa")]
UNSPEC_COPYSIGN))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>cpsgn<VSs> %x0,%x2,%x1"
+ "xvcpsgn<VSs> %x0,%x2,%x1"
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
@@ -865,10 +1118,10 @@
(set_attr "fp_type" "<VSfptype_simple>")])
(define_insn "vsx_btrunc<mode>2"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (fix:VSX_B (match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")))]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (fix:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>r<VSs>iz %x0,%x1"
+ "xvr<VSs>iz %x0,%x1"
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
@@ -882,20 +1135,20 @@
(set_attr "fp_type" "<VSfptype_simple>")])
(define_insn "vsx_floor<mode>2"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (unspec:VSX_B [(match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (unspec:VSX_F [(match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")]
UNSPEC_FRIM))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>r<VSs>im %x0,%x1"
+ "xvr<VSs>im %x0,%x1"
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
(define_insn "vsx_ceil<mode>2"
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
- (unspec:VSX_B [(match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")]
+ [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?wa")
+ (unspec:VSX_F [(match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,wa")]
UNSPEC_FRIP))]
"VECTOR_UNIT_VSX_P (<MODE>mode)"
- "x<VSv>r<VSs>ip %x0,%x1"
+ "xvr<VSs>ip %x0,%x1"
[(set_attr "type" "<VStype_simple>")
(set_attr "fp_type" "<VSfptype_simple>")])
@@ -942,6 +1195,40 @@
"xscvspdp %x0,%x1"
[(set_attr "type" "fp")])
+;; ISA 2.07 xscvdpspn/xscvspdpn that does not raise an error on signalling NaNs
+(define_insn "vsx_xscvdpspn"
+ [(set (match_operand:V4SF 0 "vsx_register_operand" "=ws,?wa")
+ (unspec:V4SF [(match_operand:DF 1 "vsx_register_operand" "wd,wa")]
+ UNSPEC_VSX_CVDPSPN))]
+ "TARGET_XSCVDPSPN"
+ "xscvdpspn %x0,%x1"
+ [(set_attr "type" "fp")])
+
+(define_insn "vsx_xscvspdpn"
+ [(set (match_operand:DF 0 "vsx_register_operand" "=ws,?wa")
+ (unspec:DF [(match_operand:V4SF 1 "vsx_register_operand" "wa,wa")]
+ UNSPEC_VSX_CVSPDPN))]
+ "TARGET_XSCVSPDPN"
+ "xscvspdpn %x0,%x1"
+ [(set_attr "type" "fp")])
+
+(define_insn "vsx_xscvdpspn_scalar"
+ [(set (match_operand:V4SF 0 "vsx_register_operand" "=wa")
+ (unspec:V4SF [(match_operand:SF 1 "vsx_register_operand" "f")]
+ UNSPEC_VSX_CVDPSPN))]
+ "TARGET_XSCVDPSPN"
+ "xscvdpspn %x0,%x1"
+ [(set_attr "type" "fp")])
+
+;; Used by direct move to move a SFmode value from GPR to VSX register
+(define_insn "vsx_xscvspdpn_directmove"
+ [(set (match_operand:SF 0 "vsx_register_operand" "=wa")
+ (unspec:SF [(match_operand:SF 1 "vsx_register_operand" "wa")]
+ UNSPEC_VSX_CVSPDPN))]
+ "TARGET_XSCVSPDPN"
+ "xscvspdpn %x0,%x1"
+ [(set_attr "type" "fp")])
+
;; Convert from 64-bit to 32-bit types
;; Note, favor the Altivec registers since the usual use of these instructions
;; is in vector converts and we need to use the Altivec vperm instruction.
@@ -1027,73 +1314,21 @@
(set_attr "fp_type" "<VSfptype_simple>")])
-;; Logical and permute operations
-(define_insn "*vsx_and<mode>3"
- [(set (match_operand:VSX_L 0 "vsx_register_operand" "=<VSr>,?wa")
- (and:VSX_L
- (match_operand:VSX_L 1 "vsx_register_operand" "<VSr>,?wa")
- (match_operand:VSX_L 2 "vsx_register_operand" "<VSr>,?wa")))]
- "VECTOR_MEM_VSX_P (<MODE>mode)"
- "xxland %x0,%x1,%x2"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*vsx_ior<mode>3"
- [(set (match_operand:VSX_L 0 "vsx_register_operand" "=<VSr>,?wa")
- (ior:VSX_L (match_operand:VSX_L 1 "vsx_register_operand" "<VSr>,?wa")
- (match_operand:VSX_L 2 "vsx_register_operand" "<VSr>,?wa")))]
- "VECTOR_MEM_VSX_P (<MODE>mode)"
- "xxlor %x0,%x1,%x2"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*vsx_xor<mode>3"
- [(set (match_operand:VSX_L 0 "vsx_register_operand" "=<VSr>,?wa")
- (xor:VSX_L
- (match_operand:VSX_L 1 "vsx_register_operand" "<VSr>,?wa")
- (match_operand:VSX_L 2 "vsx_register_operand" "<VSr>,?wa")))]
- "VECTOR_MEM_VSX_P (<MODE>mode)"
- "xxlxor %x0,%x1,%x2"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*vsx_one_cmpl<mode>2"
- [(set (match_operand:VSX_L 0 "vsx_register_operand" "=<VSr>,?wa")
- (not:VSX_L
- (match_operand:VSX_L 1 "vsx_register_operand" "<VSr>,?wa")))]
- "VECTOR_MEM_VSX_P (<MODE>mode)"
- "xxlnor %x0,%x1,%x1"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*vsx_nor<mode>3"
- [(set (match_operand:VSX_L 0 "vsx_register_operand" "=<VSr>,?wa")
- (not:VSX_L
- (ior:VSX_L
- (match_operand:VSX_L 1 "vsx_register_operand" "<VSr>,?wa")
- (match_operand:VSX_L 2 "vsx_register_operand" "<VSr>,?wa"))))]
- "VECTOR_MEM_VSX_P (<MODE>mode)"
- "xxlnor %x0,%x1,%x2"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*vsx_andc<mode>3"
- [(set (match_operand:VSX_L 0 "vsx_register_operand" "=<VSr>,?wa")
- (and:VSX_L
- (not:VSX_L
- (match_operand:VSX_L 2 "vsx_register_operand" "<VSr>,?wa"))
- (match_operand:VSX_L 1 "vsx_register_operand" "<VSr>,?wa")))]
- "VECTOR_MEM_VSX_P (<MODE>mode)"
- "xxlandc %x0,%x1,%x2"
- [(set_attr "type" "vecsimple")])
-
-
;; Permute operations
;; Build a V2DF/V2DI vector from two scalars
(define_insn "vsx_concat_<mode>"
- [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wd,?wa")
- (unspec:VSX_D
- [(match_operand:<VS_scalar> 1 "vsx_register_operand" "ws,wa")
- (match_operand:<VS_scalar> 2 "vsx_register_operand" "ws,wa")]
- UNSPEC_VSX_CONCAT))]
+ [(set (match_operand:VSX_D 0 "vsx_register_operand" "=<VSr>,?wa")
+ (vec_concat:VSX_D
+ (match_operand:<VS_scalar> 1 "vsx_register_operand" "ws,wa")
+ (match_operand:<VS_scalar> 2 "vsx_register_operand" "ws,wa")))]
"VECTOR_MEM_VSX_P (<MODE>mode)"
- "xxpermdi %x0,%x1,%x2,0"
+{
+ if (BYTES_BIG_ENDIAN)
+ return "xxpermdi %x0,%x1,%x2,0";
+ else
+ return "xxpermdi %x0,%x2,%x1,0";
+}
[(set_attr "type" "vecperm")])
;; Special purpose concat using xxpermdi to glue two single precision values
@@ -1106,9 +1341,176 @@
(match_operand:SF 2 "vsx_register_operand" "f,f")]
UNSPEC_VSX_CONCAT))]
"VECTOR_MEM_VSX_P (V2DFmode)"
- "xxpermdi %x0,%x1,%x2,0"
+{
+ if (BYTES_BIG_ENDIAN)
+ return "xxpermdi %x0,%x1,%x2,0";
+ else
+ return "xxpermdi %x0,%x2,%x1,0";
+}
+ [(set_attr "type" "vecperm")])
+
+;; xxpermdi for little endian loads and stores. We need several of
+;; these since the form of the PARALLEL differs by mode.
+(define_insn "*vsx_xxpermdi2_le_<mode>"
+ [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
+ (vec_select:VSX_D
+ (match_operand:VSX_D 1 "vsx_register_operand" "wa")
+ (parallel [(const_int 1) (const_int 0)])))]
+ "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
+ "xxpermdi %x0,%x1,%x1,2"
+ [(set_attr "type" "vecperm")])
+
+(define_insn "*vsx_xxpermdi4_le_<mode>"
+ [(set (match_operand:VSX_W 0 "vsx_register_operand" "=wa")
+ (vec_select:VSX_W
+ (match_operand:VSX_W 1 "vsx_register_operand" "wa")
+ (parallel [(const_int 2) (const_int 3)
+ (const_int 0) (const_int 1)])))]
+ "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
+ "xxpermdi %x0,%x1,%x1,2"
[(set_attr "type" "vecperm")])
+(define_insn "*vsx_xxpermdi8_le_V8HI"
+ [(set (match_operand:V8HI 0 "vsx_register_operand" "=wa")
+ (vec_select:V8HI
+ (match_operand:V8HI 1 "vsx_register_operand" "wa")
+ (parallel [(const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)])))]
+ "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (V8HImode)"
+ "xxpermdi %x0,%x1,%x1,2"
+ [(set_attr "type" "vecperm")])
+
+(define_insn "*vsx_xxpermdi16_le_V16QI"
+ [(set (match_operand:V16QI 0 "vsx_register_operand" "=wa")
+ (vec_select:V16QI
+ (match_operand:V16QI 1 "vsx_register_operand" "wa")
+ (parallel [(const_int 8) (const_int 9)
+ (const_int 10) (const_int 11)
+ (const_int 12) (const_int 13)
+ (const_int 14) (const_int 15)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)
+ (const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)])))]
+ "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (V16QImode)"
+ "xxpermdi %x0,%x1,%x1,2"
+ [(set_attr "type" "vecperm")])
+
+;; lxvd2x for little endian loads. We need several of
+;; these since the form of the PARALLEL differs by mode.
+(define_insn "*vsx_lxvd2x2_le_<mode>"
+ [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
+ (vec_select:VSX_D
+ (match_operand:VSX_D 1 "memory_operand" "Z")
+ (parallel [(const_int 1) (const_int 0)])))]
+ "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
+ "lxvd2x %x0,%y1"
+ [(set_attr "type" "vecload")])
+
+(define_insn "*vsx_lxvd2x4_le_<mode>"
+ [(set (match_operand:VSX_W 0 "vsx_register_operand" "=wa")
+ (vec_select:VSX_W
+ (match_operand:VSX_W 1 "memory_operand" "Z")
+ (parallel [(const_int 2) (const_int 3)
+ (const_int 0) (const_int 1)])))]
+ "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
+ "lxvd2x %x0,%y1"
+ [(set_attr "type" "vecload")])
+
+(define_insn "*vsx_lxvd2x8_le_V8HI"
+ [(set (match_operand:V8HI 0 "vsx_register_operand" "=wa")
+ (vec_select:V8HI
+ (match_operand:V8HI 1 "memory_operand" "Z")
+ (parallel [(const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)])))]
+ "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (V8HImode)"
+ "lxvd2x %x0,%y1"
+ [(set_attr "type" "vecload")])
+
+(define_insn "*vsx_lxvd2x16_le_V16QI"
+ [(set (match_operand:V16QI 0 "vsx_register_operand" "=wa")
+ (vec_select:V16QI
+ (match_operand:V16QI 1 "memory_operand" "Z")
+ (parallel [(const_int 8) (const_int 9)
+ (const_int 10) (const_int 11)
+ (const_int 12) (const_int 13)
+ (const_int 14) (const_int 15)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)
+ (const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)])))]
+ "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (V16QImode)"
+ "lxvd2x %x0,%y1"
+ [(set_attr "type" "vecload")])
+
+;; stxvd2x for little endian stores. We need several of
+;; these since the form of the PARALLEL differs by mode.
+(define_insn "*vsx_stxvd2x2_le_<mode>"
+ [(set (match_operand:VSX_D 0 "memory_operand" "=Z")
+ (vec_select:VSX_D
+ (match_operand:VSX_D 1 "vsx_register_operand" "wa")
+ (parallel [(const_int 1) (const_int 0)])))]
+ "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
+ "stxvd2x %x1,%y0"
+ [(set_attr "type" "vecstore")])
+
+(define_insn "*vsx_stxvd2x4_le_<mode>"
+ [(set (match_operand:VSX_W 0 "memory_operand" "=Z")
+ (vec_select:VSX_W
+ (match_operand:VSX_W 1 "vsx_register_operand" "wa")
+ (parallel [(const_int 2) (const_int 3)
+ (const_int 0) (const_int 1)])))]
+ "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
+ "stxvd2x %x1,%y0"
+ [(set_attr "type" "vecstore")])
+
+(define_insn "*vsx_stxvd2x8_le_V8HI"
+ [(set (match_operand:V8HI 0 "memory_operand" "=Z")
+ (vec_select:V8HI
+ (match_operand:V8HI 1 "vsx_register_operand" "wa")
+ (parallel [(const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)])))]
+ "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (V8HImode)"
+ "stxvd2x %x1,%y0"
+ [(set_attr "type" "vecstore")])
+
+(define_insn "*vsx_stxvd2x16_le_V16QI"
+ [(set (match_operand:V16QI 0 "memory_operand" "=Z")
+ (vec_select:V16QI
+ (match_operand:V16QI 1 "vsx_register_operand" "wa")
+ (parallel [(const_int 8) (const_int 9)
+ (const_int 10) (const_int 11)
+ (const_int 12) (const_int 13)
+ (const_int 14) (const_int 15)
+ (const_int 0) (const_int 1)
+ (const_int 2) (const_int 3)
+ (const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)])))]
+ "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (V16QImode)"
+ "stxvd2x %x1,%y0"
+ [(set_attr "type" "vecstore")])
+
+;; Convert a TImode value into V1TImode
+(define_expand "vsx_set_v1ti"
+ [(match_operand:V1TI 0 "nonimmediate_operand" "")
+ (match_operand:V1TI 1 "nonimmediate_operand" "")
+ (match_operand:TI 2 "input_operand" "")
+ (match_operand:QI 3 "u5bit_cint_operand" "")]
+ "VECTOR_MEM_VSX_P (V1TImode)"
+{
+ if (operands[3] != const0_rtx)
+ gcc_unreachable ();
+
+ emit_move_insn (operands[0], gen_lowpart (V1TImode, operands[1]));
+ DONE;
+})
+
;; Set the element of a V2DI/VD2F mode
(define_insn "vsx_set_<mode>"
[(set (match_operand:VSX_D 0 "vsx_register_operand" "=wd,?wa")
@@ -1118,9 +1520,10 @@
UNSPEC_VSX_SET))]
"VECTOR_MEM_VSX_P (<MODE>mode)"
{
- if (INTVAL (operands[3]) == 0)
+ int idx_first = BYTES_BIG_ENDIAN ? 0 : 1;
+ if (INTVAL (operands[3]) == idx_first)
return \"xxpermdi %x0,%x2,%x1,1\";
- else if (INTVAL (operands[3]) == 1)
+ else if (INTVAL (operands[3]) == 1 - idx_first)
return \"xxpermdi %x0,%x1,%x2,0\";
else
gcc_unreachable ();
@@ -1135,8 +1538,12 @@
[(match_operand:QI 2 "u5bit_cint_operand" "i,i,i")])))]
"VECTOR_MEM_VSX_P (<MODE>mode)"
{
+ int fldDM;
gcc_assert (UINTVAL (operands[2]) <= 1);
- operands[3] = GEN_INT (INTVAL (operands[2]) << 1);
+ fldDM = INTVAL (operands[2]) << 1;
+ if (!BYTES_BIG_ENDIAN)
+ fldDM = 3 - fldDM;
+ operands[3] = GEN_INT (fldDM);
return \"xxpermdi %x0,%x1,%x1,%3\";
}
[(set_attr "type" "vecperm")])
@@ -1149,7 +1556,26 @@
(parallel [(const_int 0)])))]
"VECTOR_MEM_VSX_P (<MODE>mode) && WORDS_BIG_ENDIAN"
"lxsd%U1x %x0,%y1"
- [(set_attr "type" "fpload")
+ [(set (attr "type")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_ux")
+ (const_string "fpload")))
+ (set_attr "length" "4")])
+
+;; Optimize extracting element 1 from memory for little endian
+(define_insn "*vsx_extract_<mode>_one_le"
+ [(set (match_operand:<VS_scalar> 0 "vsx_register_operand" "=ws,d,?wa")
+ (vec_select:<VS_scalar>
+ (match_operand:VSX_D 1 "indexed_or_indirect_operand" "Z,Z,Z")
+ (parallel [(const_int 1)])))]
+ "VECTOR_MEM_VSX_P (<MODE>mode) && !WORDS_BIG_ENDIAN"
+ "lxsd%U1x %x0,%y1"
+ [(set (attr "type")
+ (if_then_else
+ (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
+ (const_string "fpload_ux")
+ (const_string "fpload")))
(set_attr "length" "4")])
;; Extract a SF element from V4SF
@@ -1172,7 +1598,7 @@
rtx op2 = operands[2];
rtx op3 = operands[3];
rtx tmp;
- HOST_WIDE_INT ele = INTVAL (op2);
+ HOST_WIDE_INT ele = BYTES_BIG_ENDIAN ? INTVAL (op2) : 3 - INTVAL (op2);
if (ele == 0)
tmp = op1;
@@ -1213,11 +1639,22 @@
if (<MODE>mode != V2DImode)
{
target = gen_lowpart (V2DImode, target);
- op0 = gen_lowpart (V2DImode, target);
- op1 = gen_lowpart (V2DImode, target);
+ op0 = gen_lowpart (V2DImode, op0);
+ op1 = gen_lowpart (V2DImode, op1);
}
}
+ /* In little endian mode, vsx_xxpermdi2_<mode>_1 will perform a
+ transformation we don't want; it is necessary for
+ rs6000_expand_vec_perm_const_1 but not for this use. So we
+ prepare for that by reversing the transformation here. */
+ if (BYTES_BIG_ENDIAN)
emit_insn (gen (target, op0, op1, perm0, perm1));
+ else
+ {
+ rtx p0 = GEN_INT (3 - INTVAL (perm1));
+ rtx p1 = GEN_INT (3 - INTVAL (perm0));
+ emit_insn (gen (target, op1, op0, p0, p1));
+ }
DONE;
})
@@ -1231,9 +1668,32 @@
(match_operand 4 "const_2_to_3_operand" "")])))]
"VECTOR_MEM_VSX_P (<MODE>mode)"
{
- int mask = (INTVAL (operands[3]) << 1) | (INTVAL (operands[4]) - 2);
+ int op3, op4, mask;
+
+ /* For little endian, swap operands and invert/swap selectors
+ to get the correct xxpermdi. The operand swap sets up the
+ inputs as a little endian array. The selectors are swapped
+ because they are defined to use big endian ordering. The
+ selectors are inverted to get the correct doublewords for
+ little endian ordering. */
+ if (BYTES_BIG_ENDIAN)
+ {
+ op3 = INTVAL (operands[3]);
+ op4 = INTVAL (operands[4]);
+ }
+ else
+ {
+ op3 = 3 - INTVAL (operands[4]);
+ op4 = 3 - INTVAL (operands[3]);
+ }
+
+ mask = (op3 << 1) | (op4 - 2);
operands[3] = GEN_INT (mask);
+
+ if (BYTES_BIG_ENDIAN)
return "xxpermdi %x0,%x1,%x2,%3";
+ else
+ return "xxpermdi %x0,%x2,%x1,%3";
}
[(set_attr "type" "vecperm")])
@@ -1252,24 +1712,56 @@
;; Expanders for builtins
(define_expand "vsx_mergel_<mode>"
- [(set (match_operand:VSX_D 0 "vsx_register_operand" "")
- (vec_select:VSX_D
- (vec_concat:<VS_double>
- (match_operand:VSX_D 1 "vsx_register_operand" "")
- (match_operand:VSX_D 2 "vsx_register_operand" ""))
- (parallel [(const_int 1) (const_int 3)])))]
+ [(use (match_operand:VSX_D 0 "vsx_register_operand" ""))
+ (use (match_operand:VSX_D 1 "vsx_register_operand" ""))
+ (use (match_operand:VSX_D 2 "vsx_register_operand" ""))]
"VECTOR_MEM_VSX_P (<MODE>mode)"
- "")
+{
+ rtvec v;
+ rtx x;
+
+ /* Special handling for LE with -maltivec=be. */
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ {
+ v = gen_rtvec (2, GEN_INT (0), GEN_INT (2));
+ x = gen_rtx_VEC_CONCAT (<VS_double>mode, operands[2], operands[1]);
+ }
+ else
+ {
+ v = gen_rtvec (2, GEN_INT (1), GEN_INT (3));
+ x = gen_rtx_VEC_CONCAT (<VS_double>mode, operands[1], operands[2]);
+ }
+
+ x = gen_rtx_VEC_SELECT (<MODE>mode, x, gen_rtx_PARALLEL (VOIDmode, v));
+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));
+ DONE;
+})
(define_expand "vsx_mergeh_<mode>"
- [(set (match_operand:VSX_D 0 "vsx_register_operand" "")
- (vec_select:VSX_D
- (vec_concat:<VS_double>
- (match_operand:VSX_D 1 "vsx_register_operand" "")
- (match_operand:VSX_D 2 "vsx_register_operand" ""))
- (parallel [(const_int 0) (const_int 2)])))]
+ [(use (match_operand:VSX_D 0 "vsx_register_operand" ""))
+ (use (match_operand:VSX_D 1 "vsx_register_operand" ""))
+ (use (match_operand:VSX_D 2 "vsx_register_operand" ""))]
"VECTOR_MEM_VSX_P (<MODE>mode)"
- "")
+{
+ rtvec v;
+ rtx x;
+
+ /* Special handling for LE with -maltivec=be. */
+ if (!BYTES_BIG_ENDIAN && VECTOR_ELT_ORDER_BIG)
+ {
+ v = gen_rtvec (2, GEN_INT (1), GEN_INT (3));
+ x = gen_rtx_VEC_CONCAT (<VS_double>mode, operands[2], operands[1]);
+ }
+ else
+ {
+ v = gen_rtvec (2, GEN_INT (0), GEN_INT (2));
+ x = gen_rtx_VEC_CONCAT (<VS_double>mode, operands[1], operands[2]);
+ }
+
+ x = gen_rtx_VEC_SELECT (<MODE>mode, x, gen_rtx_PARALLEL (VOIDmode, v));
+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));
+ DONE;
+})
;; V2DF/V2DI splat
(define_insn "vsx_splat_<mode>"
@@ -1295,6 +1787,20 @@
(parallel
[(match_operand:QI 2 "u5bit_cint_operand" "i,i")]))))]
"VECTOR_MEM_VSX_P (<MODE>mode)"
+{
+ if (!BYTES_BIG_ENDIAN)
+ operands[2] = GEN_INT (3 - INTVAL (operands[2]));
+
+ return "xxspltw %x0,%x1,%2";
+}
+ [(set_attr "type" "vecperm")])
+
+(define_insn "vsx_xxspltw_<mode>_direct"
+ [(set (match_operand:VSX_W 0 "vsx_register_operand" "=wf,?wa")
+ (unspec:VSX_W [(match_operand:VSX_W 1 "vsx_register_operand" "wf,wa")
+ (match_operand:QI 2 "u5bit_cint_operand" "i,i")]
+ UNSPEC_VSX_XXSPLTW))]
+ "VECTOR_MEM_VSX_P (<MODE>mode)"
"xxspltw %x0,%x1,%2"
[(set_attr "type" "vecperm")])
@@ -1308,7 +1814,12 @@
(parallel [(const_int 0) (const_int 4)
(const_int 1) (const_int 5)])))]
"VECTOR_MEM_VSX_P (<MODE>mode)"
- "xxmrghw %x0,%x1,%x2"
+{
+ if (BYTES_BIG_ENDIAN)
+ return "xxmrghw %x0,%x1,%x2";
+ else
+ return "xxmrglw %x0,%x2,%x1";
+}
[(set_attr "type" "vecperm")])
(define_insn "vsx_xxmrglw_<mode>"
@@ -1320,7 +1831,12 @@
(parallel [(const_int 2) (const_int 6)
(const_int 3) (const_int 7)])))]
"VECTOR_MEM_VSX_P (<MODE>mode)"
- "xxmrglw %x0,%x1,%x2"
+{
+ if (BYTES_BIG_ENDIAN)
+ return "xxmrglw %x0,%x1,%x2";
+ else
+ return "xxmrghw %x0,%x2,%x1";
+}
[(set_attr "type" "vecperm")])
;; Shift left double by word immediate
@@ -1483,3 +1999,27 @@
}"
[(set_attr "length" "20")
(set_attr "type" "veccomplex")])
+
+
+;; Power8 Vector fusion. The fused ops must be physically adjacent.
+(define_peephole
+ [(set (match_operand:P 0 "base_reg_operand" "")
+ (match_operand:P 1 "short_cint_operand" ""))
+ (set (match_operand:VSX_M2 2 "vsx_register_operand" "")
+ (mem:VSX_M2 (plus:P (match_dup 0)
+ (match_operand:P 3 "int_reg_operand" ""))))]
+ "TARGET_VSX && TARGET_P8_FUSION"
+ "li %0,%1\t\t\t# vector load fusion\;lx<VSX_M2:VSm>x %x2,%0,%3"
+ [(set_attr "length" "8")
+ (set_attr "type" "vecload")])
+
+(define_peephole
+ [(set (match_operand:P 0 "base_reg_operand" "")
+ (match_operand:P 1 "short_cint_operand" ""))
+ (set (match_operand:VSX_M2 2 "vsx_register_operand" "")
+ (mem:VSX_M2 (plus:P (match_operand:P 3 "int_reg_operand" "")
+ (match_dup 0))))]
+ "TARGET_VSX && TARGET_P8_FUSION"
+ "li %0,%1\t\t\t# vector load fusion\;lx<VSX_M2:VSm>x %x2,%0,%3"
+ [(set_attr "length" "8")
+ (set_attr "type" "vecload")])
diff --git a/gcc-4.8/gcc/config/s390/htmxlintrin.h b/gcc-4.8/gcc/config/s390/htmxlintrin.h
index bb142195b..952b40975 100644
--- a/gcc-4.8/gcc/config/s390/htmxlintrin.h
+++ b/gcc-4.8/gcc/config/s390/htmxlintrin.h
@@ -33,13 +33,20 @@ extern "C" {
the IBM XL compiler. For documentation please see the "z/OS XL
C/C++ Programming Guide" publically available on the web. */
-extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+/* FIXME: __TM_simple_begin and __TM_begin should be marked
+ __always_inline__ as well but this currently produces an error
+ since the tbegin builtins are "returns_twice" and setjmp_call_p
+ (calls.c) therefore identifies the functions as calling setjmp.
+ The tree inliner currently refuses to inline functions calling
+ setjmp. */
+
+long
__TM_simple_begin ()
{
return __builtin_tbegin_nofloat (0);
}
-extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+long
__TM_begin (void* const tdb)
{
return __builtin_tbegin_nofloat (tdb);
@@ -78,7 +85,7 @@ __TM_nesting_depth (void* const tdb_ptr)
if (depth != 0)
return depth;
- if (tdb->format == 0)
+ if (tdb->format != 1)
return 0;
return tdb->nesting_depth;
}
@@ -90,7 +97,7 @@ __TM_is_user_abort (void* const tdb_ptr)
{
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
- if (tdb->format == 0)
+ if (tdb->format != 1)
return 0;
return !!(tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE);
@@ -101,7 +108,7 @@ __TM_is_named_user_abort (void* const tdb_ptr, unsigned char* code)
{
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
- if (tdb->format == 0)
+ if (tdb->format != 1)
return 0;
if (tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE)
@@ -117,7 +124,7 @@ __TM_is_illegal (void* const tdb_ptr)
{
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
- return (tdb->format == 0
+ return (tdb->format == 1
&& (tdb->abort_code == 4 /* unfiltered program interruption */
|| tdb->abort_code == 11 /* restricted instruction */));
}
@@ -127,7 +134,7 @@ __TM_is_footprint_exceeded (void* const tdb_ptr)
{
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
- return (tdb->format == 0
+ return (tdb->format == 1
&& (tdb->abort_code == 7 /* fetch overflow */
|| tdb->abort_code == 8 /* store overflow */));
}
@@ -137,7 +144,7 @@ __TM_is_nested_too_deep (void* const tdb_ptr)
{
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
- return tdb->format == 0 && tdb->abort_code == 13; /* depth exceeded */
+ return tdb->format == 1 && tdb->abort_code == 13; /* depth exceeded */
}
extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@@ -145,7 +152,7 @@ __TM_is_conflict (void* const tdb_ptr)
{
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
- return (tdb->format == 0
+ return (tdb->format == 1
&& (tdb->abort_code == 9 /* fetch conflict */
|| tdb->abort_code == 10 /* store conflict */));
}
diff --git a/gcc-4.8/gcc/config/s390/s390-protos.h b/gcc-4.8/gcc/config/s390/s390-protos.h
index 67283df45..7b43ed01b 100644
--- a/gcc-4.8/gcc/config/s390/s390-protos.h
+++ b/gcc-4.8/gcc/config/s390/s390-protos.h
@@ -110,5 +110,6 @@ extern bool s390_decompose_shift_count (rtx, rtx *, HOST_WIDE_INT *);
extern int s390_branch_condition_mask (rtx);
extern int s390_compare_and_branch_condition_mask (rtx);
extern bool s390_extzv_shift_ok (int, int, unsigned HOST_WIDE_INT);
+extern void s390_asm_output_function_label (FILE *, const char *, tree);
#endif /* RTX_CODE */
diff --git a/gcc-4.8/gcc/config/s390/s390.c b/gcc-4.8/gcc/config/s390/s390.c
index 273022778..836a3d4fd 100644
--- a/gcc-4.8/gcc/config/s390/s390.c
+++ b/gcc-4.8/gcc/config/s390/s390.c
@@ -407,6 +407,65 @@ struct GTY(()) machine_function
bytes on a z10 (or higher) CPU. */
#define PREDICT_DISTANCE (TARGET_Z10 ? 384 : 2048)
+static const int s390_hotpatch_trampoline_halfwords_default = 12;
+static const int s390_hotpatch_trampoline_halfwords_max = 1000000;
+static int s390_hotpatch_trampoline_halfwords = -1;
+
+/* Return the argument of the given hotpatch attribute or the default value if
+ no argument is present. */
+
+static inline int
+get_hotpatch_attribute (tree hotpatch_attr)
+{
+ const_tree args;
+
+ args = TREE_VALUE (hotpatch_attr);
+
+ return (args) ?
+ TREE_INT_CST_LOW (TREE_VALUE (args)):
+ s390_hotpatch_trampoline_halfwords_default;
+}
+
+/* Check whether the hotpatch attribute is applied to a function and, if it has
+ an argument, the argument is valid. */
+
+static tree
+s390_handle_hotpatch_attribute (tree *node, tree name, tree args,
+ int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
+{
+ if (TREE_CODE (*node) != FUNCTION_DECL)
+ {
+ warning (OPT_Wattributes, "%qE attribute only applies to functions",
+ name);
+ *no_add_attrs = true;
+ }
+ else if (args)
+ {
+ tree expr = TREE_VALUE (args);
+
+ if (TREE_CODE (expr) != INTEGER_CST
+ || !INTEGRAL_TYPE_P (TREE_TYPE (expr))
+ || TREE_INT_CST_HIGH (expr) != 0
+ || TREE_INT_CST_LOW (expr) > (unsigned int)
+ s390_hotpatch_trampoline_halfwords_max)
+ {
+ error ("requested %qE attribute is not a non-negative integer"
+ " constant or too large (max. %d)", name,
+ s390_hotpatch_trampoline_halfwords_max);
+ *no_add_attrs = true;
+ }
+ }
+
+ return NULL_TREE;
+}
+
+static const struct attribute_spec s390_attribute_table[] = {
+ { "hotpatch", 0, 1, true, false, false, s390_handle_hotpatch_attribute, false
+ },
+ /* End element. */
+ { NULL, 0, 0, false, false, false, NULL, false }
+};
+
/* Return the alignment for LABEL. We default to the -falign-labels
value except for the literal pool base label. */
int
@@ -883,7 +942,8 @@ s390_canonicalize_comparison (int *code, rtx *op0, rtx *op1,
{
/* For CCRAWmode put the required cc mask into the second
operand. */
- if (GET_MODE (XVECEXP (*op0, 0, 0)) == CCRAWmode)
+ if (GET_MODE (XVECEXP (*op0, 0, 0)) == CCRAWmode
+ && INTVAL (*op1) >= 0 && INTVAL (*op1) <= 3)
*op1 = gen_rtx_CONST_INT (VOIDmode, 1 << (3 - INTVAL (*op1)));
*op0 = XVECEXP (*op0, 0, 0);
*code = new_code;
@@ -1594,6 +1654,46 @@ s390_init_machine_status (void)
static void
s390_option_override (void)
{
+ unsigned int i;
+ cl_deferred_option *opt;
+ vec<cl_deferred_option> *v =
+ (vec<cl_deferred_option> *) s390_deferred_options;
+
+ if (v)
+ FOR_EACH_VEC_ELT (*v, i, opt)
+ {
+ switch (opt->opt_index)
+ {
+ case OPT_mhotpatch:
+ s390_hotpatch_trampoline_halfwords = (opt->value) ?
+ s390_hotpatch_trampoline_halfwords_default : -1;
+ break;
+ case OPT_mhotpatch_:
+ {
+ int val;
+
+ val = integral_argument (opt->arg);
+ if (val == -1)
+ {
+ /* argument is not a plain number */
+ error ("argument to %qs should be a non-negative integer",
+ "-mhotpatch=");
+ break;
+ }
+ else if (val > s390_hotpatch_trampoline_halfwords_max)
+ {
+ error ("argument to %qs is too large (max. %d)",
+ "-mhotpatch=", s390_hotpatch_trampoline_halfwords_max);
+ break;
+ }
+ s390_hotpatch_trampoline_halfwords = val;
+ break;
+ }
+ default:
+ gcc_unreachable ();
+ }
+ }
+
/* Set up function hooks. */
init_machine_status = s390_init_machine_status;
@@ -3015,15 +3115,22 @@ s390_preferred_reload_class (rtx op, reg_class_t rclass)
prefer ADDR_REGS. If 'class' is not a superset
of ADDR_REGS, e.g. FP_REGS, reject this reload. */
case CONST:
- /* A larl operand with odd addend will get fixed via secondary
- reload. So don't request it to be pushed into literal
- pool. */
+ /* Symrefs cannot be pushed into the literal pool with -fPIC
+ so we *MUST NOT* return NO_REGS for these cases
+ (s390_cannot_force_const_mem will return true).
+
+ On the other hand we MUST return NO_REGS for symrefs with
+ invalid addend which might have been pushed to the literal
+ pool (no -fPIC). Usually we would expect them to be
+ handled via secondary reload but this does not happen if
+ they are used as literal pool slot replacement in reload
+ inheritance (see emit_input_reload_insns). */
if (TARGET_CPU_ZARCH
&& GET_CODE (XEXP (op, 0)) == PLUS
&& GET_CODE (XEXP (XEXP(op, 0), 0)) == SYMBOL_REF
&& GET_CODE (XEXP (XEXP(op, 0), 1)) == CONST_INT)
{
- if (reg_class_subset_p (ADDR_REGS, rclass))
+ if (flag_pic && reg_class_subset_p (ADDR_REGS, rclass))
return ADDR_REGS;
else
return NO_REGS;
@@ -4683,7 +4790,7 @@ s390_expand_insv (rtx dest, rtx op1, rtx op2, rtx src)
int smode_bsize, mode_bsize;
rtx op, clobber;
- if (bitsize + bitpos > GET_MODE_SIZE (mode))
+ if (bitsize + bitpos > GET_MODE_BITSIZE (mode))
return false;
/* Generate INSERT IMMEDIATE (IILL et al). */
@@ -5311,6 +5418,101 @@ get_some_local_dynamic_name (void)
gcc_unreachable ();
}
+/* Returns -1 if the function should not be made hotpatchable. Otherwise it
+ returns a number >= 0 that is the desired size of the hotpatch trampoline
+ in halfwords. */
+
+static int s390_function_num_hotpatch_trampoline_halfwords (tree decl,
+ bool do_warn)
+{
+ tree attr;
+
+ if (DECL_DECLARED_INLINE_P (decl)
+ || DECL_ARTIFICIAL (decl)
+ || MAIN_NAME_P (DECL_NAME (decl)))
+ {
+ /* - Explicitly inlined functions cannot be hotpatched.
+ - Artificial functions need not be hotpatched.
+ - Making the main function hotpatchable is useless. */
+ return -1;
+ }
+ attr = lookup_attribute ("hotpatch", DECL_ATTRIBUTES (decl));
+ if (attr || s390_hotpatch_trampoline_halfwords >= 0)
+ {
+ if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (decl)))
+ {
+ if (do_warn)
+ warning (OPT_Wattributes, "function %qE with the %qs attribute"
+ " is not hotpatchable", DECL_NAME (decl), "always_inline");
+ return -1;
+ }
+ else
+ {
+ return (attr) ?
+ get_hotpatch_attribute (attr) : s390_hotpatch_trampoline_halfwords;
+ }
+ }
+
+ return -1;
+}
+
+/* Hook to determine if one function can safely inline another. */
+
+static bool
+s390_can_inline_p (tree caller, tree callee)
+{
+ if (s390_function_num_hotpatch_trampoline_halfwords (callee, false) >= 0)
+ return false;
+
+ return default_target_can_inline_p (caller, callee);
+}
+
+/* Write the extra assembler code needed to declare a function properly. */
+
+void
+s390_asm_output_function_label (FILE *asm_out_file, const char *fname,
+ tree decl)
+{
+ int hotpatch_trampoline_halfwords = -1;
+
+ if (decl)
+ {
+ hotpatch_trampoline_halfwords =
+ s390_function_num_hotpatch_trampoline_halfwords (decl, true);
+ if (hotpatch_trampoline_halfwords >= 0
+ && decl_function_context (decl) != NULL_TREE)
+ {
+ warning_at (DECL_SOURCE_LOCATION (decl), OPT_mhotpatch,
+ "hotpatching is not compatible with nested functions");
+ hotpatch_trampoline_halfwords = -1;
+ }
+ }
+
+ if (hotpatch_trampoline_halfwords > 0)
+ {
+ int i;
+
+ /* Add a trampoline code area before the function label and initialize it
+ with two-byte nop instructions. This area can be overwritten with code
+ that jumps to a patched version of the function. */
+ for (i = 0; i < hotpatch_trampoline_halfwords; i++)
+ asm_fprintf (asm_out_file, "\tnopr\t%%r7\n");
+ /* Note: The function label must be aligned so that (a) the bytes of the
+ following nop do not cross a cacheline boundary, and (b) a jump address
+ (eight bytes for 64 bit targets, 4 bytes for 32 bit targets) can be
+ stored directly before the label without crossing a cacheline
+ boundary. All this is necessary to make sure the trampoline code can
+ be changed atomically. */
+ }
+
+ ASM_OUTPUT_LABEL (asm_out_file, fname);
+
+ /* Output a four-byte nop if hotpatching is enabled. This can be overwritten
+ atomically with a relative backwards jump to the trampoline area. */
+ if (hotpatch_trampoline_halfwords >= 0)
+ asm_fprintf (asm_out_file, "\tnop\t0\n");
+}
+
/* Output machine-dependent UNSPECs occurring in address constant X
in assembler syntax to stdio stream FILE. Returns true if the
constant X could be recognized, false otherwise. */
@@ -7846,6 +8048,9 @@ s390_optimize_nonescaping_tx (void)
{
bb = BASIC_BLOCK (bb_index);
+ if (!bb)
+ continue;
+
FOR_BB_INSNS (bb, insn)
{
rtx ite, cc, pat, target;
@@ -7959,7 +8164,10 @@ s390_optimize_nonescaping_tx (void)
if (!result)
return;
- PATTERN (tbegin_insn) = XVECEXP (PATTERN (tbegin_insn), 0, 0);
+ PATTERN (tbegin_insn) = gen_rtx_PARALLEL (VOIDmode,
+ gen_rtvec (2,
+ XVECEXP (PATTERN (tbegin_insn), 0, 0),
+ XVECEXP (PATTERN (tbegin_insn), 0, 1)));
INSN_CODE (tbegin_insn) = -1;
df_insn_rescan (tbegin_insn);
@@ -9568,61 +9776,47 @@ s390_gimplify_va_arg (tree valist, tree type, gimple_seq *pre_p,
void
s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool clobber_fprs_p)
{
- const int CC0 = 1 << 3;
- const int CC1 = 1 << 2;
- const int CC3 = 1 << 0;
- rtx abort_label = gen_label_rtx ();
- rtx leave_label = gen_label_rtx ();
+ rtx retry_plus_two = gen_reg_rtx (SImode);
rtx retry_reg = gen_reg_rtx (SImode);
rtx retry_label = NULL_RTX;
- rtx jump;
- rtx very_unlikely = GEN_INT (REG_BR_PROB_BASE / 100 - 1);
if (retry != NULL_RTX)
{
emit_move_insn (retry_reg, retry);
+ emit_insn (gen_addsi3 (retry_plus_two, retry_reg, const2_rtx));
+ emit_insn (gen_addsi3 (retry_reg, retry_reg, const1_rtx));
retry_label = gen_label_rtx ();
emit_label (retry_label);
}
if (clobber_fprs_p)
- emit_insn (gen_tbegin_1 (tdb,
- gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK)));
+ emit_insn (gen_tbegin_1 (gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK), tdb));
else
- emit_insn (gen_tbegin_nofloat_1 (tdb,
- gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK)));
-
- jump = s390_emit_jump (abort_label,
- gen_rtx_NE (VOIDmode,
- gen_rtx_REG (CCRAWmode, CC_REGNUM),
- gen_rtx_CONST_INT (VOIDmode, CC0)));
-
- JUMP_LABEL (jump) = abort_label;
- LABEL_NUSES (abort_label) = 1;
- add_reg_note (jump, REG_BR_PROB, very_unlikely);
+ emit_insn (gen_tbegin_nofloat_1 (gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK),
+ tdb));
- /* Initialize CC return value. */
- emit_move_insn (dest, const0_rtx);
-
- s390_emit_jump (leave_label, NULL_RTX);
- LABEL_NUSES (leave_label) = 1;
- emit_barrier ();
-
- /* Abort handler code. */
-
- emit_label (abort_label);
+ emit_move_insn (dest, gen_rtx_UNSPEC (SImode,
+ gen_rtvec (1, gen_rtx_REG (CCRAWmode,
+ CC_REGNUM)),
+ UNSPEC_CC_TO_INT));
if (retry != NULL_RTX)
{
+ const int CC0 = 1 << 3;
+ const int CC1 = 1 << 2;
+ const int CC3 = 1 << 0;
+ rtx jump;
rtx count = gen_reg_rtx (SImode);
+ rtx leave_label = gen_label_rtx ();
+
+ /* Exit for success and permanent failures. */
jump = s390_emit_jump (leave_label,
gen_rtx_EQ (VOIDmode,
gen_rtx_REG (CCRAWmode, CC_REGNUM),
- gen_rtx_CONST_INT (VOIDmode, CC1 | CC3)));
- LABEL_NUSES (leave_label) = 2;
- add_reg_note (jump, REG_BR_PROB, very_unlikely);
+ gen_rtx_CONST_INT (VOIDmode, CC0 | CC1 | CC3)));
+ LABEL_NUSES (leave_label) = 1;
/* CC2 - transient failure. Perform retry with ppa. */
- emit_move_insn (count, retry);
+ emit_move_insn (count, retry_plus_two);
emit_insn (gen_subsi3 (count, count, retry_reg));
emit_insn (gen_tx_assist (count));
jump = emit_jump_insn (gen_doloop_si64 (retry_label,
@@ -9630,13 +9824,8 @@ s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool clobber_fprs_p)
retry_reg));
JUMP_LABEL (jump) = retry_label;
LABEL_NUSES (retry_label) = 1;
- }
-
- emit_move_insn (dest, gen_rtx_UNSPEC (SImode,
- gen_rtvec (1, gen_rtx_REG (CCRAWmode,
- CC_REGNUM)),
- UNSPEC_CC_TO_INT));
emit_label (leave_label);
+ }
}
/* Builtins. */
@@ -9674,6 +9863,9 @@ static void
s390_init_builtins (void)
{
tree ftype, uint64_type;
+ tree returns_twice_attr = tree_cons (get_identifier ("returns_twice"),
+ NULL, NULL);
+ tree noreturn_attr = tree_cons (get_identifier ("noreturn"), NULL, NULL);
/* void foo (void) */
ftype = build_function_type_list (void_type_node, NULL_TREE);
@@ -9684,17 +9876,17 @@ s390_init_builtins (void)
ftype = build_function_type_list (void_type_node, integer_type_node,
NULL_TREE);
add_builtin_function ("__builtin_tabort", ftype,
- S390_BUILTIN_TABORT, BUILT_IN_MD, NULL, NULL_TREE);
+ S390_BUILTIN_TABORT, BUILT_IN_MD, NULL, noreturn_attr);
add_builtin_function ("__builtin_tx_assist", ftype,
S390_BUILTIN_TX_ASSIST, BUILT_IN_MD, NULL, NULL_TREE);
/* int foo (void *) */
ftype = build_function_type_list (integer_type_node, ptr_type_node, NULL_TREE);
add_builtin_function ("__builtin_tbegin", ftype, S390_BUILTIN_TBEGIN,
- BUILT_IN_MD, NULL, NULL_TREE);
+ BUILT_IN_MD, NULL, returns_twice_attr);
add_builtin_function ("__builtin_tbegin_nofloat", ftype,
S390_BUILTIN_TBEGIN_NOFLOAT,
- BUILT_IN_MD, NULL, NULL_TREE);
+ BUILT_IN_MD, NULL, returns_twice_attr);
/* int foo (void *, int) */
ftype = build_function_type_list (integer_type_node, ptr_type_node,
@@ -9702,11 +9894,11 @@ s390_init_builtins (void)
add_builtin_function ("__builtin_tbegin_retry", ftype,
S390_BUILTIN_TBEGIN_RETRY,
BUILT_IN_MD,
- NULL, NULL_TREE);
+ NULL, returns_twice_attr);
add_builtin_function ("__builtin_tbegin_retry_nofloat", ftype,
S390_BUILTIN_TBEGIN_RETRY_NOFLOAT,
BUILT_IN_MD,
- NULL, NULL_TREE);
+ NULL, returns_twice_attr);
/* int foo (void) */
ftype = build_function_type_list (integer_type_node, NULL_TREE);
@@ -11622,6 +11814,12 @@ s390_loop_unroll_adjust (unsigned nunroll, struct loop *loop)
#undef TARGET_CANONICALIZE_COMPARISON
#define TARGET_CANONICALIZE_COMPARISON s390_canonicalize_comparison
+#undef TARGET_ATTRIBUTE_TABLE
+#define TARGET_ATTRIBUTE_TABLE s390_attribute_table
+
+#undef TARGET_CAN_INLINE_P
+#define TARGET_CAN_INLINE_P s390_can_inline_p
+
struct gcc_target targetm = TARGET_INITIALIZER;
#include "gt-s390.h"
diff --git a/gcc-4.8/gcc/config/s390/s390.h b/gcc-4.8/gcc/config/s390/s390.h
index 03ab89000..a937c30d2 100644
--- a/gcc-4.8/gcc/config/s390/s390.h
+++ b/gcc-4.8/gcc/config/s390/s390.h
@@ -217,7 +217,7 @@ enum processor_flags
#define STACK_BOUNDARY 64
/* Allocation boundary (in *bits*) for the code of a function. */
-#define FUNCTION_BOUNDARY 32
+#define FUNCTION_BOUNDARY 64
/* There is no point aligning anything to a rounder boundary than this. */
#define BIGGEST_ALIGNMENT 64
@@ -878,6 +878,9 @@ do { \
fputc ('\n', (FILE)); \
} while (0)
+#undef ASM_OUTPUT_FUNCTION_LABEL
+#define ASM_OUTPUT_FUNCTION_LABEL(FILE, NAME, DECL) \
+ s390_asm_output_function_label (FILE, NAME, DECL)
/* Miscellaneous parameters. */
diff --git a/gcc-4.8/gcc/config/s390/s390.md b/gcc-4.8/gcc/config/s390/s390.md
index ad3ba27c5..fab189843 100644
--- a/gcc-4.8/gcc/config/s390/s390.md
+++ b/gcc-4.8/gcc/config/s390/s390.md
@@ -147,6 +147,7 @@
; Transactional Execution support
UNSPECV_TBEGIN
+ UNSPECV_TBEGIN_TDB
UNSPECV_TBEGINC
UNSPECV_TEND
UNSPECV_TABORT
@@ -9896,9 +9897,10 @@
(define_insn "tbegin_1"
[(set (reg:CCRAW CC_REGNUM)
- (unspec_volatile:CCRAW [(match_operand:BLK 0 "memory_operand" "=Q")
- (match_operand 1 "const_int_operand" " D")]
+ (unspec_volatile:CCRAW [(match_operand 0 "const_int_operand" "D")]
UNSPECV_TBEGIN))
+ (set (match_operand:BLK 1 "memory_operand" "=Q")
+ (unspec_volatile:BLK [(match_dup 0)] UNSPECV_TBEGIN_TDB))
(clobber (reg:DF 16))
(clobber (reg:DF 17))
(clobber (reg:DF 18))
@@ -9917,18 +9919,19 @@
(clobber (reg:DF 31))]
; CONST_OK_FOR_CONSTRAINT_P does not work with D constraint since D is
; not supposed to be used for immediates (see genpreds.c).
- "TARGET_HTM && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 0xffff"
- "tbegin\t%0,%x1"
+ "TARGET_HTM && INTVAL (operands[0]) >= 0 && INTVAL (operands[0]) <= 0xffff"
+ "tbegin\t%1,%x0"
[(set_attr "op_type" "SIL")])
; Same as above but without the FPR clobbers
(define_insn "tbegin_nofloat_1"
[(set (reg:CCRAW CC_REGNUM)
- (unspec_volatile:CCRAW [(match_operand:BLK 0 "memory_operand" "=Q")
- (match_operand 1 "const_int_operand" " D")]
- UNSPECV_TBEGIN))]
- "TARGET_HTM && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 0xffff"
- "tbegin\t%0,%x1"
+ (unspec_volatile:CCRAW [(match_operand 0 "const_int_operand" "D")]
+ UNSPECV_TBEGIN))
+ (set (match_operand:BLK 1 "memory_operand" "=Q")
+ (unspec_volatile:BLK [(match_dup 0)] UNSPECV_TBEGIN_TDB))]
+ "TARGET_HTM && INTVAL (operands[0]) >= 0 && INTVAL (operands[0]) <= 0xffff"
+ "tbegin\t%1,%x0"
[(set_attr "op_type" "SIL")])
@@ -10012,15 +10015,12 @@
; Transaction perform processor assist
(define_expand "tx_assist"
- [(set (match_dup 1) (const_int 0))
- (unspec_volatile [(match_operand:SI 0 "register_operand" "")
- (match_dup 1)
+ [(unspec_volatile [(match_operand:SI 0 "register_operand" "")
+ (reg:SI GPR0_REGNUM)
(const_int 1)]
UNSPECV_PPA)]
"TARGET_HTM"
-{
- operands[1] = gen_reg_rtx (SImode);
-})
+ "")
(define_insn "*ppa"
[(unspec_volatile [(match_operand:SI 0 "register_operand" "d")
@@ -10028,5 +10028,5 @@
(match_operand 2 "const_int_operand" "I")]
UNSPECV_PPA)]
"TARGET_HTM && INTVAL (operands[2]) < 16"
- "ppa\t%0,%1,1"
+ "ppa\t%0,%1,%2"
[(set_attr "op_type" "RRF")])
diff --git a/gcc-4.8/gcc/config/s390/s390.opt b/gcc-4.8/gcc/config/s390/s390.opt
index a4e6ef25d..65d17c334 100644
--- a/gcc-4.8/gcc/config/s390/s390.opt
+++ b/gcc-4.8/gcc/config/s390/s390.opt
@@ -96,6 +96,14 @@ mhard-float
Target Report RejectNegative Negative(msoft-float) InverseMask(SOFT_FLOAT, HARD_FLOAT)
Enable hardware floating point
+mhotpatch
+Target Report Var(s390_deferred_options) Defer
+Prepend the function label with 12 two-byte Nop instructions, and add a four byte Nop instruction after the label for hotpatching.
+
+mhotpatch=
+Target RejectNegative Report Joined Var(s390_deferred_options) Defer
+Prepend the function label with the given number of two-byte Nop instructions, and add a four byte Nop instruction after the label for hotpatching.
+
mlong-double-128
Target Report RejectNegative Negative(mlong-double-64) Mask(LONG_DOUBLE_128)
Use 128-bit long double
diff --git a/gcc-4.8/gcc/config/sh/constraints.md b/gcc-4.8/gcc/config/sh/constraints.md
index 59bf6b5ad..df7823764 100644
--- a/gcc-4.8/gcc/config/sh/constraints.md
+++ b/gcc-4.8/gcc/config/sh/constraints.md
@@ -221,6 +221,7 @@
(define_constraint "Q"
"A pc relative load operand."
(and (match_code "mem")
+ (match_test "GET_MODE (op) != QImode")
(match_test "IS_PC_RELATIVE_LOAD_ADDR_P (XEXP (op, 0))")))
(define_constraint "Bsc"
@@ -295,13 +296,15 @@
(define_memory_constraint "Sdd"
"A memory reference that uses displacement addressing."
- (and (match_test "MEM_P (op) && GET_CODE (XEXP (op, 0)) == PLUS")
+ (and (match_code "mem")
+ (match_test "GET_CODE (XEXP (op, 0)) == PLUS")
(match_test "REG_P (XEXP (XEXP (op, 0), 0))")
(match_test "CONST_INT_P (XEXP (XEXP (op, 0), 1))")))
(define_memory_constraint "Snd"
"A memory reference that excludes displacement addressing."
- (match_test "! satisfies_constraint_Sdd (op)"))
+ (and (match_code "mem")
+ (match_test "! satisfies_constraint_Sdd (op)")))
(define_memory_constraint "Sbv"
"A memory reference, as used in SH2A bclr.b, bset.b, etc."
diff --git a/gcc-4.8/gcc/config/sh/predicates.md b/gcc-4.8/gcc/config/sh/predicates.md
index dcbd75bb8..b1905fa0d 100644
--- a/gcc-4.8/gcc/config/sh/predicates.md
+++ b/gcc-4.8/gcc/config/sh/predicates.md
@@ -389,6 +389,12 @@
XEXP (XEXP (op, 0), 1),
TARGET_SH2A, true)")))
+;; Returns true if OP is a displacement address that can fit into a
+;; 16 bit (non-SH2A) memory load / store insn.
+(define_predicate "short_displacement_mem_operand"
+ (match_test "sh_disp_addr_displacement (op)
+ <= sh_max_mov_insn_displacement (GET_MODE (op), false)"))
+
;; Returns 1 if the operand can be used in an SH2A movu.{b|w} insn.
(define_predicate "zero_extend_movu_operand"
(and (match_operand 0 "displacement_mem_operand")
@@ -413,6 +419,11 @@
if (t_reg_operand (op, mode))
return 0;
+ /* Disallow PC relative QImode loads, since these is no insn to do that
+ and an imm8 load should be used instead. */
+ if (IS_PC_RELATIVE_LOAD_ADDR_P (op) && GET_MODE (op) == QImode)
+ return false;
+
if (MEM_P (op))
{
rtx inside = XEXP (op, 0);
diff --git a/gcc-4.8/gcc/config/sh/sh-protos.h b/gcc-4.8/gcc/config/sh/sh-protos.h
index 4671c5499..8f99caac0 100644
--- a/gcc-4.8/gcc/config/sh/sh-protos.h
+++ b/gcc-4.8/gcc/config/sh/sh-protos.h
@@ -159,6 +159,8 @@ extern bool sh_vector_mode_supported_p (enum machine_mode);
extern bool sh_cfun_trap_exit_p (void);
extern rtx sh_find_equiv_gbr_addr (rtx cur_insn, rtx mem);
extern int sh_eval_treg_value (rtx op);
+extern HOST_WIDE_INT sh_disp_addr_displacement (rtx mem_op);
+extern int sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a);
/* Result value of sh_find_set_of_reg. */
struct set_of_reg
diff --git a/gcc-4.8/gcc/config/sh/sh.c b/gcc-4.8/gcc/config/sh/sh.c
index 44e1e4ce3..9ecaa926d 100644
--- a/gcc-4.8/gcc/config/sh/sh.c
+++ b/gcc-4.8/gcc/config/sh/sh.c
@@ -24,6 +24,9 @@ along with GCC; see the file COPYING3. If not see
malloc & co, which are poisoned by "system.h". The proper solution is
to include <cstdlib> in "system.h" instead of <stdlib.h>. */
#include <cstdlib>
+#include <sstream>
+#include <vector>
+#include <algorithm>
#include "config.h"
#include "system.h"
@@ -60,10 +63,6 @@ along with GCC; see the file COPYING3. If not see
#include "tm-constrs.h"
#include "opts.h"
-#include <sstream>
-#include <vector>
-#include <algorithm>
-
int code_for_indirect_jump_scratch = CODE_FOR_indirect_jump_scratch;
#define MSW (TARGET_LITTLE_ENDIAN ? 1 : 0)
@@ -310,9 +309,7 @@ static rtx sh_trampoline_adjust_address (rtx);
static void sh_conditional_register_usage (void);
static bool sh_legitimate_constant_p (enum machine_mode, rtx);
static int mov_insn_size (enum machine_mode, bool);
-static int max_mov_insn_displacement (enum machine_mode, bool);
static int mov_insn_alignment_mask (enum machine_mode, bool);
-static HOST_WIDE_INT disp_addr_displacement (rtx);
static bool sequence_insn_p (rtx);
static void sh_canonicalize_comparison (int *, rtx *, rtx *, bool);
static void sh_canonicalize_comparison (enum rtx_code&, rtx&, rtx&,
@@ -3628,8 +3625,8 @@ mov_insn_size (enum machine_mode mode, bool consider_sh2a)
/* Determine the maximum possible displacement for a move insn for the
specified mode. */
-static int
-max_mov_insn_displacement (enum machine_mode mode, bool consider_sh2a)
+int
+sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a)
{
/* The 4 byte displacement move insns are the same as the 2 byte
versions but take a 12 bit displacement. All we need to do is to
@@ -3665,8 +3662,8 @@ mov_insn_alignment_mask (enum machine_mode mode, bool consider_sh2a)
}
/* Return the displacement value of a displacement address. */
-static inline HOST_WIDE_INT
-disp_addr_displacement (rtx x)
+HOST_WIDE_INT
+sh_disp_addr_displacement (rtx x)
{
gcc_assert (satisfies_constraint_Sdd (x));
return INTVAL (XEXP (XEXP (x, 0), 1));
@@ -3703,12 +3700,12 @@ sh_address_cost (rtx x, enum machine_mode mode,
HImode and QImode loads/stores with displacement put pressure on
R0 which will most likely require another reg copy. Thus account
a higher cost for that. */
- if (offset > 0 && offset <= max_mov_insn_displacement (mode, false))
+ if (offset > 0 && offset <= sh_max_mov_insn_displacement (mode, false))
return (mode == HImode || mode == QImode) ? 2 : 1;
/* The displacement would fit into a 4 byte move insn (SH2A). */
if (TARGET_SH2A
- && offset > 0 && offset <= max_mov_insn_displacement (mode, true))
+ && offset > 0 && offset <= sh_max_mov_insn_displacement (mode, true))
return 2;
/* The displacement is probably out of range and will require extra
@@ -10218,7 +10215,7 @@ sh_legitimate_index_p (enum machine_mode mode, rtx op, bool consider_sh2a,
else
{
const HOST_WIDE_INT offset = INTVAL (op);
- const int max_disp = max_mov_insn_displacement (mode, consider_sh2a);
+ const int max_disp = sh_max_mov_insn_displacement (mode, consider_sh2a);
const int align_mask = mov_insn_alignment_mask (mode, consider_sh2a);
/* If the mode does not support any displacement always return false.
@@ -10404,7 +10401,7 @@ sh_find_mov_disp_adjust (enum machine_mode mode, HOST_WIDE_INT offset)
effectively disable the small displacement insns. */
const int mode_sz = GET_MODE_SIZE (mode);
const int mov_insn_sz = mov_insn_size (mode, false);
- const int max_disp = max_mov_insn_displacement (mode, false);
+ const int max_disp = sh_max_mov_insn_displacement (mode, false);
const int max_disp_next = max_disp + mov_insn_sz;
HOST_WIDE_INT align_modifier = offset > 127 ? mov_insn_sz : 0;
HOST_WIDE_INT offset_adjust;
@@ -13165,7 +13162,8 @@ sh_secondary_reload (bool in_p, rtx x, reg_class_t rclass_i,
the insns must have the appropriate alternatives. */
if ((mode == QImode || mode == HImode) && rclass != R0_REGS
&& satisfies_constraint_Sdd (x)
- && disp_addr_displacement (x) <= max_mov_insn_displacement (mode, false))
+ && sh_disp_addr_displacement (x)
+ <= sh_max_mov_insn_displacement (mode, false))
return R0_REGS;
/* When reload is trying to address a QImode or HImode subreg on the stack,
diff --git a/gcc-4.8/gcc/config/sh/sh.md b/gcc-4.8/gcc/config/sh/sh.md
index 8ae9cea76..300f99018 100644
--- a/gcc-4.8/gcc/config/sh/sh.md
+++ b/gcc-4.8/gcc/config/sh/sh.md
@@ -2152,6 +2152,7 @@
(udiv:SI (reg:SI R4_REG) (reg:SI R5_REG)))
(clobber (reg:SI T_REG))
(clobber (reg:SI PR_REG))
+ (clobber (reg:SI R1_REG))
(clobber (reg:SI R4_REG))
(use (match_operand:SI 1 "arith_reg_operand" "r"))]
"TARGET_SH1 && TARGET_DIVIDE_CALL_DIV1"
@@ -6831,34 +6832,9 @@ label:
prepare_move_operands (operands, QImode);
})
-;; If movqi_reg_reg is specified as an alternative of movqi, movqi will be
-;; selected to copy QImode regs. If one of them happens to be allocated
-;; on the stack, reload will stick to movqi insn and generate wrong
-;; displacement addressing because of the generic m alternatives.
-;; With the movqi_reg_reg being specified before movqi it will be initially
-;; picked to load/store regs. If the regs regs are on the stack reload
-;; try other insns and not stick to movqi_reg_reg, unless there were spilled
-;; pseudos in which case 'm' constraints pertain.
-;; The same applies to the movhi variants.
-;;
-;; Notice, that T bit is not allowed as a mov src operand here. This is to
-;; avoid things like (set (reg:QI) (subreg:QI (reg:SI T_REG) 0)), which
-;; introduces zero extensions after T bit stores and redundant reg copies.
-;;
-;; FIXME: We can't use 'arith_reg_operand' (which disallows T_REG) as a
-;; predicate for the mov src operand because reload will have trouble
-;; reloading MAC subregs otherwise. For that probably special patterns
-;; would be required.
-(define_insn "*mov<mode>_reg_reg"
- [(set (match_operand:QIHI 0 "arith_reg_dest" "=r,m,*z")
- (match_operand:QIHI 1 "register_operand" "r,*z,m"))]
- "TARGET_SH1 && !t_reg_operand (operands[1], VOIDmode)"
- "@
- mov %1,%0
- mov.<bw> %1,%0
- mov.<bw> %1,%0"
- [(set_attr "type" "move,store,load")])
-
+;; Specifying the displacement addressing load / store patterns separately
+;; before the generic movqi / movhi pattern allows controlling the order
+;; in which load / store insns are selected in a more fine grained way.
;; FIXME: The non-SH2A and SH2A variants should be combined by adding
;; "enabled" attribute as it is done in other targets.
(define_insn "*mov<mode>_store_mem_disp04"
@@ -6908,38 +6884,44 @@ label:
[(set_attr "type" "load")
(set_attr "length" "2,2,4")])
-;; The m constraints basically allow any kind of addresses to be used with any
-;; source/target register as the other operand. This is not true for
-;; displacement addressing modes on anything but SH2A. That's why the
-;; specialized load/store insns are specified above.
-(define_insn "*movqi"
- [(set (match_operand:QI 0 "general_movdst_operand" "=r,r,m,r,l")
- (match_operand:QI 1 "general_movsrc_operand" "i,m,r,l,r"))]
+;; The order of the constraint alternatives is important here.
+;; Q/r has to come first, otherwise PC relative loads might wrongly get
+;; placed into delay slots. Since there is no QImode PC relative load, the
+;; Q constraint and general_movsrc_operand will reject it for QImode.
+;; The Snd alternatives should come before Sdd in order to avoid a preference
+;; of using r0 als the register operand for addressing modes other than
+;; displacement addressing.
+;; The Sdd alternatives allow only r0 as register operand, even though on
+;; SH2A any register could be allowed by switching to a 32 bit insn.
+;; Generally sticking to the r0 is preferrable, since it generates smaller
+;; code. Obvious r0 reloads can then be eliminated with a peephole on SH2A.
+(define_insn "*mov<mode>"
+ [(set (match_operand:QIHI 0 "general_movdst_operand"
+ "=r,r,r,Snd,r, Sdd,z, r,l")
+ (match_operand:QIHI 1 "general_movsrc_operand"
+ "Q,r,i,r, Snd,z, Sdd,l,r"))]
"TARGET_SH1
- && (arith_reg_operand (operands[0], QImode)
- || arith_reg_operand (operands[1], QImode))"
+ && (arith_reg_operand (operands[0], <MODE>mode)
+ || arith_reg_operand (operands[1], <MODE>mode))"
"@
+ mov.<bw> %1,%0
mov %1,%0
- mov.b %1,%0
- mov.b %1,%0
- sts %1,%0
- lds %1,%0"
- [(set_attr "type" "movi8,load,store,prget,prset")])
-
-(define_insn "*movhi"
- [(set (match_operand:HI 0 "general_movdst_operand" "=r,r,r,m,r,l")
- (match_operand:HI 1 "general_movsrc_operand" "Q,i,m,r,l,r"))]
- "TARGET_SH1
- && (arith_reg_operand (operands[0], HImode)
- || arith_reg_operand (operands[1], HImode))"
- "@
- mov.w %1,%0
mov %1,%0
- mov.w %1,%0
- mov.w %1,%0
+ mov.<bw> %1,%0
+ mov.<bw> %1,%0
+ mov.<bw> %1,%0
+ mov.<bw> %1,%0
sts %1,%0
lds %1,%0"
- [(set_attr "type" "pcload,movi8,load,store,prget,prset")])
+ [(set_attr "type" "pcload,move,movi8,store,load,store,load,prget,prset")
+ (set (attr "length")
+ (cond [(and (match_operand 0 "displacement_mem_operand")
+ (not (match_operand 0 "short_displacement_mem_operand")))
+ (const_int 4)
+ (and (match_operand 1 "displacement_mem_operand")
+ (not (match_operand 1 "short_displacement_mem_operand")))
+ (const_int 4)]
+ (const_int 2)))])
(define_insn "*movqi_media"
[(set (match_operand:QI 0 "general_movdst_operand" "=r,r,r,m")
@@ -8427,11 +8409,9 @@ label:
while (true)
{
- /* It's not safe to go beyond the current basic block after reload. */
set_of_reg s1 = sh_find_set_of_reg (tested_reg, s0.insn,
- reload_completed
- ? prev_nonnote_insn_bb
- : prev_nonnote_insn);
+ prev_nonnote_insn);
+
if (s1.set_src == NULL_RTX)
break;
@@ -8454,8 +8434,18 @@ label:
T bit. Notice that some T bit stores such as negc also modify
the T bit. */
if (modified_between_p (get_t_reg_rtx (), s1.insn, testing_insn)
- || modified_in_p (get_t_reg_rtx (), s1.insn))
+ || modified_in_p (get_t_reg_rtx (), s1.insn)
+ || !no_labels_between_p (s1.insn, testing_insn))
operands[2] = NULL_RTX;
+ else
+ {
+ /* If the insn that sets the tested reg has a REG_DEAD note on
+ the T bit remove that note since we're extending the usage
+ of the T bit. */
+ rtx n = find_regno_note (s1.insn, REG_DEAD, T_REG);
+ if (n != NULL_RTX)
+ remove_note (s1.insn, n);
+ }
break;
}
diff --git a/gcc-4.8/gcc/config/sh/sh.opt b/gcc-4.8/gcc/config/sh/sh.opt
index c314e144c..8a6788eb3 100644
--- a/gcc-4.8/gcc/config/sh/sh.opt
+++ b/gcc-4.8/gcc/config/sh/sh.opt
@@ -21,7 +21,7 @@
;; Used for various architecture options.
Mask(SH_E)
-;; Set if the default precision of th FPU is single.
+;; Set if the default precision of the FPU is single.
Mask(FPU_SINGLE)
;; Set if the a double-precision FPU is present but is restricted to
diff --git a/gcc-4.8/gcc/config/sparc/leon.md b/gcc-4.8/gcc/config/sparc/leon.md
index 60815079d..b511397fe 100644
--- a/gcc-4.8/gcc/config/sparc/leon.md
+++ b/gcc-4.8/gcc/config/sparc/leon.md
@@ -17,40 +17,48 @@
;; along with GCC; see the file COPYING3. If not see
;; <http://www.gnu.org/licenses/>.
+;; Leon is a single-issue processor.
(define_automaton "leon")
-(define_cpu_unit "leon_memory, leon_fpalu" "leon")
-(define_cpu_unit "leon_fpmds" "leon")
-(define_cpu_unit "write_buf" "leon")
+(define_cpu_unit "leon_memory" "leon")
(define_insn_reservation "leon_load" 1
- (and (eq_attr "cpu" "leon")
- (eq_attr "type" "load,sload,fpload"))
+ (and (eq_attr "cpu" "leon") (eq_attr "type" "load,sload"))
"leon_memory")
-(define_insn_reservation "leon_store" 1
- (and (eq_attr "cpu" "leon")
- (eq_attr "type" "store,fpstore"))
- "leon_memory+write_buf")
-
-(define_insn_reservation "leon_fp_alu" 1
- (and (eq_attr "cpu" "leon")
- (eq_attr "type" "fp,fpmove"))
- "leon_fpalu, nothing")
-
-(define_insn_reservation "leon_fp_mult" 1
- (and (eq_attr "cpu" "leon")
- (eq_attr "type" "fpmul"))
- "leon_fpmds, nothing")
-
-(define_insn_reservation "leon_fp_div" 16
- (and (eq_attr "cpu" "leon")
- (eq_attr "type" "fpdivs,fpdivd"))
- "leon_fpmds, nothing*15")
-
-(define_insn_reservation "leon_fp_sqrt" 23
- (and (eq_attr "cpu" "leon")
- (eq_attr "type" "fpsqrts,fpsqrtd"))
- "leon_fpmds, nothing*21")
+;; Use a double reservation to work around the load pipeline hazard on UT699.
+(define_insn_reservation "leon3_load" 1
+ (and (eq_attr "cpu" "leon3") (eq_attr "type" "load,sload"))
+ "leon_memory*2")
+(define_insn_reservation "leon_store" 2
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "store"))
+ "leon_memory*2")
+
+;; This describes Gaisler Research's FPU
+
+(define_automaton "grfpu")
+
+(define_cpu_unit "grfpu_alu" "grfpu")
+(define_cpu_unit "grfpu_ds" "grfpu")
+
+(define_insn_reservation "leon_fp_alu" 4
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fp,fpcmp,fpmul"))
+ "grfpu_alu, nothing*3")
+
+(define_insn_reservation "leon_fp_divs" 16
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpdivs"))
+ "grfpu_ds*14, nothing*2")
+
+(define_insn_reservation "leon_fp_divd" 17
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpdivd"))
+ "grfpu_ds*15, nothing*2")
+
+(define_insn_reservation "leon_fp_sqrts" 24
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpsqrts"))
+ "grfpu_ds*22, nothing*2")
+
+(define_insn_reservation "leon_fp_sqrtd" 25
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpsqrtd"))
+ "grfpu_ds*23, nothing*2")
diff --git a/gcc-4.8/gcc/config/sparc/sparc-opts.h b/gcc-4.8/gcc/config/sparc/sparc-opts.h
index 72791772e..b5e9761af 100644
--- a/gcc-4.8/gcc/config/sparc/sparc-opts.h
+++ b/gcc-4.8/gcc/config/sparc/sparc-opts.h
@@ -30,6 +30,7 @@ enum processor_type {
PROCESSOR_SUPERSPARC,
PROCESSOR_HYPERSPARC,
PROCESSOR_LEON,
+ PROCESSOR_LEON3,
PROCESSOR_SPARCLITE,
PROCESSOR_F930,
PROCESSOR_F934,
diff --git a/gcc-4.8/gcc/config/sparc/sparc-protos.h b/gcc-4.8/gcc/config/sparc/sparc-protos.h
index a0c1a7a05..adaeb6d9d 100644
--- a/gcc-4.8/gcc/config/sparc/sparc-protos.h
+++ b/gcc-4.8/gcc/config/sparc/sparc-protos.h
@@ -69,7 +69,6 @@ extern bool sparc_expand_move (enum machine_mode, rtx *);
extern void sparc_emit_set_symbolic_const64 (rtx, rtx, rtx);
extern int sparc_splitdi_legitimate (rtx, rtx);
extern int sparc_split_regreg_legitimate (rtx, rtx);
-extern int sparc_absnegfloat_split_legitimate (rtx, rtx);
extern const char *output_ubranch (rtx, rtx);
extern const char *output_cbranch (rtx, rtx, int, int, int, rtx);
extern const char *output_return (rtx);
@@ -84,9 +83,9 @@ extern void emit_conditional_branch_insn (rtx []);
extern int mems_ok_for_ldd_peep (rtx, rtx, rtx);
extern int empty_delay_slot (rtx);
extern int emit_cbcond_nop (rtx);
+extern int eligible_for_call_delay (rtx);
extern int eligible_for_return_delay (rtx);
extern int eligible_for_sibcall_delay (rtx);
-extern int tls_call_delay (rtx);
extern int emit_move_sequence (rtx, enum machine_mode);
extern int fp_sethi_p (rtx);
extern int fp_mov_p (rtx);
diff --git a/gcc-4.8/gcc/config/sparc/sparc.c b/gcc-4.8/gcc/config/sparc/sparc.c
index 7e87b4716..25b7e53f2 100644
--- a/gcc-4.8/gcc/config/sparc/sparc.c
+++ b/gcc-4.8/gcc/config/sparc/sparc.c
@@ -52,6 +52,7 @@ along with GCC; see the file COPYING3. If not see
#include "params.h"
#include "df.h"
#include "opts.h"
+#include "tree-pass.h"
/* Processor costs */
@@ -226,6 +227,30 @@ struct processor_costs leon_costs = {
};
static const
+struct processor_costs leon3_costs = {
+ COSTS_N_INSNS (1), /* int load */
+ COSTS_N_INSNS (1), /* int signed load */
+ COSTS_N_INSNS (1), /* int zeroed load */
+ COSTS_N_INSNS (1), /* float load */
+ COSTS_N_INSNS (1), /* fmov, fneg, fabs */
+ COSTS_N_INSNS (1), /* fadd, fsub */
+ COSTS_N_INSNS (1), /* fcmp */
+ COSTS_N_INSNS (1), /* fmov, fmovr */
+ COSTS_N_INSNS (1), /* fmul */
+ COSTS_N_INSNS (14), /* fdivs */
+ COSTS_N_INSNS (15), /* fdivd */
+ COSTS_N_INSNS (22), /* fsqrts */
+ COSTS_N_INSNS (23), /* fsqrtd */
+ COSTS_N_INSNS (5), /* imul */
+ COSTS_N_INSNS (5), /* imulX */
+ 0, /* imul bit factor */
+ COSTS_N_INSNS (35), /* idiv */
+ COSTS_N_INSNS (35), /* idivX */
+ COSTS_N_INSNS (1), /* movcc/movr */
+ 0, /* shift penalty */
+};
+
+static const
struct processor_costs sparclet_costs = {
COSTS_N_INSNS (3), /* int load */
COSTS_N_INSNS (3), /* int signed load */
@@ -538,7 +563,6 @@ static void sparc_output_mi_thunk (FILE *, tree, HOST_WIDE_INT,
HOST_WIDE_INT, tree);
static bool sparc_can_output_mi_thunk (const_tree, HOST_WIDE_INT,
HOST_WIDE_INT, const_tree);
-static void sparc_reorg (void);
static struct machine_function * sparc_init_machine_status (void);
static bool sparc_cannot_force_const_mem (enum machine_mode, rtx);
static rtx sparc_tls_get_addr (void);
@@ -680,9 +704,6 @@ char sparc_hard_reg_printed[8];
#undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
#define TARGET_ASM_CAN_OUTPUT_MI_THUNK sparc_can_output_mi_thunk
-#undef TARGET_MACHINE_DEPENDENT_REORG
-#define TARGET_MACHINE_DEPENDENT_REORG sparc_reorg
-
#undef TARGET_RTX_COSTS
#define TARGET_RTX_COSTS sparc_rtx_costs
#undef TARGET_ADDRESS_COST
@@ -804,6 +825,306 @@ char sparc_hard_reg_printed[8];
struct gcc_target targetm = TARGET_INITIALIZER;
+/* Return the memory reference contained in X if any, zero otherwise. */
+
+static rtx
+mem_ref (rtx x)
+{
+ if (GET_CODE (x) == SIGN_EXTEND || GET_CODE (x) == ZERO_EXTEND)
+ x = XEXP (x, 0);
+
+ if (MEM_P (x))
+ return x;
+
+ return NULL_RTX;
+}
+
+/* We use a machine specific pass to enable workarounds for errata.
+ We need to have the (essentially) final form of the insn stream in order
+ to properly detect the various hazards. Therefore, this machine specific
+ pass runs as late as possible. The pass is inserted in the pass pipeline
+ at the end of sparc_option_override. */
+
+static bool
+sparc_gate_work_around_errata (void)
+{
+ /* The only errata we handle are those of the AT697F and UT699. */
+ return sparc_fix_at697f != 0 || sparc_fix_ut699 != 0;
+}
+
+static unsigned int
+sparc_do_work_around_errata (void)
+{
+ rtx insn, next;
+
+ /* Force all instructions to be split into their final form. */
+ split_all_insns_noflow ();
+
+ /* Now look for specific patterns in the insn stream. */
+ for (insn = get_insns (); insn; insn = next)
+ {
+ bool insert_nop = false;
+ rtx set;
+
+ /* Look into the instruction in a delay slot. */
+ if (NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE)
+ insn = XVECEXP (PATTERN (insn), 0, 1);
+
+ /* Look for a single-word load into an odd-numbered FP register. */
+ if (sparc_fix_at697f
+ && NONJUMP_INSN_P (insn)
+ && (set = single_set (insn)) != NULL_RTX
+ && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
+ && MEM_P (SET_SRC (set))
+ && REG_P (SET_DEST (set))
+ && REGNO (SET_DEST (set)) > 31
+ && REGNO (SET_DEST (set)) % 2 != 0)
+ {
+ /* The wrong dependency is on the enclosing double register. */
+ const unsigned int x = REGNO (SET_DEST (set)) - 1;
+ unsigned int src1, src2, dest;
+ int code;
+
+ next = next_active_insn (insn);
+ if (!next)
+ break;
+ /* If the insn is a branch, then it cannot be problematic. */
+ if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
+ continue;
+
+ extract_insn (next);
+ code = INSN_CODE (next);
+
+ switch (code)
+ {
+ case CODE_FOR_adddf3:
+ case CODE_FOR_subdf3:
+ case CODE_FOR_muldf3:
+ case CODE_FOR_divdf3:
+ dest = REGNO (recog_data.operand[0]);
+ src1 = REGNO (recog_data.operand[1]);
+ src2 = REGNO (recog_data.operand[2]);
+ if (src1 != src2)
+ {
+ /* Case [1-4]:
+ ld [address], %fx+1
+ FPOPd %f{x,y}, %f{y,x}, %f{x,y} */
+ if ((src1 == x || src2 == x)
+ && (dest == src1 || dest == src2))
+ insert_nop = true;
+ }
+ else
+ {
+ /* Case 5:
+ ld [address], %fx+1
+ FPOPd %fx, %fx, %fx */
+ if (src1 == x
+ && dest == src1
+ && (code == CODE_FOR_adddf3 || code == CODE_FOR_muldf3))
+ insert_nop = true;
+ }
+ break;
+
+ case CODE_FOR_sqrtdf2:
+ dest = REGNO (recog_data.operand[0]);
+ src1 = REGNO (recog_data.operand[1]);
+ /* Case 6:
+ ld [address], %fx+1
+ fsqrtd %fx, %fx */
+ if (src1 == x && dest == src1)
+ insert_nop = true;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ /* Look for a single-word load into an integer register. */
+ else if (sparc_fix_ut699
+ && NONJUMP_INSN_P (insn)
+ && (set = single_set (insn)) != NULL_RTX
+ && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) <= 4
+ && mem_ref (SET_SRC (set)) != NULL_RTX
+ && REG_P (SET_DEST (set))
+ && REGNO (SET_DEST (set)) < 32)
+ {
+ /* There is no problem if the second memory access has a data
+ dependency on the first single-cycle load. */
+ rtx x = SET_DEST (set);
+
+ next = next_active_insn (insn);
+ if (!next)
+ break;
+ /* If the insn is a branch, then it cannot be problematic. */
+ if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
+ continue;
+
+ /* Look for a second memory access to/from an integer register. */
+ if ((set = single_set (next)) != NULL_RTX)
+ {
+ rtx src = SET_SRC (set);
+ rtx dest = SET_DEST (set);
+ rtx mem;
+
+ /* LDD is affected. */
+ if ((mem = mem_ref (src)) != NULL_RTX
+ && REG_P (dest)
+ && REGNO (dest) < 32
+ && !reg_mentioned_p (x, XEXP (mem, 0)))
+ insert_nop = true;
+
+ /* STD is *not* affected. */
+ else if (MEM_P (dest)
+ && GET_MODE_SIZE (GET_MODE (dest)) <= 4
+ && (src == CONST0_RTX (GET_MODE (dest))
+ || (REG_P (src)
+ && REGNO (src) < 32
+ && REGNO (src) != REGNO (x)))
+ && !reg_mentioned_p (x, XEXP (dest, 0)))
+ insert_nop = true;
+ }
+ }
+
+ /* Look for a single-word load/operation into an FP register. */
+ else if (sparc_fix_ut699
+ && NONJUMP_INSN_P (insn)
+ && (set = single_set (insn)) != NULL_RTX
+ && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
+ && REG_P (SET_DEST (set))
+ && REGNO (SET_DEST (set)) > 31)
+ {
+ /* Number of instructions in the problematic window. */
+ const int n_insns = 4;
+ /* The problematic combination is with the sibling FP register. */
+ const unsigned int x = REGNO (SET_DEST (set));
+ const unsigned int y = x ^ 1;
+ rtx after;
+ int i;
+
+ next = next_active_insn (insn);
+ if (!next)
+ break;
+ /* If the insn is a branch, then it cannot be problematic. */
+ if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
+ continue;
+
+ /* Look for a second load/operation into the sibling FP register. */
+ if (!((set = single_set (next)) != NULL_RTX
+ && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
+ && REG_P (SET_DEST (set))
+ && REGNO (SET_DEST (set)) == y))
+ continue;
+
+ /* Look for a (possible) store from the FP register in the next N
+ instructions, but bail out if it is again modified or if there
+ is a store from the sibling FP register before this store. */
+ for (after = next, i = 0; i < n_insns; i++)
+ {
+ bool branch_p;
+
+ after = next_active_insn (after);
+ if (!after)
+ break;
+
+ /* This is a branch with an empty delay slot. */
+ if (!NONJUMP_INSN_P (after))
+ {
+ if (++i == n_insns)
+ break;
+ branch_p = true;
+ after = NULL_RTX;
+ }
+ /* This is a branch with a filled delay slot. */
+ else if (GET_CODE (PATTERN (after)) == SEQUENCE)
+ {
+ if (++i == n_insns)
+ break;
+ branch_p = true;
+ after = XVECEXP (PATTERN (after), 0, 1);
+ }
+ /* This is a regular instruction. */
+ else
+ branch_p = false;
+
+ if (after && (set = single_set (after)) != NULL_RTX)
+ {
+ const rtx src = SET_SRC (set);
+ const rtx dest = SET_DEST (set);
+ const unsigned int size = GET_MODE_SIZE (GET_MODE (dest));
+
+ /* If the FP register is again modified before the store,
+ then the store isn't affected. */
+ if (REG_P (dest)
+ && (REGNO (dest) == x
+ || (REGNO (dest) == y && size == 8)))
+ break;
+
+ if (MEM_P (dest) && REG_P (src))
+ {
+ /* If there is a store from the sibling FP register
+ before the store, then the store is not affected. */
+ if (REGNO (src) == y || (REGNO (src) == x && size == 8))
+ break;
+
+ /* Otherwise, the store is affected. */
+ if (REGNO (src) == x && size == 4)
+ {
+ insert_nop = true;
+ break;
+ }
+ }
+ }
+
+ /* If we have a branch in the first M instructions, then we
+ cannot see the (M+2)th instruction so we play safe. */
+ if (branch_p && i <= (n_insns - 2))
+ {
+ insert_nop = true;
+ break;
+ }
+ }
+ }
+
+ else
+ next = NEXT_INSN (insn);
+
+ if (insert_nop)
+ emit_insn_before (gen_nop (), next);
+ }
+
+ return 0;
+}
+
+struct rtl_opt_pass pass_work_around_errata =
+{
+ {
+ RTL_PASS,
+ "errata", /* name */
+ OPTGROUP_NONE, /* optinfo_flags */
+ sparc_gate_work_around_errata, /* gate */
+ sparc_do_work_around_errata, /* execute */
+ NULL, /* sub */
+ NULL, /* next */
+ 0, /* static_pass_number */
+ TV_MACH_DEP, /* tv_id */
+ 0, /* properties_required */
+ 0, /* properties_provided */
+ 0, /* properties_destroyed */
+ 0, /* todo_flags_start */
+ TODO_verify_rtl_sharing, /* todo_flags_finish */
+ }
+};
+
+struct register_pass_info insert_pass_work_around_errata =
+{
+ &pass_work_around_errata.pass, /* pass */
+ "dbr", /* reference_pass_name */
+ 1, /* ref_pass_instance_number */
+ PASS_POS_INSERT_AFTER /* po_op */
+};
+
+/* Helpers for TARGET_DEBUG_OPTIONS. */
static void
dump_target_flag_bits (const int flags)
{
@@ -888,6 +1209,7 @@ sparc_option_override (void)
{ TARGET_CPU_supersparc, PROCESSOR_SUPERSPARC },
{ TARGET_CPU_hypersparc, PROCESSOR_HYPERSPARC },
{ TARGET_CPU_leon, PROCESSOR_LEON },
+ { TARGET_CPU_leon3, PROCESSOR_LEON3 },
{ TARGET_CPU_sparclite, PROCESSOR_F930 },
{ TARGET_CPU_sparclite86x, PROCESSOR_SPARCLITE86X },
{ TARGET_CPU_sparclet, PROCESSOR_TSC701 },
@@ -902,7 +1224,7 @@ sparc_option_override (void)
};
const struct cpu_default *def;
/* Table of values for -m{cpu,tune}=. This must match the order of
- the PROCESSOR_* enumeration. */
+ the enum processor_type in sparc-opts.h. */
static struct cpu_table {
const char *const name;
const int disable;
@@ -914,8 +1236,8 @@ sparc_option_override (void)
/* TI TMS390Z55 supersparc */
{ "supersparc", MASK_ISA, MASK_V8 },
{ "hypersparc", MASK_ISA, MASK_V8|MASK_FPU },
- /* LEON */
- { "leon", MASK_ISA, MASK_V8|MASK_FPU },
+ { "leon", MASK_ISA, MASK_V8|MASK_LEON|MASK_FPU },
+ { "leon3", MASK_ISA, MASK_V8|MASK_LEON3|MASK_FPU },
{ "sparclite", MASK_ISA, MASK_SPARCLITE },
/* The Fujitsu MB86930 is the original sparclite chip, with no FPU. */
{ "f930", MASK_ISA|MASK_FPU, MASK_SPARCLITE },
@@ -1075,6 +1397,9 @@ sparc_option_override (void)
#ifndef HAVE_AS_SPARC4
& ~MASK_CBCOND
#endif
+#ifndef HAVE_AS_LEON
+ & ~(MASK_LEON | MASK_LEON3)
+#endif
);
/* If -mfpu or -mno-fpu was explicitly used, don't override with
@@ -1164,6 +1489,9 @@ sparc_option_override (void)
case PROCESSOR_LEON:
sparc_costs = &leon_costs;
break;
+ case PROCESSOR_LEON3:
+ sparc_costs = &leon3_costs;
+ break;
case PROCESSOR_SPARCLET:
case PROCESSOR_TSC701:
sparc_costs = &sparclet_costs;
@@ -1200,6 +1528,10 @@ sparc_option_override (void)
/* Choose the most relaxed model for the processor. */
else if (TARGET_V9)
sparc_memory_model = SMM_RMO;
+ else if (TARGET_LEON3)
+ sparc_memory_model = SMM_TSO;
+ else if (TARGET_LEON)
+ sparc_memory_model = SMM_SC;
else if (TARGET_V8)
sparc_memory_model = SMM_PSO;
else
@@ -1241,6 +1573,13 @@ sparc_option_override (void)
pessimizes for double floating-point registers. */
if (!global_options_set.x_flag_ira_share_save_slots)
flag_ira_share_save_slots = 0;
+
+ /* We register a machine specific pass to work around errata, if any.
+ The pass mut be scheduled as late as possible so that we have the
+ (essentially) final form of the insn stream to work on.
+ Registering the pass must be done at start up. It's convenient to
+ do it here. */
+ register_pass (&insert_pass_work_around_errata);
}
/* Miscellaneous utilities. */
@@ -3090,10 +3429,13 @@ emit_cbcond_nop (rtx insn)
/* Return nonzero if TRIAL can go into the call delay slot. */
int
-tls_call_delay (rtx trial)
+eligible_for_call_delay (rtx trial)
{
rtx pat;
+ if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
+ return 0;
+
/* Binutils allows
call __tls_get_addr, %tgd_call (foo)
add %l7, %o0, %o0, %tgd_add (foo)
@@ -3175,11 +3517,7 @@ eligible_for_restore_insn (rtx trial, bool return_p)
/* If we have the 'return' instruction, anything that does not use
local or output registers and can go into a delay slot wins. */
- else if (return_p
- && TARGET_V9
- && !epilogue_renumber (&pat, 1)
- && get_attr_in_uncond_branch_delay (trial)
- == IN_UNCOND_BRANCH_DELAY_TRUE)
+ else if (return_p && TARGET_V9 && !epilogue_renumber (&pat, 1))
return 1;
/* The 'restore src1,src2,dest' pattern for SImode. */
@@ -3222,21 +3560,20 @@ eligible_for_return_delay (rtx trial)
int regno;
rtx pat;
- if (GET_CODE (trial) != INSN)
- return 0;
-
- if (get_attr_length (trial) != 1)
- return 0;
-
/* If the function uses __builtin_eh_return, the eh_return machinery
occupies the delay slot. */
if (crtl->calls_eh_return)
return 0;
+ if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
+ return 0;
+
/* In the case of a leaf or flat function, anything can go into the slot. */
if (sparc_leaf_function_p || TARGET_FLAT)
- return
- get_attr_in_uncond_branch_delay (trial) == IN_UNCOND_BRANCH_DELAY_TRUE;
+ return 1;
+
+ if (!NONJUMP_INSN_P (trial))
+ return 0;
pat = PATTERN (trial);
if (GET_CODE (pat) == PARALLEL)
@@ -3256,9 +3593,7 @@ eligible_for_return_delay (rtx trial)
if (regno >= 8 && regno < 24)
return 0;
}
- return !epilogue_renumber (&pat, 1)
- && (get_attr_in_uncond_branch_delay (trial)
- == IN_UNCOND_BRANCH_DELAY_TRUE);
+ return !epilogue_renumber (&pat, 1);
}
if (GET_CODE (pat) != SET)
@@ -3278,10 +3613,7 @@ eligible_for_return_delay (rtx trial)
instruction, it can probably go in. But restore will not work
with FP_REGS. */
if (! SPARC_INT_REG_P (regno))
- return (TARGET_V9
- && !epilogue_renumber (&pat, 1)
- && get_attr_in_uncond_branch_delay (trial)
- == IN_UNCOND_BRANCH_DELAY_TRUE);
+ return TARGET_V9 && !epilogue_renumber (&pat, 1);
return eligible_for_restore_insn (trial, true);
}
@@ -3293,10 +3625,10 @@ eligible_for_sibcall_delay (rtx trial)
{
rtx pat;
- if (GET_CODE (trial) != INSN || GET_CODE (PATTERN (trial)) != SET)
+ if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
return 0;
- if (get_attr_length (trial) != 1)
+ if (!NONJUMP_INSN_P (trial))
return 0;
pat = PATTERN (trial);
@@ -3315,6 +3647,9 @@ eligible_for_sibcall_delay (rtx trial)
return 1;
}
+ if (GET_CODE (pat) != SET)
+ return 0;
+
/* Otherwise, only operations which can be done in tandem with
a `restore' insn can go into the delay slot. */
if (GET_CODE (SET_DEST (pat)) != REG
@@ -8134,22 +8469,6 @@ sparc_split_regreg_legitimate (rtx reg1, rtx reg2)
return 0;
}
-/* Return 1 if x and y are some kind of REG and they refer to
- different hard registers. This test is guaranteed to be
- run after reload. */
-
-int
-sparc_absnegfloat_split_legitimate (rtx x, rtx y)
-{
- if (GET_CODE (x) != REG)
- return 0;
- if (GET_CODE (y) != REG)
- return 0;
- if (REGNO (x) == REGNO (y))
- return 0;
- return 1;
-}
-
/* Return 1 if REGNO (reg1) is even and REGNO (reg1) == REGNO (reg2) - 1.
This makes them candidates for using ldd and std insns.
@@ -10355,7 +10674,8 @@ sparc_fold_builtin (tree fndecl, int n_args ATTRIBUTE_UNUSED,
tmp = e0.add_with_sign (tmp, false, &add1_ovf);
if (tmp.is_negative ())
tmp = tmp.neg_with_overflow (&neg2_ovf);
-
+ else
+ neg2_ovf = false;
result = result.add_with_sign (tmp, false, &add2_ovf);
overflow |= neg1_ovf | neg2_ovf | add1_ovf | add2_ovf;
}
@@ -10897,107 +11217,6 @@ sparc_can_output_mi_thunk (const_tree thunk_fndecl ATTRIBUTE_UNUSED,
return (vcall_offset >= -32768 || ! fixed_regs[5]);
}
-/* We use the machine specific reorg pass to enable workarounds for errata. */
-
-static void
-sparc_reorg (void)
-{
- rtx insn, next;
-
- /* The only erratum we handle for now is that of the AT697F processor. */
- if (!sparc_fix_at697f)
- return;
-
- /* We need to have the (essentially) final form of the insn stream in order
- to properly detect the various hazards. Run delay slot scheduling. */
- if (optimize > 0 && flag_delayed_branch)
- {
- cleanup_barriers ();
- dbr_schedule (get_insns ());
- }
-
- /* Now look for specific patterns in the insn stream. */
- for (insn = get_insns (); insn; insn = next)
- {
- bool insert_nop = false;
- rtx set;
-
- /* Look for a single-word load into an odd-numbered FP register. */
- if (NONJUMP_INSN_P (insn)
- && (set = single_set (insn)) != NULL_RTX
- && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
- && MEM_P (SET_SRC (set))
- && REG_P (SET_DEST (set))
- && REGNO (SET_DEST (set)) > 31
- && REGNO (SET_DEST (set)) % 2 != 0)
- {
- /* The wrong dependency is on the enclosing double register. */
- unsigned int x = REGNO (SET_DEST (set)) - 1;
- unsigned int src1, src2, dest;
- int code;
-
- /* If the insn has a delay slot, then it cannot be problematic. */
- next = next_active_insn (insn);
- if (NONJUMP_INSN_P (next) && GET_CODE (PATTERN (next)) == SEQUENCE)
- code = -1;
- else
- {
- extract_insn (next);
- code = INSN_CODE (next);
- }
-
- switch (code)
- {
- case CODE_FOR_adddf3:
- case CODE_FOR_subdf3:
- case CODE_FOR_muldf3:
- case CODE_FOR_divdf3:
- dest = REGNO (recog_data.operand[0]);
- src1 = REGNO (recog_data.operand[1]);
- src2 = REGNO (recog_data.operand[2]);
- if (src1 != src2)
- {
- /* Case [1-4]:
- ld [address], %fx+1
- FPOPd %f{x,y}, %f{y,x}, %f{x,y} */
- if ((src1 == x || src2 == x)
- && (dest == src1 || dest == src2))
- insert_nop = true;
- }
- else
- {
- /* Case 5:
- ld [address], %fx+1
- FPOPd %fx, %fx, %fx */
- if (src1 == x
- && dest == src1
- && (code == CODE_FOR_adddf3 || code == CODE_FOR_muldf3))
- insert_nop = true;
- }
- break;
-
- case CODE_FOR_sqrtdf2:
- dest = REGNO (recog_data.operand[0]);
- src1 = REGNO (recog_data.operand[1]);
- /* Case 6:
- ld [address], %fx+1
- fsqrtd %fx, %fx */
- if (src1 == x && dest == src1)
- insert_nop = true;
- break;
-
- default:
- break;
- }
- }
- else
- next = NEXT_INSN (insn);
-
- if (insert_nop)
- emit_insn_after (gen_nop (), insn);
- }
-}
-
/* How to allocate a 'struct machine_function'. */
static struct machine_function *
diff --git a/gcc-4.8/gcc/config/sparc/sparc.h b/gcc-4.8/gcc/config/sparc/sparc.h
index c6122c115..d96c1b6b4 100644
--- a/gcc-4.8/gcc/config/sparc/sparc.h
+++ b/gcc-4.8/gcc/config/sparc/sparc.h
@@ -136,21 +136,22 @@ extern enum cmodel sparc_cmodel;
#define TARGET_CPU_supersparc 2
#define TARGET_CPU_hypersparc 3
#define TARGET_CPU_leon 4
-#define TARGET_CPU_sparclite 5
-#define TARGET_CPU_f930 5 /* alias */
-#define TARGET_CPU_f934 5 /* alias */
-#define TARGET_CPU_sparclite86x 6
-#define TARGET_CPU_sparclet 7
-#define TARGET_CPU_tsc701 7 /* alias */
-#define TARGET_CPU_v9 8 /* generic v9 implementation */
-#define TARGET_CPU_sparcv9 8 /* alias */
-#define TARGET_CPU_sparc64 8 /* alias */
-#define TARGET_CPU_ultrasparc 9
-#define TARGET_CPU_ultrasparc3 10
-#define TARGET_CPU_niagara 11
-#define TARGET_CPU_niagara2 12
-#define TARGET_CPU_niagara3 13
-#define TARGET_CPU_niagara4 14
+#define TARGET_CPU_leon3 5
+#define TARGET_CPU_sparclite 6
+#define TARGET_CPU_f930 6 /* alias */
+#define TARGET_CPU_f934 6 /* alias */
+#define TARGET_CPU_sparclite86x 7
+#define TARGET_CPU_sparclet 8
+#define TARGET_CPU_tsc701 8 /* alias */
+#define TARGET_CPU_v9 9 /* generic v9 implementation */
+#define TARGET_CPU_sparcv9 9 /* alias */
+#define TARGET_CPU_sparc64 9 /* alias */
+#define TARGET_CPU_ultrasparc 10
+#define TARGET_CPU_ultrasparc3 11
+#define TARGET_CPU_niagara 12
+#define TARGET_CPU_niagara2 13
+#define TARGET_CPU_niagara3 14
+#define TARGET_CPU_niagara4 15
#if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \
|| TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc \
@@ -232,9 +233,10 @@ extern enum cmodel sparc_cmodel;
#define ASM_CPU32_DEFAULT_SPEC ""
#endif
-#if TARGET_CPU_DEFAULT == TARGET_CPU_leon
+#if TARGET_CPU_DEFAULT == TARGET_CPU_leon \
+ || TARGET_CPU_DEFAULT == TARGET_CPU_leon3
#define CPP_CPU32_DEFAULT_SPEC "-D__leon__ -D__sparc_v8__"
-#define ASM_CPU32_DEFAULT_SPEC ""
+#define ASM_CPU32_DEFAULT_SPEC AS_LEON_FLAG
#endif
#endif
@@ -282,6 +284,7 @@ extern enum cmodel sparc_cmodel;
%{mcpu=supersparc:-D__supersparc__ -D__sparc_v8__} \
%{mcpu=hypersparc:-D__hypersparc__ -D__sparc_v8__} \
%{mcpu=leon:-D__leon__ -D__sparc_v8__} \
+%{mcpu=leon3:-D__leon__ -D__sparc_v8__} \
%{mcpu=v9:-D__sparc_v9__} \
%{mcpu=ultrasparc:-D__sparc_v9__} \
%{mcpu=ultrasparc3:-D__sparc_v9__} \
@@ -329,7 +332,8 @@ extern enum cmodel sparc_cmodel;
%{mcpu=v8:-Av8} \
%{mcpu=supersparc:-Av8} \
%{mcpu=hypersparc:-Av8} \
-%{mcpu=leon:-Av8} \
+%{mcpu=leon:" AS_LEON_FLAG "} \
+%{mcpu=leon3:" AS_LEON_FLAG "} \
%{mv8plus:-Av8plus} \
%{mcpu=v9:-Av9} \
%{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
@@ -1754,6 +1758,12 @@ extern int sparc_indent_opcode;
#define AS_NIAGARA4_FLAG "-Av9" AS_NIAGARA3_FLAG
#endif
+#ifdef HAVE_AS_LEON
+#define AS_LEON_FLAG "-Aleon"
+#else
+#define AS_LEON_FLAG "-Av8"
+#endif
+
/* We use gcc _mcount for profiling. */
#define NO_PROFILE_COUNTERS 0
diff --git a/gcc-4.8/gcc/config/sparc/sparc.md b/gcc-4.8/gcc/config/sparc/sparc.md
index b60af4333..f380a414f 100644
--- a/gcc-4.8/gcc/config/sparc/sparc.md
+++ b/gcc-4.8/gcc/config/sparc/sparc.md
@@ -206,7 +206,7 @@
;; 'f' for all DF/TFmode values, including those that are specific to the v8.
;; Attribute for cpu type.
-;; These must match the values for enum processor_type in sparc.h.
+;; These must match the values of the enum processor_type in sparc-opts.h.
(define_attr "cpu"
"v7,
cypress,
@@ -214,6 +214,7 @@
supersparc,
hypersparc,
leon,
+ leon3,
sparclite,
f930,
f934,
@@ -284,7 +285,8 @@
(const_string "none"))
(define_attr "pic" "false,true"
- (symbol_ref "(flag_pic != 0 ? PIC_TRUE : PIC_FALSE)"))
+ (symbol_ref "(flag_pic != 0
+ ? PIC_TRUE : PIC_FALSE)"))
(define_attr "calls_alloca" "false,true"
(symbol_ref "(cfun->calls_alloca != 0
@@ -306,6 +308,10 @@
(symbol_ref "(TARGET_FLAT != 0
? FLAT_TRUE : FLAT_FALSE)"))
+(define_attr "fix_ut699" "false,true"
+ (symbol_ref "(sparc_fix_ut699 != 0
+ ? FIX_UT699_TRUE : FIX_UT699_FALSE)"))
+
;; Length (in # of insns).
;; Beware that setting a length greater or equal to 3 for conditional branches
;; has a side-effect (see output_cbranch and output_v9branch).
@@ -412,6 +418,10 @@
(define_attr "fptype" "single,double"
(const_string "single"))
+;; FP precision specific to the UT699.
+(define_attr "fptype_ut699" "none,single"
+ (const_string "none"))
+
;; UltraSPARC-III integer load type.
(define_attr "us3load_type" "2cycle,3cycle"
(const_string "2cycle"))
@@ -420,32 +430,18 @@
[(set_attr "length" "2")
(set_attr "type" "multi")])
-;; Attributes for instruction and branch scheduling
-(define_attr "tls_call_delay" "false,true"
- (symbol_ref "(tls_call_delay (insn)
- ? TLS_CALL_DELAY_TRUE : TLS_CALL_DELAY_FALSE)"))
-
+;; Attributes for branch scheduling
(define_attr "in_call_delay" "false,true"
- (cond [(eq_attr "type" "uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
- (const_string "false")
- (eq_attr "type" "load,fpload,store,fpstore")
- (if_then_else (eq_attr "length" "1")
- (const_string "true")
- (const_string "false"))]
- (if_then_else (and (eq_attr "length" "1")
- (eq_attr "tls_call_delay" "true"))
- (const_string "true")
- (const_string "false"))))
-
-(define_attr "eligible_for_sibcall_delay" "false,true"
+ (symbol_ref "(eligible_for_call_delay (insn)
+ ? IN_CALL_DELAY_TRUE : IN_CALL_DELAY_FALSE)"))
+
+(define_attr "in_sibcall_delay" "false,true"
(symbol_ref "(eligible_for_sibcall_delay (insn)
- ? ELIGIBLE_FOR_SIBCALL_DELAY_TRUE
- : ELIGIBLE_FOR_SIBCALL_DELAY_FALSE)"))
+ ? IN_SIBCALL_DELAY_TRUE : IN_SIBCALL_DELAY_FALSE)"))
-(define_attr "eligible_for_return_delay" "false,true"
+(define_attr "in_return_delay" "false,true"
(symbol_ref "(eligible_for_return_delay (insn)
- ? ELIGIBLE_FOR_RETURN_DELAY_TRUE
- : ELIGIBLE_FOR_RETURN_DELAY_FALSE)"))
+ ? IN_RETURN_DELAY_TRUE : IN_RETURN_DELAY_FALSE)"))
;; ??? !v9: Should implement the notion of predelay slots for floating-point
;; branches. This would allow us to remove the nop always inserted before
@@ -460,39 +456,33 @@
;; because it prevents us from moving back the final store of inner loops.
(define_attr "in_branch_delay" "false,true"
- (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
- (eq_attr "length" "1"))
- (const_string "true")
- (const_string "false")))
-
-(define_attr "in_uncond_branch_delay" "false,true"
- (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
- (eq_attr "length" "1"))
- (const_string "true")
- (const_string "false")))
-
-(define_attr "in_annul_branch_delay" "false,true"
- (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
- (eq_attr "length" "1"))
+ (cond [(eq_attr "type" "uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
+ (const_string "false")
+ (and (eq_attr "fix_ut699" "true") (eq_attr "type" "load,sload"))
+ (const_string "false")
+ (and (eq_attr "fix_ut699" "true")
+ (and (eq_attr "type" "fpload,fp,fpmove,fpmul,fpdivs,fpsqrts")
+ (ior (eq_attr "fptype" "single")
+ (eq_attr "fptype_ut699" "single"))))
+ (const_string "false")
+ (eq_attr "length" "1")
(const_string "true")
- (const_string "false")))
+ ] (const_string "false")))
(define_delay (eq_attr "type" "call")
[(eq_attr "in_call_delay" "true") (nil) (nil)])
(define_delay (eq_attr "type" "sibcall")
- [(eq_attr "eligible_for_sibcall_delay" "true") (nil) (nil)])
+ [(eq_attr "in_sibcall_delay" "true") (nil) (nil)])
+
+(define_delay (eq_attr "type" "return")
+ [(eq_attr "in_return_delay" "true") (nil) (nil)])
(define_delay (eq_attr "type" "branch")
- [(eq_attr "in_branch_delay" "true")
- (nil) (eq_attr "in_annul_branch_delay" "true")])
+ [(eq_attr "in_branch_delay" "true") (nil) (eq_attr "in_branch_delay" "true")])
(define_delay (eq_attr "type" "uncond_branch")
- [(eq_attr "in_uncond_branch_delay" "true")
- (nil) (nil)])
-
-(define_delay (eq_attr "type" "return")
- [(eq_attr "eligible_for_return_delay" "true") (nil) (nil)])
+ [(eq_attr "in_branch_delay" "true") (nil) (nil)])
;; Include SPARC DFA schedulers
@@ -3513,7 +3503,8 @@
"TARGET_FPU"
"fdtos\t%1, %0"
[(set_attr "type" "fp")
- (set_attr "fptype" "double")])
+ (set_attr "fptype" "double")
+ (set_attr "fptype_ut699" "single")])
(define_expand "trunctfsf2"
[(set (match_operand:SF 0 "register_operand" "")
@@ -3554,7 +3545,7 @@
"TARGET_FPU"
"fitos\t%1, %0"
[(set_attr "type" "fp")
- (set_attr "fptype" "double")])
+ (set_attr "fptype" "single")])
(define_insn "floatsidf2"
[(set (match_operand:DF 0 "register_operand" "=e")
@@ -3641,7 +3632,7 @@
"TARGET_FPU"
"fstoi\t%1, %0"
[(set_attr "type" "fp")
- (set_attr "fptype" "double")])
+ (set_attr "fptype" "single")])
(define_insn "fix_truncdfsi2"
[(set (match_operand:SI 0 "register_operand" "=f")
@@ -3649,7 +3640,8 @@
"TARGET_FPU"
"fdtoi\t%1, %0"
[(set_attr "type" "fp")
- (set_attr "fptype" "double")])
+ (set_attr "fptype" "double")
+ (set_attr "fptype_ut699" "single")])
(define_expand "fix_trunctfsi2"
[(set (match_operand:SI 0 "register_operand" "")
@@ -5548,7 +5540,7 @@
[(set (match_operand:DF 0 "register_operand" "=e")
(mult:DF (float_extend:DF (match_operand:SF 1 "register_operand" "f"))
(float_extend:DF (match_operand:SF 2 "register_operand" "f"))))]
- "(TARGET_V8 || TARGET_V9) && TARGET_FPU"
+ "(TARGET_V8 || TARGET_V9) && TARGET_FPU && !sparc_fix_ut699"
"fsmuld\t%1, %2, %0"
[(set_attr "type" "fpmul")
(set_attr "fptype" "double")])
@@ -5575,73 +5567,89 @@
(match_operand:TF 2 "register_operand" "e")))]
"TARGET_FPU && TARGET_HARD_QUAD"
"fdivq\t%1, %2, %0"
- [(set_attr "type" "fpdivd")])
+ [(set_attr "type" "fpdivs")])
-(define_insn "divdf3"
+(define_expand "divdf3"
[(set (match_operand:DF 0 "register_operand" "=e")
(div:DF (match_operand:DF 1 "register_operand" "e")
(match_operand:DF 2 "register_operand" "e")))]
"TARGET_FPU"
+ "")
+
+(define_insn "*divdf3_nofix"
+ [(set (match_operand:DF 0 "register_operand" "=e")
+ (div:DF (match_operand:DF 1 "register_operand" "e")
+ (match_operand:DF 2 "register_operand" "e")))]
+ "TARGET_FPU && !sparc_fix_ut699"
"fdivd\t%1, %2, %0"
[(set_attr "type" "fpdivd")
(set_attr "fptype" "double")])
+(define_insn "*divdf3_fix"
+ [(set (match_operand:DF 0 "register_operand" "=e")
+ (div:DF (match_operand:DF 1 "register_operand" "e")
+ (match_operand:DF 2 "register_operand" "e")))]
+ "TARGET_FPU && sparc_fix_ut699"
+ "fdivd\t%1, %2, %0\n\tstd\t%0, [%%sp-8]"
+ [(set_attr "type" "fpdivd")
+ (set_attr "fptype" "double")
+ (set_attr "length" "2")])
+
(define_insn "divsf3"
[(set (match_operand:SF 0 "register_operand" "=f")
(div:SF (match_operand:SF 1 "register_operand" "f")
(match_operand:SF 2 "register_operand" "f")))]
- "TARGET_FPU"
+ "TARGET_FPU && !sparc_fix_ut699"
"fdivs\t%1, %2, %0"
[(set_attr "type" "fpdivs")])
(define_expand "negtf2"
- [(set (match_operand:TF 0 "register_operand" "=e,e")
- (neg:TF (match_operand:TF 1 "register_operand" "0,e")))]
+ [(set (match_operand:TF 0 "register_operand" "")
+ (neg:TF (match_operand:TF 1 "register_operand" "")))]
"TARGET_FPU"
"")
-(define_insn_and_split "*negtf2_notv9"
- [(set (match_operand:TF 0 "register_operand" "=e,e")
- (neg:TF (match_operand:TF 1 "register_operand" "0,e")))]
- ; We don't use quad float insns here so we don't need TARGET_HARD_QUAD.
- "TARGET_FPU
- && ! TARGET_V9"
- "@
- fnegs\t%0, %0
- #"
- "&& reload_completed
- && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
- [(set (match_dup 2) (neg:SF (match_dup 3)))
- (set (match_dup 4) (match_dup 5))
- (set (match_dup 6) (match_dup 7))]
- "operands[2] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]));
- operands[3] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]));
- operands[4] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]) + 1);
- operands[5] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]) + 1);
- operands[6] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]) + 2);
- operands[7] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]) + 2);"
- [(set_attr "type" "fpmove,*")
- (set_attr "length" "*,2")])
-
-(define_insn_and_split "*negtf2_v9"
- [(set (match_operand:TF 0 "register_operand" "=e,e")
- (neg:TF (match_operand:TF 1 "register_operand" "0,e")))]
- ; We don't use quad float insns here so we don't need TARGET_HARD_QUAD.
- "TARGET_FPU && TARGET_V9"
- "@
- fnegd\t%0, %0
- #"
- "&& reload_completed
- && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
- [(set (match_dup 2) (neg:DF (match_dup 3)))
- (set (match_dup 4) (match_dup 5))]
- "operands[2] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]));
- operands[3] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]));
- operands[4] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]) + 2);
- operands[5] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]) + 2);"
- [(set_attr "type" "fpmove,*")
- (set_attr "length" "*,2")
- (set_attr "fptype" "double")])
+(define_insn "*negtf2_hq"
+ [(set (match_operand:TF 0 "register_operand" "=e")
+ (neg:TF (match_operand:TF 1 "register_operand" "e")))]
+ "TARGET_FPU && TARGET_HARD_QUAD"
+ "fnegq\t%1, %0"
+ [(set_attr "type" "fpmove")])
+
+(define_insn_and_split "*negtf2"
+ [(set (match_operand:TF 0 "register_operand" "=e")
+ (neg:TF (match_operand:TF 1 "register_operand" "e")))]
+ "TARGET_FPU && !TARGET_HARD_QUAD"
+ "#"
+ "&& reload_completed"
+ [(clobber (const_int 0))]
+{
+ rtx set_dest = operands[0];
+ rtx set_src = operands[1];
+ rtx dest1, dest2;
+ rtx src1, src2;
+
+ dest1 = gen_df_reg (set_dest, 0);
+ dest2 = gen_df_reg (set_dest, 1);
+ src1 = gen_df_reg (set_src, 0);
+ src2 = gen_df_reg (set_src, 1);
+
+ /* Now emit using the real source and destination we found, swapping
+ the order if we detect overlap. */
+ if (reg_overlap_mentioned_p (dest1, src2))
+ {
+ emit_insn (gen_movdf (dest2, src2));
+ emit_insn (gen_negdf2 (dest1, src1));
+ }
+ else
+ {
+ emit_insn (gen_negdf2 (dest1, src1));
+ if (REGNO (dest2) != REGNO (src2))
+ emit_insn (gen_movdf (dest2, src2));
+ }
+ DONE;
+}
+ [(set_attr "length" "2")])
(define_expand "negdf2"
[(set (match_operand:DF 0 "register_operand" "")
@@ -5650,22 +5658,39 @@
"")
(define_insn_and_split "*negdf2_notv9"
- [(set (match_operand:DF 0 "register_operand" "=e,e")
- (neg:DF (match_operand:DF 1 "register_operand" "0,e")))]
- "TARGET_FPU && ! TARGET_V9"
- "@
- fnegs\t%0, %0
- #"
- "&& reload_completed
- && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
- [(set (match_dup 2) (neg:SF (match_dup 3)))
- (set (match_dup 4) (match_dup 5))]
- "operands[2] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]));
- operands[3] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]));
- operands[4] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]) + 1);
- operands[5] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]) + 1);"
- [(set_attr "type" "fpmove,*")
- (set_attr "length" "*,2")])
+ [(set (match_operand:DF 0 "register_operand" "=e")
+ (neg:DF (match_operand:DF 1 "register_operand" "e")))]
+ "TARGET_FPU && !TARGET_V9"
+ "#"
+ "&& reload_completed"
+ [(clobber (const_int 0))]
+{
+ rtx set_dest = operands[0];
+ rtx set_src = operands[1];
+ rtx dest1, dest2;
+ rtx src1, src2;
+
+ dest1 = gen_highpart (SFmode, set_dest);
+ dest2 = gen_lowpart (SFmode, set_dest);
+ src1 = gen_highpart (SFmode, set_src);
+ src2 = gen_lowpart (SFmode, set_src);
+
+ /* Now emit using the real source and destination we found, swapping
+ the order if we detect overlap. */
+ if (reg_overlap_mentioned_p (dest1, src2))
+ {
+ emit_insn (gen_movsf (dest2, src2));
+ emit_insn (gen_negsf2 (dest1, src1));
+ }
+ else
+ {
+ emit_insn (gen_negsf2 (dest1, src1));
+ if (REGNO (dest2) != REGNO (src2))
+ emit_insn (gen_movsf (dest2, src2));
+ }
+ DONE;
+}
+ [(set_attr "length" "2")])
(define_insn "*negdf2_v9"
[(set (match_operand:DF 0 "register_operand" "=e")
@@ -5688,56 +5713,47 @@
"TARGET_FPU"
"")
-(define_insn_and_split "*abstf2_notv9"
- [(set (match_operand:TF 0 "register_operand" "=e,e")
- (abs:TF (match_operand:TF 1 "register_operand" "0,e")))]
- ; We don't use quad float insns here so we don't need TARGET_HARD_QUAD.
- "TARGET_FPU && ! TARGET_V9"
- "@
- fabss\t%0, %0
- #"
- "&& reload_completed
- && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
- [(set (match_dup 2) (abs:SF (match_dup 3)))
- (set (match_dup 4) (match_dup 5))
- (set (match_dup 6) (match_dup 7))]
- "operands[2] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]));
- operands[3] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]));
- operands[4] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]) + 1);
- operands[5] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]) + 1);
- operands[6] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]) + 2);
- operands[7] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]) + 2);"
- [(set_attr "type" "fpmove,*")
- (set_attr "length" "*,2")])
-
-(define_insn "*abstf2_hq_v9"
- [(set (match_operand:TF 0 "register_operand" "=e,e")
- (abs:TF (match_operand:TF 1 "register_operand" "0,e")))]
- "TARGET_FPU && TARGET_V9 && TARGET_HARD_QUAD"
- "@
- fabsd\t%0, %0
- fabsq\t%1, %0"
- [(set_attr "type" "fpmove")
- (set_attr "fptype" "double,*")])
+(define_insn "*abstf2_hq"
+ [(set (match_operand:TF 0 "register_operand" "=e")
+ (abs:TF (match_operand:TF 1 "register_operand" "e")))]
+ "TARGET_FPU && TARGET_HARD_QUAD"
+ "fabsq\t%1, %0"
+ [(set_attr "type" "fpmove")])
-(define_insn_and_split "*abstf2_v9"
- [(set (match_operand:TF 0 "register_operand" "=e,e")
- (abs:TF (match_operand:TF 1 "register_operand" "0,e")))]
- "TARGET_FPU && TARGET_V9 && !TARGET_HARD_QUAD"
- "@
- fabsd\t%0, %0
- #"
- "&& reload_completed
- && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
- [(set (match_dup 2) (abs:DF (match_dup 3)))
- (set (match_dup 4) (match_dup 5))]
- "operands[2] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]));
- operands[3] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]));
- operands[4] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]) + 2);
- operands[5] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]) + 2);"
- [(set_attr "type" "fpmove,*")
- (set_attr "length" "*,2")
- (set_attr "fptype" "double,*")])
+(define_insn_and_split "*abstf2"
+ [(set (match_operand:TF 0 "register_operand" "=e")
+ (abs:TF (match_operand:TF 1 "register_operand" "e")))]
+ "TARGET_FPU && !TARGET_HARD_QUAD"
+ "#"
+ "&& reload_completed"
+ [(clobber (const_int 0))]
+{
+ rtx set_dest = operands[0];
+ rtx set_src = operands[1];
+ rtx dest1, dest2;
+ rtx src1, src2;
+
+ dest1 = gen_df_reg (set_dest, 0);
+ dest2 = gen_df_reg (set_dest, 1);
+ src1 = gen_df_reg (set_src, 0);
+ src2 = gen_df_reg (set_src, 1);
+
+ /* Now emit using the real source and destination we found, swapping
+ the order if we detect overlap. */
+ if (reg_overlap_mentioned_p (dest1, src2))
+ {
+ emit_insn (gen_movdf (dest2, src2));
+ emit_insn (gen_absdf2 (dest1, src1));
+ }
+ else
+ {
+ emit_insn (gen_absdf2 (dest1, src1));
+ if (REGNO (dest2) != REGNO (src2))
+ emit_insn (gen_movdf (dest2, src2));
+ }
+ DONE;
+}
+ [(set_attr "length" "2")])
(define_expand "absdf2"
[(set (match_operand:DF 0 "register_operand" "")
@@ -5746,22 +5762,39 @@
"")
(define_insn_and_split "*absdf2_notv9"
- [(set (match_operand:DF 0 "register_operand" "=e,e")
- (abs:DF (match_operand:DF 1 "register_operand" "0,e")))]
- "TARGET_FPU && ! TARGET_V9"
- "@
- fabss\t%0, %0
- #"
- "&& reload_completed
- && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
- [(set (match_dup 2) (abs:SF (match_dup 3)))
- (set (match_dup 4) (match_dup 5))]
- "operands[2] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]));
- operands[3] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]));
- operands[4] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]) + 1);
- operands[5] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]) + 1);"
- [(set_attr "type" "fpmove,*")
- (set_attr "length" "*,2")])
+ [(set (match_operand:DF 0 "register_operand" "=e")
+ (abs:DF (match_operand:DF 1 "register_operand" "e")))]
+ "TARGET_FPU && !TARGET_V9"
+ "#"
+ "&& reload_completed"
+ [(clobber (const_int 0))]
+{
+ rtx set_dest = operands[0];
+ rtx set_src = operands[1];
+ rtx dest1, dest2;
+ rtx src1, src2;
+
+ dest1 = gen_highpart (SFmode, set_dest);
+ dest2 = gen_lowpart (SFmode, set_dest);
+ src1 = gen_highpart (SFmode, set_src);
+ src2 = gen_lowpart (SFmode, set_src);
+
+ /* Now emit using the real source and destination we found, swapping
+ the order if we detect overlap. */
+ if (reg_overlap_mentioned_p (dest1, src2))
+ {
+ emit_insn (gen_movsf (dest2, src2));
+ emit_insn (gen_abssf2 (dest1, src1));
+ }
+ else
+ {
+ emit_insn (gen_abssf2 (dest1, src1));
+ if (REGNO (dest2) != REGNO (src2))
+ emit_insn (gen_movsf (dest2, src2));
+ }
+ DONE;
+}
+ [(set_attr "length" "2")])
(define_insn "*absdf2_v9"
[(set (match_operand:DF 0 "register_operand" "=e")
@@ -5789,20 +5822,35 @@
(sqrt:TF (match_operand:TF 1 "register_operand" "e")))]
"TARGET_FPU && TARGET_HARD_QUAD"
"fsqrtq\t%1, %0"
- [(set_attr "type" "fpsqrtd")])
+ [(set_attr "type" "fpsqrts")])
-(define_insn "sqrtdf2"
+(define_expand "sqrtdf2"
[(set (match_operand:DF 0 "register_operand" "=e")
(sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
"TARGET_FPU"
+ "")
+
+(define_insn "*sqrtdf2_nofix"
+ [(set (match_operand:DF 0 "register_operand" "=e")
+ (sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
+ "TARGET_FPU && !sparc_fix_ut699"
"fsqrtd\t%1, %0"
[(set_attr "type" "fpsqrtd")
(set_attr "fptype" "double")])
+(define_insn "*sqrtdf2_fix"
+ [(set (match_operand:DF 0 "register_operand" "=e")
+ (sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
+ "TARGET_FPU && sparc_fix_ut699"
+ "fsqrtd\t%1, %0\n\tstd\t%0, [%%sp-8]"
+ [(set_attr "type" "fpsqrtd")
+ (set_attr "fptype" "double")
+ (set_attr "length" "2")])
+
(define_insn "sqrtsf2"
[(set (match_operand:SF 0 "register_operand" "=f")
(sqrt:SF (match_operand:SF 1 "register_operand" "f")))]
- "TARGET_FPU"
+ "TARGET_FPU && !sparc_fix_ut699"
"fsqrts\t%1, %0"
[(set_attr "type" "fpsqrts")])
@@ -5821,19 +5869,6 @@
}
[(set_attr "type" "shift")])
-(define_insn "*ashlsi3_extend"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (zero_extend:DI
- (ashift:SI (match_operand:SI 1 "register_operand" "r")
- (match_operand:SI 2 "arith_operand" "rI"))))]
- "TARGET_ARCH64"
-{
- if (GET_CODE (operands[2]) == CONST_INT)
- operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f);
- return "sll\t%1, %2, %0";
-}
- [(set_attr "type" "shift")])
-
(define_expand "ashldi3"
[(set (match_operand:DI 0 "register_operand" "=r")
(ashift:DI (match_operand:DI 1 "register_operand" "r")
diff --git a/gcc-4.8/gcc/config/sparc/sparc.opt b/gcc-4.8/gcc/config/sparc/sparc.opt
index 764c652e8..9de981b85 100644
--- a/gcc-4.8/gcc/config/sparc/sparc.opt
+++ b/gcc-4.8/gcc/config/sparc/sparc.opt
@@ -113,6 +113,10 @@ mrelax
Target
Optimize tail call instructions in assembler and linker
+muser-mode
+Target Report Mask(USER_MODE)
+Do not generate code that can only run in supervisor mode
+
mcpu=
Target RejectNegative Joined Var(sparc_cpu_and_features) Enum(sparc_processor_type) Init(PROCESSOR_V7)
Use features of and schedule code for given CPU
@@ -146,6 +150,9 @@ EnumValue
Enum(sparc_processor_type) String(leon) Value(PROCESSOR_LEON)
EnumValue
+Enum(sparc_processor_type) String(leon3) Value(PROCESSOR_LEON3)
+
+EnumValue
Enum(sparc_processor_type) String(sparclite) Value(PROCESSOR_SPARCLITE)
EnumValue
@@ -201,9 +208,19 @@ Target Report RejectNegative Var(sparc_fix_at697f)
Enable workaround for single erratum of AT697F processor
(corresponding to erratum #13 of AT697E processor)
+mfix-ut699
+Target Report RejectNegative Var(sparc_fix_ut699)
+Enable workarounds for the errata of the UT699 processor
+
Mask(LONG_DOUBLE_128)
;; Use 128-bit long double
+Mask(LEON)
+;; Generate code for LEON
+
+Mask(LEON3)
+;; Generate code for LEON3
+
Mask(SPARCLITE)
;; Generate code for SPARClite
diff --git a/gcc-4.8/gcc/config/sparc/sync.md b/gcc-4.8/gcc/config/sparc/sync.md
index 1c1b9774b..cf909853b 100644
--- a/gcc-4.8/gcc/config/sparc/sync.md
+++ b/gcc-4.8/gcc/config/sparc/sync.md
@@ -161,7 +161,8 @@
(match_operand:SI 5 "const_int_operand" "") ;; is_weak
(match_operand:SI 6 "const_int_operand" "") ;; mod_s
(match_operand:SI 7 "const_int_operand" "")] ;; mod_f
- "TARGET_V9 && (<MODE>mode != DImode || TARGET_ARCH64 || TARGET_V8PLUS)"
+ "(TARGET_V9 || TARGET_LEON3)
+ && (<MODE>mode != DImode || TARGET_ARCH64 || TARGET_V8PLUS)"
{
sparc_expand_compare_and_swap (operands);
DONE;
@@ -176,7 +177,7 @@
[(match_operand:I48MODE 2 "register_operand" "")
(match_operand:I48MODE 3 "register_operand" "")]
UNSPECV_CAS))])]
- "TARGET_V9"
+ "TARGET_V9 || TARGET_LEON3"
"")
(define_insn "*atomic_compare_and_swap<mode>_1"
@@ -187,10 +188,27 @@
[(match_operand:I48MODE 2 "register_operand" "r")
(match_operand:I48MODE 3 "register_operand" "0")]
UNSPECV_CAS))]
- "TARGET_V9 && (<MODE>mode == SImode || TARGET_ARCH64)"
+ "TARGET_V9 && (<MODE>mode != DImode || TARGET_ARCH64)"
"cas<modesuffix>\t%1, %2, %0"
[(set_attr "type" "multi")])
+(define_insn "*atomic_compare_and_swap_leon3_1"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (match_operand:SI 1 "mem_noofs_operand" "+w"))
+ (set (match_dup 1)
+ (unspec_volatile:SI
+ [(match_operand:SI 2 "register_operand" "r")
+ (match_operand:SI 3 "register_operand" "0")]
+ UNSPECV_CAS))]
+ "TARGET_LEON3"
+{
+ if (TARGET_USER_MODE)
+ return "casa\t%1 0xa, %2, %0"; /* ASI for user data space. */
+ else
+ return "casa\t%1 0xb, %2, %0"; /* ASI for supervisor data space. */
+}
+ [(set_attr "type" "multi")])
+
(define_insn "*atomic_compare_and_swapdi_v8plus"
[(set (match_operand:DI 0 "register_operand" "=h")
(match_operand:DI 1 "mem_noofs_operand" "+w"))
@@ -220,7 +238,7 @@
(match_operand:SI 1 "memory_operand" "")
(match_operand:SI 2 "register_operand" "")
(match_operand:SI 3 "const_int_operand" "")]
- "TARGET_V8 || TARGET_V9"
+ "(TARGET_V8 || TARGET_V9) && !sparc_fix_ut699"
{
enum memmodel model = (enum memmodel) INTVAL (operands[3]);
@@ -236,7 +254,7 @@
UNSPECV_SWAP))
(set (match_dup 1)
(match_operand:SI 2 "register_operand" "0"))]
- "TARGET_V8 || TARGET_V9"
+ "(TARGET_V8 || TARGET_V9) && !sparc_fix_ut699"
"swap\t%1, %0"
[(set_attr "type" "multi")])
@@ -244,7 +262,7 @@
[(match_operand:QI 0 "register_operand" "")
(match_operand:QI 1 "memory_operand" "")
(match_operand:SI 2 "const_int_operand" "")]
- ""
+ "!sparc_fix_ut699"
{
enum memmodel model = (enum memmodel) INTVAL (operands[2]);
rtx ret;
@@ -268,6 +286,6 @@
(unspec_volatile:QI [(match_operand:QI 1 "memory_operand" "+m")]
UNSPECV_LDSTUB))
(set (match_dup 1) (const_int -1))]
- ""
+ "!sparc_fix_ut699"
"ldstub\t%1, %0"
[(set_attr "type" "multi")])
diff --git a/gcc-4.8/gcc/config/sparc/t-rtems b/gcc-4.8/gcc/config/sparc/t-rtems
index 63d021770..f1a3d845e 100644
--- a/gcc-4.8/gcc/config/sparc/t-rtems
+++ b/gcc-4.8/gcc/config/sparc/t-rtems
@@ -17,6 +17,6 @@
# <http://www.gnu.org/licenses/>.
#
-MULTILIB_OPTIONS = msoft-float mcpu=v8
-MULTILIB_DIRNAMES = soft v8
+MULTILIB_OPTIONS = msoft-float mcpu=v8/mcpu=leon3
+MULTILIB_DIRNAMES = soft v8 leon3
MULTILIB_MATCHES = msoft-float=mno-fpu
diff --git a/gcc-4.8/gcc/config/sparc/t-sparc b/gcc-4.8/gcc/config/sparc/t-sparc
index d7b17fbd0..664f4a424 100644
--- a/gcc-4.8/gcc/config/sparc/t-sparc
+++ b/gcc-4.8/gcc/config/sparc/t-sparc
@@ -23,7 +23,7 @@ sparc.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
insn-codes.h conditions.h output.h $(INSN_ATTR_H) $(FLAGS_H) \
$(FUNCTION_H) $(EXCEPT_H) $(EXPR_H) $(OPTABS_H) $(RECOG_H) \
$(DIAGNOSTIC_CORE_H) $(GGC_H) $(TM_P_H) debug.h $(TARGET_H) \
- $(TARGET_DEF_H) $(COMMON_TARGET_H) $(GIMPLE_H) \
+ $(TARGET_DEF_H) $(COMMON_TARGET_H) $(GIMPLE_H) $(TREE_PASS_H) \
langhooks.h reload.h $(PARAMS_H) $(DF_H) $(OPTS_H) \
gt-sparc.h
diff --git a/gcc-4.8/gcc/config/tilegx/sync.md b/gcc-4.8/gcc/config/tilegx/sync.md
index a4bea6b68..16f18922f 100644
--- a/gcc-4.8/gcc/config/tilegx/sync.md
+++ b/gcc-4.8/gcc/config/tilegx/sync.md
@@ -150,15 +150,22 @@
(match_operand:SI 3 "const_int_operand" "")] ;; model
""
{
+ rtx addend;
enum memmodel model = (enum memmodel) INTVAL (operands[3]);
if (operands[2] != const0_rtx)
- emit_move_insn (operands[2], gen_rtx_NEG (<MODE>mode, operands[2]));
+ {
+ addend = gen_reg_rtx (<MODE>mode);
+ emit_move_insn (addend,
+ gen_rtx_MINUS (<MODE>mode, const0_rtx, operands[2]));
+ }
+ else
+ addend = operands[2];
tilegx_pre_atomic_barrier (model);
emit_insn (gen_atomic_fetch_add_bare<mode> (operands[0],
operands[1],
- operands[2]));
+ addend));
tilegx_post_atomic_barrier (model);
DONE;
})
diff --git a/gcc-4.8/gcc/config/tilegx/tilegx-c.c b/gcc-4.8/gcc/config/tilegx/tilegx-c.c
index 3ecec6e04..8d19d20f7 100644
--- a/gcc-4.8/gcc/config/tilegx/tilegx-c.c
+++ b/gcc-4.8/gcc/config/tilegx/tilegx-c.c
@@ -47,6 +47,9 @@ tilegx_cpu_cpp_builtins (struct cpp_reader *pfile)
if (TARGET_32BIT)
builtin_define ("__tilegx32__");
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
+
TILEGX_CPU_CPP_ENDIAN_BUILTINS ();
GNU_USER_TARGET_OS_CPP_BUILTINS ();
}
diff --git a/gcc-4.8/gcc/config/tilegx/tilegx.c b/gcc-4.8/gcc/config/tilegx/tilegx.c
index beb1012cf..502b953cf 100644
--- a/gcc-4.8/gcc/config/tilegx/tilegx.c
+++ b/gcc-4.8/gcc/config/tilegx/tilegx.c
@@ -702,6 +702,16 @@ tilegx_init_expanders (void)
}
+/* Implement TARGET_EXPAND_TO_RTL_HOOK. */
+static void
+tilegx_expand_to_rtl_hook (void)
+{
+ /* Exclude earlier sets of crtl->uses_pic_offset_table, because we
+ only care about uses actually emitted. */
+ crtl->uses_pic_offset_table = 0;
+}
+
+
/* Implement TARGET_SHIFT_TRUNCATION_MASK. DImode shifts use the mode
matching insns and therefore guarantee that the shift count is
modulo 64. SImode shifts sometimes use the 64 bit version so do
@@ -3543,6 +3553,12 @@ tilegx_expand_builtin (tree exp,
}
if (!pat)
return NULL_RTX;
+
+ /* If we are generating a prefetch, tell the scheduler not to move
+ it around. */
+ if (GET_CODE (pat) == PREFETCH)
+ PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
+
emit_insn (pat);
if (nonvoid)
@@ -4368,10 +4384,12 @@ tilegx_gen_bundles (void)
basic_block bb;
FOR_EACH_BB (bb)
{
- rtx insn, next;
+ rtx insn, next, prev;
rtx end = NEXT_INSN (BB_END (bb));
- for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn; insn = next)
+ prev = NULL_RTX;
+ for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn;
+ prev = insn, insn = next)
{
next = next_insn_to_bundle (NEXT_INSN (insn), end);
@@ -4396,6 +4414,18 @@ tilegx_gen_bundles (void)
PUT_MODE (insn, SImode);
}
}
+
+ /* Delete barrier insns, because they can mess up the
+ emitting of bundle braces. If it is end-of-bundle, then
+ the previous insn must be marked end-of-bundle. */
+ if (get_attr_type (insn) == TYPE_NOTHING) {
+ if (GET_MODE (insn) == QImode && prev != NULL
+ && GET_MODE (prev) == SImode)
+ {
+ PUT_MODE (prev, QImode);
+ }
+ delete_insn (insn);
+ }
}
}
}
@@ -5498,6 +5528,9 @@ tilegx_file_end (void)
#undef TARGET_RTX_COSTS
#define TARGET_RTX_COSTS tilegx_rtx_costs
+#undef TARGET_EXPAND_TO_RTL_HOOK
+#define TARGET_EXPAND_TO_RTL_HOOK tilegx_expand_to_rtl_hook
+
#undef TARGET_SHIFT_TRUNCATION_MASK
#define TARGET_SHIFT_TRUNCATION_MASK tilegx_shift_truncation_mask
diff --git a/gcc-4.8/gcc/config/tilegx/tilegx.md b/gcc-4.8/gcc/config/tilegx/tilegx.md
index 8dfcff603..5fe177619 100644
--- a/gcc-4.8/gcc/config/tilegx/tilegx.md
+++ b/gcc-4.8/gcc/config/tilegx/tilegx.md
@@ -5076,10 +5076,8 @@
;; Network intrinsics
-;; Note the "pseudo" text is handled specially by the
-;; asm_output_opcode routine. If the output is an empty string, the
-;; instruction would bypass the asm_output_opcode routine, bypassing
-;; the bundle handling code.
+;; Note the this barrier is of type "nothing," which is deleted after
+;; the final scheduling pass so that nothing is emitted for it.
(define_insn "tilegx_network_barrier"
[(unspec_volatile:SI [(const_int 0)] UNSPEC_NETWORK_BARRIER)]
""
diff --git a/gcc-4.8/gcc/config/tilepro/tilepro-c.c b/gcc-4.8/gcc/config/tilepro/tilepro-c.c
index 8f7aa00d7..b9bf24ab2 100644
--- a/gcc-4.8/gcc/config/tilepro/tilepro-c.c
+++ b/gcc-4.8/gcc/config/tilepro/tilepro-c.c
@@ -44,6 +44,11 @@ tilepro_cpu_cpp_builtins (struct cpp_reader *pfile)
builtin_define ("__tile_chip__=1");
builtin_define ("__tile_chip_rev__=0");
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
+
TILEPRO_CPU_CPP_ENDIAN_BUILTINS ();
GNU_USER_TARGET_OS_CPP_BUILTINS ();
}
diff --git a/gcc-4.8/gcc/config/tilepro/tilepro.c b/gcc-4.8/gcc/config/tilepro/tilepro.c
index 59618e438..957146dd5 100644
--- a/gcc-4.8/gcc/config/tilepro/tilepro.c
+++ b/gcc-4.8/gcc/config/tilepro/tilepro.c
@@ -3167,6 +3167,12 @@ tilepro_expand_builtin (tree exp,
}
if (!pat)
return NULL_RTX;
+
+ /* If we are generating a prefetch, tell the scheduler not to move
+ it around. */
+ if (GET_CODE (pat) == PREFETCH)
+ PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
+
emit_insn (pat);
if (nonvoid)
diff --git a/gcc-4.8/gcc/config/tilepro/tilepro.md b/gcc-4.8/gcc/config/tilepro/tilepro.md
index ca8cf80ca..ba9bc76d4 100644
--- a/gcc-4.8/gcc/config/tilepro/tilepro.md
+++ b/gcc-4.8/gcc/config/tilepro/tilepro.md
@@ -795,7 +795,7 @@
(define_expand "ctzdi2"
[(set (match_operand:DI 0 "register_operand" "")
- (ctz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
+ (ctz:DI (match_operand:DI 1 "register_operand" "")))]
""
{
rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, result;
@@ -823,7 +823,7 @@
(define_expand "clzdi2"
[(set (match_operand:DI 0 "register_operand" "")
- (clz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
+ (clz:DI (match_operand:DI 1 "register_operand" "")))]
""
{
rtx lo, hi, clz_lo, clz_hi, clz_lo_plus_32, result;
@@ -851,7 +851,7 @@
(define_expand "ffsdi2"
[(set (match_operand:DI 0 "register_operand" "")
- (ffs:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
+ (ffs:DI (match_operand:DI 1 "register_operand" "")))]
""
{
rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, ctz, ctz_plus_1,ctz_cond;
diff --git a/gcc-4.8/gcc/configure b/gcc-4.8/gcc/configure
index 624b807a1..a8e67d1d0 100755
--- a/gcc-4.8/gcc/configure
+++ b/gcc-4.8/gcc/configure
@@ -11206,13 +11206,16 @@ else
/* | A-Za-z:\\/* ) realsrcdir=${srcdir};;
*) realsrcdir=../${srcdir};;
esac
- saved_CFLAGS="${CFLAGS}"
+ # Clearing GMPINC is necessary to prevent host headers being
+ # used by the build compiler. Defining GENERATOR_FILE stops
+ # system.h from including gmp.h.
CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
- LDFLAGS="${LDFLAGS_FOR_BUILD}" \
+ CXX="${CXX_FOR_BUILD}" CXXFLAGS="${CXXFLAGS_FOR_BUILD}" \
+ LD="${LD_FOR_BUILD}" LDFLAGS="${LDFLAGS_FOR_BUILD}" \
+ GMPINC="" CPPFLAGS="${CPPFLAGS} -DGENERATOR_FILE" \
${realsrcdir}/configure \
--enable-languages=${enable_languages-all} \
--target=$target_alias --host=$build_alias --build=$build_alias
- CFLAGS="${saved_CFLAGS}"
# We just finished tests for the build machine, so rename
# the file auto-build.h in the gcc directory.
@@ -11707,6 +11710,7 @@ STMP_FIXINC=stmp-fixinc
if test x$build != x$host || test "x$coverage_flags" != x
then
BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
+ BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CXXFLAGS_FOR_BUILD)'
BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
fi
@@ -13594,7 +13598,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -13619,7 +13623,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -13638,7 +13645,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -17832,7 +17842,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 17831 "configure"
+#line 17841 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -17938,7 +17948,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 17937 "configure"
+#line 17947 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -24269,6 +24279,43 @@ if test $gcc_cv_as_sparc_sparc4 = yes; then
$as_echo "#define HAVE_AS_SPARC4 1" >>confdefs.h
fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for LEON instructions" >&5
+$as_echo_n "checking assembler for LEON instructions... " >&6; }
+if test "${gcc_cv_as_sparc_leon+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ gcc_cv_as_sparc_leon=no
+ if test x$gcc_cv_as != x; then
+ $as_echo '.text
+ .register %g2, #scratch
+ .register %g3, #scratch
+ .align 4
+ smac %g2, %g3, %g1
+ umac %g2, %g3, %g1
+ casa [%g2] 0xb, %g3, %g1' > conftest.s
+ if { ac_try='$gcc_cv_as $gcc_cv_as_flags -Aleon -o conftest.o conftest.s >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+ gcc_cv_as_sparc_leon=yes
+ else
+ echo "configure: failed program was" >&5
+ cat conftest.s >&5
+ fi
+ rm -f conftest.o conftest.s
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_sparc_leon" >&5
+$as_echo "$gcc_cv_as_sparc_leon" >&6; }
+if test $gcc_cv_as_sparc_leon = yes; then
+
+$as_echo "#define HAVE_AS_LEON 1" >>confdefs.h
+
+fi
;;
i[34567]86-*-* | x86_64-*-*)
@@ -24751,6 +24798,10 @@ fi
# These two are used unconditionally by i386.[ch]; it is to be defined
# to 1 if the feature is present, 0 otherwise.
+ as_ix86_gotoff_in_data_opt=
+ if test x$gas = xyes; then
+ as_ix86_gotoff_in_data_opt="--32"
+ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for GOTOFF in data" >&5
$as_echo_n "checking assembler for GOTOFF in data... " >&6; }
if test "${gcc_cv_as_ix86_gotoff_in_data+set}" = set; then :
@@ -24767,7 +24818,7 @@ fi
nop
.data
.long .L0@GOTOFF' > conftest.s
- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -o conftest.o conftest.s >&5'
+ if { ac_try='$gcc_cv_as $gcc_cv_as_flags $as_ix86_gotoff_in_data_opt -o conftest.o conftest.s >&5'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -24828,6 +24879,37 @@ $as_echo "#define HAVE_AS_IX86_REP_LOCK_PREFIX 1" >>confdefs.h
fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for ud2 mnemonic" >&5
+$as_echo_n "checking assembler for ud2 mnemonic... " >&6; }
+if test "${gcc_cv_as_ix86_ud2+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ gcc_cv_as_ix86_ud2=no
+ if test x$gcc_cv_as != x; then
+ $as_echo 'ud2' > conftest.s
+ if { ac_try='$gcc_cv_as $gcc_cv_as_flags -o conftest.o conftest.s >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+ gcc_cv_as_ix86_ud2=yes
+ else
+ echo "configure: failed program was" >&5
+ cat conftest.s >&5
+ fi
+ rm -f conftest.o conftest.s
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_ix86_ud2" >&5
+$as_echo "$gcc_cv_as_ix86_ud2" >&6; }
+if test $gcc_cv_as_ix86_ud2 = yes; then
+
+$as_echo "#define HAVE_AS_IX86_UD2 1" >>confdefs.h
+
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for R_386_TLS_GD_PLT reloc" >&5
$as_echo_n "checking assembler for R_386_TLS_GD_PLT reloc... " >&6; }
if test "${gcc_cv_as_ix86_tlsgdplt+set}" = set; then :
@@ -27277,8 +27359,8 @@ if test x"$enable_plugin" = x"yes"; then
$as_echo_n "checking for exported symbols... " >&6; }
if test "x$export_sym_check" != x; then
echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
- ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
- if $export_sym_check conftest | grep foobar > /dev/null; then
+ ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
+ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
: # No need to use a flag
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
@@ -27287,8 +27369,8 @@ $as_echo "yes" >&6; }
$as_echo "yes" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -rdynamic" >&5
$as_echo_n "checking for -rdynamic... " >&6; }
- ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
- if $export_sym_check conftest | grep foobar > /dev/null; then
+ ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
+ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
plugin_rdynamic=yes
pluginlibs="-rdynamic"
else
diff --git a/gcc-4.8/gcc/configure.ac b/gcc-4.8/gcc/configure.ac
index f070a7f4b..9b67ee27f 100644
--- a/gcc-4.8/gcc/configure.ac
+++ b/gcc-4.8/gcc/configure.ac
@@ -1516,13 +1516,16 @@ else
/* | [A-Za-z]:[\\/]* ) realsrcdir=${srcdir};;
*) realsrcdir=../${srcdir};;
esac
- saved_CFLAGS="${CFLAGS}"
+ # Clearing GMPINC is necessary to prevent host headers being
+ # used by the build compiler. Defining GENERATOR_FILE stops
+ # system.h from including gmp.h.
CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
- LDFLAGS="${LDFLAGS_FOR_BUILD}" \
+ CXX="${CXX_FOR_BUILD}" CXXFLAGS="${CXXFLAGS_FOR_BUILD}" \
+ LD="${LD_FOR_BUILD}" LDFLAGS="${LDFLAGS_FOR_BUILD}" \
+ GMPINC="" CPPFLAGS="${CPPFLAGS} -DGENERATOR_FILE" \
${realsrcdir}/configure \
--enable-languages=${enable_languages-all} \
--target=$target_alias --host=$build_alias --build=$build_alias
- CFLAGS="${saved_CFLAGS}"
# We just finished tests for the build machine, so rename
# the file auto-build.h in the gcc directory.
@@ -1887,6 +1890,7 @@ STMP_FIXINC=stmp-fixinc AC_SUBST(STMP_FIXINC)
if test x$build != x$host || test "x$coverage_flags" != x
then
BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
+ BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CXXFLAGS_FOR_BUILD)'
BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
fi
@@ -3613,6 +3617,19 @@ foo:
kasumi_fi_xor %f46, %f48, %f50, %f52],,
[AC_DEFINE(HAVE_AS_SPARC4, 1,
[Define if your assembler supports SPARC4 instructions.])])
+
+ gcc_GAS_CHECK_FEATURE([LEON instructions],
+ gcc_cv_as_sparc_leon,,
+ [-Aleon],
+ [.text
+ .register %g2, #scratch
+ .register %g3, #scratch
+ .align 4
+ smac %g2, %g3, %g1
+ umac %g2, %g3, %g1
+ casa [[%g2]] 0xb, %g3, %g1],,
+ [AC_DEFINE(HAVE_AS_LEON, 1,
+ [Define if your assembler supports LEON instructions.])])
;;
changequote(,)dnl
@@ -3751,8 +3768,13 @@ foo: nop
# These two are used unconditionally by i386.[ch]; it is to be defined
# to 1 if the feature is present, 0 otherwise.
+ as_ix86_gotoff_in_data_opt=
+ if test x$gas = xyes; then
+ as_ix86_gotoff_in_data_opt="--32"
+ fi
gcc_GAS_CHECK_FEATURE([GOTOFF in data],
- gcc_cv_as_ix86_gotoff_in_data, [2,11,0],,
+ gcc_cv_as_ix86_gotoff_in_data, [2,11,0],
+ [$as_ix86_gotoff_in_data_opt],
[ .text
.L0:
nop
@@ -3774,6 +3796,12 @@ foo: nop
[AC_DEFINE(HAVE_AS_IX86_REP_LOCK_PREFIX, 1,
[Define if the assembler supports 'rep <insn>, lock <insn>'.])])
+ gcc_GAS_CHECK_FEATURE([ud2 mnemonic],
+ gcc_cv_as_ix86_ud2,,,
+ [ud2],,
+ [AC_DEFINE(HAVE_AS_IX86_UD2, 1,
+ [Define if your assembler supports the 'ud2' mnemonic.])])
+
gcc_GAS_CHECK_FEATURE([R_386_TLS_GD_PLT reloc],
gcc_cv_as_ix86_tlsgdplt,,,
[call tls_gd@tlsgdplt],
@@ -5224,15 +5252,15 @@ if test x"$enable_plugin" = x"yes"; then
AC_MSG_CHECKING([for exported symbols])
if test "x$export_sym_check" != x; then
echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
- ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
- if $export_sym_check conftest | grep foobar > /dev/null; then
+ ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
+ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
: # No need to use a flag
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([yes])
AC_MSG_CHECKING([for -rdynamic])
- ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
- if $export_sym_check conftest | grep foobar > /dev/null; then
+ ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
+ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
plugin_rdynamic=yes
pluginlibs="-rdynamic"
else
diff --git a/gcc-4.8/gcc/cp/ChangeLog b/gcc-4.8/gcc/cp/ChangeLog
index 2ee24e21e..c4d2dee85 100644
--- a/gcc-4.8/gcc/cp/ChangeLog
+++ b/gcc-4.8/gcc/cp/ChangeLog
@@ -1,3 +1,197 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-05-13 Jason Merrill <jason@redhat.com>
+
+ PR c++/60708
+ * call.c (build_array_conv): Call complete_type.
+
+ PR c++/60713
+ * typeck2.c (PICFLAG_SIDE_EFFECTS): New.
+ (picflag_from_initializer): Return it.
+ (process_init_constructor): Handle it.
+
+ PR c++/60628
+ * decl.c (create_array_type_for_decl): Complain about array of auto.
+
+ PR c++/60367
+ * call.c (convert_default_arg): Remove special handling for
+ CONSTRUCTOR.
+
+2014-04-28 Daniel Gutson <daniel.gutson@tallertechnologies.com>
+
+ * typeck.c (build_reinterpret_cast_1): Pass proper argument to
+ warn() in pedantic.
+
+2014-02-28 Jason Merrill <jason@redhat.com>
+
+ PR c++/58845
+ * typeck.c (cp_build_binary_op): Sorry on vector&&vector.
+
+2014-02-26 Jason Merrill <jason@redhat.com>
+
+ PR c++/60182
+ * pt.c (unify): Ignore alias templates when deducing a template
+ template parameter.
+
+2014-02-24 Jason Merrill <jason@redhat.com>
+
+ PR c++/60146
+ * pt.c (tsubst_omp_for_iterator): Don't let substitution of the
+ DECL_EXPR initialize a non-class iterator.
+
+2014-02-24 Fabien Chêne <fabien@gcc.gnu.org>
+ PR c++/37140
+ * parser.c (cp_parser_nonclass_name): Call strip_using_decl and
+ move the code handling dependent USING_DECLs...
+ * name-lookup.c (strip_using_decl): ...Here.
+
+2014-02-21 Jason Merrill <jason@redhat.com>
+
+ PR c++/60108
+ * semantics.c (expand_or_defer_fn_1): Check DECL_DEFAULTED_FN.
+
+ PR c++/60187
+ * parser.c (cp_parser_enum_specifier): Call
+ check_for_bare_parameter_packs.
+
+ PR c++/60216
+ * pt.c (register_specialization): Copy DECL_DELETED_FN to clones.
+
+ PR c++/60219
+ * pt.c (coerce_template_parms): Bail if argument packing fails.
+
+ PR c++/60248
+ * mangle.c (mangle_decl): Don't make an alias for a TYPE_DECL.
+
+2014-02-20 Jason Merrill <jason@redhat.com>
+
+ PR c++/60274
+ Revert:
+ PR c++/58606
+ * pt.c (template_parm_to_arg): Call convert_from_reference.
+ (tsubst_template_arg): Don't strip reference refs.
+
+2014-02-20 Kai Tietz <ktietz@redhat.com>
+
+ PR c++/58873
+ * parser.c (cp_parser_functional_cast): Treat NULL_TREE
+ valued type argument as error_mark_node.
+
+ PR c++/58835
+ * semantics.c (finish_fname): Handle error_mark_node.
+
+2014-02-19 Jason Merrill <jason@redhat.com>
+
+ PR c++/60046
+ * pt.c (maybe_instantiate_noexcept): Don't instantiate exception
+ spec from template context.
+
+2014-01-31 Jason Merrill <jason@redhat.com>
+
+ PR c++/58672
+ * decl2.c (handle_tls_init): Handle null init fn.
+
+ PR c++/55800
+ * decl2.c (get_tls_init_fn): Copy DECL_EXTERNAL from the variable.
+
+ PR c++/59646
+ * call.c (convert_like_real) [ck_aggr]: Set TARGET_EXPR_LIST_INIT_P.
+ [ck_list]: Check for error_mark_node.
+
+ PR c++/57043
+ * pt.c (fn_type_unification): Don't do DEDUCE_EXACT check
+ during partial ordering.
+
+2014-01-30 Jason Merrill <jason@redhat.com>
+
+ PR c++/57899
+ * pt.c (instantiate_template_1): Save/restore local_specializations.
+
+2014-01-29 Jason Merrill <jason@redhat.com>
+
+ PR c++/59989
+ * pt.c (expand_template_argument_pack): Correct
+ non_default_args_count calculation.
+
+ PR c++/58466
+ * pt.c (unify_pack_expansion): Call expand_template_argument_pack.
+
+2014-01-28 Jason Merrill <jason@redhat.com>
+
+ PR c++/58632
+ * decl.c (lookup_and_check_tag): Ignore template parameters if
+ scope == ts_current.
+ * pt.c (check_template_shadow): Don't complain about the injected
+ class name.
+
+2014-01-27 Jason Merrill <jason@redhat.com>
+
+ PR c++/54652
+ * decl.c (duplicate_decls): Always use oldtype for TYPE_DECL.
+
+ PR c++/58504
+ * pt.c (tsubst_copy_and_build) [TRAIT_EXPR]: Use tsubst for
+ types.
+
+ PR c++/58606
+ * pt.c (template_parm_to_arg): Call convert_from_reference.
+ (tsubst_template_arg): Don't strip reference refs.
+
+ PR c++/58639
+ * call.c (build_aggr_conv): Reject value-initialization of reference.
+
+ PR c++/58812
+ * call.c (convert_like_real): Give helpful error about excess braces
+ for reference binding, too.
+
+ PR c++/58814
+ * typeck.c (cp_build_modify_expr): Make the RHS an rvalue before
+ stabilizing.
+
+ PR c++/58837
+ * typeck.c (cp_truthvalue_conversion): Use explicit comparison for
+ FUNCTION_DECL.
+
+ PR c++/59097
+ * decl.c (compute_array_index_type): Don't call
+ maybe_constant_value for a non-integral expression.
+
+ PR c++/58965
+ * mangle.c (write_guarded_var_name): Handle null DECL_NAME.
+
+2014-01-24 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/57524
+ * name-lookup.c (push_using_directive): Use timevar_cond_start.
+
+2014-01-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/58809
+ * semantics.c (finish_omp_clauses): Reject MIN_EXPR, MAX_EXPR,
+ BIT_AND_EXPR, BIT_IOR_EXPR and BIT_XOR_EXPR on COMPLEX_TYPEs.
+
+2014-01-20 Marek Polacek <polacek@redhat.com>
+
+ Backported from mainline
+ 2014-01-17 Marek Polacek <polacek@redhat.com>
+
+ PR c++/59838
+ * cvt.c (ocp_convert): Don't segfault on non-existing
+ ENUM_UNDERLYING_TYPE.
+
+2014-01-10 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/56060
+ PR c++/59730
+ * pt.c (type_dependent_expression_p): Handle EXPR_PACK_EXPANSION.
+
+2013-12-12 Jason Merrill <jason@redhat.com>
+
+ PR c++/58954
+ * pt.c (resolve_overloaded_unification): Discard access checks.
+
2013-12-05 Jason Merrill <jason@redhat.com>
PR c++/59044
@@ -5,6 +199,74 @@
* pt.c (most_specialized_class): Use the partially instantiated
template for deduction. Drop the TMPL parameter.
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/59268
+ * pt.c (tsubst_copy_and_build): Handle POINTER_PLUS_EXPR.
+
+2013-11-27 Tom de Vries <tom@codesourcery.com>
+ Marc Glisse <marc.glisse@inria.fr>
+
+ PR c++/59032
+ * typeck.c (cp_build_unary_op): Allow vector increment and decrement.
+
+2013-11-27 Tom de Vries <tom@codesourcery.com>
+ Marc Glisse <marc.glisse@inria.fr>
+
+ PR middle-end/59037
+ * semantics.c (cxx_fold_indirect_ref): Don't create out-of-bounds
+ BIT_FIELD_REF.
+
+2013-11-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/59297
+ * semantics.c (finish_omp_atomic): Call finish_expr_stmt
+ rather than add_stmt.
+
+2013-11-23 Easwaran Raman <eraman@google.com>
+
+ PR c++/59031
+ * call.c (build_new_method_call_1): Comnpare function context
+ with BASELINK_BINFO type rather than instance type before
+ marking the call with LOOKUP_NONVIRTUAL.
+
+2013-10-31 Jason Merrill <jason@redhat.com>
+
+ PR c++/58162
+ * parser.c (cp_parser_late_parse_one_default_arg): Set
+ TARGET_EXPR_DIRECT_INIT_P.
+
+2013-11-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * cvt.c (cp_convert_to_pointer): Call build_ptrmemfunc before
+ maybe_warn_zero_as_null_pointer_constant to avoid duplicate
+ -Wzero-as-null-pointer-constant diagnostics.
+
+ * typeck.c (build_ptrmemfunc): Use cp_build_c_cast.
+
+2013-10-25 Tom de Vries <tom@codesourcery.com>
+
+ PR c++/58282
+ * except.c (build_must_not_throw_expr): Handle
+ flag_exceptions.
+
+2013-10-17 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/58596
+ * semantics.c (lambda_expr_this_capture): Handle NSDMIs in the
+ cp_unevaluated_operand case.
+
+2013-10-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/58633
+ * parser.c (cp_parser_pseudo_destructor_name): Revert r174385 changes.
+
+2013-10-16 Jason Merrill <jason@redhat.com>
+
+ PR c++/57850
+ * decl2.c (dump_tu): Split out from...
+ (cp_write_global_declarations): ...here. Call it in PCH mode.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/gcc/cp/call.c b/gcc-4.8/gcc/cp/call.c
index a5be421fe..7c46cb5f4 100644
--- a/gcc-4.8/gcc/cp/call.c
+++ b/gcc-4.8/gcc/cp/call.c
@@ -892,6 +892,9 @@ build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
if (i < CONSTRUCTOR_NELTS (ctor))
val = CONSTRUCTOR_ELT (ctor, i)->value;
+ else if (TREE_CODE (ftype) == REFERENCE_TYPE)
+ /* Value-initialization of reference is ill-formed. */
+ return NULL;
else
{
if (empty_ctor == NULL_TREE)
@@ -940,6 +943,9 @@ build_array_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
bool user = false;
enum conversion_rank rank = cr_exact;
+ /* We might need to propagate the size from the element to the array. */
+ complete_type (type);
+
if (TYPE_DOMAIN (type))
{
unsigned HOST_WIDE_INT alen = tree_low_cst (array_type_nelts_top (type), 1);
@@ -5806,9 +5812,11 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
&& convs->kind != ck_ambig
&& (convs->kind != ck_ref_bind
|| convs->user_conv_p)
- && convs->kind != ck_rvalue
+ && (convs->kind != ck_rvalue
+ || SCALAR_TYPE_P (totype))
&& convs->kind != ck_base)
{
+ bool complained = false;
conversion *t = convs;
/* Give a helpful error if this is bad because of excess braces. */
@@ -5816,7 +5824,14 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
&& SCALAR_TYPE_P (totype)
&& CONSTRUCTOR_NELTS (expr) > 0
&& BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
- permerror (loc, "too many braces around initializer for %qT", totype);
+ {
+ complained = true;
+ permerror (loc, "too many braces around initializer "
+ "for %qT", totype);
+ while (BRACE_ENCLOSED_INITIALIZER_P (expr)
+ && CONSTRUCTOR_NELTS (expr) == 1)
+ expr = CONSTRUCTOR_ELT (expr, 0)->value;
+ }
for (; t ; t = next_conversion (t))
{
@@ -5853,6 +5868,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
break;
}
+ if (!complained)
permerror (loc, "invalid conversion from %qT to %qT",
TREE_TYPE (expr), totype);
if (fn)
@@ -5999,6 +6015,8 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
to avoid the error about taking the address of a temporary. */
array = cp_build_addr_expr (array, complain);
array = cp_convert (build_pointer_type (elttype), array, complain);
+ if (array == error_mark_node)
+ return error_mark_node;
/* Build up the initializer_list object. */
totype = complete_type (totype);
@@ -6023,8 +6041,11 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
return fold_if_not_in_template (expr);
}
expr = reshape_init (totype, expr, complain);
- return get_target_expr_sfinae (digest_init (totype, expr, complain),
+ expr = get_target_expr_sfinae (digest_init (totype, expr, complain),
complain);
+ if (expr != error_mark_node)
+ TARGET_EXPR_LIST_INIT_P (expr) = true;
+ return expr;
default:
break;
@@ -6405,20 +6426,10 @@ convert_default_arg (tree type, tree arg, tree fn, int parmnum,
/* We must make a copy of ARG, in case subsequent processing
alters any part of it. */
arg = break_out_target_exprs (arg);
- if (TREE_CODE (arg) == CONSTRUCTOR)
- {
- arg = digest_init (type, arg, complain);
- arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
- ICR_DEFAULT_ARGUMENT, fn, parmnum,
- complain);
- }
- else
- {
arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
ICR_DEFAULT_ARGUMENT, fn, parmnum,
complain);
arg = convert_for_arg_passing (type, arg, complain);
- }
pop_deferring_access_checks();
pop_defarg_context ();
@@ -7414,7 +7425,7 @@ build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
struct z_candidate *candidates = 0, *cand;
tree explicit_targs = NULL_TREE;
tree basetype = NULL_TREE;
- tree access_binfo;
+ tree access_binfo, binfo;
tree optype;
tree first_mem_arg = NULL_TREE;
tree instance_ptr;
@@ -7454,6 +7465,7 @@ build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
if (!conversion_path)
conversion_path = BASELINK_BINFO (fns);
access_binfo = BASELINK_ACCESS_BINFO (fns);
+ binfo = BASELINK_BINFO (fns);
optype = BASELINK_OPTYPE (fns);
fns = BASELINK_FUNCTIONS (fns);
if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
@@ -7697,13 +7709,13 @@ build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
{
/* Optimize away vtable lookup if we know that this
function can't be overridden. We need to check if
- the context and the instance type are the same,
+ the context and the type where we found fn are the same,
actually FN might be defined in a different class
type because of a using-declaration. In this case, we
do not want to perform a non-virtual call. */
if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
&& same_type_ignoring_top_level_qualifiers_p
- (DECL_CONTEXT (fn), TREE_TYPE (instance))
+ (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
&& resolves_to_fixed_type_p (instance, 0))
flags |= LOOKUP_NONVIRTUAL;
if (explicit_targs)
diff --git a/gcc-4.8/gcc/cp/cvt.c b/gcc-4.8/gcc/cp/cvt.c
index 8c03e2086..179650711 100644
--- a/gcc-4.8/gcc/cp/cvt.c
+++ b/gcc-4.8/gcc/cp/cvt.c
@@ -203,13 +203,13 @@ cp_convert_to_pointer (tree type, tree expr, tsubst_flags_t complain)
if (null_ptr_cst_p (expr))
{
- if (complain & tf_warning)
- maybe_warn_zero_as_null_pointer_constant (expr, loc);
-
if (TYPE_PTRMEMFUNC_P (type))
return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0,
/*c_cast_p=*/false, complain);
+ if (complain & tf_warning)
+ maybe_warn_zero_as_null_pointer_constant (expr, loc);
+
/* A NULL pointer-to-data-member is represented by -1, not by
zero. */
tree val = (TYPE_PTRDATAMEM_P (type)
@@ -743,6 +743,7 @@ ocp_convert (tree type, tree expr, int convtype, int flags,
unspecified. */
if ((complain & tf_warning)
&& TREE_CODE (e) == INTEGER_CST
+ && ENUM_UNDERLYING_TYPE (type)
&& !int_fits_type_p (e, ENUM_UNDERLYING_TYPE (type)))
warning_at (loc, OPT_Wconversion,
"the result of the conversion is unspecified because "
diff --git a/gcc-4.8/gcc/cp/decl.c b/gcc-4.8/gcc/cp/decl.c
index 893fbd161..e487f887d 100644
--- a/gcc-4.8/gcc/cp/decl.c
+++ b/gcc-4.8/gcc/cp/decl.c
@@ -1867,9 +1867,9 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
/* Merge the data types specified in the two decls. */
newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
- /* If merge_types produces a non-typedef type, just use the old type. */
- if (TREE_CODE (newdecl) == TYPE_DECL
- && newtype == DECL_ORIGINAL_TYPE (newdecl))
+ /* For typedefs use the old type, as the new type's DECL_NAME points
+ at newdecl, which will be ggc_freed. */
+ if (TREE_CODE (newdecl) == TYPE_DECL)
newtype = oldtype;
if (TREE_CODE (newdecl) == VAR_DECL)
@@ -8193,7 +8193,9 @@ compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
abi_1_itype = error_mark_node;
}
+ if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
size = maybe_constant_value (size);
+
if (!TREE_CONSTANT (size))
size = osize;
}
@@ -8473,6 +8475,14 @@ create_array_type_for_decl (tree name, tree type, tree size)
return error_mark_node;
}
+ /* 8.3.4p1: ...if the type of the identifier of D contains the auto
+ type-specifier, the program is ill-formed. */
+ if (type_uses_auto (type))
+ {
+ error ("%qD declared as array of %qT", name, type);
+ return error_mark_node;
+ }
+
/* Figure out the index type for the array. */
if (size)
itype = compute_array_index_type (name, size, tf_warning_or_error);
@@ -11891,7 +11901,10 @@ lookup_and_check_tag (enum tag_types tag_code, tree name,
if (decl
&& (DECL_CLASS_TEMPLATE_P (decl)
- || DECL_TEMPLATE_TEMPLATE_PARM_P (decl)))
+ /* If scope is ts_current we're defining a class, so ignore a
+ template template parameter. */
+ || (scope != ts_current
+ && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
decl = DECL_TEMPLATE_RESULT (decl);
if (decl && TREE_CODE (decl) == TYPE_DECL)
diff --git a/gcc-4.8/gcc/cp/decl2.c b/gcc-4.8/gcc/cp/decl2.c
index 628be934b..7dd98c07e 100644
--- a/gcc-4.8/gcc/cp/decl2.c
+++ b/gcc-4.8/gcc/cp/decl2.c
@@ -2884,7 +2884,7 @@ get_tls_init_fn (tree var)
TREE_PUBLIC (fn) = TREE_PUBLIC (var);
DECL_ARTIFICIAL (fn) = true;
DECL_COMDAT (fn) = DECL_COMDAT (var);
- DECL_EXTERNAL (fn) = true;
+ DECL_EXTERNAL (fn) = DECL_EXTERNAL (var);
if (DECL_ONE_ONLY (var))
make_decl_one_only (fn, cxx_comdat_group (fn));
if (TREE_PUBLIC (var))
@@ -3946,6 +3946,8 @@ handle_tls_init (void)
if (TREE_PUBLIC (var))
{
tree single_init_fn = get_tls_init_fn (var);
+ if (single_init_fn == NULL_TREE)
+ continue;
cgraph_node *alias
= cgraph_same_body_alias (cgraph_get_create_node (fn),
single_init_fn, fn);
@@ -3960,6 +3962,22 @@ handle_tls_init (void)
expand_or_defer_fn (finish_function (0));
}
+/* The entire file is now complete. If requested, dump everything
+ to a file. */
+
+static void
+dump_tu (void)
+{
+ int flags;
+ FILE *stream = dump_begin (TDI_tu, &flags);
+
+ if (stream)
+ {
+ dump_node (global_namespace, flags & ~TDF_SLIM, stream);
+ dump_end (TDI_tu, stream);
+ }
+}
+
/* This routine is called at the end of compilation.
Its job is to create all the code needed to initialize and
destroy the global aggregates. We do the destruction
@@ -3990,6 +4008,7 @@ cp_write_global_declarations (void)
if (pch_file)
{
c_common_write_pch ();
+ dump_tu ();
return;
}
@@ -4359,16 +4378,7 @@ cp_write_global_declarations (void)
/* The entire file is now complete. If requested, dump everything
to a file. */
- {
- int flags;
- FILE *stream = dump_begin (TDI_tu, &flags);
-
- if (stream)
- {
- dump_node (global_namespace, flags & ~TDF_SLIM, stream);
- dump_end (TDI_tu, stream);
- }
- }
+ dump_tu ();
if (flag_detailed_statistics)
{
diff --git a/gcc-4.8/gcc/cp/except.c b/gcc-4.8/gcc/cp/except.c
index 216ec103f..604f274fb 100644
--- a/gcc-4.8/gcc/cp/except.c
+++ b/gcc-4.8/gcc/cp/except.c
@@ -380,6 +380,9 @@ build_must_not_throw_expr (tree body, tree cond)
{
tree type = body ? TREE_TYPE (body) : void_type_node;
+ if (!flag_exceptions)
+ return body;
+
if (cond && !value_dependent_expression_p (cond))
{
cond = cxx_constant_value (cond);
diff --git a/gcc-4.8/gcc/cp/mangle.c b/gcc-4.8/gcc/cp/mangle.c
index dd5ed8d0d..26d360396 100644
--- a/gcc-4.8/gcc/cp/mangle.c
+++ b/gcc-4.8/gcc/cp/mangle.c
@@ -3480,6 +3480,7 @@ mangle_decl (const tree decl)
if (G.need_abi_warning
/* Don't do this for a fake symbol we aren't going to emit anyway. */
+ && TREE_CODE (decl) != TYPE_DECL
&& !DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
&& !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
{
@@ -3775,7 +3776,8 @@ mangle_conv_op_name_for_type (const tree type)
static void
write_guarded_var_name (const tree variable)
{
- if (strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
+ if (DECL_NAME (variable)
+ && strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
/* The name of a guard variable for a reference temporary should refer
to the reference, not the temporary. */
write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4);
diff --git a/gcc-4.8/gcc/cp/name-lookup.c b/gcc-4.8/gcc/cp/name-lookup.c
index c121a4163..da167ec41 100644
--- a/gcc-4.8/gcc/cp/name-lookup.c
+++ b/gcc-4.8/gcc/cp/name-lookup.c
@@ -394,7 +394,8 @@ pop_binding (tree id, tree decl)
}
}
-/* Strip non dependent using declarations. */
+/* Strip non dependent using declarations. If DECL is dependent,
+ surreptitiously create a typename_type and return it. */
tree
strip_using_decl (tree decl)
@@ -404,6 +405,23 @@ strip_using_decl (tree decl)
while (TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
decl = USING_DECL_DECLS (decl);
+
+ if (TREE_CODE (decl) == USING_DECL && DECL_DEPENDENT_P (decl)
+ && USING_DECL_TYPENAME_P (decl))
+ {
+ /* We have found a type introduced by a using
+ declaration at class scope that refers to a dependent
+ type.
+
+ using typename :: [opt] nested-name-specifier unqualified-id ;
+ */
+ decl = make_typename_type (TREE_TYPE (decl),
+ DECL_NAME (decl),
+ typename_type, tf_error);
+ if (decl != error_mark_node)
+ decl = TYPE_NAME (decl);
+ }
+
return decl;
}
@@ -5605,9 +5623,9 @@ static tree
push_using_directive (tree used)
{
tree ret;
- timevar_start (TV_NAME_LOOKUP);
+ bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
ret = push_using_directive_1 (used);
- timevar_stop (TV_NAME_LOOKUP);
+ timevar_cond_stop (TV_NAME_LOOKUP, subtime);
return ret;
}
diff --git a/gcc-4.8/gcc/cp/parser.c b/gcc-4.8/gcc/cp/parser.c
index b6322788f..3c1dec529 100644
--- a/gcc-4.8/gcc/cp/parser.c
+++ b/gcc-4.8/gcc/cp/parser.c
@@ -6421,10 +6421,6 @@ cp_parser_pseudo_destructor_name (cp_parser* parser,
/* Look for the `~'. */
cp_parser_require (parser, CPP_COMPL, RT_COMPL);
- /* Once we see the ~, this has to be a pseudo-destructor. */
- if (!processing_template_decl && !cp_parser_error_occurred (parser))
- cp_parser_commit_to_tentative_parse (parser);
-
/* Look for the type-name again. We are not responsible for
checking that it matches the first type-name. */
*type = cp_parser_nonclass_name (parser);
@@ -14168,25 +14164,7 @@ cp_parser_nonclass_name (cp_parser* parser)
/* Look up the type-name. */
type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
- if (TREE_CODE (type_decl) == USING_DECL)
- {
- if (!DECL_DEPENDENT_P (type_decl))
type_decl = strip_using_decl (type_decl);
- else if (USING_DECL_TYPENAME_P (type_decl))
- {
- /* We have found a type introduced by a using
- declaration at class scope that refers to a dependent
- type.
-
- using typename :: [opt] nested-name-specifier unqualified-id ;
- */
- type_decl = make_typename_type (TREE_TYPE (type_decl),
- DECL_NAME (type_decl),
- typename_type, tf_error);
- if (type_decl != error_mark_node)
- type_decl = TYPE_NAME (type_decl);
- }
- }
if (TREE_CODE (type_decl) != TYPE_DECL
&& (objc_is_id (identifier) || objc_is_class_name (identifier)))
@@ -14742,7 +14720,8 @@ cp_parser_enum_specifier (cp_parser* parser)
{
underlying_type = grokdeclarator (NULL, &type_specifiers, TYPENAME,
/*initialized=*/0, NULL);
- if (underlying_type == error_mark_node)
+ if (underlying_type == error_mark_node
+ || check_for_bare_parameter_packs (underlying_type))
underlying_type = NULL_TREE;
}
}
@@ -22209,6 +22188,9 @@ cp_parser_functional_cast (cp_parser* parser, tree type)
tree cast;
bool nonconst_p;
+ if (!type)
+ type = error_mark_node;
+
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
{
maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
@@ -22576,6 +22558,9 @@ cp_parser_late_parse_one_default_arg (cp_parser *parser, tree decl,
&& CONSTRUCTOR_IS_DIRECT_INIT (parsed_arg))
flags = LOOKUP_NORMAL;
parsed_arg = digest_init_flags (TREE_TYPE (decl), parsed_arg, flags);
+ if (TREE_CODE (parsed_arg) == TARGET_EXPR)
+ /* This represents the whole initialization. */
+ TARGET_EXPR_DIRECT_INIT_P (parsed_arg) = true;
}
}
diff --git a/gcc-4.8/gcc/cp/pt.c b/gcc-4.8/gcc/cp/pt.c
index 5885021a4..c44e3d0b2 100644
--- a/gcc-4.8/gcc/cp/pt.c
+++ b/gcc-4.8/gcc/cp/pt.c
@@ -1419,6 +1419,8 @@ register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
= DECL_DECLARED_INLINE_P (fn);
DECL_SOURCE_LOCATION (clone)
= DECL_SOURCE_LOCATION (fn);
+ DECL_DELETED_FN (clone)
+ = DECL_DELETED_FN (fn);
}
check_specialization_namespace (tmpl);
@@ -3436,7 +3438,7 @@ expand_template_argument_pack (tree args)
for (i = 0; i < num_packed; ++i, ++out_arg)
TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
if (non_default_args_count > 0)
- non_default_args_count += num_packed;
+ non_default_args_count += num_packed - 1;
}
else
{
@@ -3491,6 +3493,11 @@ check_template_shadow (tree decl)
|| TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
return true;
+ /* Don't complain about the injected class name, as we've already
+ complained about the class itself. */
+ if (DECL_SELF_REFERENCE_P (decl))
+ return false;
+
error ("declaration of %q+#D", decl);
error (" shadows template parm %q+#D", olddecl);
return false;
@@ -6672,6 +6679,8 @@ coerce_template_parms (tree parms,
/* Store this argument. */
if (arg == error_mark_node)
lost++;
+ if (lost)
+ break;
TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
/* We are done with all of the arguments. */
@@ -12694,27 +12703,43 @@ tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
tsubst_expr ((NODE), args, complain, in_decl, \
integral_constant_expression_p)
tree decl, init, cond, incr;
- bool init_decl;
init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
decl = TREE_OPERAND (init, 0);
init = TREE_OPERAND (init, 1);
- /* Do this before substituting into decl to handle 'auto'. */
- init_decl = (init && TREE_CODE (init) == DECL_EXPR);
- init = RECUR (init);
- decl = RECUR (decl);
- if (init_decl)
+ tree decl_expr = NULL_TREE;
+ if (init && TREE_CODE (init) == DECL_EXPR)
{
- gcc_assert (!processing_template_decl);
- init = DECL_INITIAL (decl);
- DECL_INITIAL (decl) = NULL_TREE;
+ /* We need to jump through some hoops to handle declarations in the
+ for-init-statement, since we might need to handle auto deduction,
+ but we need to keep control of initialization. */
+ decl_expr = init;
+ init = DECL_INITIAL (DECL_EXPR_DECL (init));
+ decl = tsubst_decl (decl, args, complain);
}
+ else
+ decl = RECUR (decl);
+ init = RECUR (init);
+
+ tree auto_node = type_uses_auto (TREE_TYPE (decl));
+ if (auto_node && init)
+ TREE_TYPE (decl)
+ = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
gcc_assert (!type_dependent_expression_p (decl));
if (!CLASS_TYPE_P (TREE_TYPE (decl)))
{
+ if (decl_expr)
+ {
+ /* Declare the variable, but don't let that initialize it. */
+ tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
+ DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
+ RECUR (decl_expr);
+ DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
+ }
+
cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
if (TREE_CODE (incr) == MODIFY_EXPR)
@@ -12731,7 +12756,13 @@ tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
return;
}
- if (init && !init_decl)
+ if (decl_expr)
+ {
+ /* Declare and initialize the variable. */
+ RECUR (decl_expr);
+ init = NULL_TREE;
+ }
+ else if (init)
{
tree c;
for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
@@ -13710,6 +13741,10 @@ tsubst_copy_and_build (tree t,
RETURN (r);
}
+ case POINTER_PLUS_EXPR:
+ return fold_build_pointer_plus (RECUR (TREE_OPERAND (t, 0)),
+ RECUR (TREE_OPERAND (t, 1)));
+
case SCOPE_REF:
RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
/*address_p=*/false));
@@ -14471,12 +14506,12 @@ tsubst_copy_and_build (tree t,
case TRAIT_EXPR:
{
- tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
+ tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
complain, in_decl);
tree type2 = TRAIT_EXPR_TYPE2 (t);
if (type2)
- type2 = tsubst_copy (type2, args, complain, in_decl);
+ type2 = tsubst (type2, args, complain, in_decl);
RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
}
@@ -14778,6 +14813,8 @@ instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
/* Instantiation of the function happens in the context of the function
template, not the context of the overload resolution we're doing. */
push_to_top_level ();
+ struct pointer_map_t *saved_local_specializations = local_specializations;
+ local_specializations = NULL;
/* If there are dependent arguments, e.g. because we're doing partial
ordering, make sure processing_template_decl stays set. */
if (uses_template_parms (targ_ptr))
@@ -14793,6 +14830,7 @@ instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
targ_ptr, complain, gen_tmpl);
if (DECL_CLASS_SCOPE_P (gen_tmpl))
pop_nested_class ();
+ local_specializations = saved_local_specializations;
pop_from_top_level ();
if (fndecl == error_mark_node)
@@ -15192,8 +15230,11 @@ fn_type_unification (tree fn,
/* If we're looking for an exact match, check that what we got
is indeed an exact match. It might not be if some template
- parameters are used in non-deduced contexts. */
- if (strict == DEDUCE_EXACT)
+ parameters are used in non-deduced contexts. But don't check
+ for an exact match if we have dependent template arguments;
+ in that case we're doing partial ordering, and we already know
+ that we have two candidates that will provide the actual type. */
+ if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
{
tree substed = TREE_TYPE (decl);
unsigned int i;
@@ -15749,7 +15790,7 @@ resolve_overloaded_unification (tree tparms,
if (subargs != error_mark_node
&& !any_dependent_template_arguments_p (subargs))
{
- elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
+ elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
if (try_one_overload (tparms, targs, tempargs, parm,
elem, strict, sub_strict, addr_p, explain_p)
&& (!goodfn || !same_type_p (goodfn, elem)))
@@ -16207,6 +16248,9 @@ unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
tree pattern = PACK_EXPANSION_PATTERN (parm);
tree pack, packs = NULL_TREE;
int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
+
+ packed_args = expand_template_argument_pack (packed_args);
+
int len = TREE_VEC_LENGTH (packed_args);
/* Determine the parameter packs we will be deducing from the
@@ -16574,9 +16618,11 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict,
if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
&& !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
return unify_template_deduction_failure (explain_p, parm, arg);
-
{
tree parmvec = TYPE_TI_ARGS (parm);
+ /* An alias template name is never deduced. */
+ if (TYPE_ALIAS_P (arg))
+ arg = strip_typedefs (arg);
tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
tree full_argvec = add_to_template_args (targs, argvec);
tree parm_parms
@@ -18552,6 +18598,10 @@ maybe_instantiate_noexcept (tree fn)
{
tree fntype, spec, noex, clone;
+ /* Don't instantiate a noexcept-specification from template context. */
+ if (processing_template_decl)
+ return;
+
if (DECL_CLONED_FUNCTION_P (fn))
fn = DECL_CLONED_FUNCTION (fn);
fntype = TREE_TYPE (fn);
@@ -19954,6 +20004,10 @@ type_dependent_expression_p (tree expression)
if (TREE_CODE (expression) == SCOPE_REF)
return false;
+ /* Always dependent, on the number of arguments if nothing else. */
+ if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
+ return true;
+
if (BASELINK_P (expression))
expression = BASELINK_FUNCTIONS (expression);
diff --git a/gcc-4.8/gcc/cp/semantics.c b/gcc-4.8/gcc/cp/semantics.c
index 580c609ac..0debc78e8 100644
--- a/gcc-4.8/gcc/cp/semantics.c
+++ b/gcc-4.8/gcc/cp/semantics.c
@@ -2501,7 +2501,8 @@ finish_fname (tree id)
tree decl;
decl = fname_decl (input_location, C_RID_CODE (id), id);
- if (processing_template_decl && current_function_decl)
+ if (processing_template_decl && current_function_decl
+ && decl != error_mark_node)
decl = DECL_NAME (decl);
return decl;
}
@@ -3853,7 +3854,7 @@ expand_or_defer_fn_1 (tree fn)
linkage of all functions, and as that causes writes to
the data mapped in from the PCH file, it's advantageous
to mark the functions at this point. */
- if (!DECL_IMPLICIT_INSTANTIATION (fn))
+ if (!DECL_IMPLICIT_INSTANTIATION (fn) || DECL_DEFAULTED_FN (fn))
{
/* This function must have external linkage, as
otherwise DECL_INTERFACE_KNOWN would have been
@@ -4291,7 +4292,8 @@ finish_omp_clauses (tree clauses)
error ("%qE has invalid type for %<reduction%>", t);
remove = true;
}
- else if (FLOAT_TYPE_P (TREE_TYPE (t)))
+ else if (FLOAT_TYPE_P (TREE_TYPE (t))
+ || TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
{
enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
switch (r_code)
@@ -4299,10 +4301,26 @@ finish_omp_clauses (tree clauses)
case PLUS_EXPR:
case MULT_EXPR:
case MINUS_EXPR:
+ break;
case MIN_EXPR:
case MAX_EXPR:
+ if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
+ r_code = ERROR_MARK;
break;
+ case BIT_AND_EXPR:
+ case BIT_XOR_EXPR:
+ case BIT_IOR_EXPR:
default:
+ r_code = ERROR_MARK;
+ break;
+ case TRUTH_ANDIF_EXPR:
+ case TRUTH_ORIF_EXPR:
+ if (FLOAT_TYPE_P (TREE_TYPE (t)))
+ r_code = ERROR_MARK;
+ break;
+ }
+ if (r_code == ERROR_MARK)
+ {
error ("%qE has invalid type for %<reduction(%s)%>",
t, operator_name_info[r_code].name);
remove = true;
@@ -5059,7 +5077,7 @@ finish_omp_atomic (enum tree_code code, enum tree_code opcode, tree lhs,
}
stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node, stmt);
}
- add_stmt (stmt);
+ finish_expr_stmt (stmt);
}
void
@@ -7543,7 +7561,7 @@ cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
tree index = bitsize_int (indexi);
- if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
+ if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
return fold_build3_loc (loc,
BIT_FIELD_REF, type, op00,
part_width, index);
@@ -9481,7 +9499,14 @@ lambda_expr_this_capture (tree lambda)
/* In unevaluated context this isn't an odr-use, so just return the
nearest 'this'. */
if (cp_unevaluated_operand)
+ {
+ /* In an NSDMI the fake 'this' pointer that we're using for
+ parsing is in scope_chain. */
+ if (LAMBDA_EXPR_EXTRA_SCOPE (lambda)
+ && TREE_CODE (LAMBDA_EXPR_EXTRA_SCOPE (lambda)) == FIELD_DECL)
+ return scope_chain->x_current_class_ptr;
return lookup_name (this_identifier);
+ }
/* Try to default capture 'this' if we can. */
if (!this_capture
diff --git a/gcc-4.8/gcc/cp/typeck.c b/gcc-4.8/gcc/cp/typeck.c
index 1a64b6890..2fa47025b 100644
--- a/gcc-4.8/gcc/cp/typeck.c
+++ b/gcc-4.8/gcc/cp/typeck.c
@@ -4103,6 +4103,11 @@ cp_build_binary_op (location_t location,
case TRUTH_ORIF_EXPR:
case TRUTH_AND_EXPR:
case TRUTH_OR_EXPR:
+ if (TREE_CODE (type0) == VECTOR_TYPE || TREE_CODE (type1) == VECTOR_TYPE)
+ {
+ sorry ("logical operation on vector type");
+ return error_mark_node;
+ }
result_type = boolean_type_node;
break;
@@ -5010,7 +5015,10 @@ tree
cp_truthvalue_conversion (tree expr)
{
tree type = TREE_TYPE (expr);
- if (TYPE_PTRDATAMEM_P (type))
+ if (TYPE_PTRDATAMEM_P (type)
+ /* Avoid ICE on invalid use of non-static member function. */
+ || (TREE_CODE (expr) == FUNCTION_DECL
+ && DECL_NONSTATIC_MEMBER_FUNCTION_P (expr)))
return build_binary_op (EXPR_LOCATION (expr),
NE_EXPR, expr, nullptr_node, 1);
else if (TYPE_PTR_P (type) || TYPE_PTRMEMFUNC_P (type))
@@ -5588,7 +5596,9 @@ cp_build_unary_op (enum tree_code code, tree xarg, int noconvert,
inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
}
else
- inc = integer_one_node;
+ inc = (TREE_CODE (argtype) == VECTOR_TYPE
+ ? build_one_cst (argtype)
+ : integer_one_node);
inc = cp_convert (argtype, inc, complain);
@@ -6639,7 +6649,7 @@ build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p,
where possible, and it is necessary in some cases. DR 195
addresses this issue, but as of 2004/10/26 is still in
drafting. */
- warning (0, "ISO C++ forbids casting between pointer-to-function and pointer-to-object");
+ warning (OPT_Wpedantic, "ISO C++ forbids casting between pointer-to-function and pointer-to-object");
return fold_if_not_in_template (build_nop (type, expr));
}
else if (TREE_CODE (type) == VECTOR_TYPE)
@@ -7194,8 +7204,7 @@ cp_build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs,
side effect associated with any single compound assignment
operator. -- end note ] */
lhs = stabilize_reference (lhs);
- if (TREE_SIDE_EFFECTS (rhs))
- rhs = mark_rvalue_use (rhs);
+ rhs = rvalue (rhs);
rhs = stabilize_expr (rhs, &init);
newrhs = cp_build_binary_op (input_location,
modifycode, lhs, rhs,
@@ -7611,7 +7620,7 @@ build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p,
/* Handle null pointer to member function conversions. */
if (null_ptr_cst_p (pfn))
{
- pfn = build_c_cast (input_location, type, pfn);
+ pfn = cp_build_c_cast (type, pfn, complain);
return build_ptrmemfunc1 (to_type,
integer_zero_node,
pfn);
diff --git a/gcc-4.8/gcc/cp/typeck2.c b/gcc-4.8/gcc/cp/typeck2.c
index 9c9f0751f..e7e1246e1 100644
--- a/gcc-4.8/gcc/cp/typeck2.c
+++ b/gcc-4.8/gcc/cp/typeck2.c
@@ -1015,6 +1015,7 @@ digest_init_flags (tree type, tree init, int flags)
#define PICFLAG_ERRONEOUS 1
#define PICFLAG_NOT_ALL_CONSTANT 2
#define PICFLAG_NOT_ALL_SIMPLE 4
+#define PICFLAG_SIDE_EFFECTS 8
/* Given an initializer INIT, return the flag (PICFLAG_*) which better
describe it. */
@@ -1025,7 +1026,12 @@ picflag_from_initializer (tree init)
if (init == error_mark_node)
return PICFLAG_ERRONEOUS;
else if (!TREE_CONSTANT (init))
+ {
+ if (TREE_SIDE_EFFECTS (init))
+ return PICFLAG_SIDE_EFFECTS;
+ else
return PICFLAG_NOT_ALL_CONSTANT;
+ }
else if (!initializer_constant_valid_p (init, TREE_TYPE (init)))
return PICFLAG_NOT_ALL_SIMPLE;
return 0;
@@ -1392,7 +1398,12 @@ process_init_constructor (tree type, tree init, tsubst_flags_t complain)
TREE_TYPE (init) = type;
if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
cp_complete_array_type (&TREE_TYPE (init), init, /*do_default=*/0);
- if (flags & PICFLAG_NOT_ALL_CONSTANT)
+ if (flags & PICFLAG_SIDE_EFFECTS)
+ {
+ TREE_CONSTANT (init) = false;
+ TREE_SIDE_EFFECTS (init) = true;
+ }
+ else if (flags & PICFLAG_NOT_ALL_CONSTANT)
/* Make sure TREE_CONSTANT isn't set from build_constructor. */
TREE_CONSTANT (init) = false;
else
diff --git a/gcc-4.8/gcc/cse.c b/gcc-4.8/gcc/cse.c
index b200fef4d..eb17f6979 100644
--- a/gcc-4.8/gcc/cse.c
+++ b/gcc-4.8/gcc/cse.c
@@ -1824,7 +1824,7 @@ flush_hash_table (void)
}
}
-/* Function called for each rtx to check whether true dependence exist. */
+/* Function called for each rtx to check whether an anti dependence exist. */
struct check_dependence_data
{
enum machine_mode mode;
@@ -1837,7 +1837,7 @@ check_dependence (rtx *x, void *data)
{
struct check_dependence_data *d = (struct check_dependence_data *) data;
if (*x && MEM_P (*x))
- return canon_true_dependence (d->exp, d->mode, d->addr, *x, NULL_RTX);
+ return canon_anti_dependence (*x, true, d->exp, d->mode, d->addr);
else
return 0;
}
@@ -5659,9 +5659,10 @@ cse_insn (rtx insn)
invalidate (XEXP (dest, 0), GET_MODE (dest));
}
- /* A volatile ASM or an UNSPEC_VOLATILE invalidates everything. */
+ /* A volatile ASM invalidates everything. */
if (NONJUMP_INSN_P (insn)
- && volatile_insn_p (PATTERN (insn)))
+ && GET_CODE (PATTERN (insn)) == ASM_OPERANDS
+ && MEM_VOLATILE_P (PATTERN (insn)))
flush_hash_table ();
/* Don't cse over a call to setjmp; on some machines (eg VAX)
@@ -6082,6 +6083,18 @@ cse_process_notes_1 (rtx x, rtx object, bool *changed)
return x;
}
+ case UNSIGNED_FLOAT:
+ {
+ rtx new_rtx = cse_process_notes (XEXP (x, 0), object, changed);
+ /* We don't substitute negative VOIDmode constants into these rtx,
+ since they would impede folding. */
+ if (GET_MODE (new_rtx) != VOIDmode
+ || (CONST_INT_P (new_rtx) && INTVAL (new_rtx) >= 0)
+ || (CONST_DOUBLE_P (new_rtx) && CONST_DOUBLE_HIGH (new_rtx) >= 0))
+ validate_change (object, &XEXP (x, 0), new_rtx, 0);
+ return x;
+ }
+
case REG:
i = REG_QTY (REGNO (x));
diff --git a/gcc-4.8/gcc/cselib.c b/gcc-4.8/gcc/cselib.c
index f2021b985..1e59f3a1b 100644
--- a/gcc-4.8/gcc/cselib.c
+++ b/gcc-4.8/gcc/cselib.c
@@ -2260,8 +2260,8 @@ cselib_invalidate_mem (rtx mem_rtx)
continue;
}
if (num_mems < PARAM_VALUE (PARAM_MAX_CSELIB_MEMORY_LOCATIONS)
- && ! canon_true_dependence (mem_rtx, GET_MODE (mem_rtx),
- mem_addr, x, NULL_RTX))
+ && ! canon_anti_dependence (x, false, mem_rtx,
+ GET_MODE (mem_rtx), mem_addr))
{
has_mem = true;
num_mems++;
@@ -2623,12 +2623,13 @@ cselib_process_insn (rtx insn)
cselib_current_insn = insn;
- /* Forget everything at a CODE_LABEL, a volatile insn, or a setjmp. */
+ /* Forget everything at a CODE_LABEL, a volatile asm, or a setjmp. */
if ((LABEL_P (insn)
|| (CALL_P (insn)
&& find_reg_note (insn, REG_SETJMP, NULL))
|| (NONJUMP_INSN_P (insn)
- && volatile_insn_p (PATTERN (insn))))
+ && GET_CODE (PATTERN (insn)) == ASM_OPERANDS
+ && MEM_VOLATILE_P (PATTERN (insn))))
&& !cselib_preserve_constants)
{
cselib_reset_table (next_uid);
diff --git a/gcc-4.8/gcc/doc/aot-compile.1 b/gcc-4.8/gcc/doc/aot-compile.1
index c5ee9a688..9c0f0fee9 100644
--- a/gcc-4.8/gcc/doc/aot-compile.1
+++ b/gcc-4.8/gcc/doc/aot-compile.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "AOT-COMPILE 1"
-.TH AOT-COMPILE 1 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH AOT-COMPILE 1 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/gcc/doc/cpp.1 b/gcc-4.8/gcc/doc/cpp.1
index c6e5d4f3a..8eb660f30 100644
--- a/gcc-4.8/gcc/doc/cpp.1
+++ b/gcc-4.8/gcc/doc/cpp.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "CPP 1"
-.TH CPP 1 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH CPP 1 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/gcc/doc/cpp.info b/gcc-4.8/gcc/doc/cpp.info
index bcf62824b..36327d348 100644
--- a/gcc-4.8/gcc/doc/cpp.info
+++ b/gcc-4.8/gcc/doc/cpp.info
@@ -1,5 +1,5 @@
-This is doc/cpp.info, produced by makeinfo version 4.13 from
-/d/gcc-4.8.1/gcc-4.8.1/gcc/doc/cpp.texi.
+This is doc/cpp.info, produced by makeinfo version 4.12 from
+/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/doc/cpp.texi.
Copyright (C) 1987-2013 Free Software Foundation, Inc.
@@ -1734,11 +1734,10 @@ with `__FILE__' and `__LINE__', though.
This macro is defined when the C++ compiler is in use. You can use
`__cplusplus' to test whether a header is compiled by a C compiler
or a C++ compiler. This macro is similar to `__STDC_VERSION__', in
- that it expands to a version number. A fully conforming
- implementation of the 1998 C++ standard will define this macro to
- `199711L'. The GNU C++ compiler is not yet fully conforming, so
- it uses `1' instead. It is hoped to complete the implementation
- of standard C++ in the near future.
+ that it expands to a version number. Depending on the language
+ standard selected, the value of the macro is `199711L', as
+ mandated by the 1998 C++ standard, or `201103L', per the 2011 C++
+ standard.
`__OBJC__'
This macro is defined, with value 1, when the Objective-C compiler
@@ -2112,7 +2111,7 @@ double underscores.
`__GXX_EXPERIMENTAL_CXX0X__'
This macro is defined when compiling a C++ source file with the
option `-std=c++0x' or `-std=gnu++0x'. It indicates that some
- features likely to be included in C++0x are available. Note that
+ features likely to be included in C++0x are available. Note that
these features are experimental, and may change or be removed in
future versions of GCC.
@@ -4510,9 +4509,9 @@ single-letter options may _not_ be grouped: `-dM' is very different from
When used without `-E', this option has no effect.
`-ftrack-macro-expansion[=LEVEL]'
- Track locations of tokens across macro expansions. This allows the
+ Track locations of tokens across macro expansions. This allows the
compiler to emit diagnostic about the current macro expansion stack
- when a compilation error occurs in a macro expansion. Using this
+ when a compilation error occurs in a macro expansion. Using this
option makes the preprocessor and the compiler consume more
memory. The LEVEL parameter can be used to choose the level of
precision of token location tracking thus decreasing the memory
@@ -5156,7 +5155,7 @@ GNU Free Documentation License
not permanently reinstated, receipt of a copy of some or all of
the same material does not give you any rights to use it.
- 10. FUTURE REVISIONS OF THIS LICENSE
+ 10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of
the GNU Free Documentation License from time to time. Such new
@@ -5177,7 +5176,7 @@ GNU Free Documentation License
proxy's public statement of acceptance of a version permanently
authorizes you to choose that version for the Document.
- 11. RELICENSING
+ 11. RELICENSING
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
World Wide Web server that publishes copyrightable works and also
@@ -5224,7 +5223,7 @@ notices just after the title page:
Free Documentation License''.
If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
+Texts, replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with
the Front-Cover Texts being LIST, and with the Back-Cover Texts
@@ -5519,79 +5518,79 @@ Concept Index

Tag Table:
-Node: Top982
-Node: Overview3587
-Node: Character sets6420
-Ref: Character sets-Footnote-18603
-Node: Initial processing8784
-Ref: trigraphs10343
-Node: Tokenization14545
-Ref: Tokenization-Footnote-121681
-Node: The preprocessing language21792
-Node: Header Files24670
-Node: Include Syntax26586
-Node: Include Operation28223
-Node: Search Path30071
-Node: Once-Only Headers33272
-Node: Alternatives to Wrapper #ifndef34931
-Node: Computed Includes36674
-Node: Wrapper Headers39832
-Node: System Headers42258
-Node: Macros44308
-Node: Object-like Macros45449
-Node: Function-like Macros49039
-Node: Macro Arguments50655
-Node: Stringification54800
-Node: Concatenation58006
-Node: Variadic Macros61114
-Node: Predefined Macros65901
-Node: Standard Predefined Macros66489
-Node: Common Predefined Macros72426
-Node: System-specific Predefined Macros90049
-Node: C++ Named Operators92072
-Node: Undefining and Redefining Macros93036
-Node: Directives Within Macro Arguments95140
-Node: Macro Pitfalls96688
-Node: Misnesting97221
-Node: Operator Precedence Problems98333
-Node: Swallowing the Semicolon100199
-Node: Duplication of Side Effects102222
-Node: Self-Referential Macros104405
-Node: Argument Prescan106814
-Node: Newlines in Arguments110568
-Node: Conditionals111519
-Node: Conditional Uses113349
-Node: Conditional Syntax114707
-Node: Ifdef115027
-Node: If118188
-Node: Defined120492
-Node: Else121775
-Node: Elif122345
-Node: Deleted Code123634
-Node: Diagnostics124881
-Node: Line Control126428
-Node: Pragmas130232
-Node: Other Directives134988
-Node: Preprocessor Output136038
-Node: Traditional Mode139239
-Node: Traditional lexical analysis140297
-Node: Traditional macros142800
-Node: Traditional miscellany146602
-Node: Traditional warnings147599
-Node: Implementation Details149796
-Node: Implementation-defined behavior150417
-Ref: Identifier characters151169
-Node: Implementation limits154247
-Node: Obsolete Features156921
-Node: Differences from previous versions159809
-Node: Invocation164017
-Ref: Wtrigraphs168469
-Ref: dashMF173244
-Ref: fdollars-in-identifiers182975
-Node: Environment Variables192844
-Node: GNU Free Documentation License195810
-Node: Index of Directives220974
-Node: Option Index223054
-Node: Concept Index229457
+Node: Top996
+Node: Overview3601
+Node: Character sets6434
+Ref: Character sets-Footnote-18617
+Node: Initial processing8798
+Ref: trigraphs10357
+Node: Tokenization14559
+Ref: Tokenization-Footnote-121695
+Node: The preprocessing language21806
+Node: Header Files24684
+Node: Include Syntax26600
+Node: Include Operation28237
+Node: Search Path30085
+Node: Once-Only Headers33286
+Node: Alternatives to Wrapper #ifndef34945
+Node: Computed Includes36688
+Node: Wrapper Headers39846
+Node: System Headers42272
+Node: Macros44322
+Node: Object-like Macros45463
+Node: Function-like Macros49053
+Node: Macro Arguments50669
+Node: Stringification54814
+Node: Concatenation58020
+Node: Variadic Macros61128
+Node: Predefined Macros65915
+Node: Standard Predefined Macros66503
+Node: Common Predefined Macros72345
+Node: System-specific Predefined Macros89968
+Node: C++ Named Operators91991
+Node: Undefining and Redefining Macros92955
+Node: Directives Within Macro Arguments95059
+Node: Macro Pitfalls96607
+Node: Misnesting97140
+Node: Operator Precedence Problems98252
+Node: Swallowing the Semicolon100118
+Node: Duplication of Side Effects102141
+Node: Self-Referential Macros104324
+Node: Argument Prescan106733
+Node: Newlines in Arguments110487
+Node: Conditionals111438
+Node: Conditional Uses113268
+Node: Conditional Syntax114626
+Node: Ifdef114946
+Node: If118107
+Node: Defined120411
+Node: Else121694
+Node: Elif122264
+Node: Deleted Code123553
+Node: Diagnostics124800
+Node: Line Control126347
+Node: Pragmas130151
+Node: Other Directives134907
+Node: Preprocessor Output135957
+Node: Traditional Mode139158
+Node: Traditional lexical analysis140216
+Node: Traditional macros142719
+Node: Traditional miscellany146521
+Node: Traditional warnings147518
+Node: Implementation Details149715
+Node: Implementation-defined behavior150336
+Ref: Identifier characters151088
+Node: Implementation limits154166
+Node: Obsolete Features156840
+Node: Differences from previous versions159728
+Node: Invocation163936
+Ref: Wtrigraphs168388
+Ref: dashMF173163
+Ref: fdollars-in-identifiers182894
+Node: Environment Variables192763
+Node: GNU Free Documentation License195729
+Node: Index of Directives220893
+Node: Option Index222973
+Node: Concept Index229376

End Tag Table
diff --git a/gcc-4.8/gcc/doc/cppinternals.info b/gcc-4.8/gcc/doc/cppinternals.info
index 3336fb002..aed69bac7 100644
--- a/gcc-4.8/gcc/doc/cppinternals.info
+++ b/gcc-4.8/gcc/doc/cppinternals.info
@@ -1,5 +1,5 @@
-This is doc/cppinternals.info, produced by makeinfo version 4.13 from
-/d/gcc-4.8.1/gcc-4.8.1/gcc/doc/cppinternals.texi.
+This is doc/cppinternals.info, produced by makeinfo version 4.12 from
+/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/doc/cppinternals.texi.
INFO-DIR-SECTION Software development
START-INFO-DIR-ENTRY
@@ -1019,17 +1019,17 @@ Concept Index

Tag Table:
-Node: Top944
-Node: Conventions2629
-Node: Lexer3571
-Ref: Invalid identifiers11484
-Ref: Lexing a line13433
-Node: Hash Nodes18206
-Node: Macro Expansion21085
-Node: Token Spacing30032
-Node: Line Numbering35892
-Node: Guard Macros39977
-Node: Files44768
-Node: Concept Index48234
+Node: Top958
+Node: Conventions2643
+Node: Lexer3585
+Ref: Invalid identifiers11498
+Ref: Lexing a line13447
+Node: Hash Nodes18220
+Node: Macro Expansion21099
+Node: Token Spacing30046
+Node: Line Numbering35906
+Node: Guard Macros39991
+Node: Files44782
+Node: Concept Index48248

End Tag Table
diff --git a/gcc-4.8/gcc/doc/extend.texi b/gcc-4.8/gcc/doc/extend.texi
index b6075b7cb..860f2e83f 100644
--- a/gcc-4.8/gcc/doc/extend.texi
+++ b/gcc-4.8/gcc/doc/extend.texi
@@ -3121,6 +3121,17 @@ this function attribute to make GCC generate the ``hot-patching'' function
prologue used in Win32 API functions in Microsoft Windows XP Service Pack 2
and newer.
+@item hotpatch [(@var{prologue-halfwords})]
+@cindex @code{hotpatch} attribute
+
+On S/390 System z targets, you can use this function attribute to
+make GCC generate a ``hot-patching'' function prologue. The
+@code{hotpatch} has no effect on funtions that are explicitly
+inline. If the @option{-mhotpatch} or @option{-mno-hotpatch}
+command-line option is used at the same time, the @code{hotpatch}
+attribute takes precedence. If an argument is given, the maximum
+allowed value is 1000000.
+
@item naked
@cindex function without a prologue/epilogue code
Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to indicate that
@@ -8793,6 +8804,7 @@ instructions, but allow the compiler to schedule those calls.
* picoChip Built-in Functions::
* PowerPC Built-in Functions::
* PowerPC AltiVec/VSX Built-in Functions::
+* PowerPC Hardware Transactional Memory Built-in Functions::
* RX Built-in Functions::
* S/390 System z Built-in Functions::
* SH Built-in Functions::
@@ -11840,9 +11852,12 @@ float __builtin_recipdivf (float, float);
float __builtin_rsqrtf (float);
double __builtin_recipdiv (double, double);
double __builtin_rsqrt (double);
-long __builtin_bpermd (long, long);
uint64_t __builtin_ppc_get_timebase ();
unsigned long __builtin_ppc_mftb ();
+double __builtin_unpack_longdouble (long double, int);
+double __builtin_longdouble_dw0 (long double);
+double __builtin_longdouble_dw1 (long double);
+long double __builtin_pack_longdouble (double, double);
@end smallexample
The @code{vec_rsqrt}, @code{__builtin_rsqrt}, and
@@ -11862,6 +11877,57 @@ The @code{__builtin_ppc_mftb} function always generates one instruction and
returns the Time Base Register value as an unsigned long, throwing away
the most significant word on 32-bit environments.
+The following built-in functions are available for the PowerPC family
+of processors, starting with ISA 2.06 or later (@option{-mcpu=power7}
+or @option{-mpopcntd}):
+@smallexample
+long __builtin_bpermd (long, long);
+int __builtin_divwe (int, int);
+int __builtin_divweo (int, int);
+unsigned int __builtin_divweu (unsigned int, unsigned int);
+unsigned int __builtin_divweuo (unsigned int, unsigned int);
+long __builtin_divde (long, long);
+long __builtin_divdeo (long, long);
+unsigned long __builtin_divdeu (unsigned long, unsigned long);
+unsigned long __builtin_divdeuo (unsigned long, unsigned long);
+unsigned int cdtbcd (unsigned int);
+unsigned int cbcdtd (unsigned int);
+unsigned int addg6s (unsigned int, unsigned int);
+@end smallexample
+
+The @code{__builtin_divde}, @code{__builtin_divdeo},
+@code{__builitin_divdeu}, @code{__builtin_divdeou} functions require a
+64-bit environment support ISA 2.06 or later.
+
+The following built-in functions are available for the PowerPC family
+of processors when hardware decimal floating point
+(@option{-mhard-dfp}) is available:
+@smallexample
+_Decimal64 __builtin_dxex (_Decimal64);
+_Decimal128 __builtin_dxexq (_Decimal128);
+_Decimal64 __builtin_ddedpd (int, _Decimal64);
+_Decimal128 __builtin_ddedpdq (int, _Decimal128);
+_Decimal64 __builtin_denbcd (int, _Decimal64);
+_Decimal128 __builtin_denbcdq (int, _Decimal128);
+_Decimal64 __builtin_diex (_Decimal64, _Decimal64);
+_Decimal128 _builtin_diexq (_Decimal128, _Decimal128);
+_Decimal64 __builtin_dscli (_Decimal64, int);
+_Decimal128 __builitn_dscliq (_Decimal128, int);
+_Decimal64 __builtin_dscri (_Decimal64, int);
+_Decimal128 __builitn_dscriq (_Decimal128, int);
+unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
+_Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
+@end smallexample
+
+The following built-in functions are available for the PowerPC family
+of processors when the Vector Scalar (vsx) instruction set is
+available:
+@smallexample
+unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
+vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
+ unsigned long long);
+@end smallexample
+
@node PowerPC AltiVec/VSX Built-in Functions
@subsection PowerPC AltiVec Built-in Functions
@@ -13912,6 +13978,35 @@ void vec_vsx_st (vector unsigned char, int, unsigned char *);
void vec_vsx_st (vector bool char, int, vector bool char *);
void vec_vsx_st (vector bool char, int, unsigned char *);
void vec_vsx_st (vector bool char, int, signed char *);
+
+vector double vec_xxpermdi (vector double, vector double, int);
+vector float vec_xxpermdi (vector float, vector float, int);
+vector long long vec_xxpermdi (vector long long, vector long long, int);
+vector unsigned long long vec_xxpermdi (vector unsigned long long,
+ vector unsigned long long, int);
+vector int vec_xxpermdi (vector int, vector int, int);
+vector unsigned int vec_xxpermdi (vector unsigned int,
+ vector unsigned int, int);
+vector short vec_xxpermdi (vector short, vector short, int);
+vector unsigned short vec_xxpermdi (vector unsigned short,
+ vector unsigned short, int);
+vector signed char vec_xxpermdi (vector signed char, vector signed char, int);
+vector unsigned char vec_xxpermdi (vector unsigned char,
+ vector unsigned char, int);
+
+vector double vec_xxsldi (vector double, vector double, int);
+vector float vec_xxsldi (vector float, vector float, int);
+vector long long vec_xxsldi (vector long long, vector long long, int);
+vector unsigned long long vec_xxsldi (vector unsigned long long,
+ vector unsigned long long, int);
+vector int vec_xxsldi (vector int, vector int, int);
+vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
+vector short vec_xxsldi (vector short, vector short, int);
+vector unsigned short vec_xxsldi (vector unsigned short,
+ vector unsigned short, int);
+vector signed char vec_xxsldi (vector signed char, vector signed char, int);
+vector unsigned char vec_xxsldi (vector unsigned char,
+ vector unsigned char, int);
@end smallexample
Note that the @samp{vec_ld} and @samp{vec_st} built-in functions always
@@ -13920,6 +14015,593 @@ if the VSX instruction set is available. The @samp{vec_vsx_ld} and
@samp{vec_vsx_st} built-in functions always generate the VSX @samp{LXVD2X},
@samp{LXVW4X}, @samp{STXVD2X}, and @samp{STXVW4X} instructions.
+If the ISA 2.07 additions to the vector/scalar (power8-vector)
+instruction set is available, the following additional functions are
+available for both 32-bit and 64-bit targets. For 64-bit targets, you
+can use @var{vector long} instead of @var{vector long long},
+@var{vector bool long} instead of @var{vector bool long long}, and
+@var{vector unsigned long} instead of @var{vector unsigned long long}.
+
+@smallexample
+vector long long vec_abs (vector long long);
+
+vector long long vec_add (vector long long, vector long long);
+vector unsigned long long vec_add (vector unsigned long long,
+ vector unsigned long long);
+
+int vec_all_eq (vector long long, vector long long);
+int vec_all_ge (vector long long, vector long long);
+int vec_all_gt (vector long long, vector long long);
+int vec_all_le (vector long long, vector long long);
+int vec_all_lt (vector long long, vector long long);
+int vec_all_ne (vector long long, vector long long);
+int vec_any_eq (vector long long, vector long long);
+int vec_any_ge (vector long long, vector long long);
+int vec_any_gt (vector long long, vector long long);
+int vec_any_le (vector long long, vector long long);
+int vec_any_lt (vector long long, vector long long);
+int vec_any_ne (vector long long, vector long long);
+
+vector long long vec_eqv (vector long long, vector long long);
+vector long long vec_eqv (vector bool long long, vector long long);
+vector long long vec_eqv (vector long long, vector bool long long);
+vector unsigned long long vec_eqv (vector unsigned long long,
+ vector unsigned long long);
+vector unsigned long long vec_eqv (vector bool long long,
+ vector unsigned long long);
+vector unsigned long long vec_eqv (vector unsigned long long,
+ vector bool long long);
+vector int vec_eqv (vector int, vector int);
+vector int vec_eqv (vector bool int, vector int);
+vector int vec_eqv (vector int, vector bool int);
+vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
+vector unsigned int vec_eqv (vector bool unsigned int,
+ vector unsigned int);
+vector unsigned int vec_eqv (vector unsigned int,
+ vector bool unsigned int);
+vector short vec_eqv (vector short, vector short);
+vector short vec_eqv (vector bool short, vector short);
+vector short vec_eqv (vector short, vector bool short);
+vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
+vector unsigned short vec_eqv (vector bool unsigned short,
+ vector unsigned short);
+vector unsigned short vec_eqv (vector unsigned short,
+ vector bool unsigned short);
+vector signed char vec_eqv (vector signed char, vector signed char);
+vector signed char vec_eqv (vector bool signed char, vector signed char);
+vector signed char vec_eqv (vector signed char, vector bool signed char);
+vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
+vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
+vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
+
+vector long long vec_max (vector long long, vector long long);
+vector unsigned long long vec_max (vector unsigned long long,
+ vector unsigned long long);
+
+vector long long vec_min (vector long long, vector long long);
+vector unsigned long long vec_min (vector unsigned long long,
+ vector unsigned long long);
+
+vector long long vec_nand (vector long long, vector long long);
+vector long long vec_nand (vector bool long long, vector long long);
+vector long long vec_nand (vector long long, vector bool long long);
+vector unsigned long long vec_nand (vector unsigned long long,
+ vector unsigned long long);
+vector unsigned long long vec_nand (vector bool long long,
+ vector unsigned long long);
+vector unsigned long long vec_nand (vector unsigned long long,
+ vector bool long long);
+vector int vec_nand (vector int, vector int);
+vector int vec_nand (vector bool int, vector int);
+vector int vec_nand (vector int, vector bool int);
+vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
+vector unsigned int vec_nand (vector bool unsigned int,
+ vector unsigned int);
+vector unsigned int vec_nand (vector unsigned int,
+ vector bool unsigned int);
+vector short vec_nand (vector short, vector short);
+vector short vec_nand (vector bool short, vector short);
+vector short vec_nand (vector short, vector bool short);
+vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
+vector unsigned short vec_nand (vector bool unsigned short,
+ vector unsigned short);
+vector unsigned short vec_nand (vector unsigned short,
+ vector bool unsigned short);
+vector signed char vec_nand (vector signed char, vector signed char);
+vector signed char vec_nand (vector bool signed char, vector signed char);
+vector signed char vec_nand (vector signed char, vector bool signed char);
+vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
+vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
+vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
+
+vector long long vec_orc (vector long long, vector long long);
+vector long long vec_orc (vector bool long long, vector long long);
+vector long long vec_orc (vector long long, vector bool long long);
+vector unsigned long long vec_orc (vector unsigned long long,
+ vector unsigned long long);
+vector unsigned long long vec_orc (vector bool long long,
+ vector unsigned long long);
+vector unsigned long long vec_orc (vector unsigned long long,
+ vector bool long long);
+vector int vec_orc (vector int, vector int);
+vector int vec_orc (vector bool int, vector int);
+vector int vec_orc (vector int, vector bool int);
+vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
+vector unsigned int vec_orc (vector bool unsigned int,
+ vector unsigned int);
+vector unsigned int vec_orc (vector unsigned int,
+ vector bool unsigned int);
+vector short vec_orc (vector short, vector short);
+vector short vec_orc (vector bool short, vector short);
+vector short vec_orc (vector short, vector bool short);
+vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
+vector unsigned short vec_orc (vector bool unsigned short,
+ vector unsigned short);
+vector unsigned short vec_orc (vector unsigned short,
+ vector bool unsigned short);
+vector signed char vec_orc (vector signed char, vector signed char);
+vector signed char vec_orc (vector bool signed char, vector signed char);
+vector signed char vec_orc (vector signed char, vector bool signed char);
+vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
+vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
+vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
+
+vector int vec_pack (vector long long, vector long long);
+vector unsigned int vec_pack (vector unsigned long long,
+ vector unsigned long long);
+vector bool int vec_pack (vector bool long long, vector bool long long);
+
+vector int vec_packs (vector long long, vector long long);
+vector unsigned int vec_packs (vector unsigned long long,
+ vector unsigned long long);
+
+vector unsigned int vec_packsu (vector long long, vector long long);
+
+vector long long vec_rl (vector long long,
+ vector unsigned long long);
+vector long long vec_rl (vector unsigned long long,
+ vector unsigned long long);
+
+vector long long vec_sl (vector long long, vector unsigned long long);
+vector long long vec_sl (vector unsigned long long,
+ vector unsigned long long);
+
+vector long long vec_sr (vector long long, vector unsigned long long);
+vector unsigned long long char vec_sr (vector unsigned long long,
+ vector unsigned long long);
+
+vector long long vec_sra (vector long long, vector unsigned long long);
+vector unsigned long long vec_sra (vector unsigned long long,
+ vector unsigned long long);
+
+vector long long vec_sub (vector long long, vector long long);
+vector unsigned long long vec_sub (vector unsigned long long,
+ vector unsigned long long);
+
+vector long long vec_unpackh (vector int);
+vector unsigned long long vec_unpackh (vector unsigned int);
+
+vector long long vec_unpackl (vector int);
+vector unsigned long long vec_unpackl (vector unsigned int);
+
+vector long long vec_vaddudm (vector long long, vector long long);
+vector long long vec_vaddudm (vector bool long long, vector long long);
+vector long long vec_vaddudm (vector long long, vector bool long long);
+vector unsigned long long vec_vaddudm (vector unsigned long long,
+ vector unsigned long long);
+vector unsigned long long vec_vaddudm (vector bool unsigned long long,
+ vector unsigned long long);
+vector unsigned long long vec_vaddudm (vector unsigned long long,
+ vector bool unsigned long long);
+
+vector long long vec_vbpermq (vector signed char, vector signed char);
+vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
+
+vector long long vec_vclz (vector long long);
+vector unsigned long long vec_vclz (vector unsigned long long);
+vector int vec_vclz (vector int);
+vector unsigned int vec_vclz (vector int);
+vector short vec_vclz (vector short);
+vector unsigned short vec_vclz (vector unsigned short);
+vector signed char vec_vclz (vector signed char);
+vector unsigned char vec_vclz (vector unsigned char);
+
+vector signed char vec_vclzb (vector signed char);
+vector unsigned char vec_vclzb (vector unsigned char);
+
+vector long long vec_vclzd (vector long long);
+vector unsigned long long vec_vclzd (vector unsigned long long);
+
+vector short vec_vclzh (vector short);
+vector unsigned short vec_vclzh (vector unsigned short);
+
+vector int vec_vclzw (vector int);
+vector unsigned int vec_vclzw (vector int);
+
+vector signed char vec_vgbbd (vector signed char);
+vector unsigned char vec_vgbbd (vector unsigned char);
+
+vector long long vec_vmaxsd (vector long long, vector long long);
+
+vector unsigned long long vec_vmaxud (vector unsigned long long,
+ unsigned vector long long);
+
+vector long long vec_vminsd (vector long long, vector long long);
+
+vector unsigned long long vec_vminud (vector long long,
+ vector long long);
+
+vector int vec_vpksdss (vector long long, vector long long);
+vector unsigned int vec_vpksdss (vector long long, vector long long);
+
+vector unsigned int vec_vpkudus (vector unsigned long long,
+ vector unsigned long long);
+
+vector int vec_vpkudum (vector long long, vector long long);
+vector unsigned int vec_vpkudum (vector unsigned long long,
+ vector unsigned long long);
+vector bool int vec_vpkudum (vector bool long long, vector bool long long);
+
+vector long long vec_vpopcnt (vector long long);
+vector unsigned long long vec_vpopcnt (vector unsigned long long);
+vector int vec_vpopcnt (vector int);
+vector unsigned int vec_vpopcnt (vector int);
+vector short vec_vpopcnt (vector short);
+vector unsigned short vec_vpopcnt (vector unsigned short);
+vector signed char vec_vpopcnt (vector signed char);
+vector unsigned char vec_vpopcnt (vector unsigned char);
+
+vector signed char vec_vpopcntb (vector signed char);
+vector unsigned char vec_vpopcntb (vector unsigned char);
+
+vector long long vec_vpopcntd (vector long long);
+vector unsigned long long vec_vpopcntd (vector unsigned long long);
+
+vector short vec_vpopcnth (vector short);
+vector unsigned short vec_vpopcnth (vector unsigned short);
+
+vector int vec_vpopcntw (vector int);
+vector unsigned int vec_vpopcntw (vector int);
+
+vector long long vec_vrld (vector long long, vector unsigned long long);
+vector unsigned long long vec_vrld (vector unsigned long long,
+ vector unsigned long long);
+
+vector long long vec_vsld (vector long long, vector unsigned long long);
+vector long long vec_vsld (vector unsigned long long,
+ vector unsigned long long);
+
+vector long long vec_vsrad (vector long long, vector unsigned long long);
+vector unsigned long long vec_vsrad (vector unsigned long long,
+ vector unsigned long long);
+
+vector long long vec_vsrd (vector long long, vector unsigned long long);
+vector unsigned long long char vec_vsrd (vector unsigned long long,
+ vector unsigned long long);
+
+vector long long vec_vsubudm (vector long long, vector long long);
+vector long long vec_vsubudm (vector bool long long, vector long long);
+vector long long vec_vsubudm (vector long long, vector bool long long);
+vector unsigned long long vec_vsubudm (vector unsigned long long,
+ vector unsigned long long);
+vector unsigned long long vec_vsubudm (vector bool long long,
+ vector unsigned long long);
+vector unsigned long long vec_vsubudm (vector unsigned long long,
+ vector bool long long);
+
+vector long long vec_vupkhsw (vector int);
+vector unsigned long long vec_vupkhsw (vector unsigned int);
+
+vector long long vec_vupklsw (vector int);
+vector unsigned long long vec_vupklsw (vector int);
+@end smallexample
+
+If the ISA 2.07 additions to the vector/scalar (power8-vector)
+instruction set is available, the following additional functions are
+available for 64-bit targets. New vector types
+(@var{vector __int128_t} and @var{vector __uint128_t}) are available
+to hold the @var{__int128_t} and @var{__uint128_t} types to use these
+builtins.
+
+The normal vector extract, and set operations work on
+@var{vector __int128_t} and @var{vector __uint128_t} types,
+but the index value must be 0.
+
+@smallexample
+vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t);
+vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t);
+
+vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t);
+vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t);
+
+vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t,
+ vector __int128_t);
+vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t,
+ vector __uint128_t);
+
+vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t,
+ vector __int128_t);
+vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t,
+ vector __uint128_t);
+
+vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t,
+ vector __int128_t);
+vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t,
+ vector __uint128_t);
+
+vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t,
+ vector __int128_t);
+vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t,
+ vector __uint128_t);
+
+vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t);
+vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t);
+
+__int128_t vec_vsubuqm (__int128_t, __int128_t);
+__uint128_t vec_vsubuqm (__uint128_t, __uint128_t);
+
+vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t);
+int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t);
+int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t);
+int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t);
+int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t);
+vector __int128_t bcdsub (vector __int128_t, vector__int128_t);
+int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t);
+int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t);
+int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t);
+int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t);
+@end smallexample
+
+If the cryptographic instructions are enabled (@option{-mcrypto} or
+@option{-mcpu=power8}), the following builtins are enabled.
+
+@smallexample
+vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
+
+vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
+ vector unsigned long long);
+
+vector unsigned long long __builtin_crypto_vcipherlast
+ (vector unsigned long long,
+ vector unsigned long long);
+
+vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
+ vector unsigned long long);
+
+vector unsigned long long __builtin_crypto_vncipherlast
+ (vector unsigned long long,
+ vector unsigned long long);
+
+vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
+ vector unsigned char,
+ vector unsigned char);
+
+vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
+ vector unsigned short,
+ vector unsigned short);
+
+vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
+ vector unsigned int,
+ vector unsigned int);
+
+vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
+ vector unsigned long long,
+ vector unsigned long long);
+
+vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
+ vector unsigned char);
+
+vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short,
+ vector unsigned short);
+
+vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int,
+ vector unsigned int);
+
+vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long,
+ vector unsigned long long);
+
+vector unsigned long long __builtin_crypto_vshasigmad
+ (vector unsigned long long, int, int);
+
+vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int,
+ int, int);
+@end smallexample
+
+The second argument to the @var{__builtin_crypto_vshasigmad} and
+@var{__builtin_crypto_vshasigmaw} builtin functions must be a constant
+integer that is 0 or 1. The third argument to these builtin functions
+must be a constant integer in the range of 0 to 15.
+
+@node PowerPC Hardware Transactional Memory Built-in Functions
+@subsection PowerPC Hardware Transactional Memory Built-in Functions
+GCC provides two interfaces for accessing the Hardware Transactional
+Memory (HTM) instructions available on some of the PowerPC family
+of prcoessors (eg, POWER8). The two interfaces come in a low level
+interface, consisting of built-in functions specific to PowerPC and a
+higher level interface consisting of inline functions that are common
+between PowerPC and S/390.
+
+@subsubsection PowerPC HTM Low Level Built-in Functions
+
+The following low level built-in functions are available with
+@option{-mhtm} or @option{-mcpu=CPU} where CPU is `power8' or later.
+They all generate the machine instruction that is part of the name.
+
+The HTM built-ins return true or false depending on their success and
+their arguments match exactly the type and order of the associated
+hardware instruction's operands. Refer to the ISA manual for a
+description of each instruction's operands.
+
+@smallexample
+unsigned int __builtin_tbegin (unsigned int)
+unsigned int __builtin_tend (unsigned int)
+
+unsigned int __builtin_tabort (unsigned int)
+unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
+unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
+unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
+unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
+
+unsigned int __builtin_tcheck (unsigned int)
+unsigned int __builtin_treclaim (unsigned int)
+unsigned int __builtin_trechkpt (void)
+unsigned int __builtin_tsr (unsigned int)
+@end smallexample
+
+In addition to the above HTM built-ins, we have added built-ins for
+some common extended mnemonics of the HTM instructions:
+
+@smallexample
+unsigned int __builtin_tendall (void)
+unsigned int __builtin_tresume (void)
+unsigned int __builtin_tsuspend (void)
+@end smallexample
+
+The following set of built-in functions are available to gain access
+to the HTM specific special purpose registers.
+
+@smallexample
+unsigned long __builtin_get_texasr (void)
+unsigned long __builtin_get_texasru (void)
+unsigned long __builtin_get_tfhar (void)
+unsigned long __builtin_get_tfiar (void)
+
+void __builtin_set_texasr (unsigned long);
+void __builtin_set_texasru (unsigned long);
+void __builtin_set_tfhar (unsigned long);
+void __builtin_set_tfiar (unsigned long);
+@end smallexample
+
+Example usage of these low level built-in functions may look like:
+
+@smallexample
+#include <htmintrin.h>
+
+int num_retries = 10;
+
+while (1)
+ @{
+ if (__builtin_tbegin (0))
+ @{
+ /* Transaction State Initiated. */
+ if (is_locked (lock))
+ __builtin_tabort (0);
+ ... transaction code...
+ __builtin_tend (0);
+ break;
+ @}
+ else
+ @{
+ /* Transaction State Failed. Use locks if the transaction
+ failure is "persistent" or we've tried too many times. */
+ if (num_retries-- <= 0
+ || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
+ @{
+ acquire_lock (lock);
+ ... non transactional fallback path...
+ release_lock (lock);
+ break;
+ @}
+ @}
+ @}
+@end smallexample
+
+One final built-in function has been added that returns the value of
+the 2-bit Transaction State field of the Machine Status Register (MSR)
+as stored in @code{CR0}.
+
+@smallexample
+unsigned long __builtin_ttest (void)
+@end smallexample
+
+This built-in can be used to determine the current transaction state
+using the following code example:
+
+@smallexample
+#include <htmintrin.h>
+
+unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
+
+if (tx_state == _HTM_TRANSACTIONAL)
+ @{
+ /* Code to use in transactional state. */
+ @}
+else if (tx_state == _HTM_NONTRANSACTIONAL)
+ @{
+ /* Code to use in non-transactional state. */
+ @}
+else if (tx_state == _HTM_SUSPENDED)
+ @{
+ /* Code to use in transaction suspended state. */
+ @}
+@end smallexample
+
+@subsubsection PowerPC HTM High Level Inline Functions
+
+The following high level HTM interface is made available by including
+@code{<htmxlintrin.h>} and using @option{-mhtm} or @option{-mcpu=CPU}
+where CPU is `power8' or later. This interface is common between PowerPC
+and S/390, allowing users to write one HTM source implementation that
+can be compiled and executed on either system.
+
+@smallexample
+long __TM_simple_begin (void)
+long __TM_begin (void* const TM_buff)
+long __TM_end (void)
+void __TM_abort (void)
+void __TM_named_abort (unsigned char const code)
+void __TM_resume (void)
+void __TM_suspend (void)
+
+long __TM_is_user_abort (void* const TM_buff)
+long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
+long __TM_is_illegal (void* const TM_buff)
+long __TM_is_footprint_exceeded (void* const TM_buff)
+long __TM_nesting_depth (void* const TM_buff)
+long __TM_is_nested_too_deep(void* const TM_buff)
+long __TM_is_conflict(void* const TM_buff)
+long __TM_is_failure_persistent(void* const TM_buff)
+long __TM_failure_address(void* const TM_buff)
+long long __TM_failure_code(void* const TM_buff)
+@end smallexample
+
+Using these common set of HTM inline functions, we can create
+a more portable version of the HTM example in the previous
+section that will work on either PowerPC or S/390:
+
+@smallexample
+#include <htmxlintrin.h>
+
+int num_retries = 10;
+TM_buff_type TM_buff;
+
+while (1)
+ @{
+ if (__TM_begin (TM_buff))
+ @{
+ /* Transaction State Initiated. */
+ if (is_locked (lock))
+ __TM_abort ();
+ ... transaction code...
+ __TM_end ();
+ break;
+ @}
+ else
+ @{
+ /* Transaction State Failed. Use locks if the transaction
+ failure is "persistent" or we've tried too many times. */
+ if (num_retries-- <= 0
+ || __TM_is_failure_persistent (TM_buff))
+ @{
+ acquire_lock (lock);
+ ... non transactional fallback path...
+ release_lock (lock);
+ break;
+ @}
+ @}
+ @}
+@end smallexample
+
@node RX Built-in Functions
@subsection RX Built-in Functions
GCC supports some of the RX instructions which cannot be expressed in
diff --git a/gcc-4.8/gcc/doc/fsf-funding.7 b/gcc-4.8/gcc/doc/fsf-funding.7
index 5cf80b133..bc192f1ad 100644
--- a/gcc-4.8/gcc/doc/fsf-funding.7
+++ b/gcc-4.8/gcc/doc/fsf-funding.7
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "FSF-FUNDING 7"
-.TH FSF-FUNDING 7 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH FSF-FUNDING 7 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -133,7 +141,7 @@
fsf\-funding \- Funding Free Software
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
-.SS "Funding Free Software"
+.Sh "Funding Free Software"
.IX Subsection "Funding Free Software"
If you want to have more free software a few years from now, it makes
sense for you to help encourage people to contribute funds for its
diff --git a/gcc-4.8/gcc/doc/g++.1 b/gcc-4.8/gcc/doc/g++.1
index 88e400d95..24005b6cc 100644
--- a/gcc-4.8/gcc/doc/g++.1
+++ b/gcc-4.8/gcc/doc/g++.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GCC 1"
-.TH GCC 1 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH GCC 1 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -180,7 +188,7 @@ these have both positive and negative forms; the negative form of
only one of these two forms, whichever one is not the default.
.SH "OPTIONS"
.IX Header "OPTIONS"
-.SS "Option Summary"
+.Sh "Option Summary"
.IX Subsection "Option Summary"
Here is a summary of all the options, grouped by type. Explanations are
in the following sections.
@@ -190,7 +198,7 @@ in the following sections.
\&\-pipe \-pass\-exit\-codes
\&\-x\fR \fIlanguage\fR \fB\-v \-### \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]] \fB\-\-target\-help
\&\-\-version \-wrapper @\fR\fIfile\fR \fB\-fplugin=\fR\fIfile\fR \fB\-fplugin\-arg\-\fR\fIname\fR\fB=\fR\fIarg\fR
-\&\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] \fB\-fada\-spec\-parent=\fR\fIarg\fR \fB\-fdump\-go\-spec=\fR\fIfile\fR
+\&\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] \fB\-fada\-spec\-parent=\fR\fIunit\fR \fB\-fdump\-go\-spec=\fR\fIfile\fR
.IP "\fIC Language Options\fR" 4
.IX Item "C Language Options"
\&\fB\-ansi \-std=\fR\fIstandard\fR \fB\-fgnu89\-inline
@@ -867,7 +875,12 @@ See \s-1RS/6000\s0 and PowerPC Options.
\&\-mno\-recip\-precision
\&\-mveclibabi=\fR\fItype\fR \fB\-mfriz \-mno\-friz
\&\-mpointers\-to\-nested\-functions \-mno\-pointers\-to\-nested\-functions
-\&\-msave\-toc\-indirect \-mno\-save\-toc\-indirect\fR
+\&\-msave\-toc\-indirect \-mno\-save\-toc\-indirect
+\&\-mpower8\-fusion \-mno\-mpower8\-fusion \-mpower8\-vector \-mno\-power8\-vector
+\&\-mcrypto \-mno\-crypto \-mdirect\-move \-mno\-direct\-move
+\&\-mquad\-memory \-mno\-quad\-memory
+\&\-mquad\-memory\-atomic \-mno\-quad\-memory\-atomic
+\&\-mcompat\-align\-parm \-mno\-compat\-align\-parm\fR
.Sp
\&\fI\s-1RX\s0 Options\fR
\&\fB\-m64bit\-doubles \-m32bit\-doubles \-fpu \-nofpu
@@ -891,7 +904,8 @@ See \s-1RS/6000\s0 and PowerPC Options.
\&\-msmall\-exec \-mno\-small\-exec \-mmvcle \-mno\-mvcle
\&\-m64 \-m31 \-mdebug \-mno\-debug \-mesa \-mzarch
\&\-mtpf\-trace \-mno\-tpf\-trace \-mfused\-madd \-mno\-fused\-madd
-\&\-mwarn\-framesize \-mwarn\-dynamicstack \-mstack\-size \-mstack\-guard\fR
+\&\-mwarn\-framesize \-mwarn\-dynamicstack \-mstack\-size \-mstack\-guard
+\&\-mhotpatch[=\fR\fIhalfwords\fR\fB] \-mno\-hotpatch\fR
.Sp
\&\fIScore Options\fR
\&\fB\-meb \-mel
@@ -936,11 +950,12 @@ See \s-1RS/6000\s0 and PowerPC Options.
\&\-mhard\-quad\-float \-msoft\-quad\-float
\&\-mstack\-bias \-mno\-stack\-bias
\&\-munaligned\-doubles \-mno\-unaligned\-doubles
+\&\-muser\-mode \-mno\-user\-mode
\&\-mv8plus \-mno\-v8plus \-mvis \-mno\-vis
\&\-mvis2 \-mno\-vis2 \-mvis3 \-mno\-vis3
\&\-mcbcond \-mno\-cbcond
\&\-mfmaf \-mno\-fmaf \-mpopc \-mno\-popc
-\&\-mfix\-at697f\fR
+\&\-mfix\-at697f \-mfix\-ut699\fR
.Sp
\&\fI\s-1SPU\s0 Options\fR
\&\fB\-mwarn\-reloc \-merror\-reloc
@@ -1029,7 +1044,7 @@ See S/390 and zSeries Options.
\&\fB\-fstack\-reuse=\fR\fIreuse_level\fR
\&\fB\-ftrapv \-fwrapv \-fbounds\-check
\&\-fvisibility \-fstrict\-volatile\-bitfields \-fsync\-libcalls\fR
-.SS "Options Controlling the Kind of Output"
+.Sh "Options Controlling the Kind of Output"
.IX Subsection "Options Controlling the Kind of Output"
Compilation can involve up to four stages: preprocessing, compilation
proper, assembly and linking, always in that order. \s-1GCC\s0 is capable of
@@ -1459,8 +1474,11 @@ Define an argument called \fIkey\fR with a value of \fIvalue\fR
for the plugin called \fIname\fR.
.IP "\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR]" 4
.IX Item "-fdump-ada-spec[-slim]"
-For C and \*(C+ source and include files, generate corresponding Ada
-specs.
+For C and \*(C+ source and include files, generate corresponding Ada specs.
+.IP "\fB\-fada\-spec\-parent=\fR\fIunit\fR" 4
+.IX Item "-fada-spec-parent=unit"
+In conjunction with \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] above, generate
+Ada specs as child units of parent \fIunit\fR.
.IP "\fB\-fdump\-go\-spec=\fR\fIfile\fR" 4
.IX Item "-fdump-go-spec=file"
For input files in any language, generate corresponding Go
@@ -1481,8 +1499,8 @@ option in either single or double quotes. Any character (including a
backslash) may be included by prefixing the character to be included
with a backslash. The \fIfile\fR may itself contain additional
@\fIfile\fR options; any such options will be processed recursively.
-.SS "Compiling \*(C+ Programs"
-.IX Subsection "Compiling Programs"
+.Sh "Compiling \*(C+ Programs"
+.IX Subsection "Compiling Programs"
\&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
\&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
\&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
@@ -1505,7 +1523,7 @@ When you compile \*(C+ programs, you may specify many of the same
command-line options that you use for compiling programs in any
language; or command-line options meaningful for C and related
languages; or options that are meaningful only for \*(C+ programs.
-.SS "Options Controlling C Dialect"
+.Sh "Options Controlling C Dialect"
.IX Subsection "Options Controlling C Dialect"
The following options control the dialect of C (or languages derived
from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
@@ -1892,8 +1910,8 @@ These options control whether a bit-field is signed or unsigned, when the
declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR. By
default, such a bit-field is signed, because this is consistent: the
basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
-.SS "Options Controlling \*(C+ Dialect"
-.IX Subsection "Options Controlling Dialect"
+.Sh "Options Controlling \*(C+ Dialect"
+.IX Subsection "Options Controlling Dialect"
This section describes the command-line options that are only meaningful
for \*(C+ programs. You can also use most of the \s-1GNU\s0 compiler options
regardless of what language your program is in. For example, you
@@ -2250,7 +2268,7 @@ Do not assume \fBinline\fR for functions defined inside a class scope.
functions have linkage like inline functions; they just aren't
inlined by default.
.IP "\fB\-Wabi\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
-.IX Item "-Wabi (C, Objective-C, and Objective- only)"
+.IX Item "-Wabi (C, Objective-C, and Objective- only)"
Warn when G++ generates code that is probably not compatible with the
vendor-neutral \*(C+ \s-1ABI\s0. Although an effort has been made to warn about
all such cases, there are probably some cases that are not warned about,
@@ -2562,7 +2580,7 @@ Warn when overload resolution chooses a promotion from unsigned or
enumerated type to a signed type, over a conversion to an unsigned type of
the same size. Previous versions of G++ tried to preserve
unsignedness, but the standard mandates the current behavior.
-.SS "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
+.Sh "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
.IX Subsection "Options Controlling Objective-C and Objective- Dialects"
(\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
languages themselves.
@@ -2759,7 +2777,7 @@ that methods and selectors must be declared before being used.
.IX Item "-print-objc-runtime-info"
Generate C header describing the largest structure that is passed by
value, if any.
-.SS "Options to Control Diagnostic Messages Formatting"
+.Sh "Options to Control Diagnostic Messages Formatting"
.IX Subsection "Options to Control Diagnostic Messages Formatting"
Traditionally, diagnostic messages have been formatted irrespective of
the output device's aspect (e.g. its width, ...). You can use the
@@ -2800,7 +2818,7 @@ option is known to the diagnostic machinery). Specifying the
By default, each diagnostic emitted includes the original source line
and a caret '^' indicating the column. This option suppresses this
information.
-.SS "Options to Request or Suppress Warnings"
+.Sh "Options to Request or Suppress Warnings"
.IX Subsection "Options to Request or Suppress Warnings"
Warnings are diagnostic messages that report constructions that
are not inherently erroneous but that are risky or suggest there
@@ -3186,7 +3204,7 @@ enabled by default and it is made into an error by
Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
This warning is enabled by \fB\-Wall\fR.
.IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
-.IX Item "-Wignored-qualifiers (C and only)"
+.IX Item "-Wignored-qualifiers (C and only)"
Warn if the return type of a function has a type qualifier
such as \f(CW\*(C`const\*(C'\fR. For \s-1ISO\s0 C such a type qualifier has no effect,
since the value returned by a function is not an lvalue.
@@ -3358,7 +3376,7 @@ between \fB\-Wswitch\fR and this option is that this option gives a
warning about an omitted enumeration code even if there is a
\&\f(CW\*(C`default\*(C'\fR label.
.IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
-.IX Item "-Wsync-nand (C and only)"
+.IX Item "-Wsync-nand (C and only)"
Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
built-in functions are used. These functions changed semantics in \s-1GCC\s0 4.4.
.IP "\fB\-Wtrigraphs\fR" 4
@@ -3397,7 +3415,7 @@ This warning is enabled by \fB\-Wall\fR.
.Sp
To suppress this warning use the \fBunused\fR attribute.
.IP "\fB\-Wunused\-local\-typedefs\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
-.IX Item "-Wunused-local-typedefs (C, Objective-C, and Objective- only)"
+.IX Item "-Wunused-local-typedefs (C, Objective-C, and Objective- only)"
Warn when a typedef locally defined in a function is not used.
This warning is enabled by \fB\-Wall\fR.
.IP "\fB\-Wunused\-parameter\fR" 4
@@ -4355,7 +4373,7 @@ a suffix. When used together with \fB\-Wsystem\-headers\fR it
warns about such constants in system header files. This can be useful
when preparing code to use with the \f(CW\*(C`FLOAT_CONST_DECIMAL64\*(C'\fR pragma
from the decimal floating-point extension to C99.
-.SS "Options for Debugging Your Program or \s-1GCC\s0"
+.Sh "Options for Debugging Your Program or \s-1GCC\s0"
.IX Subsection "Options for Debugging Your Program or GCC"
\&\s-1GCC\s0 has various special options that are used for debugging
either your program or \s-1GCC:\s0
@@ -5859,7 +5877,7 @@ in that compilation unit, for example
if, in the debugger, you want to cast a value to a type that is
not actually used in your program (but is declared). More often,
however, this results in a significant amount of wasted space.
-.SS "Options That Control Optimization"
+.Sh "Options That Control Optimization"
.IX Subsection "Options That Control Optimization"
These options control various sorts of optimizations.
.PP
@@ -8968,7 +8986,7 @@ seeking a basis for a new straight-line strength reduction candidate.
.RE
.RS 4
.RE
-.SS "Options Controlling the Preprocessor"
+.Sh "Options Controlling the Preprocessor"
.IX Subsection "Options Controlling the Preprocessor"
These options control the C preprocessor, which is run on each C source
file before actual compilation.
@@ -9770,7 +9788,7 @@ header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
.PD
Print out \s-1GNU\s0 \s-1CPP\s0's version number. With one dash, proceed to
preprocess as normal. With two dashes, exit immediately.
-.SS "Passing Options to the Assembler"
+.Sh "Passing Options to the Assembler"
.IX Subsection "Passing Options to the Assembler"
You can pass options to the assembler.
.IP "\fB\-Wa,\fR\fIoption\fR" 4
@@ -9785,7 +9803,7 @@ recognize.
.Sp
If you want to pass an option that takes an argument, you must use
\&\fB\-Xassembler\fR twice, once for the option and once for the argument.
-.SS "Options for Linking"
+.Sh "Options for Linking"
.IX Subsection "Options for Linking"
These options come into play when the compiler links object files into
an executable output file. They are meaningless if the compiler is
@@ -10024,7 +10042,7 @@ linker. When using the \s-1GNU\s0 linker, you can also get the same effect with
Pretend the symbol \fIsymbol\fR is undefined, to force linking of
library modules to define it. You can use \fB\-u\fR multiple times with
different symbols to force loading of additional library modules.
-.SS "Options for Directory Search"
+.Sh "Options for Directory Search"
.IX Subsection "Options for Directory Search"
These options specify directories to search for header files, for
libraries and for parts of the compiler:
@@ -10159,13 +10177,13 @@ by default, but it is often satisfactory.
\&\fB\-I\-\fR does not inhibit the use of the standard system directories
for header files. Thus, \fB\-I\-\fR and \fB\-nostdinc\fR are
independent.
-.SS "Specifying Target Machine and Compiler Version"
+.Sh "Specifying Target Machine and Compiler Version"
.IX Subsection "Specifying Target Machine and Compiler Version"
The usual way to run \s-1GCC\s0 is to run the executable called \fBgcc\fR, or
\&\fImachine\fR\fB\-gcc\fR when cross-compiling, or
\&\fImachine\fR\fB\-gcc\-\fR\fIversion\fR to run a version other than the
one that was installed last.
-.SS "Hardware Models and Configurations"
+.Sh "Hardware Models and Configurations"
.IX Subsection "Hardware Models and Configurations"
Each target machine types can have its own
special options, starting with \fB\-m\fR, to choose among various
@@ -10489,11 +10507,31 @@ order. That is, a byte order of the form \fB32107654\fR. Note: this
option should only be used if you require compatibility with code for
big-endian \s-1ARM\s0 processors generated by versions of the compiler prior to
2.8. This option is now deprecated.
-.IP "\fB\-mcpu=\fR\fIname\fR" 4
-.IX Item "-mcpu=name"
-This specifies the name of the target \s-1ARM\s0 processor. \s-1GCC\s0 uses this name
-to determine what kind of instructions it can emit when generating
-assembly code. Permissible names are: \fBarm2\fR, \fBarm250\fR,
+.IP "\fB\-march=\fR\fIname\fR" 4
+.IX Item "-march=name"
+This specifies the name of the target \s-1ARM\s0 architecture. \s-1GCC\s0 uses this
+name to determine what kind of instructions it can emit when generating
+assembly code. This option can be used in conjunction with or instead
+of the \fB\-mcpu=\fR option. Permissible names are: \fBarmv2\fR,
+\&\fBarmv2a\fR, \fBarmv3\fR, \fBarmv3m\fR, \fBarmv4\fR, \fBarmv4t\fR,
+\&\fBarmv5\fR, \fBarmv5t\fR, \fBarmv5e\fR, \fBarmv5te\fR,
+\&\fBarmv6\fR, \fBarmv6j\fR,
+\&\fBarmv6t2\fR, \fBarmv6z\fR, \fBarmv6zk\fR, \fBarmv6\-m\fR,
+\&\fBarmv7\fR, \fBarmv7\-a\fR, \fBarmv7\-r\fR, \fBarmv7\-m\fR, \fBarmv7e\-m\fR
+\&\fBarmv8\-a\fR,
+\&\fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR.
+.Sp
+\&\fB\-march=native\fR causes the compiler to auto-detect the architecture
+of the build computer. At present, this feature is only supported on
+Linux, and not all architectures are recognized. If the auto-detect is
+unsuccessful the option has no effect.
+.IP "\fB\-mtune=\fR\fIname\fR" 4
+.IX Item "-mtune=name"
+This option specifies the name of the target \s-1ARM\s0 processor for
+which \s-1GCC\s0 should tune the performance of the code.
+For some \s-1ARM\s0 implementations better performance can be obtained by using
+this option.
+Permissible names are: \fBarm2\fR, \fBarm250\fR,
\&\fBarm3\fR, \fBarm6\fR, \fBarm60\fR, \fBarm600\fR, \fBarm610\fR,
\&\fBarm620\fR, \fBarm7\fR, \fBarm7m\fR, \fBarm7d\fR, \fBarm7dm\fR,
\&\fBarm7di\fR, \fBarm7dmi\fR, \fBarm70\fR, \fBarm700\fR,
@@ -10521,25 +10559,6 @@ assembly code. Permissible names are: \fBarm2\fR, \fBarm250\fR,
\&\fBfa526\fR, \fBfa626\fR,
\&\fBfa606te\fR, \fBfa626te\fR, \fBfmp626\fR, \fBfa726te\fR.
.Sp
-\&\fB\-mcpu=generic\-\fR\fIarch\fR is also permissible, and is
-equivalent to \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR.
-See \fB\-mtune\fR for more information.
-.Sp
-\&\fB\-mcpu=native\fR causes the compiler to auto-detect the \s-1CPU\s0
-of the build computer. At present, this feature is only supported on
-Linux, and not all architectures are recognized. If the auto-detect is
-unsuccessful the option has no effect.
-.IP "\fB\-mtune=\fR\fIname\fR" 4
-.IX Item "-mtune=name"
-This option is very similar to the \fB\-mcpu=\fR option, except that
-instead of specifying the actual target processor type, and hence
-restricting which instructions can be used, it specifies that \s-1GCC\s0 should
-tune the performance of the code as if the target were of the type
-specified in this option, but still choosing the instructions it
-generates based on the \s-1CPU\s0 specified by a \fB\-mcpu=\fR option.
-For some \s-1ARM\s0 implementations better performance can be obtained by using
-this option.
-.Sp
\&\fB\-mtune=generic\-\fR\fIarch\fR specifies that \s-1GCC\s0 should tune the
performance for a blend of processors within architecture \fIarch\fR.
The aim is to generate code that run well on the current most popular
@@ -10551,21 +10570,23 @@ this option may change in future \s-1GCC\s0 versions as \s-1CPU\s0 models come a
of the build computer. At present, this feature is only supported on
Linux, and not all architectures are recognized. If the auto-detect is
unsuccessful the option has no effect.
-.IP "\fB\-march=\fR\fIname\fR" 4
-.IX Item "-march=name"
-This specifies the name of the target \s-1ARM\s0 architecture. \s-1GCC\s0 uses this
-name to determine what kind of instructions it can emit when generating
-assembly code. This option can be used in conjunction with or instead
-of the \fB\-mcpu=\fR option. Permissible names are: \fBarmv2\fR,
-\&\fBarmv2a\fR, \fBarmv3\fR, \fBarmv3m\fR, \fBarmv4\fR, \fBarmv4t\fR,
-\&\fBarmv5\fR, \fBarmv5t\fR, \fBarmv5e\fR, \fBarmv5te\fR,
-\&\fBarmv6\fR, \fBarmv6j\fR,
-\&\fBarmv6t2\fR, \fBarmv6z\fR, \fBarmv6zk\fR, \fBarmv6\-m\fR,
-\&\fBarmv7\fR, \fBarmv7\-a\fR, \fBarmv7\-r\fR, \fBarmv7\-m\fR,
-\&\fBarmv8\-a\fR,
-\&\fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR.
+.IP "\fB\-mcpu=\fR\fIname\fR" 4
+.IX Item "-mcpu=name"
+This specifies the name of the target \s-1ARM\s0 processor. \s-1GCC\s0 uses this name
+to derive the name of the target \s-1ARM\s0 architecture (as if specified
+by \fB\-march\fR) and the \s-1ARM\s0 processor type for which to tune for
+performance (as if specified by \fB\-mtune\fR). Where this option
+is used in conjunction with \fB\-march\fR or \fB\-mtune\fR,
+those options take precedence over the appropriate part of this option.
.Sp
-\&\fB\-march=native\fR causes the compiler to auto-detect the architecture
+Permissible names for this option are the same as those for
+\&\fB\-mtune\fR.
+.Sp
+\&\fB\-mcpu=generic\-\fR\fIarch\fR is also permissible, and is
+equivalent to \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR.
+See \fB\-mtune\fR for more information.
+.Sp
+\&\fB\-mcpu=native\fR causes the compiler to auto-detect the \s-1CPU\s0
of the build computer. At present, this feature is only supported on
Linux, and not all architectures are recognized. If the auto-detect is
unsuccessful the option has no effect.
@@ -10649,8 +10670,11 @@ responsible for initializing this register with an appropriate value
before execution begins.
.IP "\fB\-mpic\-register=\fR\fIreg\fR" 4
.IX Item "-mpic-register=reg"
-Specify the register to be used for \s-1PIC\s0 addressing. The default is R10
-unless stack-checking is enabled, when R9 is used.
+Specify the register to be used for \s-1PIC\s0 addressing.
+For standard \s-1PIC\s0 base case, the default will be any suitable register
+determined by compiler. For single \s-1PIC\s0 base case, the default is
+\&\fBR9\fR if target is \s-1EABI\s0 based or stack-checking is enabled,
+otherwise the default is \fBR10\fR.
.IP "\fB\-mpoke\-function\-name\fR" 4
.IX Item "-mpoke-function-name"
Write the name of each function into the text section, directly
@@ -10805,7 +10829,7 @@ The default for this option is@tie{}\f(CW\*(C`avr2\*(C'\fR.
.el .IP "\f(CWavr5\fR" 4
.IX Item "avr5"
\&\*(L"Enhanced\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of program memory.
-\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`ata5790\*(C'\fR, \f(CW\*(C`ata5790n\*(C'\fR, \f(CW\*(C`ata5795\*(C'\fR, \f(CW\*(C`atmega16\*(C'\fR, \f(CW\*(C`atmega16a\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16hvbrevb\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega161\*(C'\fR, \f(CW\*(C`atmega162\*(C'\fR, \f(CW\*(C`atmega163\*(C'\fR, \f(CW\*(C`atmega164a\*(C'\fR, \f(CW\*(C`atmega164p\*(C'\fR, \f(CW\*(C`atmega164pa\*(C'\fR, \f(CW\*(C`atmega165\*(C'\fR, \f(CW\*(C`atmega165a\*(C'\fR, \f(CW\*(C`atmega165p\*(C'\fR, \f(CW\*(C`atmega165pa\*(C'\fR, \f(CW\*(C`atmega168\*(C'\fR, \f(CW\*(C`atmega168a\*(C'\fR, \f(CW\*(C`atmega168p\*(C'\fR, \f(CW\*(C`atmega168pa\*(C'\fR, \f(CW\*(C`atmega169\*(C'\fR, \f(CW\*(C`atmega169a\*(C'\fR, \f(CW\*(C`atmega169p\*(C'\fR, \f(CW\*(C`atmega169pa\*(C'\fR, \f(CW\*(C`atmega26hvg\*(C'\fR, \f(CW\*(C`atmega32\*(C'\fR, \f(CW\*(C`atmega32a\*(C'\fR, \f(CW\*(C`atmega32a\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32hvbrevb\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega323\*(C'\fR, \f(CW\*(C`atmega324a\*(C'\fR, \f(CW\*(C`atmega324p\*(C'\fR, \f(CW\*(C`atmega324pa\*(C'\fR, \f(CW\*(C`atmega325\*(C'\fR, \f(CW\*(C`atmega325a\*(C'\fR, \f(CW\*(C`atmega325p\*(C'\fR, \f(CW\*(C`atmega3250\*(C'\fR, \f(CW\*(C`atmega3250a\*(C'\fR, \f(CW\*(C`atmega3250p\*(C'\fR, \f(CW\*(C`atmega3250pa\*(C'\fR, \f(CW\*(C`atmega328\*(C'\fR, \f(CW\*(C`atmega328p\*(C'\fR, \f(CW\*(C`atmega329\*(C'\fR, \f(CW\*(C`atmega329a\*(C'\fR, \f(CW\*(C`atmega329p\*(C'\fR, \f(CW\*(C`atmega329pa\*(C'\fR, \f(CW\*(C`atmega3290\*(C'\fR, \f(CW\*(C`atmega3290a\*(C'\fR, \f(CW\*(C`atmega3290p\*(C'\fR, \f(CW\*(C`atmega3290pa\*(C'\fR, \f(CW\*(C`atmega406\*(C'\fR, \f(CW\*(C`atmega48hvf\*(C'\fR, \f(CW\*(C`atmega64\*(C'\fR, \f(CW\*(C`atmega64a\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64hve\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega64rfa2\*(C'\fR, \f(CW\*(C`atmega64rfr2\*(C'\fR, \f(CW\*(C`atmega640\*(C'\fR, \f(CW\*(C`atmega644\*(C'\fR, \f(CW\*(C`atmega644a\*(C'\fR, \f(CW\*(C`atmega644p\*(C'\fR, \f(CW\*(C`atmega644pa\*(C'\fR, \f(CW\*(C`atmega645\*(C'\fR, \f(CW\*(C`atmega645a\*(C'\fR, \f(CW\*(C`atmega645p\*(C'\fR, \f(CW\*(C`atmega6450\*(C'\fR, \f(CW\*(C`atmega6450a\*(C'\fR, \f(CW\*(C`atmega6450p\*(C'\fR, \f(CW\*(C`atmega649\*(C'\fR, \f(CW\*(C`atmega649a\*(C'\fR, \f(CW\*(C`atmega649p\*(C'\fR, \f(CW\*(C`atmega6490\*(C'\fR, \f(CW\*(C`atmega6490a\*(C'\fR, \f(CW\*(C`atmega6490p\*(C'\fR, \f(CW\*(C`at90can32\*(C'\fR, \f(CW\*(C`at90can64\*(C'\fR, \f(CW\*(C`at90pwm161\*(C'\fR, \f(CW\*(C`at90pwm216\*(C'\fR, \f(CW\*(C`at90pwm316\*(C'\fR, \f(CW\*(C`at90scr100\*(C'\fR, \f(CW\*(C`at90usb646\*(C'\fR, \f(CW\*(C`at90usb647\*(C'\fR, \f(CW\*(C`at94k\*(C'\fR, \f(CW\*(C`m3000\*(C'\fR.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`ata5790\*(C'\fR, \f(CW\*(C`ata5790n\*(C'\fR, \f(CW\*(C`ata5795\*(C'\fR, \f(CW\*(C`atmega16\*(C'\fR, \f(CW\*(C`atmega16a\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16hvbrevb\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega161\*(C'\fR, \f(CW\*(C`atmega162\*(C'\fR, \f(CW\*(C`atmega163\*(C'\fR, \f(CW\*(C`atmega164a\*(C'\fR, \f(CW\*(C`atmega164p\*(C'\fR, \f(CW\*(C`atmega164pa\*(C'\fR, \f(CW\*(C`atmega165\*(C'\fR, \f(CW\*(C`atmega165a\*(C'\fR, \f(CW\*(C`atmega165p\*(C'\fR, \f(CW\*(C`atmega165pa\*(C'\fR, \f(CW\*(C`atmega168\*(C'\fR, \f(CW\*(C`atmega168a\*(C'\fR, \f(CW\*(C`atmega168p\*(C'\fR, \f(CW\*(C`atmega168pa\*(C'\fR, \f(CW\*(C`atmega169\*(C'\fR, \f(CW\*(C`atmega169a\*(C'\fR, \f(CW\*(C`atmega169p\*(C'\fR, \f(CW\*(C`atmega169pa\*(C'\fR, \f(CW\*(C`atmega26hvg\*(C'\fR, \f(CW\*(C`atmega32\*(C'\fR, \f(CW\*(C`atmega32a\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32hvbrevb\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega323\*(C'\fR, \f(CW\*(C`atmega324a\*(C'\fR, \f(CW\*(C`atmega324p\*(C'\fR, \f(CW\*(C`atmega324pa\*(C'\fR, \f(CW\*(C`atmega325\*(C'\fR, \f(CW\*(C`atmega325a\*(C'\fR, \f(CW\*(C`atmega325p\*(C'\fR, \f(CW\*(C`atmega3250\*(C'\fR, \f(CW\*(C`atmega3250a\*(C'\fR, \f(CW\*(C`atmega3250p\*(C'\fR, \f(CW\*(C`atmega3250pa\*(C'\fR, \f(CW\*(C`atmega328\*(C'\fR, \f(CW\*(C`atmega328p\*(C'\fR, \f(CW\*(C`atmega329\*(C'\fR, \f(CW\*(C`atmega329a\*(C'\fR, \f(CW\*(C`atmega329p\*(C'\fR, \f(CW\*(C`atmega329pa\*(C'\fR, \f(CW\*(C`atmega3290\*(C'\fR, \f(CW\*(C`atmega3290a\*(C'\fR, \f(CW\*(C`atmega3290p\*(C'\fR, \f(CW\*(C`atmega3290pa\*(C'\fR, \f(CW\*(C`atmega406\*(C'\fR, \f(CW\*(C`atmega48hvf\*(C'\fR, \f(CW\*(C`atmega64\*(C'\fR, \f(CW\*(C`atmega64a\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64hve\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega64rfa2\*(C'\fR, \f(CW\*(C`atmega64rfr2\*(C'\fR, \f(CW\*(C`atmega640\*(C'\fR, \f(CW\*(C`atmega644\*(C'\fR, \f(CW\*(C`atmega644a\*(C'\fR, \f(CW\*(C`atmega644p\*(C'\fR, \f(CW\*(C`atmega644pa\*(C'\fR, \f(CW\*(C`atmega645\*(C'\fR, \f(CW\*(C`atmega645a\*(C'\fR, \f(CW\*(C`atmega645p\*(C'\fR, \f(CW\*(C`atmega6450\*(C'\fR, \f(CW\*(C`atmega6450a\*(C'\fR, \f(CW\*(C`atmega6450p\*(C'\fR, \f(CW\*(C`atmega649\*(C'\fR, \f(CW\*(C`atmega649a\*(C'\fR, \f(CW\*(C`atmega649p\*(C'\fR, \f(CW\*(C`atmega6490\*(C'\fR, \f(CW\*(C`atmega6490a\*(C'\fR, \f(CW\*(C`atmega6490p\*(C'\fR, \f(CW\*(C`at90can32\*(C'\fR, \f(CW\*(C`at90can64\*(C'\fR, \f(CW\*(C`at90pwm161\*(C'\fR, \f(CW\*(C`at90pwm216\*(C'\fR, \f(CW\*(C`at90pwm316\*(C'\fR, \f(CW\*(C`at90scr100\*(C'\fR, \f(CW\*(C`at90usb646\*(C'\fR, \f(CW\*(C`at90usb647\*(C'\fR, \f(CW\*(C`at94k\*(C'\fR, \f(CW\*(C`m3000\*(C'\fR.
.ie n .IP """avr51""" 4
.el .IP "\f(CWavr51\fR" 4
.IX Item "avr51"
@@ -11043,7 +11067,7 @@ command-line option.
.IX Item "-<Switch/case dispatch tables. If you do not want such dispatch>"
tables you can specify the \fB\-fno\-jump\-tables\fR command-line option.
.IP "\-<C and \*(C+ constructors/destructors called during startup/shutdown.>" 4
-.IX Item "-<C and constructors/destructors called during startup/shutdown.>"
+.IX Item "-<C and constructors/destructors called during startup/shutdown.>"
.PD 0
.ie n .IP "\-<If the tools hit a ""gs()"" modifier explained above.>" 4
.el .IP "\-<If the tools hit a \f(CWgs()\fR modifier explained above.>" 4
@@ -11790,7 +11814,7 @@ an executable when linking, using the Darwin \fIlibtool\fR command.
This causes \s-1GCC\s0's output file to have the \fI\s-1ALL\s0\fR subtype, instead of
one controlled by the \fB\-mcpu\fR or \fB\-march\fR option.
.IP "\fB\-allowable_client\fR \fIclient_name\fR" 4
-.IX Item "-allowable_client client_name"
+.IX Item "-allowable_client client_name"
.PD 0
.IP "\fB\-client_name\fR" 4
.IX Item "-client_name"
@@ -12865,9 +12889,14 @@ Intel Core i7 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SS
Intel Core \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
\&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1AVX\s0, \s-1AES\s0, \s-1PCLMUL\s0, \s-1FSGSBASE\s0, \s-1RDRND\s0 and F16C instruction
set support.
+.IP "\fBcore\-avx2\fR" 4
+.IX Item "core-avx2"
+Intel Core \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE\s0, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
+\&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1AVX\s0, \s-1AVX2\s0, \s-1AES\s0, \s-1PCLMUL\s0, \s-1FSGSBASE\s0, \s-1RDRND\s0, \s-1FMA\s0, \s-1BMI\s0, \s-1BMI2\s0
+and F16C instruction set support.
.IP "\fBatom\fR" 4
.IX Item "atom"
-Intel Atom \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0 and \s-1SSSE3\s0
+Intel Atom \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE\s0, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0 and \s-1SSSE3\s0
instruction set support.
.IP "\fBk6\fR" 4
.IX Item "k6"
@@ -16284,7 +16313,9 @@ following options:
\&\fB\-maltivec \-mfprnd \-mhard\-float \-mmfcrf \-mmultiple
\&\-mpopcntb \-mpopcntd \-mpowerpc64
\&\-mpowerpc\-gpopt \-mpowerpc\-gfxopt \-msingle\-float \-mdouble\-float
-\&\-msimple\-fpu \-mstring \-mmulhw \-mdlmzb \-mmfpgpr \-mvsx\fR
+\&\-msimple\-fpu \-mstring \-mmulhw \-mdlmzb \-mmfpgpr \-mvsx
+\&\-mcrypto \-mdirect\-move \-mpower8\-fusion \-mpower8\-vector
+\&\-mquad\-memory \-mquad\-memory\-atomic\fR
.Sp
The particular options set for any particular \s-1CPU\s0 varies between
compiler versions, depending on what setting seems to produce optimal
@@ -16331,6 +16362,36 @@ enable the use of built-in functions that allow more direct access to
the AltiVec instruction set. You may also need to set
\&\fB\-mabi=altivec\fR to adjust the current \s-1ABI\s0 with AltiVec \s-1ABI\s0
enhancements.
+.Sp
+When \fB\-maltivec\fR is used, rather than \fB\-maltivec=le\fR or
+\&\fB\-maltivec=be\fR, the element order for Altivec intrinsics such
+as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and \f(CW\*(C`vec_insert\*(C'\fR will
+match array element order corresponding to the endianness of the
+target. That is, element zero identifies the leftmost element in a
+vector register when targeting a big-endian platform, and identifies
+the rightmost element in a vector register when targeting a
+little-endian platform.
+.IP "\fB\-maltivec=be\fR" 4
+.IX Item "-maltivec=be"
+Generate Altivec instructions using big-endian element order,
+regardless of whether the target is big\- or little-endian. This is
+the default when targeting a big-endian platform.
+.Sp
+The element order is used to interpret element numbers in Altivec
+intrinsics such as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and
+\&\f(CW\*(C`vec_insert\*(C'\fR. By default, these will match array element order
+corresponding to the endianness for the target.
+.IP "\fB\-maltivec=le\fR" 4
+.IX Item "-maltivec=le"
+Generate Altivec instructions using little-endian element order,
+regardless of whether the target is big\- or little-endian. This is
+the default when targeting a little-endian platform. This option is
+currently ignored when targeting a big-endian platform.
+.Sp
+The element order is used to interpret element numbers in Altivec
+intrinsics such as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and
+\&\f(CW\*(C`vec_insert\*(C'\fR. By default, these will match array element order
+corresponding to the endianness for the target.
.IP "\fB\-mvrsave\fR" 4
.IX Item "-mvrsave"
.PD 0
@@ -16399,6 +16460,61 @@ This option has been deprecated. Use \fB\-mspe\fR and
Generate code that uses (does not use) vector/scalar (\s-1VSX\s0)
instructions, and also enable the use of built-in functions that allow
more direct access to the \s-1VSX\s0 instruction set.
+.IP "\fB\-mcrypto\fR" 4
+.IX Item "-mcrypto"
+.PD 0
+.IP "\fB\-mno\-crypto\fR" 4
+.IX Item "-mno-crypto"
+.PD
+Enable the use (disable) of the built-in functions that allow direct
+access to the cryptographic instructions that were added in version
+2.07 of the PowerPC \s-1ISA\s0.
+.IP "\fB\-mdirect\-move\fR" 4
+.IX Item "-mdirect-move"
+.PD 0
+.IP "\fB\-mno\-direct\-move\fR" 4
+.IX Item "-mno-direct-move"
+.PD
+Generate code that uses (does not use) the instructions to move data
+between the general purpose registers and the vector/scalar (\s-1VSX\s0)
+registers that were added in version 2.07 of the PowerPC \s-1ISA\s0.
+.IP "\fB\-mpower8\-fusion\fR" 4
+.IX Item "-mpower8-fusion"
+.PD 0
+.IP "\fB\-mno\-power8\-fusion\fR" 4
+.IX Item "-mno-power8-fusion"
+.PD
+Generate code that keeps (does not keeps) some integer operations
+adjacent so that the instructions can be fused together on power8 and
+later processors.
+.IP "\fB\-mpower8\-vector\fR" 4
+.IX Item "-mpower8-vector"
+.PD 0
+.IP "\fB\-mno\-power8\-vector\fR" 4
+.IX Item "-mno-power8-vector"
+.PD
+Generate code that uses (does not use) the vector and scalar
+instructions that were added in version 2.07 of the PowerPC \s-1ISA\s0. Also
+enable the use of built-in functions that allow more direct access to
+the vector instructions.
+.IP "\fB\-mquad\-memory\fR" 4
+.IX Item "-mquad-memory"
+.PD 0
+.IP "\fB\-mno\-quad\-memory\fR" 4
+.IX Item "-mno-quad-memory"
+.PD
+Generate code that uses (does not use) the non-atomic quad word memory
+instructions. The \fB\-mquad\-memory\fR option requires use of
+64\-bit mode.
+.IP "\fB\-mquad\-memory\-atomic\fR" 4
+.IX Item "-mquad-memory-atomic"
+.PD 0
+.IP "\fB\-mno\-quad\-memory\-atomic\fR" 4
+.IX Item "-mno-quad-memory-atomic"
+.PD
+Generate code that uses (does not use) the atomic quad word memory
+instructions. The \fB\-mquad\-memory\-atomic\fR option requires use of
+64\-bit mode.
.IP "\fB\-mfloat\-gprs=\fR\fIyes/single/double/no\fR" 4
.IX Item "-mfloat-gprs=yes/single/double/no"
.PD 0
@@ -16828,7 +16944,8 @@ Return structures smaller than 8 bytes in registers (as specified by the
.IX Item "-mabi=abi-type"
Extend the current \s-1ABI\s0 with a particular extension, or remove such extension.
Valid values are \fIaltivec\fR, \fIno-altivec\fR, \fIspe\fR,
-\&\fIno-spe\fR, \fIibmlongdouble\fR, \fIieeelongdouble\fR.
+\&\fIno-spe\fR, \fIibmlongdouble\fR, \fIieeelongdouble\fR,
+\&\fIelfv1\fR, \fIelfv2\fR.
.IP "\fB\-mabi=spe\fR" 4
.IX Item "-mabi=spe"
Extend the current \s-1ABI\s0 with \s-1SPE\s0 \s-1ABI\s0 extensions. This does not change
@@ -16845,6 +16962,18 @@ This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
.IX Item "-mabi=ieeelongdouble"
Change the current \s-1ABI\s0 to use \s-1IEEE\s0 extended-precision long double.
This is a PowerPC 32\-bit Linux \s-1ABI\s0 option.
+.IP "\fB\-mabi=elfv1\fR" 4
+.IX Item "-mabi=elfv1"
+Change the current \s-1ABI\s0 to use the ELFv1 \s-1ABI\s0.
+This is the default \s-1ABI\s0 for big-endian PowerPC 64\-bit Linux.
+Overriding the default \s-1ABI\s0 requires special system support and is
+likely to fail in spectacular ways.
+.IP "\fB\-mabi=elfv2\fR" 4
+.IX Item "-mabi=elfv2"
+Change the current \s-1ABI\s0 to use the ELFv2 \s-1ABI\s0.
+This is the default \s-1ABI\s0 for little-endian PowerPC 64\-bit Linux.
+Overriding the default \s-1ABI\s0 requires special system support and is
+likely to fail in spectacular ways.
.IP "\fB\-mprototype\fR" 4
.IX Item "-mprototype"
.PD 0
@@ -17132,6 +17261,25 @@ stack location in the function prologue if the function calls through
a pointer on \s-1AIX\s0 and 64\-bit Linux systems. If the \s-1TOC\s0 value is not
saved in the prologue, it is saved just before the call through the
pointer. The \fB\-mno\-save\-toc\-indirect\fR option is the default.
+.IP "\fB\-mcompat\-align\-parm\fR" 4
+.IX Item "-mcompat-align-parm"
+.PD 0
+.IP "\fB\-mno\-compat\-align\-parm\fR" 4
+.IX Item "-mno-compat-align-parm"
+.PD
+Generate (do not generate) code to pass structure parameters with a
+maximum alignment of 64 bits, for compatibility with older versions
+of \s-1GCC\s0.
+.Sp
+Older versions of \s-1GCC\s0 (prior to 4.9.0) incorrectly did not align a
+structure parameter on a 128\-bit boundary when that structure contained
+a member requiring 128\-bit alignment. This is corrected in more
+recent versions of \s-1GCC\s0. This option may be used to generate code
+that is compatible with functions compiled with older versions of
+\&\s-1GCC\s0.
+.Sp
+In this version of the compiler, the \fB\-mcompat\-align\-parm\fR
+is the default, except when using the Linux ELFv2 \s-1ABI\s0.
.PP
\fI\s-1RX\s0 Options\fR
.IX Subsection "RX Options"
@@ -17514,6 +17662,23 @@ values have to be exact powers of 2 and \fIstack-size\fR has to be greater than
In order to be efficient the extra code makes the assumption that the stack starts
at an address aligned to the value given by \fIstack-size\fR.
The \fIstack-guard\fR option can only be used in conjunction with \fIstack-size\fR.
+.IP "\fB\-mhotpatch[=\fR\fIhalfwords\fR\fB]\fR" 4
+.IX Item "-mhotpatch[=halfwords]"
+.PD 0
+.IP "\fB\-mno\-hotpatch\fR" 4
+.IX Item "-mno-hotpatch"
+.PD
+If the hotpatch option is enabled, a \*(L"hot-patching\*(R" function
+prologue is generated for all functions in the compilation unit.
+The funtion label is prepended with the given number of two-byte
+Nop instructions (\fIhalfwords\fR, maximum 1000000) or 12 Nop
+instructions if no argument is present. Functions with a
+hot-patching prologue are never inlined automatically, and a
+hot-patching prologue is never generated for functions functions
+that are explicitly inline.
+.Sp
+This option can be overridden for individual functions with the
+\&\f(CW\*(C`hotpatch\*(C'\fR attribute.
.PP
\fIScore Options\fR
.IX Subsection "Score Options"
@@ -18039,8 +18204,9 @@ These \fB\-m\fR options are supported on the \s-1SPARC:\s0
.IX Item "-mapp-regs"
.PD
Specify \fB\-mapp\-regs\fR to generate output using the global registers
-2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications. This
-is the default.
+2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications. Like the
+global register 1, each global register 2 through 4 is then treated as an
+allocable register that is clobbered by function calls. This is the default.
.Sp
To be fully \s-1SVR4\s0 ABI-compliant at the cost of some performance loss,
specify \fB\-mno\-app\-regs\fR. You should compile libraries and system
@@ -18116,6 +18282,15 @@ absolute address. Otherwise, it assumes they have 4\-byte alignment.
Specifying this option avoids some rare compatibility problems with code
generated by other compilers. It is not the default because it results
in a performance loss, especially for floating-point code.
+.IP "\fB\-muser\-mode\fR" 4
+.IX Item "-muser-mode"
+.PD 0
+.IP "\fB\-mno\-user\-mode\fR" 4
+.IX Item "-mno-user-mode"
+.PD
+Do not generate code that can only run in supervisor mode. This is relevant
+only for the \f(CW\*(C`casa\*(C'\fR instruction emitted for the \s-1LEON3\s0 processor. The
+default is \fB\-mno\-user\-mode\fR.
.IP "\fB\-mno\-faster\-structs\fR" 4
.IX Item "-mno-faster-structs"
.PD 0
@@ -18135,10 +18310,10 @@ the rules of the \s-1ABI\s0.
Set the instruction set, register set, and instruction scheduling parameters
for machine type \fIcpu_type\fR. Supported values for \fIcpu_type\fR are
\&\fBv7\fR, \fBcypress\fR, \fBv8\fR, \fBsupersparc\fR, \fBhypersparc\fR,
-\&\fBleon\fR, \fBsparclite\fR, \fBf930\fR, \fBf934\fR, \fBsparclite86x\fR,
-\&\fBsparclet\fR, \fBtsc701\fR, \fBv9\fR, \fBultrasparc\fR,
-\&\fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR,
-and \fBniagara4\fR.
+\&\fBleon\fR, \fBleon3\fR, \fBsparclite\fR, \fBf930\fR, \fBf934\fR,
+\&\fBsparclite86x\fR, \fBsparclet\fR, \fBtsc701\fR, \fBv9\fR,
+\&\fBultrasparc\fR, \fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR,
+\&\fBniagara3\fR and \fBniagara4\fR.
.Sp
Native Solaris and GNU/Linux toolchains also support the value \fBnative\fR,
which selects the best architecture option for the host processor.
@@ -18157,7 +18332,7 @@ implementations.
cypress
.IP "v8" 4
.IX Item "v8"
-supersparc, hypersparc, leon
+supersparc, hypersparc, leon, leon3
.IP "sparclite" 4
.IX Item "sparclite"
f930, f934, sparclite86x
@@ -18220,10 +18395,11 @@ option \fB\-mcpu=\fR\fIcpu_type\fR does.
The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
\&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
that select a particular \s-1CPU\s0 implementation. Those are \fBcypress\fR,
-\&\fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR, \fBf930\fR, \fBf934\fR,
-\&\fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR, \fBultrasparc3\fR,
-\&\fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR and \fBniagara4\fR. With
-native Solaris and GNU/Linux toolchains, \fBnative\fR can also be used.
+\&\fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR, \fBleon3\fR, \fBf930\fR,
+\&\fBf934\fR, \fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR,
+\&\fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR and
+\&\fBniagara4\fR. With native Solaris and GNU/Linux toolchains, \fBnative\fR
+can also be used.
.IP "\fB\-mv8plus\fR" 4
.IX Item "-mv8plus"
.PD 0
@@ -18298,6 +18474,10 @@ later.
.IX Item "-mfix-at697f"
Enable the documented workaround for the single erratum of the Atmel \s-1AT697F\s0
processor (which corresponds to erratum #13 of the \s-1AT697E\s0 processor).
+.IP "\fB\-mfix\-ut699\fR" 4
+.IX Item "-mfix-ut699"
+Enable the documented workarounds for the floating-point errata and the data
+cache nullify errata of the \s-1UT699\s0 processor.
.PP
These \fB\-m\fR options are supported in addition to the above
on \s-1SPARC\-V9\s0 processors in 64\-bit environments:
@@ -18977,7 +19157,7 @@ every cross-file call, not just those that really are out of range.
.IX Subsection "zSeries Options"
.PP
These are listed under
-.SS "Options for Code Generation Conventions"
+.Sh "Options for Code Generation Conventions"
.IX Subsection "Options for Code Generation Conventions"
These machine-independent options control the interface conventions
used in code generation.
diff --git a/gcc-4.8/gcc/doc/gc-analyze.1 b/gcc-4.8/gcc/doc/gc-analyze.1
index b996198bd..c149d2ad1 100644
--- a/gcc-4.8/gcc/doc/gc-analyze.1
+++ b/gcc-4.8/gcc/doc/gc-analyze.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GC-ANALYZE 1"
-.TH GC-ANALYZE 1 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH GC-ANALYZE 1 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/gcc/doc/gcc.1 b/gcc-4.8/gcc/doc/gcc.1
index 88e400d95..24005b6cc 100644
--- a/gcc-4.8/gcc/doc/gcc.1
+++ b/gcc-4.8/gcc/doc/gcc.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GCC 1"
-.TH GCC 1 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH GCC 1 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -180,7 +188,7 @@ these have both positive and negative forms; the negative form of
only one of these two forms, whichever one is not the default.
.SH "OPTIONS"
.IX Header "OPTIONS"
-.SS "Option Summary"
+.Sh "Option Summary"
.IX Subsection "Option Summary"
Here is a summary of all the options, grouped by type. Explanations are
in the following sections.
@@ -190,7 +198,7 @@ in the following sections.
\&\-pipe \-pass\-exit\-codes
\&\-x\fR \fIlanguage\fR \fB\-v \-### \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]] \fB\-\-target\-help
\&\-\-version \-wrapper @\fR\fIfile\fR \fB\-fplugin=\fR\fIfile\fR \fB\-fplugin\-arg\-\fR\fIname\fR\fB=\fR\fIarg\fR
-\&\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] \fB\-fada\-spec\-parent=\fR\fIarg\fR \fB\-fdump\-go\-spec=\fR\fIfile\fR
+\&\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] \fB\-fada\-spec\-parent=\fR\fIunit\fR \fB\-fdump\-go\-spec=\fR\fIfile\fR
.IP "\fIC Language Options\fR" 4
.IX Item "C Language Options"
\&\fB\-ansi \-std=\fR\fIstandard\fR \fB\-fgnu89\-inline
@@ -867,7 +875,12 @@ See \s-1RS/6000\s0 and PowerPC Options.
\&\-mno\-recip\-precision
\&\-mveclibabi=\fR\fItype\fR \fB\-mfriz \-mno\-friz
\&\-mpointers\-to\-nested\-functions \-mno\-pointers\-to\-nested\-functions
-\&\-msave\-toc\-indirect \-mno\-save\-toc\-indirect\fR
+\&\-msave\-toc\-indirect \-mno\-save\-toc\-indirect
+\&\-mpower8\-fusion \-mno\-mpower8\-fusion \-mpower8\-vector \-mno\-power8\-vector
+\&\-mcrypto \-mno\-crypto \-mdirect\-move \-mno\-direct\-move
+\&\-mquad\-memory \-mno\-quad\-memory
+\&\-mquad\-memory\-atomic \-mno\-quad\-memory\-atomic
+\&\-mcompat\-align\-parm \-mno\-compat\-align\-parm\fR
.Sp
\&\fI\s-1RX\s0 Options\fR
\&\fB\-m64bit\-doubles \-m32bit\-doubles \-fpu \-nofpu
@@ -891,7 +904,8 @@ See \s-1RS/6000\s0 and PowerPC Options.
\&\-msmall\-exec \-mno\-small\-exec \-mmvcle \-mno\-mvcle
\&\-m64 \-m31 \-mdebug \-mno\-debug \-mesa \-mzarch
\&\-mtpf\-trace \-mno\-tpf\-trace \-mfused\-madd \-mno\-fused\-madd
-\&\-mwarn\-framesize \-mwarn\-dynamicstack \-mstack\-size \-mstack\-guard\fR
+\&\-mwarn\-framesize \-mwarn\-dynamicstack \-mstack\-size \-mstack\-guard
+\&\-mhotpatch[=\fR\fIhalfwords\fR\fB] \-mno\-hotpatch\fR
.Sp
\&\fIScore Options\fR
\&\fB\-meb \-mel
@@ -936,11 +950,12 @@ See \s-1RS/6000\s0 and PowerPC Options.
\&\-mhard\-quad\-float \-msoft\-quad\-float
\&\-mstack\-bias \-mno\-stack\-bias
\&\-munaligned\-doubles \-mno\-unaligned\-doubles
+\&\-muser\-mode \-mno\-user\-mode
\&\-mv8plus \-mno\-v8plus \-mvis \-mno\-vis
\&\-mvis2 \-mno\-vis2 \-mvis3 \-mno\-vis3
\&\-mcbcond \-mno\-cbcond
\&\-mfmaf \-mno\-fmaf \-mpopc \-mno\-popc
-\&\-mfix\-at697f\fR
+\&\-mfix\-at697f \-mfix\-ut699\fR
.Sp
\&\fI\s-1SPU\s0 Options\fR
\&\fB\-mwarn\-reloc \-merror\-reloc
@@ -1029,7 +1044,7 @@ See S/390 and zSeries Options.
\&\fB\-fstack\-reuse=\fR\fIreuse_level\fR
\&\fB\-ftrapv \-fwrapv \-fbounds\-check
\&\-fvisibility \-fstrict\-volatile\-bitfields \-fsync\-libcalls\fR
-.SS "Options Controlling the Kind of Output"
+.Sh "Options Controlling the Kind of Output"
.IX Subsection "Options Controlling the Kind of Output"
Compilation can involve up to four stages: preprocessing, compilation
proper, assembly and linking, always in that order. \s-1GCC\s0 is capable of
@@ -1459,8 +1474,11 @@ Define an argument called \fIkey\fR with a value of \fIvalue\fR
for the plugin called \fIname\fR.
.IP "\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR]" 4
.IX Item "-fdump-ada-spec[-slim]"
-For C and \*(C+ source and include files, generate corresponding Ada
-specs.
+For C and \*(C+ source and include files, generate corresponding Ada specs.
+.IP "\fB\-fada\-spec\-parent=\fR\fIunit\fR" 4
+.IX Item "-fada-spec-parent=unit"
+In conjunction with \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] above, generate
+Ada specs as child units of parent \fIunit\fR.
.IP "\fB\-fdump\-go\-spec=\fR\fIfile\fR" 4
.IX Item "-fdump-go-spec=file"
For input files in any language, generate corresponding Go
@@ -1481,8 +1499,8 @@ option in either single or double quotes. Any character (including a
backslash) may be included by prefixing the character to be included
with a backslash. The \fIfile\fR may itself contain additional
@\fIfile\fR options; any such options will be processed recursively.
-.SS "Compiling \*(C+ Programs"
-.IX Subsection "Compiling Programs"
+.Sh "Compiling \*(C+ Programs"
+.IX Subsection "Compiling Programs"
\&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
\&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
\&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
@@ -1505,7 +1523,7 @@ When you compile \*(C+ programs, you may specify many of the same
command-line options that you use for compiling programs in any
language; or command-line options meaningful for C and related
languages; or options that are meaningful only for \*(C+ programs.
-.SS "Options Controlling C Dialect"
+.Sh "Options Controlling C Dialect"
.IX Subsection "Options Controlling C Dialect"
The following options control the dialect of C (or languages derived
from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
@@ -1892,8 +1910,8 @@ These options control whether a bit-field is signed or unsigned, when the
declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR. By
default, such a bit-field is signed, because this is consistent: the
basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
-.SS "Options Controlling \*(C+ Dialect"
-.IX Subsection "Options Controlling Dialect"
+.Sh "Options Controlling \*(C+ Dialect"
+.IX Subsection "Options Controlling Dialect"
This section describes the command-line options that are only meaningful
for \*(C+ programs. You can also use most of the \s-1GNU\s0 compiler options
regardless of what language your program is in. For example, you
@@ -2250,7 +2268,7 @@ Do not assume \fBinline\fR for functions defined inside a class scope.
functions have linkage like inline functions; they just aren't
inlined by default.
.IP "\fB\-Wabi\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
-.IX Item "-Wabi (C, Objective-C, and Objective- only)"
+.IX Item "-Wabi (C, Objective-C, and Objective- only)"
Warn when G++ generates code that is probably not compatible with the
vendor-neutral \*(C+ \s-1ABI\s0. Although an effort has been made to warn about
all such cases, there are probably some cases that are not warned about,
@@ -2562,7 +2580,7 @@ Warn when overload resolution chooses a promotion from unsigned or
enumerated type to a signed type, over a conversion to an unsigned type of
the same size. Previous versions of G++ tried to preserve
unsignedness, but the standard mandates the current behavior.
-.SS "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
+.Sh "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
.IX Subsection "Options Controlling Objective-C and Objective- Dialects"
(\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
languages themselves.
@@ -2759,7 +2777,7 @@ that methods and selectors must be declared before being used.
.IX Item "-print-objc-runtime-info"
Generate C header describing the largest structure that is passed by
value, if any.
-.SS "Options to Control Diagnostic Messages Formatting"
+.Sh "Options to Control Diagnostic Messages Formatting"
.IX Subsection "Options to Control Diagnostic Messages Formatting"
Traditionally, diagnostic messages have been formatted irrespective of
the output device's aspect (e.g. its width, ...). You can use the
@@ -2800,7 +2818,7 @@ option is known to the diagnostic machinery). Specifying the
By default, each diagnostic emitted includes the original source line
and a caret '^' indicating the column. This option suppresses this
information.
-.SS "Options to Request or Suppress Warnings"
+.Sh "Options to Request or Suppress Warnings"
.IX Subsection "Options to Request or Suppress Warnings"
Warnings are diagnostic messages that report constructions that
are not inherently erroneous but that are risky or suggest there
@@ -3186,7 +3204,7 @@ enabled by default and it is made into an error by
Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
This warning is enabled by \fB\-Wall\fR.
.IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
-.IX Item "-Wignored-qualifiers (C and only)"
+.IX Item "-Wignored-qualifiers (C and only)"
Warn if the return type of a function has a type qualifier
such as \f(CW\*(C`const\*(C'\fR. For \s-1ISO\s0 C such a type qualifier has no effect,
since the value returned by a function is not an lvalue.
@@ -3358,7 +3376,7 @@ between \fB\-Wswitch\fR and this option is that this option gives a
warning about an omitted enumeration code even if there is a
\&\f(CW\*(C`default\*(C'\fR label.
.IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
-.IX Item "-Wsync-nand (C and only)"
+.IX Item "-Wsync-nand (C and only)"
Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
built-in functions are used. These functions changed semantics in \s-1GCC\s0 4.4.
.IP "\fB\-Wtrigraphs\fR" 4
@@ -3397,7 +3415,7 @@ This warning is enabled by \fB\-Wall\fR.
.Sp
To suppress this warning use the \fBunused\fR attribute.
.IP "\fB\-Wunused\-local\-typedefs\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
-.IX Item "-Wunused-local-typedefs (C, Objective-C, and Objective- only)"
+.IX Item "-Wunused-local-typedefs (C, Objective-C, and Objective- only)"
Warn when a typedef locally defined in a function is not used.
This warning is enabled by \fB\-Wall\fR.
.IP "\fB\-Wunused\-parameter\fR" 4
@@ -4355,7 +4373,7 @@ a suffix. When used together with \fB\-Wsystem\-headers\fR it
warns about such constants in system header files. This can be useful
when preparing code to use with the \f(CW\*(C`FLOAT_CONST_DECIMAL64\*(C'\fR pragma
from the decimal floating-point extension to C99.
-.SS "Options for Debugging Your Program or \s-1GCC\s0"
+.Sh "Options for Debugging Your Program or \s-1GCC\s0"
.IX Subsection "Options for Debugging Your Program or GCC"
\&\s-1GCC\s0 has various special options that are used for debugging
either your program or \s-1GCC:\s0
@@ -5859,7 +5877,7 @@ in that compilation unit, for example
if, in the debugger, you want to cast a value to a type that is
not actually used in your program (but is declared). More often,
however, this results in a significant amount of wasted space.
-.SS "Options That Control Optimization"
+.Sh "Options That Control Optimization"
.IX Subsection "Options That Control Optimization"
These options control various sorts of optimizations.
.PP
@@ -8968,7 +8986,7 @@ seeking a basis for a new straight-line strength reduction candidate.
.RE
.RS 4
.RE
-.SS "Options Controlling the Preprocessor"
+.Sh "Options Controlling the Preprocessor"
.IX Subsection "Options Controlling the Preprocessor"
These options control the C preprocessor, which is run on each C source
file before actual compilation.
@@ -9770,7 +9788,7 @@ header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
.PD
Print out \s-1GNU\s0 \s-1CPP\s0's version number. With one dash, proceed to
preprocess as normal. With two dashes, exit immediately.
-.SS "Passing Options to the Assembler"
+.Sh "Passing Options to the Assembler"
.IX Subsection "Passing Options to the Assembler"
You can pass options to the assembler.
.IP "\fB\-Wa,\fR\fIoption\fR" 4
@@ -9785,7 +9803,7 @@ recognize.
.Sp
If you want to pass an option that takes an argument, you must use
\&\fB\-Xassembler\fR twice, once for the option and once for the argument.
-.SS "Options for Linking"
+.Sh "Options for Linking"
.IX Subsection "Options for Linking"
These options come into play when the compiler links object files into
an executable output file. They are meaningless if the compiler is
@@ -10024,7 +10042,7 @@ linker. When using the \s-1GNU\s0 linker, you can also get the same effect with
Pretend the symbol \fIsymbol\fR is undefined, to force linking of
library modules to define it. You can use \fB\-u\fR multiple times with
different symbols to force loading of additional library modules.
-.SS "Options for Directory Search"
+.Sh "Options for Directory Search"
.IX Subsection "Options for Directory Search"
These options specify directories to search for header files, for
libraries and for parts of the compiler:
@@ -10159,13 +10177,13 @@ by default, but it is often satisfactory.
\&\fB\-I\-\fR does not inhibit the use of the standard system directories
for header files. Thus, \fB\-I\-\fR and \fB\-nostdinc\fR are
independent.
-.SS "Specifying Target Machine and Compiler Version"
+.Sh "Specifying Target Machine and Compiler Version"
.IX Subsection "Specifying Target Machine and Compiler Version"
The usual way to run \s-1GCC\s0 is to run the executable called \fBgcc\fR, or
\&\fImachine\fR\fB\-gcc\fR when cross-compiling, or
\&\fImachine\fR\fB\-gcc\-\fR\fIversion\fR to run a version other than the
one that was installed last.
-.SS "Hardware Models and Configurations"
+.Sh "Hardware Models and Configurations"
.IX Subsection "Hardware Models and Configurations"
Each target machine types can have its own
special options, starting with \fB\-m\fR, to choose among various
@@ -10489,11 +10507,31 @@ order. That is, a byte order of the form \fB32107654\fR. Note: this
option should only be used if you require compatibility with code for
big-endian \s-1ARM\s0 processors generated by versions of the compiler prior to
2.8. This option is now deprecated.
-.IP "\fB\-mcpu=\fR\fIname\fR" 4
-.IX Item "-mcpu=name"
-This specifies the name of the target \s-1ARM\s0 processor. \s-1GCC\s0 uses this name
-to determine what kind of instructions it can emit when generating
-assembly code. Permissible names are: \fBarm2\fR, \fBarm250\fR,
+.IP "\fB\-march=\fR\fIname\fR" 4
+.IX Item "-march=name"
+This specifies the name of the target \s-1ARM\s0 architecture. \s-1GCC\s0 uses this
+name to determine what kind of instructions it can emit when generating
+assembly code. This option can be used in conjunction with or instead
+of the \fB\-mcpu=\fR option. Permissible names are: \fBarmv2\fR,
+\&\fBarmv2a\fR, \fBarmv3\fR, \fBarmv3m\fR, \fBarmv4\fR, \fBarmv4t\fR,
+\&\fBarmv5\fR, \fBarmv5t\fR, \fBarmv5e\fR, \fBarmv5te\fR,
+\&\fBarmv6\fR, \fBarmv6j\fR,
+\&\fBarmv6t2\fR, \fBarmv6z\fR, \fBarmv6zk\fR, \fBarmv6\-m\fR,
+\&\fBarmv7\fR, \fBarmv7\-a\fR, \fBarmv7\-r\fR, \fBarmv7\-m\fR, \fBarmv7e\-m\fR
+\&\fBarmv8\-a\fR,
+\&\fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR.
+.Sp
+\&\fB\-march=native\fR causes the compiler to auto-detect the architecture
+of the build computer. At present, this feature is only supported on
+Linux, and not all architectures are recognized. If the auto-detect is
+unsuccessful the option has no effect.
+.IP "\fB\-mtune=\fR\fIname\fR" 4
+.IX Item "-mtune=name"
+This option specifies the name of the target \s-1ARM\s0 processor for
+which \s-1GCC\s0 should tune the performance of the code.
+For some \s-1ARM\s0 implementations better performance can be obtained by using
+this option.
+Permissible names are: \fBarm2\fR, \fBarm250\fR,
\&\fBarm3\fR, \fBarm6\fR, \fBarm60\fR, \fBarm600\fR, \fBarm610\fR,
\&\fBarm620\fR, \fBarm7\fR, \fBarm7m\fR, \fBarm7d\fR, \fBarm7dm\fR,
\&\fBarm7di\fR, \fBarm7dmi\fR, \fBarm70\fR, \fBarm700\fR,
@@ -10521,25 +10559,6 @@ assembly code. Permissible names are: \fBarm2\fR, \fBarm250\fR,
\&\fBfa526\fR, \fBfa626\fR,
\&\fBfa606te\fR, \fBfa626te\fR, \fBfmp626\fR, \fBfa726te\fR.
.Sp
-\&\fB\-mcpu=generic\-\fR\fIarch\fR is also permissible, and is
-equivalent to \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR.
-See \fB\-mtune\fR for more information.
-.Sp
-\&\fB\-mcpu=native\fR causes the compiler to auto-detect the \s-1CPU\s0
-of the build computer. At present, this feature is only supported on
-Linux, and not all architectures are recognized. If the auto-detect is
-unsuccessful the option has no effect.
-.IP "\fB\-mtune=\fR\fIname\fR" 4
-.IX Item "-mtune=name"
-This option is very similar to the \fB\-mcpu=\fR option, except that
-instead of specifying the actual target processor type, and hence
-restricting which instructions can be used, it specifies that \s-1GCC\s0 should
-tune the performance of the code as if the target were of the type
-specified in this option, but still choosing the instructions it
-generates based on the \s-1CPU\s0 specified by a \fB\-mcpu=\fR option.
-For some \s-1ARM\s0 implementations better performance can be obtained by using
-this option.
-.Sp
\&\fB\-mtune=generic\-\fR\fIarch\fR specifies that \s-1GCC\s0 should tune the
performance for a blend of processors within architecture \fIarch\fR.
The aim is to generate code that run well on the current most popular
@@ -10551,21 +10570,23 @@ this option may change in future \s-1GCC\s0 versions as \s-1CPU\s0 models come a
of the build computer. At present, this feature is only supported on
Linux, and not all architectures are recognized. If the auto-detect is
unsuccessful the option has no effect.
-.IP "\fB\-march=\fR\fIname\fR" 4
-.IX Item "-march=name"
-This specifies the name of the target \s-1ARM\s0 architecture. \s-1GCC\s0 uses this
-name to determine what kind of instructions it can emit when generating
-assembly code. This option can be used in conjunction with or instead
-of the \fB\-mcpu=\fR option. Permissible names are: \fBarmv2\fR,
-\&\fBarmv2a\fR, \fBarmv3\fR, \fBarmv3m\fR, \fBarmv4\fR, \fBarmv4t\fR,
-\&\fBarmv5\fR, \fBarmv5t\fR, \fBarmv5e\fR, \fBarmv5te\fR,
-\&\fBarmv6\fR, \fBarmv6j\fR,
-\&\fBarmv6t2\fR, \fBarmv6z\fR, \fBarmv6zk\fR, \fBarmv6\-m\fR,
-\&\fBarmv7\fR, \fBarmv7\-a\fR, \fBarmv7\-r\fR, \fBarmv7\-m\fR,
-\&\fBarmv8\-a\fR,
-\&\fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR.
+.IP "\fB\-mcpu=\fR\fIname\fR" 4
+.IX Item "-mcpu=name"
+This specifies the name of the target \s-1ARM\s0 processor. \s-1GCC\s0 uses this name
+to derive the name of the target \s-1ARM\s0 architecture (as if specified
+by \fB\-march\fR) and the \s-1ARM\s0 processor type for which to tune for
+performance (as if specified by \fB\-mtune\fR). Where this option
+is used in conjunction with \fB\-march\fR or \fB\-mtune\fR,
+those options take precedence over the appropriate part of this option.
.Sp
-\&\fB\-march=native\fR causes the compiler to auto-detect the architecture
+Permissible names for this option are the same as those for
+\&\fB\-mtune\fR.
+.Sp
+\&\fB\-mcpu=generic\-\fR\fIarch\fR is also permissible, and is
+equivalent to \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR.
+See \fB\-mtune\fR for more information.
+.Sp
+\&\fB\-mcpu=native\fR causes the compiler to auto-detect the \s-1CPU\s0
of the build computer. At present, this feature is only supported on
Linux, and not all architectures are recognized. If the auto-detect is
unsuccessful the option has no effect.
@@ -10649,8 +10670,11 @@ responsible for initializing this register with an appropriate value
before execution begins.
.IP "\fB\-mpic\-register=\fR\fIreg\fR" 4
.IX Item "-mpic-register=reg"
-Specify the register to be used for \s-1PIC\s0 addressing. The default is R10
-unless stack-checking is enabled, when R9 is used.
+Specify the register to be used for \s-1PIC\s0 addressing.
+For standard \s-1PIC\s0 base case, the default will be any suitable register
+determined by compiler. For single \s-1PIC\s0 base case, the default is
+\&\fBR9\fR if target is \s-1EABI\s0 based or stack-checking is enabled,
+otherwise the default is \fBR10\fR.
.IP "\fB\-mpoke\-function\-name\fR" 4
.IX Item "-mpoke-function-name"
Write the name of each function into the text section, directly
@@ -10805,7 +10829,7 @@ The default for this option is@tie{}\f(CW\*(C`avr2\*(C'\fR.
.el .IP "\f(CWavr5\fR" 4
.IX Item "avr5"
\&\*(L"Enhanced\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of program memory.
-\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`ata5790\*(C'\fR, \f(CW\*(C`ata5790n\*(C'\fR, \f(CW\*(C`ata5795\*(C'\fR, \f(CW\*(C`atmega16\*(C'\fR, \f(CW\*(C`atmega16a\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16hvbrevb\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega161\*(C'\fR, \f(CW\*(C`atmega162\*(C'\fR, \f(CW\*(C`atmega163\*(C'\fR, \f(CW\*(C`atmega164a\*(C'\fR, \f(CW\*(C`atmega164p\*(C'\fR, \f(CW\*(C`atmega164pa\*(C'\fR, \f(CW\*(C`atmega165\*(C'\fR, \f(CW\*(C`atmega165a\*(C'\fR, \f(CW\*(C`atmega165p\*(C'\fR, \f(CW\*(C`atmega165pa\*(C'\fR, \f(CW\*(C`atmega168\*(C'\fR, \f(CW\*(C`atmega168a\*(C'\fR, \f(CW\*(C`atmega168p\*(C'\fR, \f(CW\*(C`atmega168pa\*(C'\fR, \f(CW\*(C`atmega169\*(C'\fR, \f(CW\*(C`atmega169a\*(C'\fR, \f(CW\*(C`atmega169p\*(C'\fR, \f(CW\*(C`atmega169pa\*(C'\fR, \f(CW\*(C`atmega26hvg\*(C'\fR, \f(CW\*(C`atmega32\*(C'\fR, \f(CW\*(C`atmega32a\*(C'\fR, \f(CW\*(C`atmega32a\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32hvbrevb\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega323\*(C'\fR, \f(CW\*(C`atmega324a\*(C'\fR, \f(CW\*(C`atmega324p\*(C'\fR, \f(CW\*(C`atmega324pa\*(C'\fR, \f(CW\*(C`atmega325\*(C'\fR, \f(CW\*(C`atmega325a\*(C'\fR, \f(CW\*(C`atmega325p\*(C'\fR, \f(CW\*(C`atmega3250\*(C'\fR, \f(CW\*(C`atmega3250a\*(C'\fR, \f(CW\*(C`atmega3250p\*(C'\fR, \f(CW\*(C`atmega3250pa\*(C'\fR, \f(CW\*(C`atmega328\*(C'\fR, \f(CW\*(C`atmega328p\*(C'\fR, \f(CW\*(C`atmega329\*(C'\fR, \f(CW\*(C`atmega329a\*(C'\fR, \f(CW\*(C`atmega329p\*(C'\fR, \f(CW\*(C`atmega329pa\*(C'\fR, \f(CW\*(C`atmega3290\*(C'\fR, \f(CW\*(C`atmega3290a\*(C'\fR, \f(CW\*(C`atmega3290p\*(C'\fR, \f(CW\*(C`atmega3290pa\*(C'\fR, \f(CW\*(C`atmega406\*(C'\fR, \f(CW\*(C`atmega48hvf\*(C'\fR, \f(CW\*(C`atmega64\*(C'\fR, \f(CW\*(C`atmega64a\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64hve\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega64rfa2\*(C'\fR, \f(CW\*(C`atmega64rfr2\*(C'\fR, \f(CW\*(C`atmega640\*(C'\fR, \f(CW\*(C`atmega644\*(C'\fR, \f(CW\*(C`atmega644a\*(C'\fR, \f(CW\*(C`atmega644p\*(C'\fR, \f(CW\*(C`atmega644pa\*(C'\fR, \f(CW\*(C`atmega645\*(C'\fR, \f(CW\*(C`atmega645a\*(C'\fR, \f(CW\*(C`atmega645p\*(C'\fR, \f(CW\*(C`atmega6450\*(C'\fR, \f(CW\*(C`atmega6450a\*(C'\fR, \f(CW\*(C`atmega6450p\*(C'\fR, \f(CW\*(C`atmega649\*(C'\fR, \f(CW\*(C`atmega649a\*(C'\fR, \f(CW\*(C`atmega649p\*(C'\fR, \f(CW\*(C`atmega6490\*(C'\fR, \f(CW\*(C`atmega6490a\*(C'\fR, \f(CW\*(C`atmega6490p\*(C'\fR, \f(CW\*(C`at90can32\*(C'\fR, \f(CW\*(C`at90can64\*(C'\fR, \f(CW\*(C`at90pwm161\*(C'\fR, \f(CW\*(C`at90pwm216\*(C'\fR, \f(CW\*(C`at90pwm316\*(C'\fR, \f(CW\*(C`at90scr100\*(C'\fR, \f(CW\*(C`at90usb646\*(C'\fR, \f(CW\*(C`at90usb647\*(C'\fR, \f(CW\*(C`at94k\*(C'\fR, \f(CW\*(C`m3000\*(C'\fR.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`ata5790\*(C'\fR, \f(CW\*(C`ata5790n\*(C'\fR, \f(CW\*(C`ata5795\*(C'\fR, \f(CW\*(C`atmega16\*(C'\fR, \f(CW\*(C`atmega16a\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16hvbrevb\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega161\*(C'\fR, \f(CW\*(C`atmega162\*(C'\fR, \f(CW\*(C`atmega163\*(C'\fR, \f(CW\*(C`atmega164a\*(C'\fR, \f(CW\*(C`atmega164p\*(C'\fR, \f(CW\*(C`atmega164pa\*(C'\fR, \f(CW\*(C`atmega165\*(C'\fR, \f(CW\*(C`atmega165a\*(C'\fR, \f(CW\*(C`atmega165p\*(C'\fR, \f(CW\*(C`atmega165pa\*(C'\fR, \f(CW\*(C`atmega168\*(C'\fR, \f(CW\*(C`atmega168a\*(C'\fR, \f(CW\*(C`atmega168p\*(C'\fR, \f(CW\*(C`atmega168pa\*(C'\fR, \f(CW\*(C`atmega169\*(C'\fR, \f(CW\*(C`atmega169a\*(C'\fR, \f(CW\*(C`atmega169p\*(C'\fR, \f(CW\*(C`atmega169pa\*(C'\fR, \f(CW\*(C`atmega26hvg\*(C'\fR, \f(CW\*(C`atmega32\*(C'\fR, \f(CW\*(C`atmega32a\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32hvbrevb\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega323\*(C'\fR, \f(CW\*(C`atmega324a\*(C'\fR, \f(CW\*(C`atmega324p\*(C'\fR, \f(CW\*(C`atmega324pa\*(C'\fR, \f(CW\*(C`atmega325\*(C'\fR, \f(CW\*(C`atmega325a\*(C'\fR, \f(CW\*(C`atmega325p\*(C'\fR, \f(CW\*(C`atmega3250\*(C'\fR, \f(CW\*(C`atmega3250a\*(C'\fR, \f(CW\*(C`atmega3250p\*(C'\fR, \f(CW\*(C`atmega3250pa\*(C'\fR, \f(CW\*(C`atmega328\*(C'\fR, \f(CW\*(C`atmega328p\*(C'\fR, \f(CW\*(C`atmega329\*(C'\fR, \f(CW\*(C`atmega329a\*(C'\fR, \f(CW\*(C`atmega329p\*(C'\fR, \f(CW\*(C`atmega329pa\*(C'\fR, \f(CW\*(C`atmega3290\*(C'\fR, \f(CW\*(C`atmega3290a\*(C'\fR, \f(CW\*(C`atmega3290p\*(C'\fR, \f(CW\*(C`atmega3290pa\*(C'\fR, \f(CW\*(C`atmega406\*(C'\fR, \f(CW\*(C`atmega48hvf\*(C'\fR, \f(CW\*(C`atmega64\*(C'\fR, \f(CW\*(C`atmega64a\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64hve\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega64rfa2\*(C'\fR, \f(CW\*(C`atmega64rfr2\*(C'\fR, \f(CW\*(C`atmega640\*(C'\fR, \f(CW\*(C`atmega644\*(C'\fR, \f(CW\*(C`atmega644a\*(C'\fR, \f(CW\*(C`atmega644p\*(C'\fR, \f(CW\*(C`atmega644pa\*(C'\fR, \f(CW\*(C`atmega645\*(C'\fR, \f(CW\*(C`atmega645a\*(C'\fR, \f(CW\*(C`atmega645p\*(C'\fR, \f(CW\*(C`atmega6450\*(C'\fR, \f(CW\*(C`atmega6450a\*(C'\fR, \f(CW\*(C`atmega6450p\*(C'\fR, \f(CW\*(C`atmega649\*(C'\fR, \f(CW\*(C`atmega649a\*(C'\fR, \f(CW\*(C`atmega649p\*(C'\fR, \f(CW\*(C`atmega6490\*(C'\fR, \f(CW\*(C`atmega6490a\*(C'\fR, \f(CW\*(C`atmega6490p\*(C'\fR, \f(CW\*(C`at90can32\*(C'\fR, \f(CW\*(C`at90can64\*(C'\fR, \f(CW\*(C`at90pwm161\*(C'\fR, \f(CW\*(C`at90pwm216\*(C'\fR, \f(CW\*(C`at90pwm316\*(C'\fR, \f(CW\*(C`at90scr100\*(C'\fR, \f(CW\*(C`at90usb646\*(C'\fR, \f(CW\*(C`at90usb647\*(C'\fR, \f(CW\*(C`at94k\*(C'\fR, \f(CW\*(C`m3000\*(C'\fR.
.ie n .IP """avr51""" 4
.el .IP "\f(CWavr51\fR" 4
.IX Item "avr51"
@@ -11043,7 +11067,7 @@ command-line option.
.IX Item "-<Switch/case dispatch tables. If you do not want such dispatch>"
tables you can specify the \fB\-fno\-jump\-tables\fR command-line option.
.IP "\-<C and \*(C+ constructors/destructors called during startup/shutdown.>" 4
-.IX Item "-<C and constructors/destructors called during startup/shutdown.>"
+.IX Item "-<C and constructors/destructors called during startup/shutdown.>"
.PD 0
.ie n .IP "\-<If the tools hit a ""gs()"" modifier explained above.>" 4
.el .IP "\-<If the tools hit a \f(CWgs()\fR modifier explained above.>" 4
@@ -11790,7 +11814,7 @@ an executable when linking, using the Darwin \fIlibtool\fR command.
This causes \s-1GCC\s0's output file to have the \fI\s-1ALL\s0\fR subtype, instead of
one controlled by the \fB\-mcpu\fR or \fB\-march\fR option.
.IP "\fB\-allowable_client\fR \fIclient_name\fR" 4
-.IX Item "-allowable_client client_name"
+.IX Item "-allowable_client client_name"
.PD 0
.IP "\fB\-client_name\fR" 4
.IX Item "-client_name"
@@ -12865,9 +12889,14 @@ Intel Core i7 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SS
Intel Core \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
\&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1AVX\s0, \s-1AES\s0, \s-1PCLMUL\s0, \s-1FSGSBASE\s0, \s-1RDRND\s0 and F16C instruction
set support.
+.IP "\fBcore\-avx2\fR" 4
+.IX Item "core-avx2"
+Intel Core \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE\s0, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
+\&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1AVX\s0, \s-1AVX2\s0, \s-1AES\s0, \s-1PCLMUL\s0, \s-1FSGSBASE\s0, \s-1RDRND\s0, \s-1FMA\s0, \s-1BMI\s0, \s-1BMI2\s0
+and F16C instruction set support.
.IP "\fBatom\fR" 4
.IX Item "atom"
-Intel Atom \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0 and \s-1SSSE3\s0
+Intel Atom \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE\s0, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0 and \s-1SSSE3\s0
instruction set support.
.IP "\fBk6\fR" 4
.IX Item "k6"
@@ -16284,7 +16313,9 @@ following options:
\&\fB\-maltivec \-mfprnd \-mhard\-float \-mmfcrf \-mmultiple
\&\-mpopcntb \-mpopcntd \-mpowerpc64
\&\-mpowerpc\-gpopt \-mpowerpc\-gfxopt \-msingle\-float \-mdouble\-float
-\&\-msimple\-fpu \-mstring \-mmulhw \-mdlmzb \-mmfpgpr \-mvsx\fR
+\&\-msimple\-fpu \-mstring \-mmulhw \-mdlmzb \-mmfpgpr \-mvsx
+\&\-mcrypto \-mdirect\-move \-mpower8\-fusion \-mpower8\-vector
+\&\-mquad\-memory \-mquad\-memory\-atomic\fR
.Sp
The particular options set for any particular \s-1CPU\s0 varies between
compiler versions, depending on what setting seems to produce optimal
@@ -16331,6 +16362,36 @@ enable the use of built-in functions that allow more direct access to
the AltiVec instruction set. You may also need to set
\&\fB\-mabi=altivec\fR to adjust the current \s-1ABI\s0 with AltiVec \s-1ABI\s0
enhancements.
+.Sp
+When \fB\-maltivec\fR is used, rather than \fB\-maltivec=le\fR or
+\&\fB\-maltivec=be\fR, the element order for Altivec intrinsics such
+as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and \f(CW\*(C`vec_insert\*(C'\fR will
+match array element order corresponding to the endianness of the
+target. That is, element zero identifies the leftmost element in a
+vector register when targeting a big-endian platform, and identifies
+the rightmost element in a vector register when targeting a
+little-endian platform.
+.IP "\fB\-maltivec=be\fR" 4
+.IX Item "-maltivec=be"
+Generate Altivec instructions using big-endian element order,
+regardless of whether the target is big\- or little-endian. This is
+the default when targeting a big-endian platform.
+.Sp
+The element order is used to interpret element numbers in Altivec
+intrinsics such as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and
+\&\f(CW\*(C`vec_insert\*(C'\fR. By default, these will match array element order
+corresponding to the endianness for the target.
+.IP "\fB\-maltivec=le\fR" 4
+.IX Item "-maltivec=le"
+Generate Altivec instructions using little-endian element order,
+regardless of whether the target is big\- or little-endian. This is
+the default when targeting a little-endian platform. This option is
+currently ignored when targeting a big-endian platform.
+.Sp
+The element order is used to interpret element numbers in Altivec
+intrinsics such as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and
+\&\f(CW\*(C`vec_insert\*(C'\fR. By default, these will match array element order
+corresponding to the endianness for the target.
.IP "\fB\-mvrsave\fR" 4
.IX Item "-mvrsave"
.PD 0
@@ -16399,6 +16460,61 @@ This option has been deprecated. Use \fB\-mspe\fR and
Generate code that uses (does not use) vector/scalar (\s-1VSX\s0)
instructions, and also enable the use of built-in functions that allow
more direct access to the \s-1VSX\s0 instruction set.
+.IP "\fB\-mcrypto\fR" 4
+.IX Item "-mcrypto"
+.PD 0
+.IP "\fB\-mno\-crypto\fR" 4
+.IX Item "-mno-crypto"
+.PD
+Enable the use (disable) of the built-in functions that allow direct
+access to the cryptographic instructions that were added in version
+2.07 of the PowerPC \s-1ISA\s0.
+.IP "\fB\-mdirect\-move\fR" 4
+.IX Item "-mdirect-move"
+.PD 0
+.IP "\fB\-mno\-direct\-move\fR" 4
+.IX Item "-mno-direct-move"
+.PD
+Generate code that uses (does not use) the instructions to move data
+between the general purpose registers and the vector/scalar (\s-1VSX\s0)
+registers that were added in version 2.07 of the PowerPC \s-1ISA\s0.
+.IP "\fB\-mpower8\-fusion\fR" 4
+.IX Item "-mpower8-fusion"
+.PD 0
+.IP "\fB\-mno\-power8\-fusion\fR" 4
+.IX Item "-mno-power8-fusion"
+.PD
+Generate code that keeps (does not keeps) some integer operations
+adjacent so that the instructions can be fused together on power8 and
+later processors.
+.IP "\fB\-mpower8\-vector\fR" 4
+.IX Item "-mpower8-vector"
+.PD 0
+.IP "\fB\-mno\-power8\-vector\fR" 4
+.IX Item "-mno-power8-vector"
+.PD
+Generate code that uses (does not use) the vector and scalar
+instructions that were added in version 2.07 of the PowerPC \s-1ISA\s0. Also
+enable the use of built-in functions that allow more direct access to
+the vector instructions.
+.IP "\fB\-mquad\-memory\fR" 4
+.IX Item "-mquad-memory"
+.PD 0
+.IP "\fB\-mno\-quad\-memory\fR" 4
+.IX Item "-mno-quad-memory"
+.PD
+Generate code that uses (does not use) the non-atomic quad word memory
+instructions. The \fB\-mquad\-memory\fR option requires use of
+64\-bit mode.
+.IP "\fB\-mquad\-memory\-atomic\fR" 4
+.IX Item "-mquad-memory-atomic"
+.PD 0
+.IP "\fB\-mno\-quad\-memory\-atomic\fR" 4
+.IX Item "-mno-quad-memory-atomic"
+.PD
+Generate code that uses (does not use) the atomic quad word memory
+instructions. The \fB\-mquad\-memory\-atomic\fR option requires use of
+64\-bit mode.
.IP "\fB\-mfloat\-gprs=\fR\fIyes/single/double/no\fR" 4
.IX Item "-mfloat-gprs=yes/single/double/no"
.PD 0
@@ -16828,7 +16944,8 @@ Return structures smaller than 8 bytes in registers (as specified by the
.IX Item "-mabi=abi-type"
Extend the current \s-1ABI\s0 with a particular extension, or remove such extension.
Valid values are \fIaltivec\fR, \fIno-altivec\fR, \fIspe\fR,
-\&\fIno-spe\fR, \fIibmlongdouble\fR, \fIieeelongdouble\fR.
+\&\fIno-spe\fR, \fIibmlongdouble\fR, \fIieeelongdouble\fR,
+\&\fIelfv1\fR, \fIelfv2\fR.
.IP "\fB\-mabi=spe\fR" 4
.IX Item "-mabi=spe"
Extend the current \s-1ABI\s0 with \s-1SPE\s0 \s-1ABI\s0 extensions. This does not change
@@ -16845,6 +16962,18 @@ This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
.IX Item "-mabi=ieeelongdouble"
Change the current \s-1ABI\s0 to use \s-1IEEE\s0 extended-precision long double.
This is a PowerPC 32\-bit Linux \s-1ABI\s0 option.
+.IP "\fB\-mabi=elfv1\fR" 4
+.IX Item "-mabi=elfv1"
+Change the current \s-1ABI\s0 to use the ELFv1 \s-1ABI\s0.
+This is the default \s-1ABI\s0 for big-endian PowerPC 64\-bit Linux.
+Overriding the default \s-1ABI\s0 requires special system support and is
+likely to fail in spectacular ways.
+.IP "\fB\-mabi=elfv2\fR" 4
+.IX Item "-mabi=elfv2"
+Change the current \s-1ABI\s0 to use the ELFv2 \s-1ABI\s0.
+This is the default \s-1ABI\s0 for little-endian PowerPC 64\-bit Linux.
+Overriding the default \s-1ABI\s0 requires special system support and is
+likely to fail in spectacular ways.
.IP "\fB\-mprototype\fR" 4
.IX Item "-mprototype"
.PD 0
@@ -17132,6 +17261,25 @@ stack location in the function prologue if the function calls through
a pointer on \s-1AIX\s0 and 64\-bit Linux systems. If the \s-1TOC\s0 value is not
saved in the prologue, it is saved just before the call through the
pointer. The \fB\-mno\-save\-toc\-indirect\fR option is the default.
+.IP "\fB\-mcompat\-align\-parm\fR" 4
+.IX Item "-mcompat-align-parm"
+.PD 0
+.IP "\fB\-mno\-compat\-align\-parm\fR" 4
+.IX Item "-mno-compat-align-parm"
+.PD
+Generate (do not generate) code to pass structure parameters with a
+maximum alignment of 64 bits, for compatibility with older versions
+of \s-1GCC\s0.
+.Sp
+Older versions of \s-1GCC\s0 (prior to 4.9.0) incorrectly did not align a
+structure parameter on a 128\-bit boundary when that structure contained
+a member requiring 128\-bit alignment. This is corrected in more
+recent versions of \s-1GCC\s0. This option may be used to generate code
+that is compatible with functions compiled with older versions of
+\&\s-1GCC\s0.
+.Sp
+In this version of the compiler, the \fB\-mcompat\-align\-parm\fR
+is the default, except when using the Linux ELFv2 \s-1ABI\s0.
.PP
\fI\s-1RX\s0 Options\fR
.IX Subsection "RX Options"
@@ -17514,6 +17662,23 @@ values have to be exact powers of 2 and \fIstack-size\fR has to be greater than
In order to be efficient the extra code makes the assumption that the stack starts
at an address aligned to the value given by \fIstack-size\fR.
The \fIstack-guard\fR option can only be used in conjunction with \fIstack-size\fR.
+.IP "\fB\-mhotpatch[=\fR\fIhalfwords\fR\fB]\fR" 4
+.IX Item "-mhotpatch[=halfwords]"
+.PD 0
+.IP "\fB\-mno\-hotpatch\fR" 4
+.IX Item "-mno-hotpatch"
+.PD
+If the hotpatch option is enabled, a \*(L"hot-patching\*(R" function
+prologue is generated for all functions in the compilation unit.
+The funtion label is prepended with the given number of two-byte
+Nop instructions (\fIhalfwords\fR, maximum 1000000) or 12 Nop
+instructions if no argument is present. Functions with a
+hot-patching prologue are never inlined automatically, and a
+hot-patching prologue is never generated for functions functions
+that are explicitly inline.
+.Sp
+This option can be overridden for individual functions with the
+\&\f(CW\*(C`hotpatch\*(C'\fR attribute.
.PP
\fIScore Options\fR
.IX Subsection "Score Options"
@@ -18039,8 +18204,9 @@ These \fB\-m\fR options are supported on the \s-1SPARC:\s0
.IX Item "-mapp-regs"
.PD
Specify \fB\-mapp\-regs\fR to generate output using the global registers
-2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications. This
-is the default.
+2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications. Like the
+global register 1, each global register 2 through 4 is then treated as an
+allocable register that is clobbered by function calls. This is the default.
.Sp
To be fully \s-1SVR4\s0 ABI-compliant at the cost of some performance loss,
specify \fB\-mno\-app\-regs\fR. You should compile libraries and system
@@ -18116,6 +18282,15 @@ absolute address. Otherwise, it assumes they have 4\-byte alignment.
Specifying this option avoids some rare compatibility problems with code
generated by other compilers. It is not the default because it results
in a performance loss, especially for floating-point code.
+.IP "\fB\-muser\-mode\fR" 4
+.IX Item "-muser-mode"
+.PD 0
+.IP "\fB\-mno\-user\-mode\fR" 4
+.IX Item "-mno-user-mode"
+.PD
+Do not generate code that can only run in supervisor mode. This is relevant
+only for the \f(CW\*(C`casa\*(C'\fR instruction emitted for the \s-1LEON3\s0 processor. The
+default is \fB\-mno\-user\-mode\fR.
.IP "\fB\-mno\-faster\-structs\fR" 4
.IX Item "-mno-faster-structs"
.PD 0
@@ -18135,10 +18310,10 @@ the rules of the \s-1ABI\s0.
Set the instruction set, register set, and instruction scheduling parameters
for machine type \fIcpu_type\fR. Supported values for \fIcpu_type\fR are
\&\fBv7\fR, \fBcypress\fR, \fBv8\fR, \fBsupersparc\fR, \fBhypersparc\fR,
-\&\fBleon\fR, \fBsparclite\fR, \fBf930\fR, \fBf934\fR, \fBsparclite86x\fR,
-\&\fBsparclet\fR, \fBtsc701\fR, \fBv9\fR, \fBultrasparc\fR,
-\&\fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR,
-and \fBniagara4\fR.
+\&\fBleon\fR, \fBleon3\fR, \fBsparclite\fR, \fBf930\fR, \fBf934\fR,
+\&\fBsparclite86x\fR, \fBsparclet\fR, \fBtsc701\fR, \fBv9\fR,
+\&\fBultrasparc\fR, \fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR,
+\&\fBniagara3\fR and \fBniagara4\fR.
.Sp
Native Solaris and GNU/Linux toolchains also support the value \fBnative\fR,
which selects the best architecture option for the host processor.
@@ -18157,7 +18332,7 @@ implementations.
cypress
.IP "v8" 4
.IX Item "v8"
-supersparc, hypersparc, leon
+supersparc, hypersparc, leon, leon3
.IP "sparclite" 4
.IX Item "sparclite"
f930, f934, sparclite86x
@@ -18220,10 +18395,11 @@ option \fB\-mcpu=\fR\fIcpu_type\fR does.
The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
\&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
that select a particular \s-1CPU\s0 implementation. Those are \fBcypress\fR,
-\&\fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR, \fBf930\fR, \fBf934\fR,
-\&\fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR, \fBultrasparc3\fR,
-\&\fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR and \fBniagara4\fR. With
-native Solaris and GNU/Linux toolchains, \fBnative\fR can also be used.
+\&\fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR, \fBleon3\fR, \fBf930\fR,
+\&\fBf934\fR, \fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR,
+\&\fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR and
+\&\fBniagara4\fR. With native Solaris and GNU/Linux toolchains, \fBnative\fR
+can also be used.
.IP "\fB\-mv8plus\fR" 4
.IX Item "-mv8plus"
.PD 0
@@ -18298,6 +18474,10 @@ later.
.IX Item "-mfix-at697f"
Enable the documented workaround for the single erratum of the Atmel \s-1AT697F\s0
processor (which corresponds to erratum #13 of the \s-1AT697E\s0 processor).
+.IP "\fB\-mfix\-ut699\fR" 4
+.IX Item "-mfix-ut699"
+Enable the documented workarounds for the floating-point errata and the data
+cache nullify errata of the \s-1UT699\s0 processor.
.PP
These \fB\-m\fR options are supported in addition to the above
on \s-1SPARC\-V9\s0 processors in 64\-bit environments:
@@ -18977,7 +19157,7 @@ every cross-file call, not just those that really are out of range.
.IX Subsection "zSeries Options"
.PP
These are listed under
-.SS "Options for Code Generation Conventions"
+.Sh "Options for Code Generation Conventions"
.IX Subsection "Options for Code Generation Conventions"
These machine-independent options control the interface conventions
used in code generation.
diff --git a/gcc-4.8/gcc/doc/gcc.info b/gcc-4.8/gcc/doc/gcc.info
index e5a735552..cb0d668de 100644
--- a/gcc-4.8/gcc/doc/gcc.info
+++ b/gcc-4.8/gcc/doc/gcc.info
@@ -1,5 +1,5 @@
-This is doc/gcc.info, produced by makeinfo version 4.13 from
-/d/gcc-4.8.1/gcc-4.8.1/gcc/doc/gcc.texi.
+This is doc/gcc.info, produced by makeinfo version 4.12 from
+/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/doc/gcc.texi.
Copyright (C) 1988-2013 Free Software Foundation, Inc.
@@ -58,7 +58,7 @@ Introduction
This manual documents how to use the GNU compilers, as well as their
features and incompatibilities, and how to report bugs. It corresponds
-to the compilers (GCC) version 4.8.1. The internals of the GNU
+to the compilers (GCC) version 4.8.3. The internals of the GNU
compilers, including how to port them to new targets and some
information about how to write front ends for new languages, are
documented in a separate manual. *Note Introduction: (gccint)Top.
@@ -264,7 +264,7 @@ experimental support for the second ISO C++ standard (2011).
The original ISO C++ standard was published as the ISO standard
(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
-2003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and
+2003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and
C++03, respectively. GCC implements the majority of C++98 (`export' is
a notable exception) and most of the changes in C++03. To select this
standard in GCC, use one of the options `-ansi', `-std=c++98', or
@@ -323,7 +323,7 @@ at a number of web sites:
* `http://objc.toodarkpark.net' is the same document in another
format;
- *
+ *
`http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
has an updated version but make sure you search for "Object
Oriented Programming and the Objective-C Programming Language 1.0",
@@ -349,7 +349,7 @@ by GCC 4.0, and to produce an error if one of the new features is used.
GCC has currently no support for non-fragile instance variables.
The authoritative manual on Objective-C 2.0 is available from Apple:
- *
+ *
`http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
For more information concerning the history of Objective-C that is
@@ -463,7 +463,7 @@ _Overall Options_
-pipe -pass-exit-codes
-x LANGUAGE -v -### --help[=CLASS[,...]] --target-help
--version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG
- -fdump-ada-spec[-slim] -fada-spec-parent=ARG -fdump-go-spec=FILE
+ -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE
_C Language Options_
*Note Options Controlling C Dialect: C Dialect Options.
@@ -1155,6 +1155,11 @@ _Machine Dependent Options_
-mveclibabi=TYPE -mfriz -mno-friz
-mpointers-to-nested-functions -mno-pointers-to-nested-functions
-msave-toc-indirect -mno-save-toc-indirect
+ -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector
+ -mcrypto -mno-crypto -mdirect-move -mno-direct-move
+ -mquad-memory -mno-quad-memory
+ -mquad-memory-atomic -mno-quad-memory-atomic
+ -mcompat-align-parm -mno-compat-align-parm
_RX Options_
-m64bit-doubles -m32bit-doubles -fpu -nofpu
@@ -1179,6 +1184,7 @@ _Machine Dependent Options_
-m64 -m31 -mdebug -mno-debug -mesa -mzarch
-mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd
-mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard
+ -mhotpatch[=HALFWORDS] -mno-hotpatch
_Score Options_
-meb -mel
@@ -1223,11 +1229,12 @@ _Machine Dependent Options_
-mhard-quad-float -msoft-quad-float
-mstack-bias -mno-stack-bias
-munaligned-doubles -mno-unaligned-doubles
+ -muser-mode -mno-user-mode
-mv8plus -mno-v8plus -mvis -mno-vis
-mvis2 -mno-vis2 -mvis3 -mno-vis3
-mcbcond -mno-cbcond
-mfmaf -mno-fmaf -mpopc -mno-popc
- -mfix-at697f
+ -mfix-at697f -mfix-ut699
_SPU Options_
-mwarn-reloc -merror-reloc
@@ -1596,7 +1603,7 @@ do nothing at all.
`params'
Display the values recognized by the `--param' option.
- LANGUAGE
+ LANGUAGE
Display the options supported for LANGUAGE, where LANGUAGE is
the name of one of the languages supported in this version of
GCC.
@@ -1704,10 +1711,14 @@ do nothing at all.
`-fdump-ada-spec[-slim]'
For C and C++ source and include files, generate corresponding Ada
- specs. *Note Generating Ada Bindings for C and C++ headers:
+ specs. *Note Generating Ada Bindings for C and C++ headers:
(gnat_ugn)Generating Ada Bindings for C and C++ headers, which
provides detailed documentation on this feature.
+`-fada-spec-parent=UNIT'
+ In conjunction with `-fdump-ada-spec[-slim]' above, generate Ada
+ specs as child units of parent UNIT.
+
`-fdump-go-spec=FILE'
For input files in any language, generate corresponding Go
declarations in FILE. This generates Go `const', `type', `var',
@@ -1806,7 +1817,7 @@ accepts:
affected.
`-std='
- Determine the language standard. *Note Language Standards
+ Determine the language standard. *Note Language Standards
Supported by GCC: Standards, for details of these standard
versions. This option is currently only supported when compiling
C or C++.
@@ -1857,7 +1868,7 @@ accepts:
`gnu90'
`gnu89'
- GNU dialect of ISO C90 (including some C99 features). This is
+ GNU dialect of ISO C90 (including some C99 features). This is
the default for C code.
`gnu99'
@@ -2578,7 +2589,7 @@ have meanings only for C++ programs:
changes at this point include:
* For SysV/x86-64, unions with `long double' members are passed
- in memory as specified in psABI. For example:
+ in memory as specified in psABI. For example:
union U {
long double ld;
@@ -2597,7 +2608,7 @@ have meanings only for C++ programs:
`-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
Warn when `delete' is used to destroy an instance of a class that
- has virtual functions and non-virtual destructor. It is unsafe to
+ has virtual functions and non-virtual destructor. It is unsafe to
delete an instance of a derived class through a pointer to a base
class if the base class does not have a virtual destructor. This
warning is enabled by `-Wall'.
@@ -2681,9 +2692,9 @@ have meanings only for C++ programs:
* Item 11: Define a copy constructor and an assignment
operator for classes with dynamically-allocated memory.
- * Item 12: Prefer initialization to assignment in constructors.
+ * Item 12: Prefer initialization to assignment in constructors.
- * Item 14: Make destructors virtual in base classes.
+ * Item 14: Make destructors virtual in base classes.
* Item 15: Have `operator=' return a reference to `*this'.
@@ -2694,7 +2705,7 @@ have meanings only for C++ programs:
Also warn about violations of the following style guidelines from
Scott Meyers' `More Effective C++' book:
- * Item 6: Distinguish between prefix and postfix forms of
+ * Item 6: Distinguish between prefix and postfix forms of
increment and decrement operators.
* Item 7: Never overload `&&', `||', or `,'.
@@ -2825,7 +2836,7 @@ and Objective-C++ programs:
support for properties and other Objective-C 2.0 additions.
Version 1 is the traditional (32-bit) ABI with support for
properties and other Objective-C 2.0 additions. Version 2 is the
- modern (64-bit) ABI. If nothing is specified, the default is
+ modern (64-bit) ABI. If nothing is specified, the default is
Version 0 on 32-bit target machines, and Version 2 on 64-bit
target machines.
@@ -3624,9 +3635,9 @@ present.
`-Wunused-value'
Warn whenever a statement computes a result that is explicitly not
- used. To suppress this warning cast the unused expression to
+ used. To suppress this warning cast the unused expression to
`void'. This includes an expression-statement or the left-hand
- side of a comma expression that contains no side effects. For
+ side of a comma expression that contains no side effects. For
example, an expression such as `x[i,j]' causes a warning, while
`x[(void)i,j]' does not.
@@ -3686,7 +3697,7 @@ present.
}
If the value of `y' is always 1, 2 or 3, then `x' is always
- initialized, but GCC doesn't know this. To suppress the warning,
+ initialized, but GCC doesn't know this. To suppress the warning,
you need to provide a default case with assert(0) or similar code.
This option also warns when a non-volatile automatic variable
@@ -3808,7 +3819,7 @@ present.
level gives a very large number of false positives.
`-Wsuggest-attribute=[pure|const|noreturn|format]'
- Warn for cases where adding an attribute may be beneficial. The
+ Warn for cases where adding an attribute may be beneficial. The
attributes currently supported are listed below.
`-Wsuggest-attribute=pure'
@@ -3818,7 +3829,7 @@ present.
`pure', `const' or `noreturn'. The compiler only warns for
functions visible in other compilation units or (in the case
of `pure' and `const') if it cannot prove that the function
- returns normally. A function returns normally if it doesn't
+ returns normally. A function returns normally if it doesn't
contain an infinite loop or return abnormally by throwing,
calling `abort()' or trapping. This analysis requires option
`-fipa-pure-const', which is enabled by default at `-O' and
@@ -3872,10 +3883,10 @@ present.
Warn about trampolines generated for pointers to nested functions.
A trampoline is a small piece of data or code that is created at
- run time on the stack when the address of a nested function is
- taken, and is used to call the nested function indirectly. For
- some targets, it is made up of data only and thus requires no
- special treatment. But, for most targets, it is made up of code
+ run time on the stack when the address of a nested function is
+ taken, and is used to call the nested function indirectly. For
+ some targets, it is made up of data only and thus requires no
+ special treatment. But, for most targets, it is made up of code
and thus requires the stack to be made executable in order for
the program to work properly.
@@ -3997,7 +4008,7 @@ present.
`-Wshadow'
Warn whenever a local variable or type declaration shadows another
variable, parameter, type, or class member (in C++), or whenever a
- built-in function is shadowed. Note that in C++, the compiler
+ built-in function is shadowed. Note that in C++, the compiler
warns if a local variable shadows an explicit typedef, but not if
it shadows a struct/class/enum.
@@ -4134,7 +4145,7 @@ present.
For C++, also warn for confusing overload resolution for
user-defined conversions; and conversions that never use a type
conversion operator: conversions to `void', the same type, a base
- class or a reference to them. Warnings about conversions between
+ class or a reference to them. Warnings about conversions between
signed and unsigned integers are disabled by default in C++ unless
`-Wsign-conversion' is explicitly enabled.
@@ -4180,7 +4191,7 @@ present.
`-Wsign-conversion'
Warn for implicit conversions that may change the sign of an
integer value, like assigning a signed integer expression to an
- unsigned integer variable. An explicit cast silences the warning.
+ unsigned integer variable. An explicit cast silences the warning.
In C, this option is enabled also by `-Wconversion'.
`-Wsizeof-pointer-memaccess'
@@ -4238,7 +4249,7 @@ present.
`-Wold-style-declaration (C and Objective-C only)'
Warn for obsolescent usages, according to the C Standard, in a
- declaration. For example, warn if storage-class specifiers like
+ declaration. For example, warn if storage-class specifiers like
`static' are not the first things in a declaration. This warning
is also enabled by `-Wextra'.
@@ -4444,7 +4455,7 @@ present.
`-Wno-int-to-pointer-cast'
Suppress warnings from casts to pointer type of an integer of a
- different size. In C++, casting to a pointer type of smaller size
+ different size. In C++, casting to a pointer type of smaller size
is an error. `Wint-to-pointer-cast' is enabled by default.
`-Wno-pointer-to-int-cast (C and Objective-C only)'
@@ -5023,11 +5034,11 @@ program or GCC:
`-fdisable-KIND-PASS=RANGE-LIST'
This is a set of options that are used to explicitly disable/enable
optimization passes. These options are intended for use for
- debugging GCC. Compiler users should use regular options for
+ debugging GCC. Compiler users should use regular options for
enabling/disabling passes instead.
`-fdisable-ipa-PASS'
- Disable IPA pass PASS. PASS is the pass name. If the same
+ Disable IPA pass PASS. PASS is the pass name. If the same
pass is statically invoked in the compiler multiple times,
the pass name should be appended with a sequential number
starting from 1.
@@ -5094,7 +5105,7 @@ program or GCC:
by LETTERS. This is used for debugging the RTL-based passes of the
compiler. The file names for most of the dumps are made by
appending a pass number and a word to the DUMPNAME, and the files
- are created in the directory of the output file. In case of
+ are created in the directory of the output file. In case of
`=FILENAME' option, the dump is output on the given file instead
of the pass numbered dump files. Note that the pass number is
computed statically as passes get registered into the pass manager.
@@ -5396,7 +5407,7 @@ program or GCC:
Control the dumping at various stages of processing the
intermediate language tree to a file. The file name is generated
by appending a switch-specific suffix to the source file name, and
- the file is created in the same directory as the output file. In
+ the file is created in the same directory as the output file. In
case of `=FILENAME' option, the dump is output on the given file
instead of the auto named dump files. If the `-OPTIONS' form is
used, OPTIONS is a list of `-' separated options which control the
@@ -5618,7 +5629,7 @@ program or GCC:
source file name.
`vrp'
- Dump each function after Value Range Propagation (VRP). The
+ Dump each function after Value Range Propagation (VRP). The
file name is made by appending `.vrp' to the source file name.
`all'
@@ -5628,7 +5639,7 @@ program or GCC:
`-fopt-info'
`-fopt-info-OPTIONS'
`-fopt-info-OPTIONS=FILENAME'
- Controls optimization dumps from various optimization passes. If
+ Controls optimization dumps from various optimization passes. If
the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
options to select the dump details and optimizations. If OPTIONS
is not specified, it defaults to `all' for details and `optall'
@@ -5640,10 +5651,10 @@ program or GCC:
The options can be divided into two groups, 1) options describing
the verbosity of the dump, and 2) options describing which
- optimizations should be included. The options from both the groups
- can be freely mixed as they are non-overlapping. However, in case
+ optimizations should be included. The options from both the groups
+ can be freely mixed as they are non-overlapping. However, in case
of any conflicts, the latter options override the earlier options
- on the command line. Though multiple -fopt-info options are
+ on the command line. Though multiple -fopt-info options are
accepted, only one of them can have `=filename'. If other
filenames are provided then all but the first one are ignored.
@@ -5651,12 +5662,12 @@ program or GCC:
`optimized'
Print information when an optimization is successfully
- applied. It is up to a pass to decide which information is
- relevant. For example, the vectorizer passes print the source
+ applied. It is up to a pass to decide which information is
+ relevant. For example, the vectorizer passes print the source
location of loops which got successfully vectorized.
`missed'
- Print information about missed optimizations. Individual
+ Print information about missed optimizations. Individual
passes control which information to include in the output.
For example,
@@ -5670,7 +5681,7 @@ program or GCC:
transformations, more detailed messages about decisions etc.
`all'
- Print detailed optimization information. This includes
+ Print detailed optimization information. This includes
OPTIMIZED, MISSED, and NOTE.
The second set of options describes a group of optimizations and
@@ -5717,7 +5728,7 @@ program or GCC:
gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
Here the two output filenames `vec.miss' and `loop.opt' are in
- conflict since only one output file is allowed. In this case, only
+ conflict since only one output file is allowed. In this case, only
the first option takes effect and the subsequent options are
ignored. Thus only the `vec.miss' is produced which cotaints dumps
from the vectorizer about missed opportunities.
@@ -5725,12 +5736,12 @@ program or GCC:
`-ftree-vectorizer-verbose=N'
This option is deprecated and is implemented in terms of
`-fopt-info'. Please use `-fopt-info-KIND' form instead, where
- KIND is one of the valid opt-info options. It prints additional
+ KIND is one of the valid opt-info options. It prints additional
optimization information. For N=0 no diagnostic information is
reported. If N=1 the vectorizer reports each loop that got
vectorized, and the total number of loops that got vectorized. If
N=2 the vectorizer reports locations which could not be vectorized
- and the reasons for those. For any higher verbosity levels all the
+ and the reasons for those. For any higher verbosity levels all the
analysis and transformation information from the vectorizer is
reported.
@@ -6854,9 +6865,9 @@ optimizations to be performed is desired.
`-fipa-profile'
Perform interprocedural profile propagation. The functions called
- only from cold functions are marked as cold. Also functions
+ only from cold functions are marked as cold. Also functions
executed once (such as `cold', `noreturn', static constructors or
- destructors) are identified. Cold functions and loop less parts of
+ destructors) are identified. Cold functions and loop less parts of
functions executed once are then optimized for size. Enabled by
default at `-O' and higher.
@@ -6879,7 +6890,7 @@ optimizations to be performed is desired.
`-O3'.
`-ftree-sink'
- Perform forward store motion on trees. This flag is enabled by
+ Perform forward store motion on trees. This flag is enabled by
default at `-O' and higher.
`-ftree-bit-ccp'
@@ -6920,7 +6931,7 @@ optimizations to be performed is desired.
Perform a variety of simple scalar cleanups (constant/copy
propagation, redundancy elimination, range propagation and
expression simplification) based on a dominator tree traversal.
- This also performs jump threading (to reduce jumps to jumps). This
+ This also performs jump threading (to reduce jumps to jumps). This
flag is enabled by default at `-O' and higher.
`-ftree-dse'
@@ -7182,11 +7193,11 @@ optimizations to be performed is desired.
is enabled by default at `-O' and higher.
`-ftree-vectorize'
- Perform loop vectorization on trees. This flag is enabled by
+ Perform loop vectorization on trees. This flag is enabled by
default at `-O3'.
`-ftree-slp-vectorize'
- Perform basic block vectorization on trees. This flag is enabled
+ Perform basic block vectorization on trees. This flag is enabled
by default at `-O3' and when `-ftree-vectorize' is enabled.
`-ftree-vect-loop-version'
@@ -7709,7 +7720,7 @@ optimizations to be performed is desired.
available in gold or in GNU ld 2.21 or newer.
This option enables the extraction of object files with GIMPLE
- bytecode out of library archives. This improves the quality of
+ bytecode out of library archives. This improves the quality of
optimization by exposing more code to the link-time optimizer.
This information specifies what symbols can be accessed externally
(by non-LTO object or during dynamic linking). Resulting code
@@ -7768,9 +7779,9 @@ optimizations to be performed is desired.
`-fprofile-correction'
Profiles collected using an instrumented binary for multi-threaded
- programs may be inconsistent due to missed counter updates. When
+ programs may be inconsistent due to missed counter updates. When
this option is specified, GCC uses heuristics to correct or smooth
- out such inconsistencies. By default, GCC emits an error message
+ out such inconsistencies. By default, GCC emits an error message
when an inconsistent profile is detected.
`-fprofile-dir=PATH'
@@ -7864,7 +7875,7 @@ correctness. All must be specifically enabled.
This option is not turned on by any `-O' option besides `-Ofast'
since it can result in incorrect output for programs that depend
on an exact implementation of IEEE or ISO rules/specifications for
- math functions. It may, however, yield faster code for programs
+ math functions. It may, however, yield faster code for programs
that do not require the guarantees of these specifications.
`-fno-math-errno'
@@ -7876,7 +7887,7 @@ correctness. All must be specifically enabled.
This option is not turned on by any `-O' option since it can
result in incorrect output for programs that depend on an exact
implementation of IEEE or ISO rules/specifications for math
- functions. It may, however, yield faster code for programs that do
+ functions. It may, however, yield faster code for programs that do
not require the guarantees of these specifications.
The default is `-fmath-errno'.
@@ -7895,7 +7906,7 @@ correctness. All must be specifically enabled.
This option is not turned on by any `-O' option since it can
result in incorrect output for programs that depend on an exact
implementation of IEEE or ISO rules/specifications for math
- functions. It may, however, yield faster code for programs that do
+ functions. It may, however, yield faster code for programs that do
not require the guarantees of these specifications. Enables
`-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math'
and `-freciprocal-math'.
@@ -7934,7 +7945,7 @@ correctness. All must be specifically enabled.
This option is not turned on by any `-O' option since it can
result in incorrect output for programs that depend on an exact
implementation of IEEE or ISO rules/specifications for math
- functions. It may, however, yield faster code for programs that do
+ functions. It may, however, yield faster code for programs that do
not require the guarantees of these specifications.
The default is `-fno-finite-math-only'.
@@ -8204,7 +8215,7 @@ includes experimental options that may produce broken code.
`predictable-branch-outcome'
When branch is predicted to be taken with probability lower
than this threshold (in percent), then it is considered well
- predictable. The default is 10.
+ predictable. The default is 10.
`max-crossjump-edges'
The maximum number of incoming edges to consider for
@@ -8561,7 +8572,7 @@ includes experimental options that may produce broken code.
`hot-bb-count-ws-permille'
A basic block profile count is considered hot if it
- contributes to the given permillage (i.e. 0...1000) of the
+ contributes to the given permillage (i.e. 0...1000) of the
entire profiled execution.
`hot-bb-frequency-fraction'
@@ -9017,7 +9028,7 @@ includes experimental options that may produce broken code.
`tree-reassoc-width'
Set the maximum number of instructions executed in parallel in
- reassociated tree. This parameter overrides target dependent
+ reassociated tree. This parameter overrides target dependent
heuristics used by default if has non zero value.
`sched-pressure-algorithm'
@@ -9575,9 +9586,9 @@ cause the preprocessor output to be unsuitable for actual compilation.
When used without `-E', this option has no effect.
`-ftrack-macro-expansion[=LEVEL]'
- Track locations of tokens across macro expansions. This allows the
+ Track locations of tokens across macro expansions. This allows the
compiler to emit diagnostic about the current macro expansion stack
- when a compilation error occurs in a macro expansion. Using this
+ when a compilation error occurs in a macro expansion. Using this
option makes the preprocessor and the compiler consume more
memory. The LEVEL parameter can be used to choose the level of
precision of token location tracking thus decreasing the memory
@@ -9888,8 +9899,8 @@ doing a link step.
`-rdynamic'
Pass the flag `-export-dynamic' to the ELF linker, on targets that
- support it. This instructs the linker to add all symbols, not only
- used ones, to the dynamic symbol table. This option is needed for
+ support it. This instructs the linker to add all symbols, not only
+ used ones, to the dynamic symbol table. This option is needed for
some uses of `dlopen' or to allow obtaining backtraces from within
a program.
@@ -10017,7 +10028,7 @@ doing a link step.
library modules to define it. You can use `-u' multiple times with
different symbols to force loading of additional library modules.
- ---------- Footnotes ----------
+ ---------- Footnotes ----------
(1) On some systems, `gcc -shared' needs to build supplementary stub
code for constructors to work. On multi-libbed systems, `gcc -shared'
@@ -10412,7 +10423,7 @@ or combine them with constant text in a single argument.
`%T'
Current argument is the name of a linker script. Search for that
- file in the current list of directories to scan for libraries. If
+ file in the current list of directories to scan for libraries. If
the file is located insert a `--script' option into the command
line followed by the full path name found. If the file is not
found then generate an error message. Note: the current working
@@ -10974,7 +10985,7 @@ These `-m' options are defined for Adapteva Epiphany:
`int'
This is the mode used to perform integer calculations in the
- FPU, e.g. integer multiply, or integer
+ FPU, e.g. integer multiply, or integer
multiply-and-accumulate.
The default is `-mfp-mode=caller'
@@ -11085,45 +11096,41 @@ architectures:
versions of the compiler prior to 2.8. This option is now
deprecated.
-`-mcpu=NAME'
- This specifies the name of the target ARM processor. GCC uses
+`-march=NAME'
+ This specifies the name of the target ARM architecture. GCC uses
this name to determine what kind of instructions it can emit when
- generating assembly code. Permissible names are: `arm2', `arm250',
- `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
- `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
- `arm700i', `arm710', `arm710c', `arm7100', `arm720', `arm7500',
- `arm7500fe', `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t',
- `arm740t', `strongarm', `strongarm110', `strongarm1100',
- `strongarm1110', `arm8', `arm810', `arm9', `arm9e', `arm920',
- `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s',
- `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t',
- `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s',
- `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s',
- `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', `cortex-a5',
- `cortex-a7', `cortex-a8', `cortex-a9', `cortex-a15', `cortex-r4',
- `cortex-r4f', `cortex-r5', `cortex-m4', `cortex-m3', `cortex-m1',
- `cortex-m0', `cortex-m0plus', `marvell-pj4', `xscale', `iwmmxt',
- `iwmmxt2', `ep9312', `fa526', `fa626', `fa606te', `fa626te',
- `fmp626', `fa726te'.
-
- `-mcpu=generic-ARCH' is also permissible, and is equivalent to
- `-march=ARCH -mtune=generic-ARCH'. See `-mtune' for more
- information.
+ generating assembly code. This option can be used in conjunction
+ with or instead of the `-mcpu=' option. Permissible names are:
+ `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
+ `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2',
+ `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r',
+ `armv7-m', `armv7e-m' `armv8-a', `iwmmxt', `iwmmxt2', `ep9312'.
- `-mcpu=native' causes the compiler to auto-detect the CPU of the
- build computer. At present, this feature is only supported on
- Linux, and not all architectures are recognized. If the
+ `-march=native' causes the compiler to auto-detect the architecture
+ of the build computer. At present, this feature is only supported
+ on Linux, and not all architectures are recognized. If the
auto-detect is unsuccessful the option has no effect.
`-mtune=NAME'
- This option is very similar to the `-mcpu=' option, except that
- instead of specifying the actual target processor type, and hence
- restricting which instructions can be used, it specifies that GCC
- should tune the performance of the code as if the target were of
- the type specified in this option, but still choosing the
- instructions it generates based on the CPU specified by a `-mcpu='
- option. For some ARM implementations better performance can be
- obtained by using this option.
+ This option specifies the name of the target ARM processor for
+ which GCC should tune the performance of the code. For some ARM
+ implementations better performance can be obtained by using this
+ option. Permissible names are: `arm2', `arm250', `arm3', `arm6',
+ `arm60', `arm600', `arm610', `arm620', `arm7', `arm7m', `arm7d',
+ `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', `arm700i',
+ `arm710', `arm710c', `arm7100', `arm720', `arm7500', `arm7500fe',
+ `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', `arm740t',
+ `strongarm', `strongarm110', `strongarm1100', `strongarm1110',
+ `arm8', `arm810', `arm9', `arm9e', `arm920', `arm920t', `arm922t',
+ `arm946e-s', `arm966e-s', `arm968e-s', `arm926ej-s', `arm940t',
+ `arm9tdmi', `arm10tdmi', `arm1020t', `arm1026ej-s', `arm10e',
+ `arm1020e', `arm1022e', `arm1136j-s', `arm1136jf-s', `mpcore',
+ `mpcorenovfp', `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s',
+ `arm1176jzf-s', `cortex-a5', `cortex-a7', `cortex-a8', `cortex-a9',
+ `cortex-a15', `cortex-r4', `cortex-r4f', `cortex-r5', `cortex-m4',
+ `cortex-m3', `cortex-m1', `cortex-m0', `cortex-m0plus',
+ `marvell-pj4', `xscale', `iwmmxt', `iwmmxt2', `ep9312', `fa526',
+ `fa626', `fa606te', `fa626te', `fmp626', `fa726te'.
`-mtune=generic-ARCH' specifies that GCC should tune the
performance for a blend of processors within architecture ARCH.
@@ -11138,19 +11145,24 @@ architectures:
Linux, and not all architectures are recognized. If the
auto-detect is unsuccessful the option has no effect.
-`-march=NAME'
- This specifies the name of the target ARM architecture. GCC uses
- this name to determine what kind of instructions it can emit when
- generating assembly code. This option can be used in conjunction
- with or instead of the `-mcpu=' option. Permissible names are:
- `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
- `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2',
- `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r',
- `armv7-m', `armv8-a', `iwmmxt', `iwmmxt2', `ep9312'.
+`-mcpu=NAME'
+ This specifies the name of the target ARM processor. GCC uses
+ this name to derive the name of the target ARM architecture (as if
+ specified by `-march') and the ARM processor type for which to
+ tune for performance (as if specified by `-mtune'). Where this
+ option is used in conjunction with `-march' or `-mtune', those
+ options take precedence over the appropriate part of this option.
- `-march=native' causes the compiler to auto-detect the architecture
- of the build computer. At present, this feature is only supported
- on Linux, and not all architectures are recognized. If the
+ Permissible names for this option are the same as those for
+ `-mtune'.
+
+ `-mcpu=generic-ARCH' is also permissible, and is equivalent to
+ `-march=ARCH -mtune=generic-ARCH'. See `-mtune' for more
+ information.
+
+ `-mcpu=native' causes the compiler to auto-detect the CPU of the
+ build computer. At present, this feature is only supported on
+ Linux, and not all architectures are recognized. If the
auto-detect is unsuccessful the option has no effect.
`-mfpu=NAME'
@@ -11229,8 +11241,11 @@ architectures:
appropriate value before execution begins.
`-mpic-register=REG'
- Specify the register to be used for PIC addressing. The default
- is R10 unless stack-checking is enabled, when R9 is used.
+ Specify the register to be used for PIC addressing. For standard
+ PIC base case, the default will be any suitable register
+ determined by compiler. For single PIC base case, the default is
+ `R9' if target is EABI based or stack-checking is enabled,
+ otherwise the default is `R10'.
`-mpoke-function-name'
Write the name of each function into the text section, directly
@@ -11366,7 +11381,7 @@ These options are defined for AVR implementations:
`attiny87', `attiny88', `at86rf401'.
`avr3'
- "Classic" devices with 16 KiB up to 64 KiB of program memory.
+ "Classic" devices with 16 KiB up to 64 KiB of program memory.
MCU = `at43usb355', `at76c711'.
`avr31'
@@ -11390,33 +11405,29 @@ These options are defined for AVR implementations:
`avr5'
"Enhanced" devices with 16 KiB up to 64 KiB of program memory.
MCU = `ata5790', `ata5790n', `ata5795', `atmega16',
- `atmega16a', `atmega16hva', `atmega16hva', `atmega16hva2',
- `atmega16hva2', `atmega16hvb', `atmega16hvb',
- `atmega16hvbrevb', `atmega16m1', `atmega16m1', `atmega16u4',
- `atmega16u4', `atmega161', `atmega162', `atmega163',
- `atmega164a', `atmega164p', `atmega164pa', `atmega165',
- `atmega165a', `atmega165p', `atmega165pa', `atmega168',
- `atmega168a', `atmega168p', `atmega168pa', `atmega169',
- `atmega169a', `atmega169p', `atmega169pa', `atmega26hvg',
- `atmega32', `atmega32a', `atmega32a', `atmega32c1',
- `atmega32c1', `atmega32hvb', `atmega32hvb',
- `atmega32hvbrevb', `atmega32m1', `atmega32m1', `atmega32u4',
- `atmega32u4', `atmega32u6', `atmega32u6', `atmega323',
- `atmega324a', `atmega324p', `atmega324pa', `atmega325',
- `atmega325a', `atmega325p', `atmega3250', `atmega3250a',
- `atmega3250p', `atmega3250pa', `atmega328', `atmega328p',
- `atmega329', `atmega329a', `atmega329p', `atmega329pa',
- `atmega3290', `atmega3290a', `atmega3290p', `atmega3290pa',
- `atmega406', `atmega48hvf', `atmega64', `atmega64a',
- `atmega64c1', `atmega64c1', `atmega64hve', `atmega64m1',
- `atmega64m1', `atmega64rfa2', `atmega64rfr2', `atmega640',
- `atmega644', `atmega644a', `atmega644p', `atmega644pa',
- `atmega645', `atmega645a', `atmega645p', `atmega6450',
- `atmega6450a', `atmega6450p', `atmega649', `atmega649a',
- `atmega649p', `atmega6490', `atmega6490a', `atmega6490p',
- `at90can32', `at90can64', `at90pwm161', `at90pwm216',
- `at90pwm316', `at90scr100', `at90usb646', `at90usb647',
- `at94k', `m3000'.
+ `atmega16a', `atmega16hva', `atmega16hva2', `atmega16hvb',
+ `atmega16hvbrevb', `atmega16m1', `atmega16u4', `atmega161',
+ `atmega162', `atmega163', `atmega164a', `atmega164p',
+ `atmega164pa', `atmega165', `atmega165a', `atmega165p',
+ `atmega165pa', `atmega168', `atmega168a', `atmega168p',
+ `atmega168pa', `atmega169', `atmega169a', `atmega169p',
+ `atmega169pa', `atmega26hvg', `atmega32', `atmega32a',
+ `atmega32c1', `atmega32hvb', `atmega32hvbrevb', `atmega32m1',
+ `atmega32u4', `atmega32u6', `atmega323', `atmega324a',
+ `atmega324p', `atmega324pa', `atmega325', `atmega325a',
+ `atmega325p', `atmega3250', `atmega3250a', `atmega3250p',
+ `atmega3250pa', `atmega328', `atmega328p', `atmega329',
+ `atmega329a', `atmega329p', `atmega329pa', `atmega3290',
+ `atmega3290a', `atmega3290p', `atmega3290pa', `atmega406',
+ `atmega48hvf', `atmega64', `atmega64a', `atmega64c1',
+ `atmega64hve', `atmega64m1', `atmega64rfa2', `atmega64rfr2',
+ `atmega640', `atmega644', `atmega644a', `atmega644p',
+ `atmega644pa', `atmega645', `atmega645a', `atmega645p',
+ `atmega6450', `atmega6450a', `atmega6450p', `atmega649',
+ `atmega649a', `atmega649p', `atmega6490', `atmega6490a',
+ `atmega6490p', `at90can32', `at90can64', `at90pwm161',
+ `at90pwm216', `at90pwm316', `at90scr100', `at90usb646',
+ `at90usb647', `at94k', `m3000'.
`avr51'
"Enhanced" devices with 128 KiB of program memory.
@@ -11488,7 +11499,7 @@ These options are defined for AVR implementations:
`-mbranch-cost=COST'
Set the branch costs for conditional branch instructions to COST.
- Reasonable values for COST are small, non-negative integers. The
+ Reasonable values for COST are small, non-negative integers. The
default branch cost is 0.
`-mcall-prologues'
@@ -11512,7 +11523,7 @@ These options are defined for AVR implementations:
linker is called.
Jump relaxing is performed by the linker because jump offsets are
- not known before code is located. Therefore, the assembler code
+ not known before code is located. Therefore, the assembler code
generated by the compiler is the same, but the instructions in the
executable may differ from instructions in the assembler code.
@@ -11581,12 +11592,12 @@ the compiler and are subject to some limitations:
prologue/epilogue.
* For indirect calls to functions and computed goto, the linker
- generates _stubs_. Stubs are jump pads sometimes also called
- _trampolines_. Thus, the indirect call/jump jumps to such a stub.
+ generates _stubs_. Stubs are jump pads sometimes also called
+ _trampolines_. Thus, the indirect call/jump jumps to such a stub.
The stub contains a direct jump to the desired address.
* Linker relaxation must be turned on so that the linker will
- generate the stubs correctly an all situaltion. See the compiler
+ generate the stubs correctly an all situaltion. See the compiler
option `-mrelax' and the linler option `--relax'. There are
corner cases where the linker is supposed to generate stubs but
aborts without relaxation and without a helpful error message.
@@ -11598,7 +11609,7 @@ the compiler and are subject to some limitations:
points to.
* The startup code from libgcc never sets `EIND'. Notice that
- startup code is a blend of code from libgcc and AVR-LibC. For the
+ startup code is a blend of code from libgcc and AVR-LibC. For the
impact of AVR-LibC on `EIND', see the
AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
@@ -11639,7 +11650,7 @@ the compiler and are subject to some limitations:
- If prologue-save function is used, see `-mcall-prologues'
command-line option.
- - Switch/case dispatch tables. If you do not want such dispatch
+ - Switch/case dispatch tables. If you do not want such dispatch
tables you can specify the `-fno-jump-tables' command-line
option.
@@ -11771,7 +11782,7 @@ Spaces:: and *note AVR Built-in Functions::.
also means that the program counter (PC) is 3 bytes wide.
`__AVR_2_BYTE_PC__'
- The program counter (PC) is 2 bytes wide. This is the case for
+ The program counter (PC) is 2 bytes wide. This is the case for
devices with up to 128 KiB of program memory.
`__AVR_HAVE_8BIT_SP__'
@@ -11869,7 +11880,7 @@ File: gcc.info, Node: Blackfin Options, Next: C6X Options, Prev: AVR Options,
`-mspecld-anomaly'
When enabled, the compiler ensures that the generated code does not
- contain speculative loads after jump instructions. If this option
+ contain speculative loads after jump instructions. If this option
is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined.
`-mno-specld-anomaly'
@@ -11950,7 +11961,7 @@ File: gcc.info, Node: Blackfin Options, Next: C6X Options, Prev: AVR Options,
handle function calls via function pointers.
`-mfast-fp'
- Link with the fast floating-point library. This library relaxes
+ Link with the fast floating-point library. This library relaxes
some of the IEEE floating-point standard's rules for checking
inputs against Not-a-Number (NAN), in the interest of performance.
@@ -11975,14 +11986,14 @@ File: gcc.info, Node: Blackfin Options, Next: C6X Options, Prev: AVR Options,
`-mcorea'
Build a standalone application for Core A of BF561 when using the
- one-application-per-core programming model. Proper start files and
+ one-application-per-core programming model. Proper start files and
link scripts are used to support Core A, and the macro
`__BFIN_COREA' is defined. This option can only be used in
conjunction with `-mmulticore'.
`-mcoreb'
Build a standalone application for Core B of BF561 when using the
- one-application-per-core programming model. Proper start files and
+ one-application-per-core programming model. Proper start files and
link scripts are used to support Core B, and the macro
`__BFIN_COREB' is defined. When this option is used, `coreb_main'
should be used instead of `main'. This option can only be used in
@@ -12154,7 +12165,7 @@ File: gcc.info, Node: CR16 Options, Next: Darwin Options, Prev: CRIS Options,
These options are defined specifically for the CR16 ports.
`-mmac'
- Enable the use of multiply-accumulate instructions. Disabled by
+ Enable the use of multiply-accumulate instructions. Disabled by
default.
`-mcr16cplus'
@@ -12393,7 +12404,7 @@ These `-m' options are defined for the DEC Alpha implementations:
operations. Unless they are replaced by routines that emulate the
floating-point operations, or compiled in such a way as to call
such emulations routines, these routines issue floating-point
- operations. If you are compiling for an Alpha without
+ operations. If you are compiling for an Alpha without
floating-point operations, you must ensure that the library is
built so as not to call them.
@@ -13289,9 +13300,15 @@ computers:
SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and
F16C instruction set support.
+ `core-avx2'
+ Intel Core CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
+ SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AES, PCLMUL,
+ FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction set
+ support.
+
`atom'
- Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
- and SSSE3 instruction set support.
+ Intel Atom CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
+ SSE3 and SSSE3 instruction set support.
`k6'
AMD K6 CPU with MMX instruction set support.
@@ -13369,7 +13386,7 @@ computers:
`winchip2'
IDT WinChip 2 CPU, dealt in same way as i486 with additional
- MMX and 3DNow! instruction set support.
+ MMX and 3DNow! instruction set support.
`c3'
VIA C3 CPU with MMX and 3DNow! instruction set support. (No
@@ -13558,7 +13575,7 @@ computers:
`-mlong-double-80'
These switches control the size of `long double' type. A size of
64 bits makes the `long double' type equivalent to the `double'
- type. This is the default for Bionic C library.
+ type. This is the default for Bionic C library.
*Warning:* if you override the default value for your target ABI,
this changes the size of structures and arrays containing `long
@@ -13763,7 +13780,7 @@ computers:
These switches enable or disable the use of instructions in the
MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL,
FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2,
- LZCNT, RTM or 3DNow! extended instruction sets. These extensions
+ LZCNT, RTM or 3DNow! extended instruction sets. These extensions
are also available as built-in functions: see *note X86 Built-in
Functions::, for details of the functions enabled and disabled by
these switches.
@@ -14108,7 +14125,7 @@ These additional options are available for Microsoft Windows targets:
specifies that the `dllimport' attribute should be ignored.
`-mthread'
- This option is available for MinGW targets. It specifies that
+ This option is available for MinGW targets. It specifies that
MinGW-specific thread support is to be used.
`-municode'
@@ -14128,7 +14145,7 @@ These additional options are available for Microsoft Windows targets:
the linker to set the PE header subsystem type appropriately.
`-fno-set-stack-executable'
- This option is available for MinGW targets. It specifies that the
+ This option is available for MinGW targets. It specifies that the
executable flag for the stack used by nested functions isn't set.
This is necessary for binaries running in kernel mode of Microsoft
Windows, as there the User32 API, which is used to set executable
@@ -15080,7 +15097,7 @@ File: gcc.info, Node: MicroBlaze Options, Next: MIPS Options, Prev: MeP Optio
instead.
`-mcpu=CPU-TYPE'
- Use features of, and schedule code for, the given CPU. Supported
+ Use features of, and schedule code for, the given CPU. Supported
values are in the format `vX.YY.Z', where X is a major version, YY
is the minor version, and Z is compatibility code. Example values
are `v3.00.a', `v4.00.b', `v5.00.a', `v5.00.b', `v5.00.b',
@@ -15132,20 +15149,20 @@ File: gcc.info, Node: MicroBlaze Options, Next: MIPS Options, Prev: MeP Optio
`xmdstub'
for use with Xilinx Microprocessor Debugger (XMD) based
- software intrusive debug agent called xmdstub. This uses
+ software intrusive debug agent called xmdstub. This uses
startup file `crt1.o' and sets the start address of the
program to 0x800.
`bootstrap'
for applications that are loaded using a bootloader. This
model uses startup file `crt2.o' which does not contain a
- processor reset vector handler. This is suitable for
+ processor reset vector handler. This is suitable for
transferring control on a processor reset to the bootloader
rather than the application.
`novectors'
for applications that do not require any of the MicroBlaze
- vectors. This option may be useful for applications running
+ vectors. This option may be useful for applications running
within a monitoring application. This model uses `crt3.o' as
a startup file.
@@ -16275,6 +16292,8 @@ These `-m' options are defined for the IBM RS/6000 and PowerPC:
-mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float
-msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx
+ -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector
+ -mquad-memory -mquad-memory-atomic
The particular options set for any particular CPU varies between
compiler versions, depending on what setting seems to produce
@@ -16318,6 +16337,36 @@ These `-m' options are defined for the IBM RS/6000 and PowerPC:
`-mabi=altivec' to adjust the current ABI with AltiVec ABI
enhancements.
+ When `-maltivec' is used, rather than `-maltivec=le' or
+ `-maltivec=be', the element order for Altivec intrinsics such as
+ `vec_splat', `vec_extract', and `vec_insert' will match array
+ element order corresponding to the endianness of the target. That
+ is, element zero identifies the leftmost element in a vector
+ register when targeting a big-endian platform, and identifies the
+ rightmost element in a vector register when targeting a
+ little-endian platform.
+
+`-maltivec=be'
+ Generate Altivec instructions using big-endian element order,
+ regardless of whether the target is big- or little-endian. This is
+ the default when targeting a big-endian platform.
+
+ The element order is used to interpret element numbers in Altivec
+ intrinsics such as `vec_splat', `vec_extract', and `vec_insert'.
+ By default, these will match array element order corresponding to
+ the endianness for the target.
+
+`-maltivec=le'
+ Generate Altivec instructions using little-endian element order,
+ regardless of whether the target is big- or little-endian. This is
+ the default when targeting a little-endian platform. This option
+ is currently ignored when targeting a big-endian platform.
+
+ The element order is used to interpret element numbers in Altivec
+ intrinsics such as `vec_splat', `vec_extract', and `vec_insert'.
+ By default, these will match array element order corresponding to
+ the endianness for the target.
+
`-mvrsave'
`-mno-vrsave'
Generate VRSAVE instructions when generating AltiVec code.
@@ -16368,6 +16417,43 @@ These `-m' options are defined for the IBM RS/6000 and PowerPC:
instructions, and also enable the use of built-in functions that
allow more direct access to the VSX instruction set.
+`-mcrypto'
+`-mno-crypto'
+ Enable the use (disable) of the built-in functions that allow
+ direct access to the cryptographic instructions that were added in
+ version 2.07 of the PowerPC ISA.
+
+`-mdirect-move'
+`-mno-direct-move'
+ Generate code that uses (does not use) the instructions to move
+ data between the general purpose registers and the vector/scalar
+ (VSX) registers that were added in version 2.07 of the PowerPC ISA.
+
+`-mpower8-fusion'
+`-mno-power8-fusion'
+ Generate code that keeps (does not keeps) some integer operations
+ adjacent so that the instructions can be fused together on power8
+ and later processors.
+
+`-mpower8-vector'
+`-mno-power8-vector'
+ Generate code that uses (does not use) the vector and scalar
+ instructions that were added in version 2.07 of the PowerPC ISA.
+ Also enable the use of built-in functions that allow more direct
+ access to the vector instructions.
+
+`-mquad-memory'
+`-mno-quad-memory'
+ Generate code that uses (does not use) the non-atomic quad word
+ memory instructions. The `-mquad-memory' option requires use of
+ 64-bit mode.
+
+`-mquad-memory-atomic'
+`-mno-quad-memory-atomic'
+ Generate code that uses (does not use) the atomic quad word memory
+ instructions. The `-mquad-memory-atomic' option requires use of
+ 64-bit mode.
+
`-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
`-mfloat-gprs'
This switch enables or disables the generation of floating-point
@@ -16535,7 +16621,7 @@ These `-m' options are defined for the IBM RS/6000 and PowerPC:
`-mavoid-indexed-addresses'
`-mno-avoid-indexed-addresses'
Generate code that tries to avoid (not avoid) the use of indexed
- load or store instructions. These instructions can incur a
+ load or store instructions. These instructions can incur a
performance penalty on Power6 processors in certain situations,
such as when stepping through large arrays that cross a 16M
boundary. This option is enabled by default when targeting Power6
@@ -16654,7 +16740,7 @@ These `-m' options are defined for the IBM RS/6000 and PowerPC:
`store_to_load'
Any dependence from store to load is costly.
- NUMBER
+ NUMBER
Any dependence for which the latency is greater than or equal
to NUMBER is costly.
@@ -16676,7 +16762,7 @@ These `-m' options are defined for the IBM RS/6000 and PowerPC:
insn to a new group, according to the estimated processor
grouping.
- NUMBER
+ NUMBER
Insert NOPs to force costly dependent insns into separate
groups. Insert NUMBER NOPs to force an insn to a new group.
@@ -16724,7 +16810,7 @@ These `-m' options are defined for the IBM RS/6000 and PowerPC:
`-mabi=ABI-TYPE'
Extend the current ABI with a particular extension, or remove such
extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
- IBMLONGDOUBLE, IEEELONGDOUBLE.
+ IBMLONGDOUBLE, IEEELONGDOUBLE, ELFV1, ELFV2.
`-mabi=spe'
Extend the current ABI with SPE ABI extensions. This does not
@@ -16742,6 +16828,18 @@ These `-m' options are defined for the IBM RS/6000 and PowerPC:
Change the current ABI to use IEEE extended-precision long double.
This is a PowerPC 32-bit Linux ABI option.
+`-mabi=elfv1'
+ Change the current ABI to use the ELFv1 ABI. This is the default
+ ABI for big-endian PowerPC 64-bit Linux. Overriding the default
+ ABI requires special system support and is likely to fail in
+ spectacular ways.
+
+`-mabi=elfv2'
+ Change the current ABI to use the ELFv2 ABI. This is the default
+ ABI for little-endian PowerPC 64-bit Linux. Overriding the
+ default ABI requires special system support and is likely to fail
+ in spectacular ways.
+
`-mprototype'
`-mno-prototype'
On System V.4 and embedded PowerPC systems assume that all calls to
@@ -16992,6 +17090,22 @@ These `-m' options are defined for the IBM RS/6000 and PowerPC:
the call through the pointer. The `-mno-save-toc-indirect' option
is the default.
+`-mcompat-align-parm'
+`-mno-compat-align-parm'
+ Generate (do not generate) code to pass structure parameters with a
+ maximum alignment of 64 bits, for compatibility with older versions
+ of GCC.
+
+ Older versions of GCC (prior to 4.9.0) incorrectly did not align a
+ structure parameter on a 128-bit boundary when that structure
+ contained a member requiring 128-bit alignment. This is corrected
+ in more recent versions of GCC. This option may be used to
+ generate code that is compatible with functions compiled with
+ older versions of GCC.
+
+ In this version of the compiler, the `-mcompat-align-parm' is the
+ default, except when using the Linux ELFv2 ABI.
+

File: gcc.info, Node: RX Options, Next: S/390 and zSeries Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options
@@ -17024,7 +17138,7 @@ These command-line options are defined for RX targets:
`-mcpu=NAME'
Selects the type of RX CPU to be targeted. Currently three types
are supported, the generic RX600 and RX200 series hardware and the
- specific RX610 CPU. The default is RX600.
+ specific RX610 CPU. The default is RX600.
The only difference between RX600 and RX610 is that the RX610 does
not support the `MVTIPL' instruction.
@@ -17180,7 +17294,7 @@ architecture.
`-mlong-double-128'
These switches control the size of `long double' type. A size of
64 bits makes the `long double' type equivalent to the `double'
- type. This is the default.
+ type. This is the default.
`-mbackchain'
`-mno-backchain'
@@ -17321,6 +17435,20 @@ architecture.
value given by STACK-SIZE. The STACK-GUARD option can only be
used in conjunction with STACK-SIZE.
+`-mhotpatch[=HALFWORDS]'
+`-mno-hotpatch'
+ If the hotpatch option is enabled, a "hot-patching" function
+ prologue is generated for all functions in the compilation unit.
+ The funtion label is prepended with the given number of two-byte
+ Nop instructions (HALFWORDS, maximum 1000000) or 12 Nop
+ instructions if no argument is present. Functions with a
+ hot-patching prologue are never inlined automatically, and a
+ hot-patching prologue is never generated for functions functions
+ that are explicitly inline.
+
+ This option can be overridden for individual functions with the
+ `hotpatch' attribute.
+

File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options
@@ -17342,7 +17470,7 @@ These options are defined for Score implementations:
Enable generation of unaligned load and store instructions.
`-mmac'
- Enable the use of multiply-accumulate instructions. Disabled by
+ Enable the use of multiply-accumulate instructions. Disabled by
default.
`-mscore5'
@@ -17669,7 +17797,7 @@ These `-m' options are defined for the SH implementations:
Calls a library function that performs the operation in
double precision floating point. Division by zero causes a
floating-point exception. This is the default for SHcompact
- with FPU. Specifying this for targets that do not have a
+ with FPU. Specifying this for targets that do not have a
double precision FPU will default to `call-div1'.
`call-table'
@@ -17853,7 +17981,9 @@ These `-m' options are supported on the SPARC:
`-mapp-regs'
Specify `-mapp-regs' to generate output using the global registers
2 through 4, which the SPARC SVR4 ABI reserves for applications.
- This is the default.
+ Like the global register 1, each global register 2 through 4 is
+ then treated as an allocable register that is clobbered by
+ function calls. This is the default.
To be fully SVR4 ABI-compliant at the cost of some performance
loss, specify `-mno-app-regs'. You should compile libraries and
@@ -17923,6 +18053,12 @@ These `-m' options are supported on the SPARC:
default because it results in a performance loss, especially for
floating-point code.
+`-muser-mode'
+`-mno-user-mode'
+ Do not generate code that can only run in supervisor mode. This
+ is relevant only for the `casa' instruction emitted for the LEON3
+ processor. The default is `-mno-user-mode'.
+
`-mno-faster-structs'
`-mfaster-structs'
With `-mfaster-structs', the compiler assumes that structures
@@ -17938,9 +18074,9 @@ These `-m' options are supported on the SPARC:
Set the instruction set, register set, and instruction scheduling
parameters for machine type CPU_TYPE. Supported values for
CPU_TYPE are `v7', `cypress', `v8', `supersparc', `hypersparc',
- `leon', `sparclite', `f930', `f934', `sparclite86x', `sparclet',
- `tsc701', `v9', `ultrasparc', `ultrasparc3', `niagara',
- `niagara2', `niagara3', and `niagara4'.
+ `leon', `leon3', `sparclite', `f930', `f934', `sparclite86x',
+ `sparclet', `tsc701', `v9', `ultrasparc', `ultrasparc3',
+ `niagara', `niagara2', `niagara3' and `niagara4'.
Native Solaris and GNU/Linux toolchains also support the value
`native', which selects the best architecture option for the host
@@ -17954,19 +18090,19 @@ These `-m' options are supported on the SPARC:
Here is a list of each supported architecture and their supported
implementations.
- v7
+ v7
cypress
- v8
- supersparc, hypersparc, leon
+ v8
+ supersparc, hypersparc, leon, leon3
- sparclite
+ sparclite
f930, f934, sparclite86x
- sparclet
+ sparclet
tsc701
- v9
+ v9
ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
By default (unless configured otherwise), GCC generates code for
@@ -18021,7 +18157,7 @@ These `-m' options are supported on the SPARC:
The same values for `-mcpu=CPU_TYPE' can be used for
`-mtune=CPU_TYPE', but the only useful values are those that
select a particular CPU implementation. Those are `cypress',
- `supersparc', `hypersparc', `leon', `f930', `f934',
+ `supersparc', `hypersparc', `leon', `leon3', `f930', `f934',
`sparclite86x', `tsc701', `ultrasparc', `ultrasparc3', `niagara',
`niagara2', `niagara3' and `niagara4'. With native Solaris and
GNU/Linux toolchains, `native' can also be used.
@@ -18081,6 +18217,10 @@ These `-m' options are supported on the SPARC:
Atmel AT697F processor (which corresponds to erratum #13 of the
AT697E processor).
+`-mfix-ut699'
+ Enable the documented workarounds for the floating-point errata
+ and the data cache nullify errata of the UT699 processor.
+
These `-m' options are supported in addition to the above on SPARC-V9
processors in 64-bit environments:
@@ -18408,7 +18548,7 @@ These `-m' options are defined for V850 implementations:
is used.
`-mv850es'
- Specify that the target processor is the V850ES. This is an alias
+ Specify that the target processor is the V850ES. This is an alias
for the `-mv850e1' option.
`-mv850e'
@@ -18460,7 +18600,7 @@ These `-m' options are defined for V850 implementations:
`-mrh850-abi'
`-mghs'
- Enables support for the RH850 version of the V850 ABI. This is the
+ Enables support for the RH850 version of the V850 ABI. This is the
default. With this version of the ABI the following rules apply:
* Integer sized structures and unions are returned via a memory
@@ -18481,7 +18621,7 @@ These `-m' options are defined for V850 implementations:
`__V850_RH850_ABI__' is defined.
`-mgcc-abi'
- Enables support for the old GCC version of the V850 ABI. With this
+ Enables support for the old GCC version of the V850 ABI. With this
version of the ABI the following rules apply:
* Integer sized structures and unions are returned in register
@@ -18561,7 +18701,7 @@ These `-m' options are defined for the VMS implementations:
Default to 64-bit memory allocation routines.
`-mpointer-size=SIZE'
- Set the default size of pointers. Possible options for SIZE are
+ Set the default size of pointers. Possible options for SIZE are
`32' or `short' for 32 bit pointers, `64' or `long' for 64 bit
pointers, and `no' for supporting only 32 bit pointers. The later
option disables `pragma pointer_size'.
@@ -18799,13 +18939,13 @@ form by either removing `no-' or adding it.
}
The lifetime of a compiler generated temporary is well defined by
- the C++ standard. When a lifetime of a temporary ends, and if the
+ the C++ standard. When a lifetime of a temporary ends, and if the
temporary lives in memory, the optimizing compiler has the freedom
to reuse its stack space with other temporaries or scoped local
- variables whose live range does not overlap with it. However some
+ variables whose live range does not overlap with it. However some
of the legacy code relies on the behavior of older compilers in
which temporaries' stack space is not reused, the aggressive stack
- reuse can lead to runtime errors. This option is used to control
+ reuse can lead to runtime errors. This option is used to control
the temporary stack reuse optimization.
`-ftrapv'
@@ -19419,7 +19559,7 @@ Controlling the Compilation Driver `gcc': (gccint)Driver.
tries looking in the usual places for the subprogram.
The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
- PREFIX is the prefix to the installed compiler. In many cases
+ PREFIX is the prefix to the installed compiler. In many cases
PREFIX is the value of `prefix' when you ran the `configure'
script.
@@ -19998,9 +20138,9 @@ File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implemen
determined by the ABI.
- ---------- Footnotes ----------
+ ---------- Footnotes ----------
- (1) Future versions of GCC may zero-extend, or use a target-defined
+ (1) Future versions of GCC may zero-extend, or use a target-defined
`ptr_extend' pattern. Do not rely on sign extension.

@@ -20269,8 +20409,8 @@ File: gcc.info, Node: C++ Implementation, Next: C Extensions, Prev: C Impleme
A conforming implementation of ISO C++ is required to document its
choice of behavior in each of the areas that are designated
"implementation defined". The following lists all such areas, along
-with the section numbers from the ISO/IEC 14822:1998 and ISO/IEC
-14822:2003 standards. Some areas are only implementation-defined in
+with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
+14882:2003 standards. Some areas are only implementation-defined in
one version of the standard.
Some choices depend on the externally determined ABI for the platform
@@ -20650,9 +20790,9 @@ on them being always the same,
inlining and cloning. If `&&foo' is used in a static variable
initializer, inlining and cloning is forbidden.
- ---------- Footnotes ----------
+ ---------- Footnotes ----------
- (1) The analogous feature in Fortran is called an assigned goto, but
+ (1) The analogous feature in Fortran is called an assigned goto, but
that name seems inappropriate in C, where one can do more than simply
store label addresses in label variables.
@@ -20825,7 +20965,7 @@ acting as mere forwarders for their arguments.
the containing function. You should specify, for RESULT, a value
returned by `__builtin_apply'.
- -- Built-in Function: __builtin_va_arg_pack ()
+ -- Built-in Function: __builtin_va_arg_pack ()
This built-in function represents all anonymous arguments of an
inline function. It can be used only in inline functions that are
always inlined, never compiled as a separate function, such as
@@ -22463,7 +22603,7 @@ attributes.
`thiscall'
On the Intel 386, the `thiscall' attribute causes the compiler to
pass the first argument (if of integral type) in the register ECX.
- Subsequent and other typed arguments are passed on the stack. The
+ Subsequent and other typed arguments are passed on the stack. The
called function pops the arguments off the stack. If the number
of arguments is variable all arguments are pushed on the stack.
The `thiscall' attribute is intended for C++ non-static member
@@ -22613,11 +22753,11 @@ attributes.
of these calls.
On M16C/M32C targets, the `function_vector' attribute declares a
- special page subroutine call function. Use of this attribute
+ special page subroutine call function. Use of this attribute
reduces the code size by 2 bytes for each call generated to the
- subroutine. The argument to the attribute is the vector number
+ subroutine. The argument to the attribute is the vector number
entry from the special page vector table which contains the 16
- low-order bits of the subroutine's entry address. Each vector
+ low-order bits of the subroutine's entry address. Each vector
table has special page number (18 to 255) that is used in `jsrs'
instructions. Jump addresses of the routines are generated by
adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
@@ -22812,7 +22952,7 @@ attributes.
`l1_text'
This attribute specifies a function to be placed into L1
- Instruction SRAM. The function is put into a specific section
+ Instruction SRAM. The function is put into a specific section
named `.l1.text'. With `-mfdpic', function calls with a such
function as the callee or caller uses inlined PLT.
@@ -22963,6 +23103,14 @@ attributes.
"hot-patching" function prologue used in Win32 API functions in
Microsoft Windows XP Service Pack 2 and newer.
+`hotpatch [(PROLOGUE-HALFWORDS)]'
+ On S/390 System z targets, you can use this function attribute to
+ make GCC generate a "hot-patching" function prologue. The
+ `hotpatch' has no effect on funtions that are explicitly inline.
+ If the `-mhotpatch' or `-mno-hotpatch' command-line option is used
+ at the same time, the `hotpatch' attribute takes precedence. If
+ an argument is given, the maximum allowed value is 1000000.
+
`naked'
Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to
indicate that the specified function does not need
@@ -23133,8 +23281,8 @@ attributes.
The `OS_task' attribute can be used when there is _no guarantee_
that interrupts are disabled at that time when the function is
- entered like for, e.g. task functions in a multi-threading
- operating system. In that case, changing the stack pointer
+ entered like for, e.g. task functions in a multi-threading
+ operating system. In that case, changing the stack pointer
register is guarded by save/clear/restore of the global interrupt
enable flag.
@@ -23149,7 +23297,7 @@ attributes.
`pcs'
The `pcs' attribute can be used to control the calling convention
- used for a function on ARM. The attribute takes an argument that
+ used for a function on ARM. The attribute takes an argument that
specifies the calling convention to use.
When compiling using the AAPCS ABI (or a variant of it) then valid
@@ -23259,7 +23407,7 @@ attributes.
clobbered, as per the standard calling conventions. Solaris 8 is
affected by this. Systems with the GNU C Library version 2.1 or
higher and FreeBSD are believed to be safe since the loaders there
- save EAX, EDX and ECX. (Lazy binding can be disabled with the
+ save EAX, EDX and ECX. (Lazy binding can be disabled with the
linker or the loader if desired, to avoid the problem.)
`sseregparm'
@@ -23773,7 +23921,7 @@ attributes.
The possible values of VISIBILITY_TYPE correspond to the
visibility settings in the ELF gABI.
- "default"
+ "default"
Default visibility is the normal case for the object file
format. This value is available for the visibility attribute
to override other options that may change the assumed
@@ -23789,13 +23937,13 @@ attributes.
Default visibility corresponds to "external linkage" in the
language.
- "hidden"
+ "hidden"
Hidden visibility indicates that the entity declared has a new
form of linkage, which we call "hidden linkage". Two
declarations of an object with hidden linkage refer to the
same object if they are in the same shared object.
- "internal"
+ "internal"
Internal visibility is like hidden visibility, but with
additional processor specific semantics. Unless otherwise
specified by the psABI, GCC defines internal visibility to
@@ -23807,7 +23955,7 @@ attributes.
for instance omit the load of a PIC register since it is known
that the calling function loaded the correct value.
- "protected"
+ "protected"
Protected visibility is like default visibility except that it
indicates that references within the defining module bind to
the definition in that module. That is, the declared entity
@@ -26609,7 +26757,7 @@ _picoChip family--`picochip.h'_
16-bit signed integer.
-_PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
+_PowerPC and IBM RS6000--`config/rs6000/constraints.md'_
`b'
Address base register
@@ -26623,17 +26771,64 @@ _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
`v'
Altivec vector register
+ `wa'
+ Any VSX register if the -mvsx option was used or NO_REGS.
+
`wd'
- VSX vector register to hold vector double data
+ VSX vector register to hold vector double data or NO_REGS.
`wf'
- VSX vector register to hold vector float data
+ VSX vector register to hold vector float data or NO_REGS.
+
+ `wg'
+ If `-mmfpgpr' was used, a floating point register or NO_REGS.
+
+ `wl'
+ Floating point register if the LFIWAX instruction is enabled
+ or NO_REGS.
+
+ `wm'
+ VSX register if direct move instructions are enabled, or
+ NO_REGS.
+
+ `wn'
+ No register (NO_REGS).
+
+ `wr'
+ General purpose register if 64-bit instructions are enabled
+ or NO_REGS.
`ws'
- VSX vector register to hold scalar float data
+ VSX vector register to hold scalar double values or NO_REGS.
- `wa'
- Any VSX register
+ `wt'
+ VSX vector register to hold 128 bit integer or NO_REGS.
+
+ `wu'
+ Altivec register to use for float/32-bit int loads/stores or
+ NO_REGS.
+
+ `wv'
+ Altivec register to use for double loads/stores or NO_REGS.
+
+ `ww'
+ FP or VSX register to perform float operations under `-mvsx'
+ or NO_REGS.
+
+ `wx'
+ Floating point register if the STFIWX instruction is enabled
+ or NO_REGS.
+
+ `wy'
+ VSX vector register to hold scalar float values or NO_REGS.
+
+ `wz'
+ Floating point register if the LFIWZX instruction is enabled
+ or NO_REGS.
+
+ `wQ'
+ A memory address that will work with the `lq' and `stq'
+ instructions.
`h'
`MQ', `CTR', or `LINK' register
@@ -27058,7 +27253,7 @@ _Blackfin family--`config/bfin/constraints.md'_
M register
`c'
- Registers used for circular buffering, i.e. I, B, or L
+ Registers used for circular buffering, i.e. I, B, or L
registers.
`C'
@@ -28608,7 +28803,7 @@ assignment, for example `r0' below:
register int *p2 asm ("r1") = ...;
In those cases, a solution is to use a temporary variable for each
-arbitrary expression. *Note Example of asm with clobbered asm reg::.
+arbitrary expression. *Note Example of asm with clobbered asm reg::.

File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions
@@ -28832,7 +29027,7 @@ corresponding mode of `foo' is V4SI.
The `vector_size' attribute is only applicable to integral and float
scalars, although arrays, pointers, and function return values are
-allowed in conjunction with this construct. Only sizes that are a power
+allowed in conjunction with this construct. Only sizes that are a power
of two are currently allowed.
All the basic integer types can be used as base types, both as signed
@@ -28869,13 +29064,13 @@ elements in the operand.
It is possible to use shifting operators `<<', `>>' on integer-type
vectors. The operation is defined as following: `{a0, a1, ..., an} >>
-{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. Vector
+{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. Vector
operands must have the same number of elements.
For convenience, it is allowed to use a binary vector operation where
-one operand is a scalar. In that case the compiler transforms the
+one operand is a scalar. In that case the compiler transforms the
scalar operand into a vector where each element is the scalar from the
-operation. The transformation happens only if the scalar could be
+operation. The transformation happens only if the scalar could be
safely converted to the vector-element type. Consider the following
code.
@@ -28903,7 +29098,7 @@ operands with a signed integral element type.
Vectors are compared element-wise producing 0 when comparison is false
and -1 (constant of the appropriate type where all bits are set)
-otherwise. Consider the following example.
+otherwise. Consider the following example.
typedef int v4si __attribute__ ((vector_size (16)));
@@ -29241,7 +29436,7 @@ values ensures proper usage.
model can be used here.
False is returned otherwise, and the execution is considered to
- conform to FAILURE_MEMMODEL. This memory model cannot be
+ conform to FAILURE_MEMMODEL. This memory model cannot be
`__ATOMIC_RELEASE' nor `__ATOMIC_ACQ_REL'. It also cannot be a
stronger model than that specified by SUCCESS_MEMMODEL.
@@ -29268,7 +29463,7 @@ values ensures proper usage.
-- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
int memmodel)
These built-in functions perform the operation suggested by the
- name, and return the result of the operation. That is,
+ name, and return the result of the operation. That is,
{ *ptr OP= val; return *ptr; }
@@ -29301,14 +29496,19 @@ values ensures proper usage.
This built-in function performs an atomic test-and-set operation on
the byte at `*PTR'. The byte is set to some implementation
defined nonzero "set" value and the return value is `true' if and
- only if the previous contents were "set".
+ only if the previous contents were "set". It should be only used
+ for operands of type `bool' or `char'. For other types only part
+ of the value may be set.
All memory models are valid.
-- Built-in Function: void __atomic_clear (bool *ptr, int memmodel)
This built-in function performs an atomic clear operation on
- `*PTR'. After the operation, `*PTR' contains 0.
+ `*PTR'. After the operation, `*PTR' contains 0. It should be
+ only used for operands of type `bool' or `char' and in conjunction
+ with `__atomic_test_and_set'. For other types it may only clear
+ partially. If the type is not `bool' prefer using `__atomic_store'.
The valid memory model variants are `__ATOMIC_RELAXED',
`__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'.
@@ -29371,17 +29571,19 @@ specified in addition to an existing memory model to atomic intrinsics.
End lock elision on a lock variable. Memory model must be
`__ATOMIC_RELEASE' or stronger.
- When a lock acquire fails it's required for good performance to abort
+ When a lock acquire fails it is required for good performance to abort
the transaction quickly. This can be done with a `_mm_pause'
#include <immintrin.h> // For _mm_pause
+ int lockvar;
+
/* Acquire lock with lock elision */
while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
_mm_pause(); /* Abort failed transaction */
...
/* Free lock with lock elision */
- __atomic_clear(&lockvar, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
+ __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);

File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: x86 specific memory model extensions for transactional memory, Up: C Extensions
@@ -30136,7 +30338,9 @@ instructions, but allow the compiler to schedule those calls.
* picoChip Built-in Functions::
* PowerPC Built-in Functions::
* PowerPC AltiVec/VSX Built-in Functions::
+* PowerPC Hardware Transactional Memory Built-in Functions::
* RX Built-in Functions::
+* S/390 System z Built-in Functions::
* SH Built-in Functions::
* SPARC VIS Built-in Functions::
* SPU Built-in Functions::
@@ -36231,7 +36435,7 @@ starts at `0'. If the address does not point to flash memory, return
unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val)
-Insert bits from BITS into VAL and return the resulting value. The
+Insert bits from BITS into VAL and return the resulting value. The
nibbles of MAP determine how the insertion is performed: Let X be the
N-th nibble of MAP
1. If X is `0xf', then the N-th bit of VAL is returned unaltered.
@@ -36243,7 +36447,7 @@ N-th nibble of MAP
undefined.
One typical use case for this built-in is adjusting input and output
-values to non-contiguous port layouts. Some examples:
+values to non-contiguous port layouts. Some examples:
// same as val, bits is unused
__builtin_avr_insert_bits (0xffffffff, bits, val)
@@ -36427,22 +36631,22 @@ Function prototype Example usage Assembly output
`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C'
`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C'
`void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C'
-sw2)'
+sw2)'
`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C'
`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C'
`void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C'
-sw2)'
+sw2)'
`void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C'
-uw2)'
+uw2)'
`sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C'
`uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C'
`sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C'
`sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C'
`uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C'
`void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C'
-sw2)'
+sw2)'
`void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
-sw2)'
+sw2)'
`uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B'
`uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B'
`uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C'
@@ -37847,8 +38051,8 @@ that is part of the name.
v2si __builtin_ia32_pswapdsi (v2si)
The following built-in functions are available when `-mrtm' is used
-They are used for restricted transactional memory. These are the
-internal low level functions. Normally the functions in *note X86
+They are used for restricted transactional memory. These are the
+internal low level functions. Normally the functions in *note X86
transactional memory intrinsics:: should be used instead.
int __builtin_ia32_xbegin ()
@@ -37862,7 +38066,7 @@ File: gcc.info, Node: X86 transactional memory intrinsics, Next: MIPS DSP Buil
6.56.8 X86 transaction memory intrinsics
----------------------------------------
-Hardware transactional memory intrinsics for i386. These allow to use
+Hardware transactional memory intrinsics for i386. These allow to use
memory transactions with RTM (Restricted Transactional Memory). For
using HLE (Hardware Lock Elision) see *note x86 specific memory model
extensions for transactional memory:: instead. This support is enabled
@@ -37915,8 +38119,8 @@ and suitable fallback code always needs to be supplied.
Transaction abort in a inner nested transaction
-- RTM Function: void _xend ()
- Commit the current transaction. When no transaction is active this
- will fault. All memory side effects of the transactions will
+ Commit the current transaction. When no transaction is active this
+ will fault. All memory side effects of the transactions will
become visible to other threads in an atomic matter.
-- RTM Function: int _xtest ()
@@ -37924,7 +38128,7 @@ and suitable fallback code always needs to be supplied.
otherwise 0.
-- RTM Function: void _xabort (status)
- Abort the current transaction. When no transaction is active this
+ Abort the current transaction. When no transaction is active this
is a no-op. status must be a 8bit constant, that is included in
the status code returned by `_xbegin'
@@ -38687,9 +38891,12 @@ processors:
float __builtin_rsqrtf (float);
double __builtin_recipdiv (double, double);
double __builtin_rsqrt (double);
- long __builtin_bpermd (long, long);
uint64_t __builtin_ppc_get_timebase ();
unsigned long __builtin_ppc_mftb ();
+ double __builtin_unpack_longdouble (long double, int);
+ double __builtin_longdouble_dw0 (long double);
+ double __builtin_longdouble_dw1 (long double);
+ long double __builtin_pack_longdouble (double, double);
The `vec_rsqrt', `__builtin_rsqrt', and `__builtin_rsqrtf' functions
generate multiple instructions to implement the reciprocal sqrt
@@ -38707,8 +38914,52 @@ The `__builtin_ppc_mftb' function always generates one instruction and
returns the Time Base Register value as an unsigned long, throwing away
the most significant word on 32-bit environments.
-
-File: gcc.info, Node: PowerPC AltiVec/VSX Built-in Functions, Next: RX Built-in Functions, Prev: PowerPC Built-in Functions, Up: Target Builtins
+ The following built-in functions are available for the PowerPC family
+of processors, starting with ISA 2.06 or later (`-mcpu=power7' or
+`-mpopcntd'):
+ long __builtin_bpermd (long, long);
+ int __builtin_divwe (int, int);
+ int __builtin_divweo (int, int);
+ unsigned int __builtin_divweu (unsigned int, unsigned int);
+ unsigned int __builtin_divweuo (unsigned int, unsigned int);
+ long __builtin_divde (long, long);
+ long __builtin_divdeo (long, long);
+ unsigned long __builtin_divdeu (unsigned long, unsigned long);
+ unsigned long __builtin_divdeuo (unsigned long, unsigned long);
+ unsigned int cdtbcd (unsigned int);
+ unsigned int cbcdtd (unsigned int);
+ unsigned int addg6s (unsigned int, unsigned int);
+
+ The `__builtin_divde', `__builtin_divdeo', `__builitin_divdeu',
+`__builtin_divdeou' functions require a 64-bit environment support ISA
+2.06 or later.
+
+ The following built-in functions are available for the PowerPC family
+of processors when hardware decimal floating point (`-mhard-dfp') is
+available:
+ _Decimal64 __builtin_dxex (_Decimal64);
+ _Decimal128 __builtin_dxexq (_Decimal128);
+ _Decimal64 __builtin_ddedpd (int, _Decimal64);
+ _Decimal128 __builtin_ddedpdq (int, _Decimal128);
+ _Decimal64 __builtin_denbcd (int, _Decimal64);
+ _Decimal128 __builtin_denbcdq (int, _Decimal128);
+ _Decimal64 __builtin_diex (_Decimal64, _Decimal64);
+ _Decimal128 _builtin_diexq (_Decimal128, _Decimal128);
+ _Decimal64 __builtin_dscli (_Decimal64, int);
+ _Decimal128 __builitn_dscliq (_Decimal128, int);
+ _Decimal64 __builtin_dscri (_Decimal64, int);
+ _Decimal128 __builitn_dscriq (_Decimal128, int);
+ unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
+ _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
+
+ The following built-in functions are available for the PowerPC family
+of processors when the Vector Scalar (vsx) instruction set is available:
+ unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
+ vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
+ unsigned long long);
+
+
+File: gcc.info, Node: PowerPC AltiVec/VSX Built-in Functions, Next: PowerPC Hardware Transactional Memory Built-in Functions, Prev: PowerPC Built-in Functions, Up: Target Builtins
6.56.15 PowerPC AltiVec Built-in Functions
------------------------------------------
@@ -40743,16 +40994,614 @@ additional functions are available:
void vec_vsx_st (vector bool char, int, unsigned char *);
void vec_vsx_st (vector bool char, int, signed char *);
+ vector double vec_xxpermdi (vector double, vector double, int);
+ vector float vec_xxpermdi (vector float, vector float, int);
+ vector long long vec_xxpermdi (vector long long, vector long long, int);
+ vector unsigned long long vec_xxpermdi (vector unsigned long long,
+ vector unsigned long long, int);
+ vector int vec_xxpermdi (vector int, vector int, int);
+ vector unsigned int vec_xxpermdi (vector unsigned int,
+ vector unsigned int, int);
+ vector short vec_xxpermdi (vector short, vector short, int);
+ vector unsigned short vec_xxpermdi (vector unsigned short,
+ vector unsigned short, int);
+ vector signed char vec_xxpermdi (vector signed char, vector signed char, int);
+ vector unsigned char vec_xxpermdi (vector unsigned char,
+ vector unsigned char, int);
+
+ vector double vec_xxsldi (vector double, vector double, int);
+ vector float vec_xxsldi (vector float, vector float, int);
+ vector long long vec_xxsldi (vector long long, vector long long, int);
+ vector unsigned long long vec_xxsldi (vector unsigned long long,
+ vector unsigned long long, int);
+ vector int vec_xxsldi (vector int, vector int, int);
+ vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
+ vector short vec_xxsldi (vector short, vector short, int);
+ vector unsigned short vec_xxsldi (vector unsigned short,
+ vector unsigned short, int);
+ vector signed char vec_xxsldi (vector signed char, vector signed char, int);
+ vector unsigned char vec_xxsldi (vector unsigned char,
+ vector unsigned char, int);
+
Note that the `vec_ld' and `vec_st' built-in functions always generate
the AltiVec `LVX' and `STVX' instructions even if the VSX instruction
set is available. The `vec_vsx_ld' and `vec_vsx_st' built-in functions
always generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X'
instructions.
+ If the ISA 2.07 additions to the vector/scalar (power8-vector)
+instruction set is available, the following additional functions are
+available for both 32-bit and 64-bit targets. For 64-bit targets, you
+can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG
+instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of
+VECTOR UNSIGNED LONG LONG.
+
+ vector long long vec_abs (vector long long);
+
+ vector long long vec_add (vector long long, vector long long);
+ vector unsigned long long vec_add (vector unsigned long long,
+ vector unsigned long long);
+
+ int vec_all_eq (vector long long, vector long long);
+ int vec_all_ge (vector long long, vector long long);
+ int vec_all_gt (vector long long, vector long long);
+ int vec_all_le (vector long long, vector long long);
+ int vec_all_lt (vector long long, vector long long);
+ int vec_all_ne (vector long long, vector long long);
+ int vec_any_eq (vector long long, vector long long);
+ int vec_any_ge (vector long long, vector long long);
+ int vec_any_gt (vector long long, vector long long);
+ int vec_any_le (vector long long, vector long long);
+ int vec_any_lt (vector long long, vector long long);
+ int vec_any_ne (vector long long, vector long long);
+
+ vector long long vec_eqv (vector long long, vector long long);
+ vector long long vec_eqv (vector bool long long, vector long long);
+ vector long long vec_eqv (vector long long, vector bool long long);
+ vector unsigned long long vec_eqv (vector unsigned long long,
+ vector unsigned long long);
+ vector unsigned long long vec_eqv (vector bool long long,
+ vector unsigned long long);
+ vector unsigned long long vec_eqv (vector unsigned long long,
+ vector bool long long);
+ vector int vec_eqv (vector int, vector int);
+ vector int vec_eqv (vector bool int, vector int);
+ vector int vec_eqv (vector int, vector bool int);
+ vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
+ vector unsigned int vec_eqv (vector bool unsigned int,
+ vector unsigned int);
+ vector unsigned int vec_eqv (vector unsigned int,
+ vector bool unsigned int);
+ vector short vec_eqv (vector short, vector short);
+ vector short vec_eqv (vector bool short, vector short);
+ vector short vec_eqv (vector short, vector bool short);
+ vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
+ vector unsigned short vec_eqv (vector bool unsigned short,
+ vector unsigned short);
+ vector unsigned short vec_eqv (vector unsigned short,
+ vector bool unsigned short);
+ vector signed char vec_eqv (vector signed char, vector signed char);
+ vector signed char vec_eqv (vector bool signed char, vector signed char);
+ vector signed char vec_eqv (vector signed char, vector bool signed char);
+ vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
+ vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
+ vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
+
+ vector long long vec_max (vector long long, vector long long);
+ vector unsigned long long vec_max (vector unsigned long long,
+ vector unsigned long long);
+
+ vector long long vec_min (vector long long, vector long long);
+ vector unsigned long long vec_min (vector unsigned long long,
+ vector unsigned long long);
+
+ vector long long vec_nand (vector long long, vector long long);
+ vector long long vec_nand (vector bool long long, vector long long);
+ vector long long vec_nand (vector long long, vector bool long long);
+ vector unsigned long long vec_nand (vector unsigned long long,
+ vector unsigned long long);
+ vector unsigned long long vec_nand (vector bool long long,
+ vector unsigned long long);
+ vector unsigned long long vec_nand (vector unsigned long long,
+ vector bool long long);
+ vector int vec_nand (vector int, vector int);
+ vector int vec_nand (vector bool int, vector int);
+ vector int vec_nand (vector int, vector bool int);
+ vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
+ vector unsigned int vec_nand (vector bool unsigned int,
+ vector unsigned int);
+ vector unsigned int vec_nand (vector unsigned int,
+ vector bool unsigned int);
+ vector short vec_nand (vector short, vector short);
+ vector short vec_nand (vector bool short, vector short);
+ vector short vec_nand (vector short, vector bool short);
+ vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
+ vector unsigned short vec_nand (vector bool unsigned short,
+ vector unsigned short);
+ vector unsigned short vec_nand (vector unsigned short,
+ vector bool unsigned short);
+ vector signed char vec_nand (vector signed char, vector signed char);
+ vector signed char vec_nand (vector bool signed char, vector signed char);
+ vector signed char vec_nand (vector signed char, vector bool signed char);
+ vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
+ vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
+ vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
+
+ vector long long vec_orc (vector long long, vector long long);
+ vector long long vec_orc (vector bool long long, vector long long);
+ vector long long vec_orc (vector long long, vector bool long long);
+ vector unsigned long long vec_orc (vector unsigned long long,
+ vector unsigned long long);
+ vector unsigned long long vec_orc (vector bool long long,
+ vector unsigned long long);
+ vector unsigned long long vec_orc (vector unsigned long long,
+ vector bool long long);
+ vector int vec_orc (vector int, vector int);
+ vector int vec_orc (vector bool int, vector int);
+ vector int vec_orc (vector int, vector bool int);
+ vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
+ vector unsigned int vec_orc (vector bool unsigned int,
+ vector unsigned int);
+ vector unsigned int vec_orc (vector unsigned int,
+ vector bool unsigned int);
+ vector short vec_orc (vector short, vector short);
+ vector short vec_orc (vector bool short, vector short);
+ vector short vec_orc (vector short, vector bool short);
+ vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
+ vector unsigned short vec_orc (vector bool unsigned short,
+ vector unsigned short);
+ vector unsigned short vec_orc (vector unsigned short,
+ vector bool unsigned short);
+ vector signed char vec_orc (vector signed char, vector signed char);
+ vector signed char vec_orc (vector bool signed char, vector signed char);
+ vector signed char vec_orc (vector signed char, vector bool signed char);
+ vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
+ vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
+ vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
+
+ vector int vec_pack (vector long long, vector long long);
+ vector unsigned int vec_pack (vector unsigned long long,
+ vector unsigned long long);
+ vector bool int vec_pack (vector bool long long, vector bool long long);
+
+ vector int vec_packs (vector long long, vector long long);
+ vector unsigned int vec_packs (vector unsigned long long,
+ vector unsigned long long);
+
+ vector unsigned int vec_packsu (vector long long, vector long long);
+
+ vector long long vec_rl (vector long long,
+ vector unsigned long long);
+ vector long long vec_rl (vector unsigned long long,
+ vector unsigned long long);
+
+ vector long long vec_sl (vector long long, vector unsigned long long);
+ vector long long vec_sl (vector unsigned long long,
+ vector unsigned long long);
+
+ vector long long vec_sr (vector long long, vector unsigned long long);
+ vector unsigned long long char vec_sr (vector unsigned long long,
+ vector unsigned long long);
+
+ vector long long vec_sra (vector long long, vector unsigned long long);
+ vector unsigned long long vec_sra (vector unsigned long long,
+ vector unsigned long long);
+
+ vector long long vec_sub (vector long long, vector long long);
+ vector unsigned long long vec_sub (vector unsigned long long,
+ vector unsigned long long);
+
+ vector long long vec_unpackh (vector int);
+ vector unsigned long long vec_unpackh (vector unsigned int);
+
+ vector long long vec_unpackl (vector int);
+ vector unsigned long long vec_unpackl (vector unsigned int);
+
+ vector long long vec_vaddudm (vector long long, vector long long);
+ vector long long vec_vaddudm (vector bool long long, vector long long);
+ vector long long vec_vaddudm (vector long long, vector bool long long);
+ vector unsigned long long vec_vaddudm (vector unsigned long long,
+ vector unsigned long long);
+ vector unsigned long long vec_vaddudm (vector bool unsigned long long,
+ vector unsigned long long);
+ vector unsigned long long vec_vaddudm (vector unsigned long long,
+ vector bool unsigned long long);
+
+ vector long long vec_vbpermq (vector signed char, vector signed char);
+ vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
+
+ vector long long vec_vclz (vector long long);
+ vector unsigned long long vec_vclz (vector unsigned long long);
+ vector int vec_vclz (vector int);
+ vector unsigned int vec_vclz (vector int);
+ vector short vec_vclz (vector short);
+ vector unsigned short vec_vclz (vector unsigned short);
+ vector signed char vec_vclz (vector signed char);
+ vector unsigned char vec_vclz (vector unsigned char);
+
+ vector signed char vec_vclzb (vector signed char);
+ vector unsigned char vec_vclzb (vector unsigned char);
+
+ vector long long vec_vclzd (vector long long);
+ vector unsigned long long vec_vclzd (vector unsigned long long);
+
+ vector short vec_vclzh (vector short);
+ vector unsigned short vec_vclzh (vector unsigned short);
+
+ vector int vec_vclzw (vector int);
+ vector unsigned int vec_vclzw (vector int);
+
+ vector signed char vec_vgbbd (vector signed char);
+ vector unsigned char vec_vgbbd (vector unsigned char);
+
+ vector long long vec_vmaxsd (vector long long, vector long long);
+
+ vector unsigned long long vec_vmaxud (vector unsigned long long,
+ unsigned vector long long);
+
+ vector long long vec_vminsd (vector long long, vector long long);
+
+ vector unsigned long long vec_vminud (vector long long,
+ vector long long);
+
+ vector int vec_vpksdss (vector long long, vector long long);
+ vector unsigned int vec_vpksdss (vector long long, vector long long);
+
+ vector unsigned int vec_vpkudus (vector unsigned long long,
+ vector unsigned long long);
+
+ vector int vec_vpkudum (vector long long, vector long long);
+ vector unsigned int vec_vpkudum (vector unsigned long long,
+ vector unsigned long long);
+ vector bool int vec_vpkudum (vector bool long long, vector bool long long);
+
+ vector long long vec_vpopcnt (vector long long);
+ vector unsigned long long vec_vpopcnt (vector unsigned long long);
+ vector int vec_vpopcnt (vector int);
+ vector unsigned int vec_vpopcnt (vector int);
+ vector short vec_vpopcnt (vector short);
+ vector unsigned short vec_vpopcnt (vector unsigned short);
+ vector signed char vec_vpopcnt (vector signed char);
+ vector unsigned char vec_vpopcnt (vector unsigned char);
+
+ vector signed char vec_vpopcntb (vector signed char);
+ vector unsigned char vec_vpopcntb (vector unsigned char);
+
+ vector long long vec_vpopcntd (vector long long);
+ vector unsigned long long vec_vpopcntd (vector unsigned long long);
+
+ vector short vec_vpopcnth (vector short);
+ vector unsigned short vec_vpopcnth (vector unsigned short);
+
+ vector int vec_vpopcntw (vector int);
+ vector unsigned int vec_vpopcntw (vector int);
+
+ vector long long vec_vrld (vector long long, vector unsigned long long);
+ vector unsigned long long vec_vrld (vector unsigned long long,
+ vector unsigned long long);
+
+ vector long long vec_vsld (vector long long, vector unsigned long long);
+ vector long long vec_vsld (vector unsigned long long,
+ vector unsigned long long);
+
+ vector long long vec_vsrad (vector long long, vector unsigned long long);
+ vector unsigned long long vec_vsrad (vector unsigned long long,
+ vector unsigned long long);
+
+ vector long long vec_vsrd (vector long long, vector unsigned long long);
+ vector unsigned long long char vec_vsrd (vector unsigned long long,
+ vector unsigned long long);
+
+ vector long long vec_vsubudm (vector long long, vector long long);
+ vector long long vec_vsubudm (vector bool long long, vector long long);
+ vector long long vec_vsubudm (vector long long, vector bool long long);
+ vector unsigned long long vec_vsubudm (vector unsigned long long,
+ vector unsigned long long);
+ vector unsigned long long vec_vsubudm (vector bool long long,
+ vector unsigned long long);
+ vector unsigned long long vec_vsubudm (vector unsigned long long,
+ vector bool long long);
+
+ vector long long vec_vupkhsw (vector int);
+ vector unsigned long long vec_vupkhsw (vector unsigned int);
+
+ vector long long vec_vupklsw (vector int);
+ vector unsigned long long vec_vupklsw (vector int);
+
+ If the ISA 2.07 additions to the vector/scalar (power8-vector)
+instruction set is available, the following additional functions are
+available for 64-bit targets. New vector types (VECTOR __INT128_T and
+VECTOR __UINT128_T) are available to hold the __INT128_T and
+__UINT128_T types to use these builtins.
+
+ The normal vector extract, and set operations work on VECTOR
+__INT128_T and VECTOR __UINT128_T types, but the index value must be 0.
+
+ vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t);
+ vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t);
+
+ vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t);
+ vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t);
+
+ vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t,
+ vector __int128_t);
+ vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t,
+ vector __uint128_t);
+
+ vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t,
+ vector __int128_t);
+ vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t,
+ vector __uint128_t);
+
+ vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t,
+ vector __int128_t);
+ vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t,
+ vector __uint128_t);
+
+ vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t,
+ vector __int128_t);
+ vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t,
+ vector __uint128_t);
+
+ vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t);
+ vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t);
+
+ __int128_t vec_vsubuqm (__int128_t, __int128_t);
+ __uint128_t vec_vsubuqm (__uint128_t, __uint128_t);
+
+ vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t);
+ int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t);
+ int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t);
+ int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t);
+ int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t);
+ vector __int128_t bcdsub (vector __int128_t, vector__int128_t);
+ int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t);
+ int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t);
+ int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t);
+ int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t);
+
+ If the cryptographic instructions are enabled (`-mcrypto' or
+`-mcpu=power8'), the following builtins are enabled.
+
+ vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
+
+ vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
+ vector unsigned long long);
+
+ vector unsigned long long __builtin_crypto_vcipherlast
+ (vector unsigned long long,
+ vector unsigned long long);
+
+ vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
+ vector unsigned long long);
+
+ vector unsigned long long __builtin_crypto_vncipherlast
+ (vector unsigned long long,
+ vector unsigned long long);
+
+ vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
+ vector unsigned char,
+ vector unsigned char);
+
+ vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
+ vector unsigned short,
+ vector unsigned short);
+
+ vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
+ vector unsigned int,
+ vector unsigned int);
+
+ vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
+ vector unsigned long long,
+ vector unsigned long long);
+
+ vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
+ vector unsigned char);
+
+ vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short,
+ vector unsigned short);
+
+ vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int,
+ vector unsigned int);
+
+ vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long,
+ vector unsigned long long);
+
+ vector unsigned long long __builtin_crypto_vshasigmad
+ (vector unsigned long long, int, int);
+
+ vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int,
+ int, int);
+
+ The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and
+__BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant
+integer that is 0 or 1. The third argument to these builtin functions
+must be a constant integer in the range of 0 to 15.
+
+
+File: gcc.info, Node: PowerPC Hardware Transactional Memory Built-in Functions, Next: RX Built-in Functions, Prev: PowerPC AltiVec/VSX Built-in Functions, Up: Target Builtins
+
+6.56.16 PowerPC Hardware Transactional Memory Built-in Functions
+----------------------------------------------------------------
+
+GCC provides two interfaces for accessing the Hardware Transactional
+Memory (HTM) instructions available on some of the PowerPC family of
+prcoessors (eg, POWER8). The two interfaces come in a low level
+interface, consisting of built-in functions specific to PowerPC and a
+higher level interface consisting of inline functions that are common
+between PowerPC and S/390.
+
+6.56.16.1 PowerPC HTM Low Level Built-in Functions
+..................................................
+
+The following low level built-in functions are available with `-mhtm'
+or `-mcpu=CPU' where CPU is `power8' or later. They all generate the
+machine instruction that is part of the name.
+
+ The HTM built-ins return true or false depending on their success and
+their arguments match exactly the type and order of the associated
+hardware instruction's operands. Refer to the ISA manual for a
+description of each instruction's operands.
+
+ unsigned int __builtin_tbegin (unsigned int)
+ unsigned int __builtin_tend (unsigned int)
+
+ unsigned int __builtin_tabort (unsigned int)
+ unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
+ unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
+ unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
+ unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
+
+ unsigned int __builtin_tcheck (unsigned int)
+ unsigned int __builtin_treclaim (unsigned int)
+ unsigned int __builtin_trechkpt (void)
+ unsigned int __builtin_tsr (unsigned int)
+
+ In addition to the above HTM built-ins, we have added built-ins for
+some common extended mnemonics of the HTM instructions:
+
+ unsigned int __builtin_tendall (void)
+ unsigned int __builtin_tresume (void)
+ unsigned int __builtin_tsuspend (void)
+
+ The following set of built-in functions are available to gain access
+to the HTM specific special purpose registers.
+
+ unsigned long __builtin_get_texasr (void)
+ unsigned long __builtin_get_texasru (void)
+ unsigned long __builtin_get_tfhar (void)
+ unsigned long __builtin_get_tfiar (void)
+
+ void __builtin_set_texasr (unsigned long);
+ void __builtin_set_texasru (unsigned long);
+ void __builtin_set_tfhar (unsigned long);
+ void __builtin_set_tfiar (unsigned long);
+
+ Example usage of these low level built-in functions may look like:
+
+ #include <htmintrin.h>
+
+ int num_retries = 10;
+
+ while (1)
+ {
+ if (__builtin_tbegin (0))
+ {
+ /* Transaction State Initiated. */
+ if (is_locked (lock))
+ __builtin_tabort (0);
+ ... transaction code...
+ __builtin_tend (0);
+ break;
+ }
+ else
+ {
+ /* Transaction State Failed. Use locks if the transaction
+ failure is "persistent" or we've tried too many times. */
+ if (num_retries-- <= 0
+ || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
+ {
+ acquire_lock (lock);
+ ... non transactional fallback path...
+ release_lock (lock);
+ break;
+ }
+ }
+ }
+
+ One final built-in function has been added that returns the value of
+the 2-bit Transaction State field of the Machine Status Register (MSR)
+as stored in `CR0'.
+
+ unsigned long __builtin_ttest (void)
+
+ This built-in can be used to determine the current transaction state
+using the following code example:
+
+ #include <htmintrin.h>
+
+ unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
+
+ if (tx_state == _HTM_TRANSACTIONAL)
+ {
+ /* Code to use in transactional state. */
+ }
+ else if (tx_state == _HTM_NONTRANSACTIONAL)
+ {
+ /* Code to use in non-transactional state. */
+ }
+ else if (tx_state == _HTM_SUSPENDED)
+ {
+ /* Code to use in transaction suspended state. */
+ }
+
+6.56.16.2 PowerPC HTM High Level Inline Functions
+.................................................
+
+The following high level HTM interface is made available by including
+`<htmxlintrin.h>' and using `-mhtm' or `-mcpu=CPU' where CPU is
+`power8' or later. This interface is common between PowerPC and S/390,
+allowing users to write one HTM source implementation that can be
+compiled and executed on either system.
+
+ long __TM_simple_begin (void)
+ long __TM_begin (void* const TM_buff)
+ long __TM_end (void)
+ void __TM_abort (void)
+ void __TM_named_abort (unsigned char const code)
+ void __TM_resume (void)
+ void __TM_suspend (void)
+
+ long __TM_is_user_abort (void* const TM_buff)
+ long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
+ long __TM_is_illegal (void* const TM_buff)
+ long __TM_is_footprint_exceeded (void* const TM_buff)
+ long __TM_nesting_depth (void* const TM_buff)
+ long __TM_is_nested_too_deep(void* const TM_buff)
+ long __TM_is_conflict(void* const TM_buff)
+ long __TM_is_failure_persistent(void* const TM_buff)
+ long __TM_failure_address(void* const TM_buff)
+ long long __TM_failure_code(void* const TM_buff)
+
+ Using these common set of HTM inline functions, we can create a more
+portable version of the HTM example in the previous section that will
+work on either PowerPC or S/390:
+
+ #include <htmxlintrin.h>
+
+ int num_retries = 10;
+ TM_buff_type TM_buff;
+
+ while (1)
+ {
+ if (__TM_begin (TM_buff))
+ {
+ /* Transaction State Initiated. */
+ if (is_locked (lock))
+ __TM_abort ();
+ ... transaction code...
+ __TM_end ();
+ break;
+ }
+ else
+ {
+ /* Transaction State Failed. Use locks if the transaction
+ failure is "persistent" or we've tried too many times. */
+ if (num_retries-- <= 0
+ || __TM_is_failure_persistent (TM_buff))
+ {
+ acquire_lock (lock);
+ ... non transactional fallback path...
+ release_lock (lock);
+ break;
+ }
+ }
+ }
+

-File: gcc.info, Node: RX Built-in Functions, Next: SH Built-in Functions, Prev: PowerPC AltiVec/VSX Built-in Functions, Up: Target Builtins
+File: gcc.info, Node: RX Built-in Functions, Next: S/390 System z Built-in Functions, Prev: PowerPC Hardware Transactional Memory Built-in Functions, Up: Target Builtins
-6.56.16 RX Built-in Functions
+6.56.17 RX Built-in Functions
-----------------------------
GCC supports some of the RX instructions which cannot be expressed in
@@ -40848,9 +41697,117 @@ following functions are supported:
Generates the `wait' machine instruction.

-File: gcc.info, Node: SH Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: RX Built-in Functions, Up: Target Builtins
+File: gcc.info, Node: S/390 System z Built-in Functions, Next: SH Built-in Functions, Prev: RX Built-in Functions, Up: Target Builtins
+
+6.56.18 S/390 System z Built-in Functions
+-----------------------------------------
+
+ -- Built-in Function: int __builtin_tbegin (void*)
+ Generates the `tbegin' machine instruction starting a
+ non-constraint hardware transaction. If the parameter is non-NULL
+ the memory area is used to store the transaction diagnostic buffer
+ and will be passed as first operand to `tbegin'. This buffer can
+ be defined using the `struct __htm_tdb' C struct defined in
+ `htmintrin.h' and must reside on a double-word boundary. The
+ second tbegin operand is set to `0xff0c'. This enables
+ save/restore of all GPRs and disables aborts for FPR and AR
+ manipulations inside the transaction body. The condition code set
+ by the tbegin instruction is returned as integer value. The tbegin
+ instruction by definition overwrites the content of all FPRs. The
+ compiler will generate code which saves and restores the FPRs. For
+ soft-float code it is recommended to used the `*_nofloat' variant.
+ In order to prevent a TDB from being written it is required to
+ pass an constant zero value as parameter. Passing the zero value
+ through a variable is not sufficient. Although modifications of
+ access registers inside the transaction will not trigger an
+ transaction abort it is not supported to actually modify them.
+ Access registers do not get saved when entering a transaction.
+ They will have undefined state when reaching the abort code.
+
+ Macros for the possible return codes of tbegin are defined in the
+`htmintrin.h' header file:
+
+`_HTM_TBEGIN_STARTED'
+ `tbegin' has been executed as part of normal processing. The
+ transaction body is supposed to be executed.
+
+`_HTM_TBEGIN_INDETERMINATE'
+ The transaction was aborted due to an indeterminate condition which
+ might be persistent.
+
+`_HTM_TBEGIN_TRANSIENT'
+ The transaction aborted due to a transient failure. The
+ transaction should be re-executed in that case.
+
+`_HTM_TBEGIN_PERSISTENT'
+ The transaction aborted due to a persistent failure. Re-execution
+ under same circumstances will not be productive.
+
+ -- Macro: _HTM_FIRST_USER_ABORT_CODE
+ The `_HTM_FIRST_USER_ABORT_CODE' defined in `htmintrin.h'
+ specifies the first abort code which can be used for
+ `__builtin_tabort'. Values below this threshold are reserved for
+ machine use.
+
+ -- Data type: struct __htm_tdb
+ The `struct __htm_tdb' defined in `htmintrin.h' describes the
+ structure of the transaction diagnostic block as specified in the
+ Principles of Operation manual chapter 5-91.
+
+ -- Built-in Function: int __builtin_tbegin_nofloat (void*)
+ Same as `__builtin_tbegin' but without FPR saves and restores.
+ Using this variant in code making use of FPRs will leave the FPRs
+ in undefined state when entering the transaction abort handler
+ code.
-6.56.17 SH Built-in Functions
+ -- Built-in Function: int __builtin_tbegin_retry (void*, int)
+ In addition to `__builtin_tbegin' a loop for transient failures is
+ generated. If tbegin returns a condition code of 2 the transaction
+ will be retried as often as specified in the second argument. The
+ perform processor assist instruction is used to tell the CPU about
+ the number of fails so far.
+
+ -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
+ Same as `__builtin_tbegin_retry' but without FPR saves and
+ restores. Using this variant in code making use of FPRs will leave
+ the FPRs in undefined state when entering the transaction abort
+ handler code.
+
+ -- Built-in Function: void __builtin_tbeginc (void)
+ Generates the `tbeginc' machine instruction starting a constraint
+ hardware transaction. The second operand is set to `0xff08'.
+
+ -- Built-in Function: int __builtin_tend (void)
+ Generates the `tend' machine instruction finishing a transaction
+ and making the changes visible to other threads. The condition
+ code generated by tend is returned as integer value.
+
+ -- Built-in Function: void __builtin_tabort (int)
+ Generates the `tabort' machine instruction with the specified
+ abort code. Abort codes from 0 through 255 are reserved and will
+ result in an error message.
+
+ -- Built-in Function: void __builtin_tx_assist (int)
+ Generates the `ppa rX,rY,1' machine instruction. Where the
+ integer parameter is loaded into rX and a value of zero is loaded
+ into rY. The integer parameter specifies the number of times the
+ transaction repeatedly aborted.
+
+ -- Built-in Function: int __builtin_tx_nesting_depth (void)
+ Generates the `etnd' machine instruction. The current nesting
+ depth is returned as integer value. For a nesting depth of 0 the
+ code is not executed as part of an transaction.
+
+ -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
+ uint64_t)
+ Generates the `ntstg' machine instruction. The second argument is
+ written to the first arguments location. The store operation will
+ not be rolled-back in case of an transaction abort.
+
+
+File: gcc.info, Node: SH Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: S/390 System z Built-in Functions, Up: Target Builtins
+
+6.56.19 SH Built-in Functions
-----------------------------
The following built-in functions are supported on the SH1, SH2, SH3 and
@@ -40885,7 +41842,7 @@ SH4 families of processors:

File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: SH Built-in Functions, Up: Target Builtins
-6.56.18 SPARC VIS Built-in Functions
+6.56.20 SPARC VIS Built-in Functions
------------------------------------
GCC supports SIMD operations on the SPARC using both the generic vector
@@ -41026,7 +41983,7 @@ functions also become available:

File: gcc.info, Node: SPU Built-in Functions, Next: TI C6X Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins
-6.56.19 SPU Built-in Functions
+6.56.21 SPU Built-in Functions
------------------------------
GCC provides extensions for the SPU processor as described in the
@@ -41065,14 +42022,14 @@ differs in several ways.
_Note:_ Only the interface described in the aforementioned
-specification is supported. Internally, GCC uses built-in functions to
+specification is supported. Internally, GCC uses built-in functions to
implement the required functionality, but these are not supported and
are subject to change without notice.

File: gcc.info, Node: TI C6X Built-in Functions, Next: TILE-Gx Built-in Functions, Prev: SPU Built-in Functions, Up: Target Builtins
-6.56.20 TI C6X Built-in Functions
+6.56.22 TI C6X Built-in Functions
---------------------------------
GCC provides intrinsics to access certain instructions of the TI C6X
@@ -41111,7 +42068,7 @@ C6X instructions.

File: gcc.info, Node: TILE-Gx Built-in Functions, Next: TILEPro Built-in Functions, Prev: TI C6X Built-in Functions, Up: Target Builtins
-6.56.21 TILE-Gx Built-in Functions
+6.56.23 TILE-Gx Built-in Functions
----------------------------------
GCC provides intrinsics to access every instruction of the TILE-Gx
@@ -41143,7 +42100,7 @@ after it.

File: gcc.info, Node: TILEPro Built-in Functions, Prev: TILE-Gx Built-in Functions, Up: Target Builtins
-6.56.22 TILEPro Built-in Functions
+6.56.24 TILEPro Built-in Functions
----------------------------------
GCC provides intrinsics to access every instruction of the TILEPro
@@ -41435,7 +42392,7 @@ File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas
For compatibility with the Solaris system headers, GCC supports two
`#pragma' directives that change the name used in assembly for a given
-declaration. To get this effect on all platforms supported by GCC, use
+declaration. To get this effect on all platforms supported by GCC, use
the asm labels extension (*note Asm Labels::).
`redefine_extname OLDNAME NEWNAME'
@@ -41471,7 +42428,7 @@ File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Sy
For compatibility with Microsoft Windows compilers, GCC supports a set
of `#pragma' directives that change the maximum alignment of members of
structures (other than zero-width bit-fields), unions, and classes
-subsequently defined. The N value below always is required to be a
+subsequently defined. The N value below always is required to be a
small power of two and specifies the new alignment in bytes.
1. `#pragma pack(N)' simply sets the new alignment.
@@ -41628,7 +42585,7 @@ pop_macro("MACRO_NAME")'.
`#pragma pop_macro("MACRO_NAME")'
This pragma sets the value of the macro named as MACRO_NAME to the
- value on top of the stack for this macro. If the stack for
+ value on top of the stack for this macro. If the stack for
MACRO_NAME is empty, the value of the macro remains unchanged.
For example:
@@ -42286,9 +43243,9 @@ If all calls to the function can be inlined, you can avoid emitting the
function by compiling with `-fno-implement-inlines'. If any calls are
not inlined, you will get linker errors.
- ---------- Footnotes ----------
+ ---------- Footnotes ----------
- (1) A file's "basename" is the name stripped of all leading path
+ (1) A file's "basename" is the name stripped of all leading path
information and of trailing suffixes, such as `.h' or `.C' or `.cc'.

@@ -42561,10 +43518,10 @@ the execution platform. Here is an example.
return 0;
}
- In the above example, four versions of function foo are created. The
+ In the above example, four versions of function foo are created. The
first version of foo with the target attribute "default" is the default
version. This version gets executed when no other target specific
-version qualifies for execution on a particular platform. A new version
+version qualifies for execution on a particular platform. A new version
of foo is created by using the same function signature but with a
different target string. Function foo is called or a pointer to it is
taken just like a regular function. GCC takes care of doing the
@@ -42850,7 +43807,7 @@ expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is
deprecated and will be removed from a future version.
G++ allows static data members of const floating-point type to be
-declared with an initializer in a class definition. The standard only
+declared with an initializer in a class definition. The standard only
allows initializers for static members of const integral types and const
enumeration types so this extension has been deprecated and will be
removed from a future version.
@@ -42867,8 +43824,8 @@ used to be acceptable in previous drafts of the standard, such as the
ARM [Annotated C++ Reference Manual], are no longer accepted. In order
to allow compilation of C++ written to such drafts, G++ contains some
backwards compatibilities. _All such backwards compatibility features
-are liable to disappear in future versions of G++._ They should be
-considered deprecated. *Note Deprecated Features::.
+are liable to disappear in future versions of G++._ They should be
+considered deprecated. *Note Deprecated Features::.
`For scope'
If a variable is declared at for scope, it used to remain in scope
@@ -43163,7 +44120,7 @@ selectors and methods and about objects and classes.
`unsigned long' `L'
`long long' `q'
`unsigned long `Q'
-long'
+long'
`float' `f'
`double' `d'
`long double' `D'
@@ -43221,12 +44178,12 @@ compiler on an i386 machine:
Objective-C type Compiler encoding
int a[10]; `[10i]'
struct { `{?=i[3f]b128i3b131i2c}'
- int i;
- float f[3];
- int a:3;
- int b:2;
- char c;
- }
+ int i;
+ float f[3];
+ int a:3;
+ int b:2;
+ char c;
+ }
int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine)
@@ -43329,7 +44286,7 @@ File: gcc.info, Node: Method signatures, Prev: @encode, Up: Type encoding
-----------------------
This section documents the encoding of method types, which is rarely
-needed to use Objective-C. You should skip it at a first reading; the
+needed to use Objective-C. You should skip it at a first reading; the
runtime provides functions that will work on methods and can walk
through the list of parameters and interpret them for you. These
functions are part of the public "API" and are the preferred way to
@@ -43592,7 +44549,7 @@ the `finally' clause in Java.
needed in the NeXT Objective-C runtime.
* As mentioned above, the new exceptions do not support handling
- types other than Objective-C objects. Furthermore, when used from
+ types other than Objective-C objects. Furthermore, when used from
Objective-C++, the Objective-C exception model does not
interoperate with C++ exceptions at this time. This means you
cannot `@throw' an exception from Objective-C and `catch' it in
@@ -44629,7 +45586,7 @@ can relocate the data files based on two environment variables:
to strip off the hardwired absolute paths. Default value is 0.
_Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
- undefined, then a relative path is made out of the hardwired
+ undefined, then a relative path is made out of the hardwired
absolute paths.
For example, if the object file `/user/build/foo.o' was built with
@@ -45340,9 +46297,9 @@ where variables in base classes are used (as in the example above).
these examples wrong and accept above code without an error. Those
compilers do not implement two-stage name lookup correctly.
- ---------- Footnotes ----------
+ ---------- Footnotes ----------
- (1) The C++ standard just uses the term "dependent" for names that
+ (1) The C++ standard just uses the term "dependent" for names that
depend on the type or value of template parameters. This shorter term
will also be used in the rest of this section.
@@ -45624,7 +46581,7 @@ do not make because we think GCC is better without them.
programs run any faster.
However, the rationale here is that optimization of a nonempty loop
- cannot produce an empty one. This held for carefully written C
+ cannot produce an empty one. This held for carefully written C
compiled with less powerful optimizers but is not always the case
for carefully written C++ or with more powerful optimizers. Thus
GCC will remove operations from loops whenever it can determine
@@ -46379,7 +47336,7 @@ TERMS AND CONDITIONS
by modifying or propagating a covered work, you indicate your
acceptance of this License to do so.
- 10. Automatic Licensing of Downstream Recipients.
+ 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
@@ -46407,7 +47364,7 @@ TERMS AND CONDITIONS
using, selling, offering for sale, or importing the Program or any
portion of it.
- 11. Patents.
+ 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.
@@ -46480,7 +47437,7 @@ TERMS AND CONDITIONS
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
- 12. No Surrender of Others' Freedom.
+ 12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order,
agreement or otherwise) that contradict the conditions of this
@@ -46494,7 +47451,7 @@ TERMS AND CONDITIONS
terms and this License would be to refrain entirely from conveying
the Program.
- 13. Use with the GNU Affero General Public License.
+ 13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
@@ -46505,7 +47462,7 @@ TERMS AND CONDITIONS
General Public License, section 13, concerning interaction through
a network will apply to the combination as such.
- 14. Revised Versions of this License.
+ 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new
versions of the GNU General Public License from time to time.
@@ -46532,19 +47489,19 @@ TERMS AND CONDITIONS
author or copyright holder as a result of your choosing to follow a
later version.
- 15. Disclaimer of Warranty.
+ 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
- APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
NECESSARY SERVICING, REPAIR OR CORRECTION.
- 16. Limitation of Liability.
+ 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
@@ -46557,7 +47514,7 @@ TERMS AND CONDITIONS
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
THE POSSIBILITY OF SUCH DAMAGES.
- 17. Interpretation of Sections 15 and 16.
+ 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
@@ -47030,7 +47987,7 @@ GNU Free Documentation License
not permanently reinstated, receipt of a copy of some or all of
the same material does not give you any rights to use it.
- 10. FUTURE REVISIONS OF THIS LICENSE
+ 10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of
the GNU Free Documentation License from time to time. Such new
@@ -47051,7 +48008,7 @@ GNU Free Documentation License
proxy's public statement of acceptance of a version permanently
authorizes you to choose that version for the Document.
- 11. RELICENSING
+ 11. RELICENSING
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
World Wide Web server that publishes copyrightable works and also
@@ -47098,7 +48055,7 @@ notices just after the title page:
Free Documentation License''.
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the "with...Texts." line with this:
+replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with
the Front-Cover Texts being LIST, and with the Back-Cover Texts
@@ -48058,7 +49015,7 @@ GCC version 4.1:
and improvements.
* Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
- 2D support. Lots of imageio framework additions, lots of AWT and
+ 2D support. Lots of imageio framework additions, lots of AWT and
Free Swing bug fixes.
* Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
@@ -48093,7 +49050,7 @@ GCC version 4.1:
* Ito Kazumitsu for `NetworkInterface' implementation and updates.
* Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
- bug fixes all over. Lots of Free Swing work including styled text.
+ bug fixes all over. Lots of Free Swing work including styled text.
* Simon Kitching for `String' cleanups and optimization suggestions.
@@ -48350,7 +49307,7 @@ look up both forms.
* -mcpu: RX Options. (line 30)
* -mpointer-size=SIZE: VMS Options. (line 20)
* 8bit-idiv: i386 and x86-64 Options.
- (line 818)
+ (line 824)
* A: Preprocessor Options.
(line 597)
* all_load: Darwin Options. (line 110)
@@ -48364,9 +49321,9 @@ look up both forms.
* arch_errors_fatal: Darwin Options. (line 114)
* aux-info: C Dialect Options. (line 168)
* avx256-split-unaligned-load: i386 and x86-64 Options.
- (line 826)
+ (line 832)
* avx256-split-unaligned-store: i386 and x86-64 Options.
- (line 826)
+ (line 832)
* B: Directory Options. (line 46)
* Bdynamic: VxWorks Options. (line 22)
* bind_at_load: Darwin Options. (line 118)
@@ -48418,6 +49375,7 @@ look up both forms.
* F: Darwin Options. (line 31)
* fabi-version: C++ Dialect Options.
(line 20)
+* fada-spec-parent: Overall Options. (line 369)
* faggressive-loop-optimizations: Optimize Options. (line 509)
* falign-functions: Optimize Options. (line 1462)
* falign-jumps: Optimize Options. (line 1511)
@@ -48482,8 +49440,10 @@ look up both forms.
* fdollars-in-identifiers: Preprocessor Options.
(line 495)
* fdse: Optimize Options. (line 543)
+* fdump-ada-spec: Overall Options. (line 363)
* fdump-class-hierarchy: Debugging Options. (line 805)
* fdump-final-insns: Debugging Options. (line 194)
+* fdump-go-spec: Overall Options. (line 373)
* fdump-ipa: Debugging Options. (line 813)
* fdump-noaddr: Debugging Options. (line 778)
* fdump-passes: Debugging Options. (line 831)
@@ -48646,7 +49606,7 @@ look up both forms.
* finput-charset: Preprocessor Options.
(line 567)
* finstrument-functions <1>: Function Attributes.
- (line 946)
+ (line 954)
* finstrument-functions: Code Gen Options. (line 375)
* finstrument-functions-exclude-file-list: Code Gen Options. (line 411)
* finstrument-functions-exclude-function-list: Code Gen Options.
@@ -48902,7 +49862,7 @@ look up both forms.
* fsingle-precision-constant: Optimize Options. (line 2052)
* fsplit-ivs-in-unroller: Optimize Options. (line 1281)
* fsplit-stack <1>: Function Attributes.
- (line 951)
+ (line 959)
* fsplit-stack: Code Gen Options. (line 496)
* fsplit-wide-types: Optimize Options. (line 437)
* fstack-check: Code Gen Options. (line 443)
@@ -49004,7 +49964,7 @@ look up both forms.
(line 141)
* G <1>: System V Options. (line 10)
* G <2>: RS/6000 and PowerPC Options.
- (line 662)
+ (line 743)
* G <3>: MIPS Options. (line 330)
* G: M32R/D Options. (line 57)
* g: Debugging Options. (line 10)
@@ -49070,13 +50030,13 @@ look up both forms.
* l: Link Options. (line 26)
* lobjc: Link Options. (line 53)
* m: RS/6000 and PowerPC Options.
- (line 515)
+ (line 584)
* M: Preprocessor Options.
(line 185)
* m1: SH Options. (line 9)
* m10: PDP-11 Options. (line 29)
* m128bit-long-double: i386 and x86-64 Options.
- (line 336)
+ (line 342)
* m16-bit: CRIS Options. (line 64)
* m1reg-: Adapteva Epiphany Options.
(line 132)
@@ -49091,11 +50051,11 @@ look up both forms.
(line 87)
* m32 <1>: TILEPro Options. (line 13)
* m32 <2>: TILE-Gx Options. (line 23)
-* m32 <3>: SPARC Options. (line 245)
+* m32 <3>: SPARC Options. (line 257)
* m32 <4>: RS/6000 and PowerPC Options.
- (line 207)
+ (line 276)
* m32: i386 and x86-64 Options.
- (line 835)
+ (line 841)
* m32-bit: CRIS Options. (line 64)
* m32bit-doubles: RX Options. (line 10)
* m32r: M32R/D Options. (line 15)
@@ -49103,7 +50063,7 @@ look up both forms.
* m32rx: M32R/D Options. (line 12)
* m340: MCore Options. (line 43)
* m3dnow: i386 and x86-64 Options.
- (line 565)
+ (line 571)
* m3e: SH Options. (line 37)
* m4: SH Options. (line 51)
* m4-nofpu: SH Options. (line 40)
@@ -49123,13 +50083,13 @@ look up both forms.
* m5307: M680x0 Options. (line 164)
* m5407: M680x0 Options. (line 168)
* m64 <1>: TILE-Gx Options. (line 23)
-* m64 <2>: SPARC Options. (line 245)
+* m64 <2>: SPARC Options. (line 257)
* m64 <3>: S/390 and zSeries Options.
(line 87)
* m64 <4>: RS/6000 and PowerPC Options.
- (line 207)
+ (line 276)
* m64: i386 and x86-64 Options.
- (line 835)
+ (line 841)
* m64bit-doubles: RX Options. (line 10)
* m68000: M680x0 Options. (line 95)
* m68010: M680x0 Options. (line 103)
@@ -49143,65 +50103,73 @@ look up both forms.
* m8-bit: CRIS Options. (line 64)
* m8byte-align: V850 Options. (line 170)
* m96bit-long-double: i386 and x86-64 Options.
- (line 336)
+ (line 342)
* mabi <1>: RS/6000 and PowerPC Options.
- (line 542)
+ (line 611)
* mabi <2>: i386 and x86-64 Options.
- (line 715)
+ (line 721)
* mabi: ARM Options. (line 10)
* mabi=32: MIPS Options. (line 131)
* mabi=64: MIPS Options. (line 131)
* mabi=eabi: MIPS Options. (line 131)
+* mabi=elfv1: RS/6000 and PowerPC Options.
+ (line 632)
+* mabi=elfv2: RS/6000 and PowerPC Options.
+ (line 638)
* mabi=gnu: MMIX Options. (line 20)
* mabi=ibmlongdouble: RS/6000 and PowerPC Options.
- (line 555)
+ (line 624)
* mabi=ieeelongdouble: RS/6000 and PowerPC Options.
- (line 559)
+ (line 628)
* mabi=mmixware: MMIX Options. (line 20)
* mabi=n32: MIPS Options. (line 131)
* mabi=no-spe: RS/6000 and PowerPC Options.
- (line 552)
+ (line 621)
* mabi=o64: MIPS Options. (line 131)
* mabi=spe: RS/6000 and PowerPC Options.
- (line 547)
+ (line 616)
* mabicalls: MIPS Options. (line 155)
-* mabort-on-noreturn: ARM Options. (line 183)
+* mabort-on-noreturn: ARM Options. (line 184)
* mabsdiff: MeP Options. (line 7)
* mabshi: PDP-11 Options. (line 55)
* mac0: PDP-11 Options. (line 16)
* macc-4: FRV Options. (line 113)
* macc-8: FRV Options. (line 116)
-* maccumulate-args: AVR Options. (line 139)
+* maccumulate-args: AVR Options. (line 135)
* maccumulate-outgoing-args <1>: SH Options. (line 330)
* maccumulate-outgoing-args: i386 and x86-64 Options.
- (line 738)
+ (line 744)
* maddress-mode=long: i386 and x86-64 Options.
- (line 878)
+ (line 884)
* maddress-mode=short: i386 and x86-64 Options.
- (line 883)
+ (line 889)
* maddress-space-conversion: SPU Options. (line 63)
* mads: RS/6000 and PowerPC Options.
- (line 585)
+ (line 666)
* maix-struct-return: RS/6000 and PowerPC Options.
- (line 535)
+ (line 604)
* maix32: RS/6000 and PowerPC Options.
- (line 245)
+ (line 314)
* maix64: RS/6000 and PowerPC Options.
- (line 245)
+ (line 314)
* malign-300: H8/300 Options. (line 41)
* malign-double: i386 and x86-64 Options.
- (line 320)
+ (line 326)
* malign-int: M680x0 Options. (line 267)
* malign-labels: FRV Options. (line 104)
* malign-loops: M32R/D Options. (line 73)
* malign-natural: RS/6000 and PowerPC Options.
- (line 284)
+ (line 353)
* malign-power: RS/6000 and PowerPC Options.
- (line 284)
+ (line 353)
* mall-opts: MeP Options. (line 11)
* malloc-cc: FRV Options. (line 25)
* maltivec: RS/6000 and PowerPC Options.
- (line 132)
+ (line 134)
+* maltivec=be: RS/6000 and PowerPC Options.
+ (line 150)
+* maltivec=le: RS/6000 and PowerPC Options.
+ (line 160)
* mam33: MN10300 Options. (line 17)
* mam33-2: MN10300 Options. (line 24)
* mam34: MN10300 Options. (line 27)
@@ -49219,18 +50187,18 @@ look up both forms.
* march <5>: HPPA Options. (line 9)
* march <6>: CRIS Options. (line 10)
* march <7>: C6X Options. (line 7)
-* march <8>: ARM Options. (line 128)
+* march <8>: ARM Options. (line 75)
* march: AArch64 Options. (line 55)
-* marm: ARM Options. (line 244)
+* marm: ARM Options. (line 248)
* mas100-syntax: RX Options. (line 76)
* masm=DIALECT: i386 and x86-64 Options.
- (line 275)
+ (line 281)
* matomic-model=MODEL: SH Options. (line 144)
* matomic-updates: SPU Options. (line 78)
* mauto-pic: IA-64 Options. (line 50)
* maverage: MeP Options. (line 16)
* mavoid-indexed-addresses: RS/6000 and PowerPC Options.
- (line 354)
+ (line 423)
* max-vect-align: Adapteva Epiphany Options.
(line 120)
* mb: SH Options. (line 74)
@@ -49242,9 +50210,9 @@ look up both forms.
* mbcopy: PDP-11 Options. (line 36)
* mbcopy-builtin: PDP-11 Options. (line 32)
* mbig: RS/6000 and PowerPC Options.
- (line 434)
+ (line 503)
* mbig-endian <1>: RS/6000 and PowerPC Options.
- (line 434)
+ (line 503)
* mbig-endian <2>: MicroBlaze Options. (line 57)
* mbig-endian <3>: MCore Options. (line 39)
* mbig-endian <4>: IA-64 Options. (line 9)
@@ -49257,16 +50225,16 @@ look up both forms.
* mbigtable: SH Options. (line 89)
* mbionic: GNU/Linux Options. (line 17)
* mbit-align: RS/6000 and PowerPC Options.
- (line 386)
+ (line 455)
* mbit-ops: CR16 Options. (line 25)
* mbitfield: M680x0 Options. (line 235)
* mbitops <1>: SH Options. (line 93)
* mbitops: MeP Options. (line 26)
* mblock-move-inline-limit: RS/6000 and PowerPC Options.
- (line 656)
+ (line 737)
* mbranch-cheap: PDP-11 Options. (line 65)
* mbranch-cost <1>: MIPS Options. (line 635)
-* mbranch-cost <2>: AVR Options. (line 154)
+* mbranch-cost <2>: AVR Options. (line 150)
* mbranch-cost: Adapteva Epiphany Options.
(line 18)
* mbranch-cost=NUM: SH Options. (line 396)
@@ -49276,7 +50244,7 @@ look up both forms.
* mbranch-likely: MIPS Options. (line 642)
* mbranch-predict: MMIX Options. (line 49)
* mbss-plt: RS/6000 and PowerPC Options.
- (line 155)
+ (line 187)
* mbuild-constants: DEC Alpha Options. (line 141)
* mbwx: DEC Alpha Options. (line 163)
* mc68000: M680x0 Options. (line 95)
@@ -49284,50 +50252,50 @@ look up both forms.
* mc=: MeP Options. (line 31)
* mcache-size: SPU Options. (line 70)
* mcall-eabi: RS/6000 and PowerPC Options.
- (line 509)
+ (line 578)
* mcall-freebsd: RS/6000 and PowerPC Options.
- (line 523)
+ (line 592)
* mcall-linux: RS/6000 and PowerPC Options.
- (line 519)
+ (line 588)
* mcall-netbsd: RS/6000 and PowerPC Options.
- (line 527)
-* mcall-prologues: AVR Options. (line 159)
+ (line 596)
+* mcall-prologues: AVR Options. (line 155)
* mcall-sysv: RS/6000 and PowerPC Options.
- (line 501)
+ (line 570)
* mcall-sysv-eabi: RS/6000 and PowerPC Options.
- (line 509)
+ (line 578)
* mcall-sysv-noeabi: RS/6000 and PowerPC Options.
- (line 512)
-* mcallee-super-interworking: ARM Options. (line 262)
-* mcaller-super-interworking: ARM Options. (line 269)
+ (line 581)
+* mcallee-super-interworking: ARM Options. (line 266)
+* mcaller-super-interworking: ARM Options. (line 273)
* mcallgraph-data: MCore Options. (line 31)
-* mcbcond: SPARC Options. (line 216)
+* mcbcond: SPARC Options. (line 224)
* mcbranchdi: SH Options. (line 411)
* mcc-init: CRIS Options. (line 41)
* mcfv4e: M680x0 Options. (line 172)
* mcheck-zero-division: MIPS Options. (line 441)
* mcix: DEC Alpha Options. (line 163)
* mcld: i386 and x86-64 Options.
- (line 588)
+ (line 594)
* mclip: MeP Options. (line 35)
-* mcmodel: SPARC Options. (line 250)
+* mcmodel: SPARC Options. (line 262)
* mcmodel=kernel: i386 and x86-64 Options.
- (line 862)
+ (line 868)
* mcmodel=large <1>: TILE-Gx Options. (line 14)
* mcmodel=large <2>: RS/6000 and PowerPC Options.
- (line 126)
+ (line 128)
* mcmodel=large <3>: i386 and x86-64 Options.
- (line 874)
+ (line 880)
* mcmodel=large: AArch64 Options. (line 33)
* mcmodel=medium <1>: RS/6000 and PowerPC Options.
- (line 122)
+ (line 124)
* mcmodel=medium: i386 and x86-64 Options.
- (line 867)
+ (line 873)
* mcmodel=small <1>: TILE-Gx Options. (line 9)
* mcmodel=small <2>: RS/6000 and PowerPC Options.
- (line 118)
+ (line 120)
* mcmodel=small <3>: i386 and x86-64 Options.
- (line 856)
+ (line 862)
* mcmodel=small: AArch64 Options. (line 27)
* mcmodel=tiny: AArch64 Options. (line 20)
* mcmove: Adapteva Epiphany Options.
@@ -49336,6 +50304,8 @@ look up both forms.
(line 27)
* mcmpeqdi: SH Options. (line 414)
* mcode-readable: MIPS Options. (line 401)
+* mcompat-align-parm: RS/6000 and PowerPC Options.
+ (line 895)
* mcond-exec: FRV Options. (line 152)
* mcond-move: FRV Options. (line 128)
* mconfig=: MeP Options. (line 39)
@@ -49351,17 +50321,17 @@ look up both forms.
* mcoreb: Blackfin Options. (line 164)
* mcpu <1>: TILEPro Options. (line 9)
* mcpu <2>: TILE-Gx Options. (line 18)
-* mcpu <3>: SPARC Options. (line 94)
+* mcpu <3>: SPARC Options. (line 102)
* mcpu <4>: RS/6000 and PowerPC Options.
(line 69)
* mcpu <5>: picoChip Options. (line 9)
* mcpu <6>: M680x0 Options. (line 28)
* mcpu <7>: i386 and x86-64 Options.
- (line 223)
+ (line 229)
* mcpu <8>: FRV Options. (line 212)
* mcpu <9>: DEC Alpha Options. (line 215)
* mcpu <10>: CRIS Options. (line 10)
-* mcpu <11>: ARM Options. (line 75)
+* mcpu <11>: ARM Options. (line 124)
* mcpu: AArch64 Options. (line 69)
* mcpu32: M680x0 Options. (line 138)
* mcpu= <1>: MicroBlaze Options. (line 20)
@@ -49370,10 +50340,12 @@ look up both forms.
* mcr16c: CR16 Options. (line 14)
* mcr16cplus: CR16 Options. (line 14)
* mcrc32: i386 and x86-64 Options.
- (line 635)
+ (line 641)
+* mcrypto: RS/6000 and PowerPC Options.
+ (line 222)
* mcsync-anomaly: Blackfin Options. (line 60)
* mcx16: i386 and x86-64 Options.
- (line 612)
+ (line 618)
* MD: Preprocessor Options.
(line 274)
* mdalign: SH Options. (line 80)
@@ -49385,6 +50357,8 @@ look up both forms.
* mdebug: M32R/D Options. (line 69)
* mdebug-main=PREFIX: VMS Options. (line 13)
* mdec-asm: PDP-11 Options. (line 72)
+* mdirect-move: RS/6000 and PowerPC Options.
+ (line 228)
* mdisable-callt: V850 Options. (line 92)
* mdisable-fpregs: HPPA Options. (line 33)
* mdisable-indexing: HPPA Options. (line 39)
@@ -49399,11 +50373,11 @@ look up both forms.
* mdll: i386 and x86-64 Windows Options.
(line 16)
* mdlmzb: RS/6000 and PowerPC Options.
- (line 379)
+ (line 448)
* mdmx: MIPS Options. (line 290)
* mdouble: FRV Options. (line 38)
* mdouble-float <1>: RS/6000 and PowerPC Options.
- (line 302)
+ (line 371)
* mdouble-float: MIPS Options. (line 248)
* mdsp: MIPS Options. (line 267)
* mdspr2: MIPS Options. (line 273)
@@ -49411,11 +50385,11 @@ look up both forms.
* mdwarf2-asm: IA-64 Options. (line 94)
* mdword: FRV Options. (line 32)
* mdynamic-no-pic: RS/6000 and PowerPC Options.
- (line 439)
+ (line 508)
* mea32: SPU Options. (line 55)
* mea64: SPU Options. (line 55)
* meabi: RS/6000 and PowerPC Options.
- (line 604)
+ (line 685)
* mearly-stop-bits: IA-64 Options. (line 100)
* meb <1>: Score Options. (line 9)
* meb <2>: Moxie Options. (line 7)
@@ -49426,7 +50400,7 @@ look up both forms.
* melf <1>: MMIX Options. (line 44)
* melf: CRIS Options. (line 87)
* memb: RS/6000 and PowerPC Options.
- (line 599)
+ (line 680)
* membedded-data: MIPS Options. (line 388)
* memregs=: M32C Options. (line 21)
* mep: V850 Options. (line 16)
@@ -49444,19 +50418,20 @@ look up both forms.
(line 220)
* mfast-fp: Blackfin Options. (line 133)
* mfast-indirect-calls: HPPA Options. (line 51)
-* mfaster-structs: SPARC Options. (line 84)
+* mfaster-structs: SPARC Options. (line 92)
* mfdpic: FRV Options. (line 56)
* mfentry: i386 and x86-64 Options.
- (line 811)
+ (line 817)
* mfix: DEC Alpha Options. (line 163)
* mfix-24k: MIPS Options. (line 500)
* mfix-and-continue: Darwin Options. (line 104)
-* mfix-at697f: SPARC Options. (line 236)
-* mfix-cortex-m3-ldrd: ARM Options. (line 302)
+* mfix-at697f: SPARC Options. (line 244)
+* mfix-cortex-m3-ldrd: ARM Options. (line 306)
* mfix-r10000: MIPS Options. (line 527)
* mfix-r4000: MIPS Options. (line 506)
* mfix-r4400: MIPS Options. (line 520)
* mfix-sb1: MIPS Options. (line 559)
+* mfix-ut699: SPARC Options. (line 249)
* mfix-vr4120: MIPS Options. (line 538)
* mfix-vr4130: MIPS Options. (line 552)
* mfixed-cc: FRV Options. (line 28)
@@ -49464,11 +50439,11 @@ look up both forms.
* mfixed-range <2>: SH Options. (line 343)
* mfixed-range <3>: IA-64 Options. (line 105)
* mfixed-range: HPPA Options. (line 58)
-* mflat: SPARC Options. (line 20)
+* mflat: SPARC Options. (line 22)
* mflip-mips16: MIPS Options. (line 111)
* mfloat-abi: ARM Options. (line 42)
* mfloat-gprs: RS/6000 and PowerPC Options.
- (line 190)
+ (line 259)
* mfloat-ieee: DEC Alpha Options. (line 171)
* mfloat-vax: DEC Alpha Options. (line 171)
* mfloat32: PDP-11 Options. (line 52)
@@ -49476,7 +50451,7 @@ look up both forms.
* mflush-func: MIPS Options. (line 626)
* mflush-func=NAME: M32R/D Options. (line 93)
* mflush-trap=NUMBER: M32R/D Options. (line 86)
-* mfmaf: SPARC Options. (line 230)
+* mfmaf: SPARC Options. (line 238)
* mfmovd: SH Options. (line 96)
* mforce-no-pic: Xtensa Options. (line 41)
* mfp-exceptions: MIPS Options. (line 653)
@@ -49485,33 +50460,33 @@ look up both forms.
* mfp-reg: DEC Alpha Options. (line 25)
* mfp-rounding-mode: DEC Alpha Options. (line 85)
* mfp-trap-mode: DEC Alpha Options. (line 63)
-* mfp16-format: ARM Options. (line 163)
+* mfp16-format: ARM Options. (line 164)
* mfp32: MIPS Options. (line 221)
* mfp64: MIPS Options. (line 224)
* mfpmath <1>: i386 and x86-64 Options.
- (line 226)
+ (line 232)
* mfpmath: Optimize Options. (line 1898)
* mfpr-32: FRV Options. (line 13)
* mfpr-64: FRV Options. (line 16)
* mfprnd: RS/6000 and PowerPC Options.
(line 27)
-* mfpu <1>: SPARC Options. (line 33)
+* mfpu <1>: SPARC Options. (line 35)
* mfpu <2>: RS/6000 and PowerPC Options.
- (line 310)
+ (line 379)
* mfpu <3>: PDP-11 Options. (line 9)
-* mfpu: ARM Options. (line 143)
+* mfpu: ARM Options. (line 144)
* mfriz: RS/6000 and PowerPC Options.
- (line 785)
+ (line 866)
* mfsca: SH Options. (line 428)
* mfsrra: SH Options. (line 437)
* mfull-toc: RS/6000 and PowerPC Options.
- (line 218)
+ (line 287)
* mfused-madd <1>: Xtensa Options. (line 19)
* mfused-madd <2>: SH Options. (line 419)
* mfused-madd <3>: S/390 and zSeries Options.
(line 137)
* mfused-madd <4>: RS/6000 and PowerPC Options.
- (line 363)
+ (line 432)
* mfused-madd <5>: MIPS Options. (line 482)
* mfused-madd: IA-64 Options. (line 88)
* mg: VAX Options. (line 17)
@@ -49520,7 +50495,7 @@ look up both forms.
* mgas: HPPA Options. (line 74)
* mgcc-abi: V850 Options. (line 148)
* mgen-cell-microcode: RS/6000 and PowerPC Options.
- (line 143)
+ (line 175)
* mgeneral-regs-only: AArch64 Options. (line 13)
* mgettrcost=NUMBER: SH Options. (line 360)
* mghs: V850 Options. (line 127)
@@ -49544,20 +50519,22 @@ look up both forms.
* mhard-dfp: RS/6000 and PowerPC Options.
(line 27)
* mhard-float <1>: V850 Options. (line 113)
-* mhard-float <2>: SPARC Options. (line 33)
+* mhard-float <2>: SPARC Options. (line 35)
* mhard-float <3>: S/390 and zSeries Options.
(line 11)
* mhard-float <4>: RS/6000 and PowerPC Options.
- (line 296)
+ (line 365)
* mhard-float <5>: MIPS Options. (line 227)
* mhard-float <6>: MicroBlaze Options. (line 10)
* mhard-float <7>: M680x0 Options. (line 197)
* mhard-float: FRV Options. (line 19)
-* mhard-quad-float: SPARC Options. (line 54)
+* mhard-quad-float: SPARC Options. (line 56)
* mhardlit: MCore Options. (line 10)
* mhint-max-distance: SPU Options. (line 102)
* mhint-max-nops: SPU Options. (line 96)
* mhitachi: SH Options. (line 100)
+* mhotpatch: S/390 and zSeries Options.
+ (line 174)
* mhp-ld: HPPA Options. (line 122)
* micplb: Blackfin Options. (line 178)
* mid-shared-library: Blackfin Options. (line 81)
@@ -49565,15 +50542,15 @@ look up both forms.
* mieee: DEC Alpha Options. (line 39)
* mieee-conformant: DEC Alpha Options. (line 134)
* mieee-fp: i386 and x86-64 Options.
- (line 281)
+ (line 287)
* mieee-with-inexact: DEC Alpha Options. (line 52)
* milp32: IA-64 Options. (line 121)
* mimpure-text: Solaris 2 Options. (line 9)
* mincoming-stack-boundary: i386 and x86-64 Options.
- (line 486)
+ (line 492)
* mindexed-addressing: SH Options. (line 350)
* minline-all-stringops: i386 and x86-64 Options.
- (line 759)
+ (line 765)
* minline-float-divide-max-throughput: IA-64 Options. (line 58)
* minline-float-divide-min-latency: IA-64 Options. (line 54)
* minline-ic_invalidate: SH Options. (line 125)
@@ -49584,15 +50561,15 @@ look up both forms.
* minline-sqrt-max-throughput: IA-64 Options. (line 80)
* minline-sqrt-min-latency: IA-64 Options. (line 76)
* minline-stringops-dynamically: i386 and x86-64 Options.
- (line 766)
+ (line 772)
* minsert-sched-nops: RS/6000 and PowerPC Options.
- (line 479)
+ (line 548)
* mint-register: RX Options. (line 100)
* mint16: PDP-11 Options. (line 40)
* mint32 <1>: PDP-11 Options. (line 44)
* mint32 <2>: H8/300 Options. (line 38)
* mint32: CR16 Options. (line 22)
-* mint8: AVR Options. (line 163)
+* mint8: AVR Options. (line 159)
* minterlink-mips16: MIPS Options. (line 118)
* minvalid-symbols: SH Options. (line 386)
* mio-volatile: MeP Options. (line 74)
@@ -49607,7 +50584,7 @@ look up both forms.
* mips64: MIPS Options. (line 96)
* mips64r2: MIPS Options. (line 99)
* misel: RS/6000 and PowerPC Options.
- (line 161)
+ (line 193)
* misize: SH Options. (line 137)
* missue-rate=NUMBER: M32R/D Options. (line 79)
* mivc2: MeP Options. (line 59)
@@ -49618,7 +50595,7 @@ look up both forms.
* ml: MeP Options. (line 78)
* mlarge-data: DEC Alpha Options. (line 187)
* mlarge-data-threshold: i386 and x86-64 Options.
- (line 372)
+ (line 378)
* mlarge-mem: SPU Options. (line 35)
* mlarge-text: DEC Alpha Options. (line 205)
* mleadz: MeP Options. (line 81)
@@ -49629,9 +50606,9 @@ look up both forms.
* mlinker-opt: HPPA Options. (line 84)
* mlinux: CRIS Options. (line 91)
* mlittle: RS/6000 and PowerPC Options.
- (line 428)
+ (line 497)
* mlittle-endian <1>: RS/6000 and PowerPC Options.
- (line 428)
+ (line 497)
* mlittle-endian <2>: MicroBlaze Options. (line 60)
* mlittle-endian <3>: MCore Options. (line 39)
* mlittle-endian <4>: IA-64 Options. (line 13)
@@ -49646,7 +50623,7 @@ look up both forms.
* mlong-calls <2>: MIPS Options. (line 468)
* mlong-calls <3>: FRV Options. (line 99)
* mlong-calls <4>: Blackfin Options. (line 121)
-* mlong-calls <5>: ARM Options. (line 188)
+* mlong-calls <5>: ARM Options. (line 189)
* mlong-calls: Adapteva Epiphany Options.
(line 55)
* mlong-double-128: S/390 and zSeries Options.
@@ -49654,15 +50631,15 @@ look up both forms.
* mlong-double-64 <1>: S/390 and zSeries Options.
(line 29)
* mlong-double-64: i386 and x86-64 Options.
- (line 361)
+ (line 367)
* mlong-double-80: i386 and x86-64 Options.
- (line 361)
+ (line 367)
* mlong-jumps: V850 Options. (line 108)
* mlong-load-store: HPPA Options. (line 65)
* mlong32: MIPS Options. (line 313)
* mlong64: MIPS Options. (line 308)
* mlongcall: RS/6000 and PowerPC Options.
- (line 676)
+ (line 757)
* mlongcalls: Xtensa Options. (line 72)
* mloop: V850 Options. (line 121)
* mlow-64k: Blackfin Options. (line 70)
@@ -49686,42 +50663,42 @@ look up both forms.
* mmemcpy <1>: MIPS Options. (line 462)
* mmemcpy: MicroBlaze Options. (line 13)
* mmemory-latency: DEC Alpha Options. (line 268)
-* mmemory-model: SPARC Options. (line 278)
+* mmemory-model: SPARC Options. (line 290)
* mmfcrf: RS/6000 and PowerPC Options.
(line 27)
* mmfpgpr: RS/6000 and PowerPC Options.
(line 27)
* mminimal-toc: RS/6000 and PowerPC Options.
- (line 218)
+ (line 287)
* mminmax: MeP Options. (line 87)
* mmmx: i386 and x86-64 Options.
- (line 565)
+ (line 571)
* mmodel=large: M32R/D Options. (line 33)
* mmodel=medium: M32R/D Options. (line 27)
* mmodel=small: M32R/D Options. (line 18)
* mmovbe: i386 and x86-64 Options.
- (line 631)
+ (line 637)
* mmt: MIPS Options. (line 301)
* mmul: RL78 Options. (line 13)
* mmul-bug-workaround: CRIS Options. (line 31)
* mmuladd: FRV Options. (line 50)
* mmulhw: RS/6000 and PowerPC Options.
- (line 372)
+ (line 441)
* mmult: MeP Options. (line 90)
* mmult-bug: MN10300 Options. (line 9)
* mmulti-cond-exec: FRV Options. (line 176)
* mmulticore: Blackfin Options. (line 142)
* mmultiple: RS/6000 and PowerPC Options.
- (line 322)
+ (line 391)
* mmvcle: S/390 and zSeries Options.
(line 105)
* mmvme: RS/6000 and PowerPC Options.
- (line 580)
+ (line 661)
* mn: H8/300 Options. (line 20)
* mnested-cond-exec: FRV Options. (line 189)
* mnhwloop: Score Options. (line 15)
* mno-3dnow: i386 and x86-64 Options.
- (line 565)
+ (line 571)
* mno-4byte-functions: MCore Options. (line 27)
* mno-8byte-align: V850 Options. (line 170)
* mno-abicalls: MIPS Options. (line 155)
@@ -49729,31 +50706,31 @@ look up both forms.
* mno-ac0: PDP-11 Options. (line 20)
* mno-address-space-conversion: SPU Options. (line 63)
* mno-align-double: i386 and x86-64 Options.
- (line 320)
+ (line 326)
* mno-align-int: M680x0 Options. (line 267)
* mno-align-loops: M32R/D Options. (line 76)
* mno-align-stringops: i386 and x86-64 Options.
- (line 754)
+ (line 760)
* mno-altivec: RS/6000 and PowerPC Options.
- (line 132)
+ (line 134)
* mno-am33: MN10300 Options. (line 20)
* mno-app-regs <1>: V850 Options. (line 185)
* mno-app-regs: SPARC Options. (line 10)
* mno-as100-syntax: RX Options. (line 76)
* mno-atomic-updates: SPU Options. (line 78)
* mno-avoid-indexed-addresses: RS/6000 and PowerPC Options.
- (line 354)
+ (line 423)
* mno-backchain: S/390 and zSeries Options.
(line 35)
* mno-base-addresses: MMIX Options. (line 54)
* mno-bit-align: RS/6000 and PowerPC Options.
- (line 386)
+ (line 455)
* mno-bitfield: M680x0 Options. (line 231)
* mno-branch-likely: MIPS Options. (line 642)
* mno-branch-predict: MMIX Options. (line 49)
* mno-bwx: DEC Alpha Options. (line 163)
* mno-callgraph-data: MCore Options. (line 31)
-* mno-cbcond: SPARC Options. (line 216)
+* mno-cbcond: SPARC Options. (line 224)
* mno-check-zero-division: MIPS Options. (line 441)
* mno-cix: DEC Alpha Options. (line 163)
* mno-clearbss: MicroBlaze Options. (line 16)
@@ -49765,22 +50742,26 @@ look up both forms.
* mno-const16: Xtensa Options. (line 10)
* mno-crt0 <1>: Moxie Options. (line 14)
* mno-crt0: MN10300 Options. (line 43)
+* mno-crypto: RS/6000 and PowerPC Options.
+ (line 222)
* mno-csync-anomaly: Blackfin Options. (line 66)
* mno-data-align: CRIS Options. (line 55)
* mno-debug: S/390 and zSeries Options.
(line 112)
+* mno-direct-move: RS/6000 and PowerPC Options.
+ (line 228)
* mno-disable-callt: V850 Options. (line 92)
* mno-div <1>: MCore Options. (line 15)
* mno-div: M680x0 Options. (line 209)
* mno-dlmzb: RS/6000 and PowerPC Options.
- (line 379)
+ (line 448)
* mno-double: FRV Options. (line 41)
* mno-dsp: MIPS Options. (line 267)
* mno-dspr2: MIPS Options. (line 273)
* mno-dwarf2-asm: IA-64 Options. (line 94)
* mno-dword: FRV Options. (line 35)
* mno-eabi: RS/6000 and PowerPC Options.
- (line 604)
+ (line 685)
* mno-early-stop-bits: IA-64 Options. (line 100)
* mno-eflags: FRV Options. (line 125)
* mno-embedded-data: MIPS Options. (line 388)
@@ -49791,28 +50772,28 @@ look up both forms.
* mno-exr: H8/300 Options. (line 33)
* mno-extern-sdata: MIPS Options. (line 350)
* mno-fancy-math-387: i386 and x86-64 Options.
- (line 309)
-* mno-faster-structs: SPARC Options. (line 84)
+ (line 315)
+* mno-faster-structs: SPARC Options. (line 92)
* mno-fix: DEC Alpha Options. (line 163)
* mno-fix-24k: MIPS Options. (line 500)
* mno-fix-r10000: MIPS Options. (line 527)
* mno-fix-r4000: MIPS Options. (line 506)
* mno-fix-r4400: MIPS Options. (line 520)
-* mno-flat: SPARC Options. (line 20)
+* mno-flat: SPARC Options. (line 22)
* mno-float: MIPS Options. (line 234)
* mno-float32: PDP-11 Options. (line 48)
* mno-float64: PDP-11 Options. (line 52)
* mno-flush-func: M32R/D Options. (line 98)
* mno-flush-trap: M32R/D Options. (line 90)
-* mno-fmaf: SPARC Options. (line 230)
+* mno-fmaf: SPARC Options. (line 238)
* mno-fp-in-toc: RS/6000 and PowerPC Options.
- (line 218)
+ (line 287)
* mno-fp-regs: DEC Alpha Options. (line 25)
* mno-fp-ret-in-387: i386 and x86-64 Options.
- (line 299)
+ (line 305)
* mno-fprnd: RS/6000 and PowerPC Options.
(line 27)
-* mno-fpu: SPARC Options. (line 38)
+* mno-fpu: SPARC Options. (line 40)
* mno-fsca: SH Options. (line 428)
* mno-fsrra: SH Options. (line 437)
* mno-fused-madd <1>: Xtensa Options. (line 19)
@@ -49820,7 +50801,7 @@ look up both forms.
* mno-fused-madd <3>: S/390 and zSeries Options.
(line 137)
* mno-fused-madd <4>: RS/6000 and PowerPC Options.
- (line 363)
+ (line 432)
* mno-fused-madd <5>: MIPS Options. (line 482)
* mno-fused-madd: IA-64 Options. (line 88)
* mno-gnu-as: IA-64 Options. (line 18)
@@ -49834,16 +50815,16 @@ look up both forms.
* mno-hardlit: MCore Options. (line 10)
* mno-id-shared-library: Blackfin Options. (line 88)
* mno-ieee-fp: i386 and x86-64 Options.
- (line 281)
+ (line 287)
* mno-inline-float-divide: IA-64 Options. (line 62)
* mno-inline-int-divide: IA-64 Options. (line 73)
* mno-inline-sqrt: IA-64 Options. (line 84)
* mno-int16: PDP-11 Options. (line 44)
* mno-int32: PDP-11 Options. (line 40)
* mno-interlink-mips16: MIPS Options. (line 118)
-* mno-interrupts: AVR Options. (line 169)
+* mno-interrupts: AVR Options. (line 165)
* mno-isel: RS/6000 and PowerPC Options.
- (line 161)
+ (line 193)
* mno-knuthdiv: MMIX Options. (line 33)
* mno-leaf-id-shared-library: Blackfin Options. (line 98)
* mno-libfuncs: MMIX Options. (line 10)
@@ -49853,10 +50834,10 @@ look up both forms.
* mno-long-calls <2>: MIPS Options. (line 468)
* mno-long-calls <3>: HPPA Options. (line 135)
* mno-long-calls <4>: Blackfin Options. (line 121)
-* mno-long-calls: ARM Options. (line 188)
+* mno-long-calls: ARM Options. (line 189)
* mno-long-jumps: V850 Options. (line 108)
* mno-longcall: RS/6000 and PowerPC Options.
- (line 676)
+ (line 757)
* mno-longcalls: Xtensa Options. (line 72)
* mno-low-64k: Blackfin Options. (line 74)
* mno-lsim <1>: MCore Options. (line 46)
@@ -49875,16 +50856,16 @@ look up both forms.
* mno-mips16: MIPS Options. (line 103)
* mno-mips3d: MIPS Options. (line 296)
* mno-mmx: i386 and x86-64 Options.
- (line 565)
+ (line 571)
* mno-mt: MIPS Options. (line 301)
* mno-mul-bug-workaround: CRIS Options. (line 31)
* mno-muladd: FRV Options. (line 53)
* mno-mulhw: RS/6000 and PowerPC Options.
- (line 372)
+ (line 441)
* mno-mult-bug: MN10300 Options. (line 13)
* mno-multi-cond-exec: FRV Options. (line 183)
* mno-multiple: RS/6000 and PowerPC Options.
- (line 322)
+ (line 391)
* mno-mvcle: S/390 and zSeries Options.
(line 105)
* mno-nested-cond-exec: FRV Options. (line 195)
@@ -49895,12 +50876,12 @@ look up both forms.
* mno-packed-stack: S/390 and zSeries Options.
(line 54)
* mno-paired: RS/6000 and PowerPC Options.
- (line 175)
+ (line 207)
* mno-paired-single: MIPS Options. (line 284)
* mno-pic: IA-64 Options. (line 26)
* mno-pid: RX Options. (line 117)
* mno-plt: MIPS Options. (line 182)
-* mno-popc: SPARC Options. (line 223)
+* mno-popc: SPARC Options. (line 231)
* mno-popcntb: RS/6000 and PowerPC Options.
(line 27)
* mno-popcntd: RS/6000 and PowerPC Options.
@@ -49909,6 +50890,10 @@ look up both forms.
(line 110)
* mno-postmodify: Adapteva Epiphany Options.
(line 110)
+* mno-power8-fusion: RS/6000 and PowerPC Options.
+ (line 234)
+* mno-power8-vector: RS/6000 and PowerPC Options.
+ (line 240)
* mno-powerpc-gfxopt: RS/6000 and PowerPC Options.
(line 27)
* mno-powerpc-gpopt: RS/6000 and PowerPC Options.
@@ -49918,20 +50903,24 @@ look up both forms.
* mno-prolog-function: V850 Options. (line 23)
* mno-prologue-epilogue: CRIS Options. (line 71)
* mno-prototype: RS/6000 and PowerPC Options.
- (line 564)
+ (line 645)
* mno-push-args: i386 and x86-64 Options.
- (line 731)
+ (line 737)
+* mno-quad-memory: RS/6000 and PowerPC Options.
+ (line 247)
+* mno-quad-memory-atomic: RS/6000 and PowerPC Options.
+ (line 253)
* mno-red-zone: i386 and x86-64 Options.
- (line 848)
+ (line 854)
* mno-register-names: IA-64 Options. (line 37)
* mno-regnames: RS/6000 and PowerPC Options.
- (line 670)
+ (line 751)
* mno-relax: V850 Options. (line 103)
* mno-relax-immediate: MCore Options. (line 19)
* mno-relocatable: RS/6000 and PowerPC Options.
- (line 402)
+ (line 471)
* mno-relocatable-lib: RS/6000 and PowerPC Options.
- (line 413)
+ (line 482)
* mno-round-nearest: Adapteva Epiphany Options.
(line 51)
* mno-rtd: M680x0 Options. (line 262)
@@ -49947,7 +50936,7 @@ look up both forms.
* mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 168)
* mno-sched-prolog: ARM Options. (line 33)
* mno-sdata <1>: RS/6000 and PowerPC Options.
- (line 651)
+ (line 732)
* mno-sdata: IA-64 Options. (line 42)
* mno-sep-data: Blackfin Options. (line 116)
* mno-serialize-volatile: Xtensa Options. (line 35)
@@ -49964,53 +50953,54 @@ look up both forms.
* mno-soft-float: DEC Alpha Options. (line 10)
* mno-space-regs: HPPA Options. (line 44)
* mno-spe: RS/6000 and PowerPC Options.
- (line 170)
+ (line 202)
* mno-specld-anomaly: Blackfin Options. (line 56)
* mno-split-addresses: MIPS Options. (line 426)
* mno-sse: i386 and x86-64 Options.
- (line 565)
+ (line 571)
* mno-stack-align: CRIS Options. (line 55)
-* mno-stack-bias: SPARC Options. (line 302)
+* mno-stack-bias: SPARC Options. (line 314)
* mno-strict-align <1>: RS/6000 and PowerPC Options.
- (line 397)
+ (line 466)
* mno-strict-align: M680x0 Options. (line 287)
* mno-string: RS/6000 and PowerPC Options.
- (line 333)
+ (line 402)
* mno-sum-in-toc: RS/6000 and PowerPC Options.
- (line 218)
+ (line 287)
* mno-sym32: MIPS Options. (line 323)
* mno-target-align: Xtensa Options. (line 59)
* mno-text-section-literals: Xtensa Options. (line 47)
* mno-tls-markers: RS/6000 and PowerPC Options.
- (line 709)
+ (line 790)
* mno-toc: RS/6000 and PowerPC Options.
- (line 422)
+ (line 491)
* mno-toplevel-symbols: MMIX Options. (line 40)
* mno-tpf-trace: S/390 and zSeries Options.
(line 131)
-* mno-unaligned-access: ARM Options. (line 309)
-* mno-unaligned-doubles: SPARC Options. (line 72)
+* mno-unaligned-access: ARM Options. (line 313)
+* mno-unaligned-doubles: SPARC Options. (line 74)
* mno-uninit-const-in-rodata: MIPS Options. (line 396)
* mno-update: RS/6000 and PowerPC Options.
- (line 344)
-* mno-v8plus: SPARC Options. (line 187)
+ (line 413)
+* mno-user-mode: SPARC Options. (line 86)
+* mno-v8plus: SPARC Options. (line 195)
* mno-vect-double: Adapteva Epiphany Options.
(line 116)
-* mno-vis: SPARC Options. (line 194)
-* mno-vis2: SPARC Options. (line 200)
-* mno-vis3: SPARC Options. (line 208)
+* mno-vis: SPARC Options. (line 202)
+* mno-vis2: SPARC Options. (line 208)
+* mno-vis3: SPARC Options. (line 216)
* mno-vliw-branch: FRV Options. (line 170)
* mno-volatile-asm-stop: IA-64 Options. (line 32)
* mno-vrsave: RS/6000 and PowerPC Options.
- (line 140)
+ (line 172)
* mno-vsx: RS/6000 and PowerPC Options.
- (line 184)
+ (line 216)
* mno-warn-multiple-fast-interrupts: RX Options. (line 143)
* mno-wide-bitfields: MCore Options. (line 23)
* mno-xgot <1>: MIPS Options. (line 192)
* mno-xgot: M680x0 Options. (line 319)
* mno-xl-compat: RS/6000 and PowerPC Options.
- (line 253)
+ (line 322)
* mno-zdcbranch: SH Options. (line 403)
* mno-zero-extend: MMIX Options. (line 27)
* mnobitfield: M680x0 Options. (line 231)
@@ -50025,7 +51015,7 @@ look up both forms.
* mnosplit-lohi: Adapteva Epiphany Options.
(line 110)
* momit-leaf-frame-pointer <1>: i386 and x86-64 Options.
- (line 788)
+ (line 794)
* momit-leaf-frame-pointer <2>: Blackfin Options. (line 44)
* momit-leaf-frame-pointer: AArch64 Options. (line 43)
* mone-byte-bool: Darwin Options. (line 90)
@@ -50040,32 +51030,36 @@ look up both forms.
(line 54)
* mpadstruct: SH Options. (line 140)
* mpaired: RS/6000 and PowerPC Options.
- (line 175)
+ (line 207)
* mpaired-single: MIPS Options. (line 284)
* mpc32: i386 and x86-64 Options.
- (line 435)
+ (line 441)
* mpc64: i386 and x86-64 Options.
- (line 435)
+ (line 441)
* mpc80: i386 and x86-64 Options.
- (line 435)
+ (line 441)
* mpcrel: M680x0 Options. (line 279)
* mpdebug: CRIS Options. (line 35)
* mpe: RS/6000 and PowerPC Options.
- (line 273)
+ (line 342)
* mpe-aligned-commons: i386 and x86-64 Windows Options.
(line 59)
-* mpic-register: ARM Options. (line 218)
+* mpic-register: ARM Options. (line 219)
* mpid: RX Options. (line 117)
* mplt: MIPS Options. (line 182)
* mpointers-to-nested-functions: RS/6000 and PowerPC Options.
- (line 793)
-* mpoke-function-name: ARM Options. (line 222)
-* mpopc: SPARC Options. (line 223)
+ (line 874)
+* mpoke-function-name: ARM Options. (line 226)
+* mpopc: SPARC Options. (line 231)
* mpopcntb: RS/6000 and PowerPC Options.
(line 27)
* mpopcntd: RS/6000 and PowerPC Options.
(line 27)
* mportable-runtime: HPPA Options. (line 70)
+* mpower8-fusion: RS/6000 and PowerPC Options.
+ (line 234)
+* mpower8-vector: RS/6000 and PowerPC Options.
+ (line 240)
* mpowerpc-gfxopt: RS/6000 and PowerPC Options.
(line 27)
* mpowerpc-gpopt: RS/6000 and PowerPC Options.
@@ -50073,52 +51067,56 @@ look up both forms.
* mpowerpc64: RS/6000 and PowerPC Options.
(line 27)
* mprefer-avx128: i386 and x86-64 Options.
- (line 608)
+ (line 614)
* mprefer-short-insn-regs: Adapteva Epiphany Options.
(line 13)
* mprefergot: SH Options. (line 225)
* mpreferred-stack-boundary: i386 and x86-64 Options.
- (line 465)
+ (line 471)
* mpretend-cmove: SH Options. (line 446)
* mprioritize-restricted-insns: RS/6000 and PowerPC Options.
- (line 451)
+ (line 520)
* mprolog-function: V850 Options. (line 23)
* mprologue-epilogue: CRIS Options. (line 71)
* mprototype: RS/6000 and PowerPC Options.
- (line 564)
+ (line 645)
* mpt-fixed: SH Options. (line 364)
* mpush-args: i386 and x86-64 Options.
- (line 731)
+ (line 737)
* MQ: Preprocessor Options.
(line 265)
+* mquad-memory: RS/6000 and PowerPC Options.
+ (line 247)
+* mquad-memory-atomic: RS/6000 and PowerPC Options.
+ (line 253)
* mr10k-cache-barrier: MIPS Options. (line 564)
* mrecip <1>: RS/6000 and PowerPC Options.
- (line 721)
+ (line 802)
* mrecip: i386 and x86-64 Options.
- (line 641)
+ (line 647)
* mrecip-precision: RS/6000 and PowerPC Options.
- (line 757)
+ (line 838)
* mrecip=opt <1>: RS/6000 and PowerPC Options.
- (line 734)
+ (line 815)
* mrecip=opt: i386 and x86-64 Options.
- (line 663)
+ (line 669)
* mregister-names: IA-64 Options. (line 37)
* mregnames: RS/6000 and PowerPC Options.
- (line 670)
+ (line 751)
* mregparm: i386 and x86-64 Options.
- (line 402)
+ (line 408)
* mrelax <1>: V850 Options. (line 103)
* mrelax <2>: SH Options. (line 85)
* mrelax <3>: RX Options. (line 95)
* mrelax <4>: MN10300 Options. (line 46)
* mrelax <5>: H8/300 Options. (line 9)
-* mrelax: AVR Options. (line 173)
+* mrelax: AVR Options. (line 169)
* mrelax-immediate: MCore Options. (line 19)
* mrelax-pic-calls: MIPS Options. (line 689)
* mrelocatable: RS/6000 and PowerPC Options.
- (line 402)
+ (line 471)
* mrelocatable-lib: RS/6000 and PowerPC Options.
- (line 413)
+ (line 482)
* mrepeat: MeP Options. (line 96)
* mreturn-pointer-on-d0: MN10300 Options. (line 36)
* mrh850-abi: V850 Options. (line 127)
@@ -50126,7 +51124,7 @@ look up both forms.
(line 177)
* mrtd <2>: M680x0 Options. (line 240)
* mrtd: i386 and x86-64 Options.
- (line 378)
+ (line 384)
* mrtp: VxWorks Options. (line 11)
* ms <1>: MeP Options. (line 100)
* ms: H8/300 Options. (line 17)
@@ -50134,11 +51132,11 @@ look up both forms.
* msafe-dma: SPU Options. (line 17)
* msafe-hints: SPU Options. (line 107)
* msahf: i386 and x86-64 Options.
- (line 621)
+ (line 627)
* msatur: MeP Options. (line 105)
* msave-acc-in-interrupts: RX Options. (line 109)
* msave-toc-indirect: RS/6000 and PowerPC Options.
- (line 805)
+ (line 886)
* mscc: FRV Options. (line 140)
* msched-ar-data-spec: IA-64 Options. (line 134)
* msched-ar-in-data-spec: IA-64 Options. (line 155)
@@ -50146,7 +51144,7 @@ look up both forms.
* msched-br-in-data-spec: IA-64 Options. (line 148)
* msched-control-spec: IA-64 Options. (line 140)
* msched-costly-dep: RS/6000 and PowerPC Options.
- (line 458)
+ (line 527)
* msched-count-spec-in-critical-path: IA-64 Options. (line 182)
* msched-fp-mem-deps-zero-cost: IA-64 Options. (line 198)
* msched-in-control-spec: IA-64 Options. (line 162)
@@ -50163,28 +51161,28 @@ look up both forms.
* mscore7d: Score Options. (line 34)
* msda: V850 Options. (line 40)
* msdata <1>: RS/6000 and PowerPC Options.
- (line 638)
+ (line 719)
* msdata: IA-64 Options. (line 42)
* msdata=all: C6X Options. (line 30)
* msdata=data: RS/6000 and PowerPC Options.
- (line 643)
+ (line 724)
* msdata=default <1>: RS/6000 and PowerPC Options.
- (line 638)
+ (line 719)
* msdata=default: C6X Options. (line 22)
* msdata=eabi: RS/6000 and PowerPC Options.
- (line 618)
+ (line 699)
* msdata=none <1>: RS/6000 and PowerPC Options.
- (line 651)
+ (line 732)
* msdata=none <2>: M32R/D Options. (line 40)
* msdata=none: C6X Options. (line 35)
* msdata=sdata: M32R/D Options. (line 49)
* msdata=sysv: RS/6000 and PowerPC Options.
- (line 629)
+ (line 710)
* msdata=use: M32R/D Options. (line 53)
* msdram <1>: MeP Options. (line 110)
* msdram: Blackfin Options. (line 172)
* msecure-plt: RS/6000 and PowerPC Options.
- (line 150)
+ (line 182)
* msel-sched-dont-check-control-spec: IA-64 Options. (line 203)
* msep-data: Blackfin Options. (line 110)
* mserialize-volatile: Xtensa Options. (line 35)
@@ -50195,7 +51193,7 @@ look up both forms.
* msim <1>: Xstormy16 Options. (line 9)
* msim <2>: RX Options. (line 71)
* msim <3>: RS/6000 and PowerPC Options.
- (line 574)
+ (line 655)
* msim <4>: RL78 Options. (line 7)
* msim <5>: MeP Options. (line 114)
* msim <6>: M32C Options. (line 13)
@@ -50204,14 +51202,14 @@ look up both forms.
* msim: Blackfin Options. (line 37)
* msimnovec: MeP Options. (line 117)
* msimple-fpu: RS/6000 and PowerPC Options.
- (line 306)
+ (line 375)
* msingle-exit: MMIX Options. (line 66)
* msingle-float <1>: RS/6000 and PowerPC Options.
- (line 302)
+ (line 371)
* msingle-float: MIPS Options. (line 244)
* msingle-pic-base <1>: RS/6000 and PowerPC Options.
- (line 445)
-* msingle-pic-base: ARM Options. (line 212)
+ (line 514)
+* msingle-pic-base: ARM Options. (line 213)
* msio: HPPA Options. (line 104)
* mslow-bytes: MCore Options. (line 35)
* msmall-data: DEC Alpha Options. (line 187)
@@ -50226,38 +51224,38 @@ look up both forms.
(line 67)
* msmartmips: MIPS Options. (line 280)
* msoft-float <1>: V850 Options. (line 113)
-* msoft-float <2>: SPARC Options. (line 38)
+* msoft-float <2>: SPARC Options. (line 40)
* msoft-float <3>: S/390 and zSeries Options.
(line 11)
* msoft-float <4>: RS/6000 and PowerPC Options.
- (line 296)
+ (line 365)
* msoft-float <5>: PDP-11 Options. (line 13)
* msoft-float <6>: MIPS Options. (line 230)
* msoft-float <7>: MicroBlaze Options. (line 7)
* msoft-float <8>: M680x0 Options. (line 203)
* msoft-float <9>: i386 and x86-64 Options.
- (line 286)
+ (line 292)
* msoft-float <10>: HPPA Options. (line 90)
* msoft-float <11>: FRV Options. (line 22)
* msoft-float: DEC Alpha Options. (line 10)
-* msoft-quad-float: SPARC Options. (line 58)
-* msp8: AVR Options. (line 187)
+* msoft-quad-float: SPARC Options. (line 60)
+* msp8: AVR Options. (line 183)
* mspace <1>: V850 Options. (line 30)
* mspace: SH Options. (line 222)
* mspe: RS/6000 and PowerPC Options.
- (line 170)
+ (line 202)
* mspecld-anomaly: Blackfin Options. (line 51)
* msplit-addresses: MIPS Options. (line 426)
* msplit-vecmove-early: Adapteva Epiphany Options.
(line 127)
* msse: i386 and x86-64 Options.
- (line 565)
+ (line 571)
* msse2avx: i386 and x86-64 Options.
- (line 806)
+ (line 812)
* msseregparm: i386 and x86-64 Options.
- (line 413)
+ (line 419)
* mstack-align: CRIS Options. (line 55)
-* mstack-bias: SPARC Options. (line 302)
+* mstack-bias: SPARC Options. (line 314)
* mstack-check-l1: Blackfin Options. (line 77)
* mstack-guard: S/390 and zSeries Options.
(line 156)
@@ -50267,20 +51265,20 @@ look up both forms.
* mstack-size: S/390 and zSeries Options.
(line 156)
* mstackrealign: i386 and x86-64 Options.
- (line 456)
+ (line 462)
* mstdmain: SPU Options. (line 40)
* mstrict-align <1>: RS/6000 and PowerPC Options.
- (line 397)
+ (line 466)
* mstrict-align <2>: M680x0 Options. (line 287)
* mstrict-align: AArch64 Options. (line 38)
-* mstrict-X: AVR Options. (line 200)
+* mstrict-X: AVR Options. (line 196)
* mstring: RS/6000 and PowerPC Options.
- (line 333)
+ (line 402)
* mstringop-strategy=ALG: i386 and x86-64 Options.
- (line 770)
-* mstructure-size-boundary: ARM Options. (line 169)
+ (line 776)
+* mstructure-size-boundary: ARM Options. (line 170)
* msvr4-struct-return: RS/6000 and PowerPC Options.
- (line 538)
+ (line 607)
* msym32: MIPS Options. (line 323)
* msynci: MIPS Options. (line 674)
* MT: Preprocessor Options.
@@ -50293,47 +51291,47 @@ look up both forms.
* mthread: i386 and x86-64 Windows Options.
(line 26)
* mthreads: i386 and x86-64 Options.
- (line 746)
-* mthumb: ARM Options. (line 244)
+ (line 752)
+* mthumb: ARM Options. (line 248)
* mthumb-interwork: ARM Options. (line 25)
-* mtiny-stack: AVR Options. (line 214)
+* mtiny-stack: AVR Options. (line 210)
* mtiny=: MeP Options. (line 125)
* mtls: FRV Options. (line 75)
* mTLS: FRV Options. (line 72)
* mtls-dialect <1>: i386 and x86-64 Options.
- (line 724)
-* mtls-dialect: ARM Options. (line 285)
+ (line 730)
+* mtls-dialect: ARM Options. (line 289)
* mtls-dialect=desc: AArch64 Options. (line 47)
* mtls-dialect=traditional: AArch64 Options. (line 51)
* mtls-direct-seg-refs: i386 and x86-64 Options.
- (line 796)
+ (line 802)
* mtls-markers: RS/6000 and PowerPC Options.
- (line 709)
+ (line 790)
* mtls-size: IA-64 Options. (line 112)
* mtoc: RS/6000 and PowerPC Options.
- (line 422)
+ (line 491)
* mtomcat-stats: FRV Options. (line 209)
* mtoplevel-symbols: MMIX Options. (line 40)
-* mtp: ARM Options. (line 277)
-* mtpcs-frame: ARM Options. (line 250)
-* mtpcs-leaf-frame: ARM Options. (line 256)
+* mtp: ARM Options. (line 281)
+* mtpcs-frame: ARM Options. (line 254)
+* mtpcs-leaf-frame: ARM Options. (line 260)
* mtpf-trace: S/390 and zSeries Options.
(line 131)
* mtrap-precision: DEC Alpha Options. (line 109)
-* mtune <1>: SPARC Options. (line 173)
+* mtune <1>: SPARC Options. (line 181)
* mtune <2>: S/390 and zSeries Options.
(line 124)
* mtune <3>: RS/6000 and PowerPC Options.
- (line 110)
+ (line 112)
* mtune <4>: MN10300 Options. (line 30)
* mtune <5>: MIPS Options. (line 63)
* mtune <6>: M680x0 Options. (line 70)
* mtune <7>: IA-64 Options. (line 116)
* mtune <8>: i386 and x86-64 Options.
- (line 189)
+ (line 195)
* mtune <9>: DEC Alpha Options. (line 259)
* mtune <10>: CRIS Options. (line 16)
-* mtune <11>: ARM Options. (line 105)
+* mtune <11>: ARM Options. (line 90)
* mtune: AArch64 Options. (line 82)
* muclibc: GNU/Linux Options. (line 13)
* muls: Score Options. (line 18)
@@ -50343,8 +51341,8 @@ look up both forms.
* multiply-enabled: LM32 Options. (line 15)
* multiply_defined: Darwin Options. (line 196)
* multiply_defined_unused: Darwin Options. (line 196)
-* munaligned-access: ARM Options. (line 309)
-* munaligned-doubles: SPARC Options. (line 72)
+* munaligned-access: ARM Options. (line 313)
+* munaligned-doubles: SPARC Options. (line 74)
* municode: i386 and x86-64 Windows Options.
(line 30)
* muninit-const-in-rodata: MIPS Options. (line 396)
@@ -50352,8 +51350,9 @@ look up both forms.
* munix-asm: PDP-11 Options. (line 68)
* munsafe-dma: SPU Options. (line 17)
* mupdate: RS/6000 and PowerPC Options.
- (line 344)
+ (line 413)
* muser-enabled: LM32 Options. (line 21)
+* muser-mode: SPARC Options. (line 86)
* musermode: SH Options. (line 230)
* mv850: V850 Options. (line 49)
* mv850e: V850 Options. (line 79)
@@ -50363,30 +51362,30 @@ look up both forms.
* mv850e2v4: V850 Options. (line 57)
* mv850e3v5: V850 Options. (line 52)
* mv850es: V850 Options. (line 75)
-* mv8plus: SPARC Options. (line 187)
+* mv8plus: SPARC Options. (line 195)
* mveclibabi <1>: RS/6000 and PowerPC Options.
- (line 766)
+ (line 847)
* mveclibabi: i386 and x86-64 Options.
- (line 692)
+ (line 698)
* mvect8-ret-in-mem: i386 and x86-64 Options.
- (line 423)
-* mvis: SPARC Options. (line 194)
-* mvis2: SPARC Options. (line 200)
-* mvis3: SPARC Options. (line 208)
+ (line 429)
+* mvis: SPARC Options. (line 202)
+* mvis2: SPARC Options. (line 208)
+* mvis3: SPARC Options. (line 216)
* mvliw-branch: FRV Options. (line 164)
* mvms-return-codes: VMS Options. (line 9)
* mvolatile-asm-stop: IA-64 Options. (line 32)
* mvr4130-align: MIPS Options. (line 663)
* mvrsave: RS/6000 and PowerPC Options.
- (line 140)
+ (line 172)
* mvsx: RS/6000 and PowerPC Options.
- (line 184)
+ (line 216)
* mvxworks: RS/6000 and PowerPC Options.
- (line 595)
+ (line 676)
* mvzeroupper: i386 and x86-64 Options.
- (line 602)
+ (line 608)
* mwarn-cell-microcode: RS/6000 and PowerPC Options.
- (line 146)
+ (line 178)
* mwarn-dynamicstack: S/390 and zSeries Options.
(line 150)
* mwarn-framesize: S/390 and zSeries Options.
@@ -50398,17 +51397,17 @@ look up both forms.
(line 35)
* mwindows: i386 and x86-64 Windows Options.
(line 41)
-* mword-relocations: ARM Options. (line 296)
+* mword-relocations: ARM Options. (line 300)
* mwords-little-endian: ARM Options. (line 66)
* mx32: i386 and x86-64 Options.
- (line 835)
+ (line 841)
* mxgot <1>: MIPS Options. (line 192)
* mxgot: M680x0 Options. (line 319)
* mxilinx-fpu: RS/6000 and PowerPC Options.
- (line 317)
+ (line 386)
* mxl-barrel-shift: MicroBlaze Options. (line 33)
* mxl-compat: RS/6000 and PowerPC Options.
- (line 253)
+ (line 322)
* mxl-float-convert: MicroBlaze Options. (line 51)
* mxl-float-sqrt: MicroBlaze Options. (line 54)
* mxl-gp-opt: MicroBlaze Options. (line 45)
@@ -50419,7 +51418,7 @@ look up both forms.
* mxl-soft-mul: MicroBlaze Options. (line 27)
* mxl-stack-check: MicroBlaze Options. (line 42)
* myellowknife: RS/6000 and PowerPC Options.
- (line 590)
+ (line 671)
* mzarch: S/390 and zSeries Options.
(line 95)
* mzda: V850 Options. (line 45)
@@ -50500,7 +51499,7 @@ look up both forms.
* private_bundle: Darwin Options. (line 196)
* pthread <1>: Solaris 2 Options. (line 31)
* pthread: RS/6000 and PowerPC Options.
- (line 716)
+ (line 797)
* pthreads: Solaris 2 Options. (line 25)
* Q: Debugging Options. (line 340)
* Qn: System V Options. (line 18)
@@ -50587,7 +51586,7 @@ look up both forms.
* Wa: Assembler Options. (line 9)
* Wabi: C++ Dialect Options.
(line 362)
-* Waddr-space-convert: AVR Options. (line 217)
+* Waddr-space-convert: AVR Options. (line 213)
* Waddress: Warning Options. (line 1177)
* Waggregate-return: Warning Options. (line 1195)
* Waggressive-loop-optimizations: Warning Options. (line 1200)
@@ -50992,7 +51991,7 @@ Keyword Index
* #pragma implementation, implied: C++ Interface. (line 46)
* #pragma interface: C++ Interface. (line 20)
* #pragma, reason for not using: Function Attributes.
- (line 1870)
+ (line 1878)
* $: Dollar Signs. (line 6)
* % in constraint: Modifiers. (line 45)
* %include: Spec Files. (line 27)
@@ -51010,7 +52009,7 @@ Keyword Index
* -nodefaultlibs and unresolved references: Link Options. (line 85)
* -nostdlib and unresolved references: Link Options. (line 85)
* .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options.
- (line 662)
+ (line 743)
* //: C++ Comments. (line 6)
* 0 in constraint: Simple Constraints. (line 127)
* < in constraint: Simple Constraints. (line 48)
@@ -51021,9 +52020,9 @@ Keyword Index
* ?: side effect: Conditionals. (line 20)
* _ in variables in macros: Typeof. (line 46)
* __atomic_add_fetch: __atomic Builtins. (line 169)
-* __atomic_always_lock_free: __atomic Builtins. (line 242)
+* __atomic_always_lock_free: __atomic Builtins. (line 247)
* __atomic_and_fetch: __atomic Builtins. (line 173)
-* __atomic_clear: __atomic Builtins. (line 219)
+* __atomic_clear: __atomic Builtins. (line 221)
* __atomic_compare_exchange: __atomic Builtins. (line 161)
* __atomic_compare_exchange_n: __atomic Builtins. (line 138)
* __atomic_exchange: __atomic Builtins. (line 130)
@@ -51034,17 +52033,17 @@ Keyword Index
* __atomic_fetch_or: __atomic Builtins. (line 197)
* __atomic_fetch_sub: __atomic Builtins. (line 191)
* __atomic_fetch_xor: __atomic Builtins. (line 195)
-* __atomic_is_lock_free: __atomic Builtins. (line 256)
+* __atomic_is_lock_free: __atomic Builtins. (line 261)
* __atomic_load: __atomic Builtins. (line 98)
* __atomic_load_n: __atomic Builtins. (line 89)
* __atomic_nand_fetch: __atomic Builtins. (line 179)
* __atomic_or_fetch: __atomic Builtins. (line 177)
-* __atomic_signal_fence: __atomic Builtins. (line 234)
+* __atomic_signal_fence: __atomic Builtins. (line 239)
* __atomic_store: __atomic Builtins. (line 113)
* __atomic_store_n: __atomic Builtins. (line 104)
* __atomic_sub_fetch: __atomic Builtins. (line 171)
* __atomic_test_and_set: __atomic Builtins. (line 210)
-* __atomic_thread_fence: __atomic Builtins. (line 227)
+* __atomic_thread_fence: __atomic Builtins. (line 232)
* __atomic_xor_fetch: __atomic Builtins. (line 175)
* __builtin___clear_cache: Other Builtins. (line 372)
* __builtin___fprintf_chk: Object Size Checking.
@@ -51146,6 +52145,8 @@ Keyword Index
* __builtin_nans: Other Builtins. (line 509)
* __builtin_nansf: Other Builtins. (line 513)
* __builtin_nansl: Other Builtins. (line 516)
+* __builtin_non_tx_store: S/390 System z Built-in Functions.
+ (line 104)
* __builtin_object_size: Object Size Checking.
(line 6)
* __builtin_offsetof: Offsetof. (line 6)
@@ -51205,9 +52206,27 @@ Keyword Index
(line 96)
* __builtin_set_thread_pointer: SH Built-in Functions.
(line 10)
+* __builtin_tabort: S/390 System z Built-in Functions.
+ (line 87)
+* __builtin_tbegin: S/390 System z Built-in Functions.
+ (line 7)
+* __builtin_tbegin_nofloat: S/390 System z Built-in Functions.
+ (line 59)
+* __builtin_tbegin_retry: S/390 System z Built-in Functions.
+ (line 65)
+* __builtin_tbegin_retry_nofloat: S/390 System z Built-in Functions.
+ (line 72)
+* __builtin_tbeginc: S/390 System z Built-in Functions.
+ (line 78)
+* __builtin_tend: S/390 System z Built-in Functions.
+ (line 82)
* __builtin_thread_pointer: SH Built-in Functions.
(line 20)
* __builtin_trap: Other Builtins. (line 281)
+* __builtin_tx_assist: S/390 System z Built-in Functions.
+ (line 92)
+* __builtin_tx_nesting_depth: S/390 System z Built-in Functions.
+ (line 98)
* __builtin_types_compatible_p: Other Builtins. (line 111)
* __builtin_unreachable: Other Builtins. (line 288)
* __builtin_va_arg_pack: Constructing Calls. (line 53)
@@ -51274,6 +52293,8 @@ Keyword Index
* _exit: Other Builtins. (line 6)
* _Exit: Other Builtins. (line 6)
* _Fract data type: Fixed-Point. (line 6)
+* _HTM_FIRST_USER_ABORT_CODE: S/390 System z Built-in Functions.
+ (line 48)
* _Sat data type: Fixed-Point. (line 6)
* _xabort: X86 transactional memory intrinsics.
(line 68)
@@ -51314,7 +52335,7 @@ Keyword Index
* alloca: Other Builtins. (line 6)
* alloca vs variable-length arrays: Variable Length. (line 26)
* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
- (line 935)
+ (line 943)
* alternate keywords: Alternate Keywords. (line 6)
* always_inline function attribute: Function Attributes.
(line 91)
@@ -51479,9 +52500,9 @@ Keyword Index
* code generation conventions: Code Gen Options. (line 6)
* code, mixed with declarations: Mixed Declarations. (line 6)
* cold function attribute: Function Attributes.
- (line 1158)
+ (line 1166)
* cold label attribute: Function Attributes.
- (line 1176)
+ (line 1184)
* command options: Invoking GCC. (line 6)
* comments, C++ style: C++ Comments. (line 6)
* common attribute: Variable Attributes.
@@ -51614,7 +52635,7 @@ Keyword Index
* earlyclobber operand: Modifiers. (line 25)
* eight-bit data on the H8/300, H8/300H, and H8S: Function Attributes.
(line 346)
-* EIND: AVR Options. (line 224)
+* EIND: AVR Options. (line 220)
* empty structures: Empty Structures. (line 6)
* environment variables: Environment Variables.
(line 6)
@@ -51692,7 +52713,7 @@ Keyword Index
* fmodf: Other Builtins. (line 6)
* fmodl: Other Builtins. (line 6)
* force_align_arg_pointer attribute: Function Attributes.
- (line 1218)
+ (line 1226)
* format function attribute: Function Attributes.
(line 419)
* format_arg function attribute: Function Attributes.
@@ -51724,7 +52745,7 @@ Keyword Index
* function versions: Function Multiversioning.
(line 6)
* function without a prologue/epilogue code: Function Attributes.
- (line 912)
+ (line 920)
* function, size of pointer to: Pointer Arith. (line 6)
* functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
(line 808)
@@ -51737,7 +52758,7 @@ Keyword Index
* functions that behave like malloc: Function Attributes.
(line 6)
* functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
- (line 925)
+ (line 933)
* functions that do not pop the argument stack on the 386: Function Attributes.
(line 6)
* functions that do pop the argument stack on the 386: Function Attributes.
@@ -51804,9 +52825,11 @@ Keyword Index
* hosted environment: Standards. (line 13)
* hosted implementation: Standards. (line 13)
* hot function attribute: Function Attributes.
- (line 1136)
+ (line 1144)
* hot label attribute: Function Attributes.
- (line 1148)
+ (line 1156)
+* hotpatch attribute: Function Attributes.
+ (line 912)
* HPPA Options: HPPA Options. (line 6)
* HR fixed-suffix: Fixed-Point. (line 6)
* hr fixed-suffix: Fixed-Point. (line 6)
@@ -51859,7 +52882,7 @@ Keyword Index
* interrupt handler functions: Function Attributes.
(line 141)
* interrupt handler functions on the AVR processors: Function Attributes.
- (line 1313)
+ (line 1321)
* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
(line 735)
* interrupt service routines on ARM: Function Attributes.
@@ -52097,31 +53120,31 @@ Keyword Index
* NFC: Warning Options. (line 1284)
* NFKC: Warning Options. (line 1284)
* NMI handler functions on the Blackfin processor: Function Attributes.
- (line 940)
+ (line 948)
* no_instrument_function function attribute: Function Attributes.
- (line 946)
+ (line 954)
* no_sanitize_address function attribute: Function Attributes.
- (line 1186)
+ (line 1194)
* no_split_stack function attribute: Function Attributes.
- (line 951)
+ (line 959)
* noclone function attribute: Function Attributes.
- (line 968)
+ (line 976)
* nocommon attribute: Variable Attributes.
(line 105)
* noinline function attribute: Function Attributes.
- (line 957)
+ (line 965)
* nomips16 attribute: Function Attributes.
(line 839)
* non-constant initializers: Initializers. (line 6)
* non-static inline function: Inline. (line 85)
* nonnull function attribute: Function Attributes.
- (line 974)
+ (line 982)
* noreturn function attribute: Function Attributes.
- (line 998)
+ (line 1006)
* nosave_low_regs attribute: Function Attributes.
- (line 1048)
+ (line 1056)
* nothrow function attribute: Function Attributes.
- (line 1040)
+ (line 1048)
* o in constraint: Simple Constraints. (line 23)
* OBJC_INCLUDE_PATH: Environment Variables.
(line 132)
@@ -52139,7 +53162,7 @@ Keyword Index
* OpenMP parallel: C Dialect Options. (line 256)
* operand constraints, asm: Constraints. (line 6)
* optimize function attribute: Function Attributes.
- (line 1054)
+ (line 1062)
* optimize options: Optimize Options. (line 6)
* options to control diagnostics formatting: Language Independent Options.
(line 6)
@@ -52162,9 +53185,9 @@ Keyword Index
* order of evaluation, side effects: Non-bugs. (line 196)
* order of options: Invoking GCC. (line 30)
* OS_main AVR function attribute: Function Attributes.
- (line 1071)
+ (line 1079)
* OS_task AVR function attribute: Function Attributes.
- (line 1071)
+ (line 1079)
* other register constraints: Simple Constraints. (line 163)
* output file option: Overall Options. (line 191)
* overloaded virtual function, warning: C++ Dialect Options.
@@ -52175,7 +53198,7 @@ Keyword Index
* parameter forward declaration: Variable Length. (line 59)
* Pascal: G++ and GCC. (line 23)
* pcs function attribute: Function Attributes.
- (line 1096)
+ (line 1104)
* PDP-11 Options: PDP-11 Options. (line 6)
* PIC: Code Gen Options. (line 267)
* picoChip options: picoChip Options. (line 6)
@@ -52227,7 +53250,7 @@ Keyword Index
* pragma, push_macro: Push/Pop Macro Pragmas.
(line 11)
* pragma, reason for not using: Function Attributes.
- (line 1870)
+ (line 1878)
* pragma, redefine_extname: Symbol-Renaming Pragmas.
(line 12)
* pragma, segment: Darwin Pragmas. (line 21)
@@ -52252,7 +53275,7 @@ Keyword Index
* promotion of formal parameters: Function Prototypes.
(line 6)
* pure function attribute: Function Attributes.
- (line 1114)
+ (line 1122)
* push address instruction: Simple Constraints. (line 154)
* putchar: Other Builtins. (line 6)
* puts: Other Builtins. (line 6)
@@ -52263,10 +53286,10 @@ Keyword Index
* R fixed-suffix: Fixed-Point. (line 6)
* r fixed-suffix: Fixed-Point. (line 6)
* r in constraint: Simple Constraints. (line 66)
-* RAMPD: AVR Options. (line 340)
-* RAMPX: AVR Options. (line 340)
-* RAMPY: AVR Options. (line 340)
-* RAMPZ: AVR Options. (line 340)
+* RAMPD: AVR Options. (line 336)
+* RAMPX: AVR Options. (line 336)
+* RAMPY: AVR Options. (line 336)
+* RAMPZ: AVR Options. (line 336)
* ranges in case statements: Case Ranges. (line 6)
* read-only strings: Incompatibilities. (line 9)
* register variable after longjmp: Global Reg Vars. (line 65)
@@ -52276,7 +53299,7 @@ Keyword Index
* registers, global allocation: Explicit Reg Vars. (line 6)
* registers, global variables in: Global Reg Vars. (line 6)
* regparm attribute: Function Attributes.
- (line 1194)
+ (line 1202)
* relocation truncated to fit (ColdFire): M680x0 Options. (line 329)
* relocation truncated to fit (MIPS): MIPS Options. (line 200)
* remainder: Other Builtins. (line 6)
@@ -52286,12 +53309,12 @@ Keyword Index
* remquof: Other Builtins. (line 6)
* remquol: Other Builtins. (line 6)
* renesas attribute: Function Attributes.
- (line 1226)
+ (line 1234)
* reordering, warning: C++ Dialect Options.
(line 533)
* reporting bugs: Bugs. (line 6)
* resbank attribute: Function Attributes.
- (line 1230)
+ (line 1238)
* rest argument (in macro): Variadic Macros. (line 6)
* restricted pointers: Restricted Pointers.
(line 6)
@@ -52300,7 +53323,7 @@ Keyword Index
* restricted this pointer: Restricted Pointers.
(line 6)
* returns_twice attribute: Function Attributes.
- (line 1244)
+ (line 1252)
* rindex: Other Builtins. (line 6)
* rint: Other Builtins. (line 6)
* rintf: Other Builtins. (line 6)
@@ -52318,9 +53341,9 @@ Keyword Index
* S/390 and zSeries Options: S/390 and zSeries Options.
(line 6)
* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
- (line 1253)
+ (line 1261)
* save volatile registers on the MicroBlaze: Function Attributes.
- (line 1258)
+ (line 1266)
* scalb: Other Builtins. (line 6)
* scalbf: Other Builtins. (line 6)
* scalbl: Other Builtins. (line 6)
@@ -52336,11 +53359,11 @@ Keyword Index
* Score Options: Score Options. (line 6)
* search path: Directory Options. (line 6)
* section function attribute: Function Attributes.
- (line 1266)
+ (line 1274)
* section variable attribute: Variable Attributes.
(line 166)
* sentinel function attribute: Function Attributes.
- (line 1282)
+ (line 1290)
* setjmp: Global Reg Vars. (line 65)
* setjmp incompatibilities: Incompatibilities. (line 39)
* shared strings: Incompatibilities. (line 9)
@@ -52373,11 +53396,11 @@ Keyword Index
* sizeof: Typeof. (line 6)
* smaller data references: M32R/D Options. (line 57)
* smaller data references (PowerPC): RS/6000 and PowerPC Options.
- (line 662)
+ (line 743)
* snprintf: Other Builtins. (line 6)
* Solaris 2 options: Solaris 2 Options. (line 6)
* sp_switch attribute: Function Attributes.
- (line 1331)
+ (line 1339)
* SPARC options: SPARC Options. (line 6)
* Spec Files: Spec Files. (line 6)
* specified registers: Explicit Reg Vars. (line 6)
@@ -52396,7 +53419,7 @@ Keyword Index
* sscanf: Other Builtins. (line 6)
* sscanf, and constant strings: Incompatibilities. (line 17)
* sseregparm attribute: Function Attributes.
- (line 1211)
+ (line 1219)
* statements inside expressions: Statement Exprs. (line 6)
* static data in C++, declaring and defining: Static Definitions.
(line 6)
@@ -52423,6 +53446,8 @@ Keyword Index
* strspn: Other Builtins. (line 6)
* strstr: Other Builtins. (line 6)
* struct: Unnamed Fields. (line 6)
+* struct __htm_tdb: S/390 System z Built-in Functions.
+ (line 54)
* structures: Incompatibilities. (line 146)
* structures, constructor expression: Compound Literals. (line 6)
* submodel options: Submodel Options. (line 6)
@@ -52436,7 +53461,7 @@ Keyword Index
(line 6)
* syntax checking: Warning Options. (line 13)
* syscall_linkage attribute: Function Attributes.
- (line 1346)
+ (line 1354)
* system headers, warnings from: Warning Options. (line 843)
* sysv_abi attribute: Function Attributes.
(line 881)
@@ -52447,111 +53472,111 @@ Keyword Index
* tanhl: Other Builtins. (line 6)
* tanl: Other Builtins. (line 6)
* target function attribute: Function Attributes.
- (line 1353)
+ (line 1361)
* target machine, specifying: Target Options. (line 6)
* target options: Target Options. (line 6)
* target("abm") attribute: Function Attributes.
- (line 1379)
+ (line 1387)
* target("aes") attribute: Function Attributes.
- (line 1384)
+ (line 1392)
* target("align-stringops") attribute: Function Attributes.
- (line 1478)
+ (line 1486)
* target("altivec") attribute: Function Attributes.
- (line 1504)
+ (line 1512)
* target("arch=ARCH") attribute: Function Attributes.
- (line 1487)
+ (line 1495)
* target("avoid-indexed-addresses") attribute: Function Attributes.
- (line 1625)
+ (line 1633)
* target("cld") attribute: Function Attributes.
- (line 1449)
+ (line 1457)
* target("cmpb") attribute: Function Attributes.
- (line 1510)
+ (line 1518)
* target("cpu=CPU") attribute: Function Attributes.
- (line 1640)
+ (line 1648)
* target("default") attribute: Function Attributes.
- (line 1387)
+ (line 1395)
* target("dlmzb") attribute: Function Attributes.
- (line 1516)
+ (line 1524)
* target("fancy-math-387") attribute: Function Attributes.
- (line 1453)
+ (line 1461)
* target("fma4") attribute: Function Attributes.
- (line 1433)
+ (line 1441)
* target("fpmath=FPMATH") attribute: Function Attributes.
- (line 1495)
+ (line 1503)
* target("fprnd") attribute: Function Attributes.
- (line 1523)
+ (line 1531)
* target("friz") attribute: Function Attributes.
- (line 1616)
+ (line 1624)
* target("fused-madd") attribute: Function Attributes.
- (line 1458)
+ (line 1466)
* target("hard-dfp") attribute: Function Attributes.
- (line 1529)
+ (line 1537)
* target("ieee-fp") attribute: Function Attributes.
- (line 1463)
+ (line 1471)
* target("inline-all-stringops") attribute: Function Attributes.
- (line 1468)
+ (line 1476)
* target("inline-stringops-dynamically") attribute: Function Attributes.
- (line 1472)
+ (line 1480)
* target("isel") attribute: Function Attributes.
- (line 1535)
+ (line 1543)
* target("longcall") attribute: Function Attributes.
- (line 1635)
+ (line 1643)
* target("lwp") attribute: Function Attributes.
- (line 1441)
+ (line 1449)
* target("mfcrf") attribute: Function Attributes.
- (line 1539)
+ (line 1547)
* target("mfpgpr") attribute: Function Attributes.
- (line 1546)
+ (line 1554)
* target("mmx") attribute: Function Attributes.
- (line 1392)
+ (line 1400)
* target("mulhw") attribute: Function Attributes.
- (line 1553)
+ (line 1561)
* target("multiple") attribute: Function Attributes.
- (line 1560)
+ (line 1568)
* target("paired") attribute: Function Attributes.
- (line 1630)
+ (line 1638)
* target("pclmul") attribute: Function Attributes.
- (line 1396)
+ (line 1404)
* target("popcnt") attribute: Function Attributes.
- (line 1400)
+ (line 1408)
* target("popcntb") attribute: Function Attributes.
- (line 1571)
+ (line 1579)
* target("popcntd") attribute: Function Attributes.
- (line 1578)
+ (line 1586)
* target("powerpc-gfxopt") attribute: Function Attributes.
- (line 1584)
+ (line 1592)
* target("powerpc-gpopt") attribute: Function Attributes.
- (line 1590)
+ (line 1598)
* target("recip") attribute: Function Attributes.
- (line 1482)
+ (line 1490)
* target("recip-precision") attribute: Function Attributes.
- (line 1596)
+ (line 1604)
* target("sse") attribute: Function Attributes.
- (line 1404)
+ (line 1412)
* target("sse2") attribute: Function Attributes.
- (line 1408)
+ (line 1416)
* target("sse3") attribute: Function Attributes.
- (line 1412)
+ (line 1420)
* target("sse4") attribute: Function Attributes.
- (line 1416)
+ (line 1424)
* target("sse4.1") attribute: Function Attributes.
- (line 1421)
+ (line 1429)
* target("sse4.2") attribute: Function Attributes.
- (line 1425)
+ (line 1433)
* target("sse4a") attribute: Function Attributes.
- (line 1429)
+ (line 1437)
* target("ssse3") attribute: Function Attributes.
- (line 1445)
+ (line 1453)
* target("string") attribute: Function Attributes.
- (line 1602)
+ (line 1610)
* target("tune=TUNE") attribute: Function Attributes.
- (line 1491)
+ (line 1499)
* target("update") attribute: Function Attributes.
- (line 1565)
+ (line 1573)
* target("vsx") attribute: Function Attributes.
- (line 1608)
+ (line 1616)
* target("xop") attribute: Function Attributes.
- (line 1437)
+ (line 1445)
* TC1: Standards. (line 13)
* TC2: Standards. (line 13)
* TC3: Standards. (line 13)
@@ -52570,7 +53595,7 @@ Keyword Index
* TILE-Gx options: TILE-Gx Options. (line 6)
* TILEPro options: TILEPro Options. (line 6)
* tiny data section on the H8/300H and H8S: Function Attributes.
- (line 1669)
+ (line 1677)
* TLS: Thread-Local. (line 6)
* tls_model attribute: Variable Attributes.
(line 235)
@@ -52583,9 +53608,9 @@ Keyword Index
* towupper: Other Builtins. (line 6)
* traditional C language: C Dialect Options. (line 307)
* trap_exit attribute: Function Attributes.
- (line 1676)
+ (line 1684)
* trapa_handler attribute: Function Attributes.
- (line 1681)
+ (line 1689)
* trunc: Other Builtins. (line 6)
* truncf: Other Builtins. (line 6)
* truncl: Other Builtins. (line 6)
@@ -52620,7 +53645,7 @@ Keyword Index
* unresolved references and -nodefaultlibs: Link Options. (line 85)
* unresolved references and -nostdlib: Link Options. (line 85)
* unused attribute.: Function Attributes.
- (line 1685)
+ (line 1693)
* UR fixed-suffix: Fixed-Point. (line 6)
* ur fixed-suffix: Fixed-Point. (line 6)
* use_debug_exception_return attribute: Function Attributes.
@@ -52628,7 +53653,7 @@ Keyword Index
* use_shadow_register_set attribute: Function Attributes.
(line 703)
* used attribute.: Function Attributes.
- (line 1690)
+ (line 1698)
* User stack pointer in interrupts on the Blackfin: Function Attributes.
(line 754)
* V in constraint: Simple Constraints. (line 43)
@@ -52650,14 +53675,14 @@ Keyword Index
* variadic macros: Variadic Macros. (line 6)
* VAX options: VAX Options. (line 6)
* version_id attribute: Function Attributes.
- (line 1700)
+ (line 1708)
* vfprintf: Other Builtins. (line 6)
* vfscanf: Other Builtins. (line 6)
* visibility attribute: Function Attributes.
- (line 1710)
+ (line 1718)
* VLAs: Variable Length. (line 6)
* vliw attribute: Function Attributes.
- (line 1803)
+ (line 1811)
* void pointers, arithmetic: Pointer Arith. (line 6)
* void, size of pointer to: Pointer Arith. (line 6)
* volatile access <1>: C++ Volatiles. (line 6)
@@ -52678,7 +53703,7 @@ Keyword Index
* W floating point suffix: Floating Types. (line 6)
* w floating point suffix: Floating Types. (line 6)
* warn_unused_result attribute: Function Attributes.
- (line 1809)
+ (line 1817)
* warning for comparison of signed and unsigned values: Warning Options.
(line 1156)
* warning for overloaded virtual function: C++ Dialect Options.
@@ -52693,9 +53718,9 @@ Keyword Index
* warnings vs errors: Warnings and Errors.
(line 6)
* weak attribute: Function Attributes.
- (line 1826)
+ (line 1834)
* weakref attribute: Function Attributes.
- (line 1835)
+ (line 1843)
* whitespace: Incompatibilities. (line 112)
* X in constraint: Simple Constraints. (line 124)
* X3.159-1989: Standards. (line 13)
@@ -52720,305 +53745,307 @@ Keyword Index

Tag Table:
-Node: Top1920
-Node: G++ and GCC3686
-Node: Standards5755
-Node: Invoking GCC17933
-Node: Option Summary21678
-Node: Overall Options61417
-Node: Invoking G++75516
-Node: C Dialect Options77039
-Node: C++ Dialect Options92878
-Node: Objective-C and Objective-C++ Dialect Options120980
-Node: Language Independent Options131488
-Node: Warning Options133687
-Node: Debugging Options202888
-Node: Optimize Options260279
-Ref: Type-punning318948
-Node: Preprocessor Options397157
-Ref: Wtrigraphs401939
-Ref: dashMF406687
-Ref: fdollars-in-identifiers417551
-Node: Assembler Options427818
-Node: Link Options428510
-Ref: Link Options-Footnote-1439754
-Node: Directory Options440088
-Node: Spec Files446647
-Node: Target Options468045
-Node: Submodel Options468444
-Node: AArch64 Options470137
-Node: Adapteva Epiphany Options474011
-Node: ARM Options479962
-Node: AVR Options495607
-Node: Blackfin Options515951
-Node: C6X Options523966
-Node: CRIS Options525509
-Node: CR16 Options529253
-Node: Darwin Options530160
-Node: DEC Alpha Options537593
-Node: FR30 Options549181
-Node: FRV Options549746
-Node: GNU/Linux Options556465
-Node: H8/300 Options557726
-Node: HPPA Options559176
-Node: i386 and x86-64 Options568660
-Node: i386 and x86-64 Windows Options605501
-Node: IA-64 Options608357
-Node: LM32 Options616421
-Node: M32C Options616945
-Node: M32R/D Options618219
-Node: M680x0 Options621765
-Node: MCore Options635811
-Node: MeP Options637314
-Node: MicroBlaze Options641273
-Node: MIPS Options644069
-Node: MMIX Options672969
-Node: MN10300 Options675451
-Node: Moxie Options677994
-Node: PDP-11 Options678365
-Node: picoChip Options680057
-Node: PowerPC Options682198
-Node: RL78 Options682419
-Node: RS/6000 and PowerPC Options683081
-Node: RX Options717931
-Node: S/390 and zSeries Options725265
-Node: Score Options733187
-Node: SH Options734029
-Node: Solaris 2 Options752884
-Node: SPARC Options754115
-Node: SPU Options766821
-Node: System V Options771758
-Node: TILE-Gx Options772584
-Node: TILEPro Options773508
-Node: V850 Options774012
-Node: VAX Options780725
-Node: VMS Options781260
-Node: VxWorks Options782071
-Node: x86-64 Options783226
-Node: Xstormy16 Options783444
-Node: Xtensa Options783733
-Node: zSeries Options788044
-Node: Code Gen Options788240
-Node: Environment Variables818074
-Node: Precompiled Headers826075
-Node: C Implementation832083
-Node: Translation implementation833752
-Node: Environment implementation834326
-Node: Identifiers implementation834876
-Node: Characters implementation835930
-Node: Integers implementation838736
-Node: Floating point implementation840561
-Node: Arrays and pointers implementation843490
-Ref: Arrays and pointers implementation-Footnote-1844925
-Node: Hints implementation845049
-Node: Structures unions enumerations and bit-fields implementation846515
-Node: Qualifiers implementation848501
-Node: Declarators implementation850273
-Node: Statements implementation850615
-Node: Preprocessing directives implementation850942
-Node: Library functions implementation853047
-Node: Architecture implementation853687
-Node: Locale-specific behavior implementation854390
-Node: C++ Implementation854695
-Node: Conditionally-supported behavior855977
-Node: Exception handling856487
-Node: C Extensions856896
-Node: Statement Exprs861890
-Node: Local Labels866349
-Node: Labels as Values869322
-Ref: Labels as Values-Footnote-1871721
-Node: Nested Functions871904
-Node: Constructing Calls875862
-Node: Typeof880580
-Node: Conditionals883888
-Node: __int128884778
-Node: Long Long885302
-Node: Complex886778
-Node: Floating Types889367
-Node: Half-Precision890495
-Node: Decimal Float892677
-Node: Hex Floats894532
-Node: Fixed-Point895568
-Node: Named Address Spaces898850
-Ref: AVR Named Address Spaces899531
-Node: Zero Length904737
-Node: Empty Structures908024
-Node: Variable Length908430
-Node: Variadic Macros911106
-Node: Escaped Newlines913484
-Node: Subscripting914323
-Node: Pointer Arith915049
-Node: Initializers915617
-Node: Compound Literals916113
-Node: Designated Inits919474
-Node: Case Ranges923106
-Node: Cast to Union923787
-Node: Mixed Declarations924878
-Node: Function Attributes925388
-Node: Attribute Syntax1011269
-Node: Function Prototypes1021660
-Node: C++ Comments1023441
-Node: Dollar Signs1023960
-Node: Character Escapes1024425
-Node: Variable Attributes1024719
-Ref: AVR Variable Attributes1038386
-Ref: MeP Variable Attributes1041047
-Ref: i386 Variable Attributes1042993
-Node: Type Attributes1048657
-Ref: MeP Type Attributes1062545
-Ref: i386 Type Attributes1062819
-Ref: PowerPC Type Attributes1063510
-Ref: SPU Type Attributes1064372
-Node: Alignment1064663
-Node: Inline1066033
-Node: Volatiles1071008
-Node: Extended Asm1073890
-Ref: Example of asm with clobbered asm reg1079794
-Ref: Extended asm with goto1089501
-Node: Constraints1097352
-Node: Simple Constraints1098436
-Node: Multi-Alternative1105757
-Node: Modifiers1107474
-Node: Machine Constraints1110488
-Node: Asm Labels1159452
-Node: Explicit Reg Vars1161128
-Node: Global Reg Vars1162731
-Node: Local Reg Vars1167227
-Node: Alternate Keywords1169644
-Node: Incomplete Enums1171130
-Node: Function Names1171886
-Node: Return Address1174047
-Node: Vector Extensions1177554
-Node: Offsetof1183729
-Node: __sync Builtins1184542
-Node: __atomic Builtins1190012
-Node: x86 specific memory model extensions for transactional memory1201298
-Node: Object Size Checking1202535
-Node: Other Builtins1208024
-Node: Target Builtins1237168
-Node: Alpha Built-in Functions1238308
-Node: ARM iWMMXt Built-in Functions1241317
-Node: ARM NEON Intrinsics1248297
-Node: AVR Built-in Functions1456716
-Node: Blackfin Built-in Functions1459786
-Node: FR-V Built-in Functions1460403
-Node: Argument Types1461262
-Node: Directly-mapped Integer Functions1463014
-Node: Directly-mapped Media Functions1464096
-Node: Raw read/write Functions1471128
-Node: Other Built-in Functions1472040
-Node: X86 Built-in Functions1473224
-Node: X86 transactional memory intrinsics1532192
-Node: MIPS DSP Built-in Functions1534866
-Node: MIPS Paired-Single Support1547374
-Node: MIPS Loongson Built-in Functions1548873
-Node: Paired-Single Arithmetic1555393
-Node: Paired-Single Built-in Functions1556341
-Node: MIPS-3D Built-in Functions1559008
-Node: Other MIPS Built-in Functions1564385
-Node: picoChip Built-in Functions1564909
-Node: PowerPC Built-in Functions1566258
-Node: PowerPC AltiVec/VSX Built-in Functions1567672
-Node: RX Built-in Functions1677659
-Node: SH Built-in Functions1681662
-Node: SPARC VIS Built-in Functions1683043
-Node: SPU Built-in Functions1688647
-Node: TI C6X Built-in Functions1690463
-Node: TILE-Gx Built-in Functions1691487
-Node: TILEPro Built-in Functions1692604
-Node: Target Format Checks1693671
-Node: Solaris Format Checks1694103
-Node: Darwin Format Checks1694529
-Node: Pragmas1695347
-Node: ARM Pragmas1696057
-Node: M32C Pragmas1696660
-Node: MeP Pragmas1697734
-Node: RS/6000 and PowerPC Pragmas1699803
-Node: Darwin Pragmas1700544
-Node: Solaris Pragmas1701611
-Node: Symbol-Renaming Pragmas1702772
-Node: Structure-Packing Pragmas1704326
-Node: Weak Pragmas1705976
-Node: Diagnostic Pragmas1706710
-Node: Visibility Pragmas1709817
-Node: Push/Pop Macro Pragmas1710569
-Node: Function Specific Option Pragmas1711541
-Node: Unnamed Fields1713798
-Node: Thread-Local1716026
-Node: C99 Thread-Local Edits1718131
-Node: C++98 Thread-Local Edits1720143
-Node: Binary constants1723587
-Node: C++ Extensions1724258
-Node: C++ Volatiles1725969
-Node: Restricted Pointers1728317
-Node: Vague Linkage1729908
-Node: C++ Interface1733532
-Ref: C++ Interface-Footnote-11737818
-Node: Template Instantiation1737954
-Node: Bound member functions1744541
-Node: C++ Attributes1746073
-Node: Function Multiversioning1748729
-Node: Namespace Association1750544
-Node: Type Traits1751924
-Node: Java Exceptions1758412
-Node: Deprecated Features1759802
-Node: Backwards Compatibility1762767
-Node: Objective-C1764119
-Node: GNU Objective-C runtime API1764728
-Node: Modern GNU Objective-C runtime API1765735
-Node: Traditional GNU Objective-C runtime API1768172
-Node: Executing code before main1768900
-Node: What you can and what you cannot do in +load1771638
-Node: Type encoding1774028
-Node: Legacy type encoding1779104
-Node: @encode1780195
-Node: Method signatures1780736
-Node: Garbage Collection1782731
-Node: Constant string objects1785420
-Node: compatibility_alias1787928
-Node: Exceptions1788650
-Node: Synchronization1791361
-Node: Fast enumeration1792545
-Node: Using fast enumeration1792857
-Node: c99-like fast enumeration syntax1794068
-Node: Fast enumeration details1794771
-Node: Fast enumeration protocol1797112
-Node: Messaging with the GNU Objective-C runtime1800264
-Node: Dynamically registering methods1801635
-Node: Forwarding hook1803326
-Node: Compatibility1806366
-Node: Gcov1812933
-Node: Gcov Intro1813466
-Node: Invoking Gcov1816184
-Node: Gcov and Optimization1829095
-Node: Gcov Data Files1832095
-Node: Cross-profiling1833490
-Node: Trouble1835341
-Node: Actual Bugs1836753
-Node: Interoperation1837200
-Node: Incompatibilities1844092
-Node: Fixed Headers1852243
-Node: Standard Libraries1853906
-Node: Disappointments1855278
-Node: C++ Misunderstandings1859636
-Node: Static Definitions1860447
-Node: Name lookup1861500
-Ref: Name lookup-Footnote-11866278
-Node: Temporaries1866465
-Node: Copy Assignment1868441
-Node: Non-bugs1870248
-Node: Warnings and Errors1880755
-Node: Bugs1882517
-Node: Bug Criteria1883081
-Node: Bug Reporting1885291
-Node: Service1885512
-Node: Contributing1886331
-Node: Funding1887071
-Node: GNU Project1889560
-Node: Copying1890206
-Node: GNU Free Documentation License1927734
-Node: Contributors1952871
-Node: Option Index1990273
-Node: Keyword Index2180269
+Node: Top1934
+Node: G++ and GCC3700
+Node: Standards5769
+Node: Invoking GCC17947
+Node: Option Summary21692
+Node: Overall Options61821
+Node: Invoking G++76059
+Node: C Dialect Options77582
+Node: C++ Dialect Options93421
+Node: Objective-C and Objective-C++ Dialect Options121523
+Node: Language Independent Options132031
+Node: Warning Options134230
+Node: Debugging Options203431
+Node: Optimize Options260822
+Ref: Type-punning319491
+Node: Preprocessor Options397700
+Ref: Wtrigraphs402482
+Ref: dashMF407230
+Ref: fdollars-in-identifiers418094
+Node: Assembler Options428361
+Node: Link Options429053
+Ref: Link Options-Footnote-1440297
+Node: Directory Options440631
+Node: Spec Files447190
+Node: Target Options468588
+Node: Submodel Options468987
+Node: AArch64 Options470680
+Node: Adapteva Epiphany Options474554
+Node: ARM Options480505
+Node: AVR Options496355
+Node: Blackfin Options516473
+Node: C6X Options524488
+Node: CRIS Options526031
+Node: CR16 Options529775
+Node: Darwin Options530682
+Node: DEC Alpha Options538115
+Node: FR30 Options549703
+Node: FRV Options550268
+Node: GNU/Linux Options556987
+Node: H8/300 Options558248
+Node: HPPA Options559698
+Node: i386 and x86-64 Options569182
+Node: i386 and x86-64 Windows Options606268
+Node: IA-64 Options609124
+Node: LM32 Options617188
+Node: M32C Options617712
+Node: M32R/D Options618986
+Node: M680x0 Options622532
+Node: MCore Options636578
+Node: MeP Options638081
+Node: MicroBlaze Options642040
+Node: MIPS Options644836
+Node: MMIX Options673736
+Node: MN10300 Options676218
+Node: Moxie Options678761
+Node: PDP-11 Options679132
+Node: picoChip Options680824
+Node: PowerPC Options682965
+Node: RL78 Options683186
+Node: RS/6000 and PowerPC Options683848
+Node: RX Options722869
+Node: S/390 and zSeries Options730203
+Node: Score Options738763
+Node: SH Options739605
+Node: Solaris 2 Options758460
+Node: SPARC Options759691
+Node: SPU Options772941
+Node: System V Options777878
+Node: TILE-Gx Options778704
+Node: TILEPro Options779628
+Node: V850 Options780132
+Node: VAX Options786845
+Node: VMS Options787380
+Node: VxWorks Options788191
+Node: x86-64 Options789346
+Node: Xstormy16 Options789564
+Node: Xtensa Options789853
+Node: zSeries Options794164
+Node: Code Gen Options794360
+Node: Environment Variables824194
+Node: Precompiled Headers832195
+Node: C Implementation838203
+Node: Translation implementation839872
+Node: Environment implementation840446
+Node: Identifiers implementation840996
+Node: Characters implementation842050
+Node: Integers implementation844856
+Node: Floating point implementation846681
+Node: Arrays and pointers implementation849610
+Ref: Arrays and pointers implementation-Footnote-1851045
+Node: Hints implementation851169
+Node: Structures unions enumerations and bit-fields implementation852635
+Node: Qualifiers implementation854621
+Node: Declarators implementation856393
+Node: Statements implementation856735
+Node: Preprocessing directives implementation857062
+Node: Library functions implementation859167
+Node: Architecture implementation859807
+Node: Locale-specific behavior implementation860510
+Node: C++ Implementation860815
+Node: Conditionally-supported behavior862097
+Node: Exception handling862607
+Node: C Extensions863016
+Node: Statement Exprs868010
+Node: Local Labels872469
+Node: Labels as Values875442
+Ref: Labels as Values-Footnote-1877841
+Node: Nested Functions878024
+Node: Constructing Calls881982
+Node: Typeof886700
+Node: Conditionals890008
+Node: __int128890898
+Node: Long Long891422
+Node: Complex892898
+Node: Floating Types895487
+Node: Half-Precision896615
+Node: Decimal Float898797
+Node: Hex Floats900652
+Node: Fixed-Point901688
+Node: Named Address Spaces904970
+Ref: AVR Named Address Spaces905651
+Node: Zero Length910857
+Node: Empty Structures914144
+Node: Variable Length914550
+Node: Variadic Macros917226
+Node: Escaped Newlines919604
+Node: Subscripting920443
+Node: Pointer Arith921169
+Node: Initializers921737
+Node: Compound Literals922233
+Node: Designated Inits925594
+Node: Case Ranges929226
+Node: Cast to Union929907
+Node: Mixed Declarations930998
+Node: Function Attributes931508
+Node: Attribute Syntax1017836
+Node: Function Prototypes1028227
+Node: C++ Comments1030008
+Node: Dollar Signs1030527
+Node: Character Escapes1030992
+Node: Variable Attributes1031286
+Ref: AVR Variable Attributes1044953
+Ref: MeP Variable Attributes1047614
+Ref: i386 Variable Attributes1049560
+Node: Type Attributes1055224
+Ref: MeP Type Attributes1069112
+Ref: i386 Type Attributes1069386
+Ref: PowerPC Type Attributes1070077
+Ref: SPU Type Attributes1070939
+Node: Alignment1071230
+Node: Inline1072600
+Node: Volatiles1077575
+Node: Extended Asm1080457
+Ref: Example of asm with clobbered asm reg1086361
+Ref: Extended asm with goto1096068
+Node: Constraints1103919
+Node: Simple Constraints1105003
+Node: Multi-Alternative1112324
+Node: Modifiers1114041
+Node: Machine Constraints1117055
+Node: Asm Labels1167278
+Node: Explicit Reg Vars1168954
+Node: Global Reg Vars1170557
+Node: Local Reg Vars1175053
+Node: Alternate Keywords1177470
+Node: Incomplete Enums1178956
+Node: Function Names1179712
+Node: Return Address1181873
+Node: Vector Extensions1185380
+Node: Offsetof1191555
+Node: __sync Builtins1192368
+Node: __atomic Builtins1197838
+Node: x86 specific memory model extensions for transactional memory1209477
+Node: Object Size Checking1210739
+Node: Other Builtins1216228
+Node: Target Builtins1245372
+Node: Alpha Built-in Functions1246611
+Node: ARM iWMMXt Built-in Functions1249620
+Node: ARM NEON Intrinsics1256600
+Node: AVR Built-in Functions1465019
+Node: Blackfin Built-in Functions1468089
+Node: FR-V Built-in Functions1468706
+Node: Argument Types1469565
+Node: Directly-mapped Integer Functions1471317
+Node: Directly-mapped Media Functions1472399
+Node: Raw read/write Functions1479431
+Node: Other Built-in Functions1480343
+Node: X86 Built-in Functions1481527
+Node: X86 transactional memory intrinsics1540495
+Node: MIPS DSP Built-in Functions1543169
+Node: MIPS Paired-Single Support1555677
+Node: MIPS Loongson Built-in Functions1557176
+Node: Paired-Single Arithmetic1563696
+Node: Paired-Single Built-in Functions1564644
+Node: MIPS-3D Built-in Functions1567311
+Node: Other MIPS Built-in Functions1572688
+Node: picoChip Built-in Functions1573212
+Node: PowerPC Built-in Functions1574561
+Node: PowerPC AltiVec/VSX Built-in Functions1578373
+Node: PowerPC Hardware Transactional Memory Built-in Functions1711271
+Node: RX Built-in Functions1717812
+Node: S/390 System z Built-in Functions1721845
+Node: SH Built-in Functions1727082
+Node: SPARC VIS Built-in Functions1728475
+Node: SPU Built-in Functions1734079
+Node: TI C6X Built-in Functions1735895
+Node: TILE-Gx Built-in Functions1736919
+Node: TILEPro Built-in Functions1738036
+Node: Target Format Checks1739103
+Node: Solaris Format Checks1739535
+Node: Darwin Format Checks1739961
+Node: Pragmas1740779
+Node: ARM Pragmas1741489
+Node: M32C Pragmas1742092
+Node: MeP Pragmas1743166
+Node: RS/6000 and PowerPC Pragmas1745235
+Node: Darwin Pragmas1745976
+Node: Solaris Pragmas1747043
+Node: Symbol-Renaming Pragmas1748204
+Node: Structure-Packing Pragmas1749758
+Node: Weak Pragmas1751408
+Node: Diagnostic Pragmas1752142
+Node: Visibility Pragmas1755249
+Node: Push/Pop Macro Pragmas1756001
+Node: Function Specific Option Pragmas1756973
+Node: Unnamed Fields1759230
+Node: Thread-Local1761458
+Node: C99 Thread-Local Edits1763563
+Node: C++98 Thread-Local Edits1765575
+Node: Binary constants1769019
+Node: C++ Extensions1769690
+Node: C++ Volatiles1771401
+Node: Restricted Pointers1773749
+Node: Vague Linkage1775340
+Node: C++ Interface1778964
+Ref: C++ Interface-Footnote-11783250
+Node: Template Instantiation1783386
+Node: Bound member functions1789973
+Node: C++ Attributes1791505
+Node: Function Multiversioning1794161
+Node: Namespace Association1795976
+Node: Type Traits1797356
+Node: Java Exceptions1803844
+Node: Deprecated Features1805234
+Node: Backwards Compatibility1808199
+Node: Objective-C1809551
+Node: GNU Objective-C runtime API1810160
+Node: Modern GNU Objective-C runtime API1811167
+Node: Traditional GNU Objective-C runtime API1813604
+Node: Executing code before main1814332
+Node: What you can and what you cannot do in +load1817070
+Node: Type encoding1819460
+Node: Legacy type encoding1824536
+Node: @encode1825627
+Node: Method signatures1826168
+Node: Garbage Collection1828163
+Node: Constant string objects1830852
+Node: compatibility_alias1833360
+Node: Exceptions1834082
+Node: Synchronization1836793
+Node: Fast enumeration1837977
+Node: Using fast enumeration1838289
+Node: c99-like fast enumeration syntax1839500
+Node: Fast enumeration details1840203
+Node: Fast enumeration protocol1842544
+Node: Messaging with the GNU Objective-C runtime1845696
+Node: Dynamically registering methods1847067
+Node: Forwarding hook1848758
+Node: Compatibility1851798
+Node: Gcov1858365
+Node: Gcov Intro1858898
+Node: Invoking Gcov1861616
+Node: Gcov and Optimization1874527
+Node: Gcov Data Files1877527
+Node: Cross-profiling1878922
+Node: Trouble1880773
+Node: Actual Bugs1882185
+Node: Interoperation1882632
+Node: Incompatibilities1889524
+Node: Fixed Headers1897675
+Node: Standard Libraries1899338
+Node: Disappointments1900710
+Node: C++ Misunderstandings1905068
+Node: Static Definitions1905879
+Node: Name lookup1906932
+Ref: Name lookup-Footnote-11911710
+Node: Temporaries1911897
+Node: Copy Assignment1913873
+Node: Non-bugs1915680
+Node: Warnings and Errors1926187
+Node: Bugs1927949
+Node: Bug Criteria1928513
+Node: Bug Reporting1930723
+Node: Service1930944
+Node: Contributing1931763
+Node: Funding1932503
+Node: GNU Project1934992
+Node: Copying1935638
+Node: GNU Free Documentation License1973166
+Node: Contributors1998303
+Node: Option Index2035705
+Node: Keyword Index2228711

End Tag Table
diff --git a/gcc-4.8/gcc/doc/gccinstall.info b/gcc-4.8/gcc/doc/gccinstall.info
index 30f065533..9dcfde6f4 100644
--- a/gcc-4.8/gcc/doc/gccinstall.info
+++ b/gcc-4.8/gcc/doc/gccinstall.info
@@ -1,5 +1,5 @@
-This is doc/gccinstall.info, produced by makeinfo version 4.13 from
-/d/gcc-4.8.1/gcc-4.8.1/gcc/doc/install.texi.
+This is doc/gccinstall.info, produced by makeinfo version 4.12 from
+/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/doc/install.texi.
Copyright (C) 1988-2013 Free Software Foundation, Inc.
@@ -207,7 +207,7 @@ simplest way to install the libraries.
GNU Multiple Precision Library (GMP) version 4.3.2 (or later)
Necessary to build GCC. If a GMP source distribution is found in a
subdirectory of your GCC sources named `gmp', it will be built
- together with GCC. Alternatively, if GMP is already installed but
+ together with GCC. Alternatively, if GMP is already installed but
it is not in your library search path, you will have to configure
with the `--with-gmp' configure option. See also `--with-gmp-lib'
and `--with-gmp-include'.
@@ -561,7 +561,7 @@ option.
between cross and native configurations.
`--with-specs=SPECS'
- Specify additional command line driver SPECS. This can be
+ Specify additional command line driver SPECS. This can be
useful if you need to turn on a non-standard feature by
default without modifying the compiler's source code, for
instance
@@ -1435,13 +1435,13 @@ option.
`--with-boot-ldflags=FLAGS'
This option may be used to set linker flags to be used when linking
- stage 2 and later when bootstrapping GCC. If neither
+ stage 2 and later when bootstrapping GCC. If neither
-with-boot-libs nor -with-host-libstdcxx is set to a value, then
the default is `-static-libstdc++ -static-libgcc'.
`--with-boot-libs=LIBS'
This option may be used to set libraries to be used when linking
- stage 2 and later when bootstrapping GCC. The default is the
+ stage 2 and later when bootstrapping GCC. The default is the
argument to `--with-host-libstdcxx', if specified.
`--with-debug-prefix-map=MAP'
@@ -1730,19 +1730,19 @@ General Options
`--with-arch-directory=ARCH'
Specifies the name to use for the `jre/lib/ARCH' directory in the
- SDK environment created when -enable-java-home is passed. Typical
+ SDK environment created when -enable-java-home is passed. Typical
names for this directory include i386, amd64, ia64, etc.
`--with-os-directory=DIR'
- Specifies the OS directory for the SDK include directory. This is
+ Specifies the OS directory for the SDK include directory. This is
set to auto detect, and is typically 'linux'.
`--with-origin-name=NAME'
- Specifies the JPackage origin name. This defaults to the 'gcj' in
+ Specifies the JPackage origin name. This defaults to the 'gcj' in
java-1.5.0-gcj.
`--with-arch-suffix=SUFFIX'
- Specifies the suffix for the sdk directory. Defaults to the empty
+ Specifies the suffix for the sdk directory. Defaults to the empty
string. Examples include '.x86_64' in
'java-1.5.0-gcj-1.5.0.0.x86_64'.
@@ -1750,7 +1750,7 @@ General Options
Specifies where to install the SDK. Default is $(prefix)/lib/jvm.
`--with-jvm-jar-dir=DIR'
- Specifies where to install jars. Default is
+ Specifies where to install jars. Default is
$(prefix)/lib/jvm-exports.
`--with-python-dir=DIR'
@@ -1758,7 +1758,7 @@ General Options
aot-compile. DIR should not include the prefix used in
installation. For example, if the Python modules are to be
installed in /usr/lib/python2.5/site-packages, then
- -with-python-dir=/lib/python2.5/site-packages should be passed. If
+ -with-python-dir=/lib/python2.5/site-packages should be passed. If
this is not specified, then the Python modules are installed in
$(prefix)/share/python.
@@ -1769,7 +1769,7 @@ General Options
Build the gcjwebplugin web browser plugin.
`--enable-static-libjava'
- Build static libraries in libjava. The default is to only build
+ Build static libraries in libjava. The default is to only build
shared libraries.
`ansi'
@@ -2161,7 +2161,7 @@ disable building the Ada front end.
`ADA_INCLUDE_PATH' and `ADA_OBJECT_PATH' environment variables must
not be set when building the Ada compiler, the Ada tools, or the Ada
-runtime libraries. You can check that your build environment is clean
+runtime libraries. You can check that your build environment is clean
by verifying that `gnatls -v' lists only one explicit path in each
section.
@@ -2628,7 +2628,7 @@ tools can also be obtained from:
Blackfin
========
-The Blackfin processor, an Analog Devices DSP. *Note Blackfin Options:
+The Blackfin processor, an Analog Devices DSP. *Note Blackfin Options:
(gcc)Blackfin Options,
More information, and a version of binutils with support for this
@@ -2637,7 +2637,7 @@ processor, is available at `http://blackfin.uclinux.org'
CR16
====
-The CR16 CompactRISC architecture is a 16-bit architecture. This
+The CR16 CompactRISC architecture is a 16-bit architecture. This
architecture is used in embedded applications.
*Note CR16 Options: (gcc)CR16 Options,
@@ -3056,7 +3056,7 @@ assembler change that sometimes produces corrupt assembly files causing
AIX linker errors. The bug breaks GCC bootstrap on AIX and can cause
compilation failures with existing GCC installations. An AIX iFix for
AIX 5.3 is available (APAR IZ98385 for AIX 5.3 TL10, APAR IZ98477 for
-AIX 5.3 TL11 and IZ98134 for AIX 5.3 TL12). AIX 5.3 TL11 SP8, AIX 5.3
+AIX 5.3 TL11 and IZ98134 for AIX 5.3 TL12). AIX 5.3 TL11 SP8, AIX 5.3
TL12 SP5, AIX 6.1 TL04 SP11, AIX 6.1 TL05 SP7, AIX 6.1 TL06 SP6, AIX
6.1 TL07 and AIX 7.1 TL01 should include the fix.
@@ -3246,7 +3246,7 @@ use the `--with-divide=breaks' `configure' option when configuring GCC.
The default is to use traps on systems that support them.
The assembler from GNU binutils 2.17 and earlier has a bug in the way
-it sorts relocations for REL targets (o32, o64, EABI). This can cause
+it sorts relocations for REL targets (o32, o64, EABI). This can cause
bad code to be generated for simple C++ programs. Also the linker from
GNU binutils versions prior to 2.17 has a bug which causes the runtime
linker stubs in very large programs, like `libgcj.so', to be
@@ -3373,7 +3373,7 @@ been removed in GCC 4.6.
though you can download the Sun Studio compilers for free. In Solaris
10 and 11, GCC 3.4.3 is available as `/usr/sfw/bin/gcc'. Solaris 11
also provides GCC 4.5.2 as `/usr/gcc/4.5/bin/gcc'. Alternatively, you
-can install a pre-built GCC to bootstrap and install GCC. See the
+can install a pre-built GCC to bootstrap and install GCC. See the
binaries page for details.
The Solaris 2 `/bin/sh' will often fail to configure `libstdc++-v3',
@@ -3522,7 +3522,7 @@ library or the MPC library on a Solaris 7 or later system, the canonical
target triplet must be specified as the `build' parameter on the
configure line. This target triplet can be obtained by invoking
`./config.guess' in the toplevel source directory of GCC (and not that
-of GMP or MPFR or MPC). For example on a Solaris 9 system:
+of GMP or MPFR or MPC). For example on a Solaris 9 system:
% ./configure --build=sparc-sun-solaris2.9 --prefix=xxx
@@ -3530,7 +3530,7 @@ sparc-sun-solaris2.10
=====================
There is a bug in older versions of the Sun assembler which breaks
-thread-local storage (TLS). A typical error message is
+thread-local storage (TLS). A typical error message is
ld: fatal: relocation error: R_SPARC_TLS_LE_HIX22: file /var/tmp//ccamPA1v.o:
symbol <unknown>: bad symbol type SECT: symbol type must be TLS
@@ -3689,7 +3689,7 @@ and which C libraries are used.
* MinGW *-*-mingw32: MinGW is a native GCC port for the Win32
subsystem that provides a subset of POSIX.
- * MKS i386-pc-mks: NuTCracker from MKS. See
+ * MKS i386-pc-mks: NuTCracker from MKS. See
`http://www.mkssoftware.com/' for more information.
Intel 64-bit versions
@@ -3742,7 +3742,7 @@ version 2.20 or above if building your own.
===========
The Interix target is used by OpenNT, Interix, Services For UNIX (SFU),
-and Subsystem for UNIX-based Applications (SUA). Applications compiled
+and Subsystem for UNIX-based Applications (SUA). Applications compiled
with this target run in the Interix subsystem, which is separate from
the Win32 subsystem. This target was last known to work in GCC 3.3.
@@ -4354,7 +4354,7 @@ GNU Free Documentation License
not permanently reinstated, receipt of a copy of some or all of
the same material does not give you any rights to use it.
- 10. FUTURE REVISIONS OF THIS LICENSE
+ 10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of
the GNU Free Documentation License from time to time. Such new
@@ -4375,7 +4375,7 @@ GNU Free Documentation License
proxy's public statement of acceptance of a version permanently
authorizes you to choose that version for the Document.
- 11. RELICENSING
+ 11. RELICENSING
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
World Wide Web server that publishes copyrightable works and also
@@ -4422,7 +4422,7 @@ notices just after the title page:
Free Documentation License''.
If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
+Texts, replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with
the Front-Cover Texts being LIST, and with the Back-Cover Texts
@@ -4474,93 +4474,93 @@ Concept Index

Tag Table:
-Node: Top1733
-Node: Installing GCC2291
-Node: Prerequisites3928
-Node: Downloading the source14255
-Node: Configuration15809
-Ref: with-gnu-as30815
-Ref: with-as31713
-Ref: with-gnu-ld33126
-Node: Building80044
-Node: Testing95529
-Node: Final install103401
-Node: Binaries108715
-Node: Specific110227
-Ref: alpha-x-x110737
-Ref: alpha-dec-osf51111226
-Ref: amd64-x-solaris210111751
-Ref: arm-x-eabi111854
-Ref: avr112065
-Ref: bfin112705
-Ref: cr16112947
-Ref: cris113362
-Ref: dos114178
-Ref: epiphany-x-elf114501
-Ref: x-x-freebsd114606
-Ref: h8300-hms116443
-Ref: hppa-hp-hpux116795
-Ref: hppa-hp-hpux10119166
-Ref: hppa-hp-hpux11119579
-Ref: x-x-linux-gnu125238
-Ref: ix86-x-linux125431
-Ref: ix86-x-solaris29125744
-Ref: ix86-x-solaris210126523
-Ref: ia64-x-linux127714
-Ref: ia64-x-hpux128484
-Ref: x-ibm-aix129039
-Ref: iq2000-x-elf135902
-Ref: lm32-x-elf136042
-Ref: lm32-x-uclinux136146
-Ref: m32c-x-elf136274
-Ref: m32r-x-elf136376
-Ref: m68k-x-x136478
-Ref: m68k-x-uclinux137516
-Ref: mep-x-elf137762
-Ref: microblaze-x-elf137872
-Ref: mips-x-x137991
-Ref: mips-sgi-irix5140387
-Ref: mips-sgi-irix6140467
-Ref: moxie-x-elf140654
-Ref: powerpc-x-x140701
-Ref: powerpc-x-darwin140906
-Ref: powerpc-x-elf141400
-Ref: powerpc-x-linux-gnu141485
-Ref: powerpc-x-netbsd141580
-Ref: powerpc-x-eabisim141668
-Ref: powerpc-x-eabi141794
-Ref: powerpcle-x-elf141870
-Ref: powerpcle-x-eabisim141962
-Ref: powerpcle-x-eabi142095
-Ref: rl78-x-elf142178
-Ref: rx-x-elf142284
-Ref: s390-x-linux142483
-Ref: s390x-x-linux142555
-Ref: s390x-ibm-tpf142642
-Ref: x-x-solaris2142773
-Ref: sparc-x-x147536
-Ref: sparc-sun-solaris2148038
-Ref: sparc-sun-solaris210150792
-Ref: sparc-x-linux151168
-Ref: sparc64-x-solaris2151393
-Ref: sparcv9-x-solaris2152046
-Ref: c6x-x-x152133
-Ref: tilegx-*-linux152224
-Ref: tilepro-*-linux152343
-Ref: x-x-vxworks152464
-Ref: x86-64-x-x153986
-Ref: x86-64-x-solaris210154314
-Ref: xtensa-x-elf154976
-Ref: xtensa-x-linux155647
-Ref: windows155988
-Ref: x-x-cygwin157925
-Ref: x-x-interix158478
-Ref: x-x-mingw32158787
-Ref: older159013
-Ref: elf161130
-Node: Old161388
-Node: Configurations164525
-Node: GNU Free Documentation License168066
-Node: Concept Index193213
+Node: Top1747
+Node: Installing GCC2305
+Node: Prerequisites3942
+Node: Downloading the source14269
+Node: Configuration15823
+Ref: with-gnu-as30829
+Ref: with-as31727
+Ref: with-gnu-ld33140
+Node: Building80058
+Node: Testing95543
+Node: Final install103415
+Node: Binaries108729
+Node: Specific110241
+Ref: alpha-x-x110751
+Ref: alpha-dec-osf51111240
+Ref: amd64-x-solaris210111765
+Ref: arm-x-eabi111868
+Ref: avr112079
+Ref: bfin112719
+Ref: cr16112961
+Ref: cris113376
+Ref: dos114192
+Ref: epiphany-x-elf114515
+Ref: x-x-freebsd114620
+Ref: h8300-hms116457
+Ref: hppa-hp-hpux116809
+Ref: hppa-hp-hpux10119180
+Ref: hppa-hp-hpux11119593
+Ref: x-x-linux-gnu125252
+Ref: ix86-x-linux125445
+Ref: ix86-x-solaris29125758
+Ref: ix86-x-solaris210126537
+Ref: ia64-x-linux127728
+Ref: ia64-x-hpux128498
+Ref: x-ibm-aix129053
+Ref: iq2000-x-elf135916
+Ref: lm32-x-elf136056
+Ref: lm32-x-uclinux136160
+Ref: m32c-x-elf136288
+Ref: m32r-x-elf136390
+Ref: m68k-x-x136492
+Ref: m68k-x-uclinux137530
+Ref: mep-x-elf137776
+Ref: microblaze-x-elf137886
+Ref: mips-x-x138005
+Ref: mips-sgi-irix5140401
+Ref: mips-sgi-irix6140481
+Ref: moxie-x-elf140668
+Ref: powerpc-x-x140715
+Ref: powerpc-x-darwin140920
+Ref: powerpc-x-elf141414
+Ref: powerpc-x-linux-gnu141499
+Ref: powerpc-x-netbsd141594
+Ref: powerpc-x-eabisim141682
+Ref: powerpc-x-eabi141808
+Ref: powerpcle-x-elf141884
+Ref: powerpcle-x-eabisim141976
+Ref: powerpcle-x-eabi142109
+Ref: rl78-x-elf142192
+Ref: rx-x-elf142298
+Ref: s390-x-linux142497
+Ref: s390x-x-linux142569
+Ref: s390x-ibm-tpf142656
+Ref: x-x-solaris2142787
+Ref: sparc-x-x147550
+Ref: sparc-sun-solaris2148052
+Ref: sparc-sun-solaris210150806
+Ref: sparc-x-linux151182
+Ref: sparc64-x-solaris2151407
+Ref: sparcv9-x-solaris2152060
+Ref: c6x-x-x152147
+Ref: tilegx-*-linux152238
+Ref: tilepro-*-linux152357
+Ref: x-x-vxworks152478
+Ref: x86-64-x-x154000
+Ref: x86-64-x-solaris210154328
+Ref: xtensa-x-elf154990
+Ref: xtensa-x-linux155661
+Ref: windows156002
+Ref: x-x-cygwin157939
+Ref: x-x-interix158492
+Ref: x-x-mingw32158801
+Ref: older159027
+Ref: elf161144
+Node: Old161402
+Node: Configurations164539
+Node: GNU Free Documentation License168080
+Node: Concept Index193227

End Tag Table
diff --git a/gcc-4.8/gcc/doc/gccint.info b/gcc-4.8/gcc/doc/gccint.info
index e41c572a0..83f533215 100644
--- a/gcc-4.8/gcc/doc/gccint.info
+++ b/gcc-4.8/gcc/doc/gccint.info
@@ -1,5 +1,5 @@
-This is doc/gccint.info, produced by makeinfo version 4.13 from
-/d/gcc-4.8.1/gcc-4.8.1/gcc/doc/gccint.texi.
+This is doc/gccint.info, produced by makeinfo version 4.12 from
+/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/doc/gccint.texi.
Copyright (C) 1988-2013 Free Software Foundation, Inc.
@@ -57,7 +57,7 @@ Introduction
This manual documents the internals of the GNU compilers, including how
to port them to new targets and some information about how to write
front ends for new languages. It corresponds to the compilers
-(GCC) version 4.8.1. The use of the GNU compilers is documented in a
+(GCC) version 4.8.3. The use of the GNU compilers is documented in a
separate manual. *Note Introduction: (gcc)Top.
This manual is mainly a reference manual rather than a tutorial. It
@@ -3132,7 +3132,7 @@ that contain parts of GCC and its runtime libraries:
The Ada runtime library.
`libatomic'
- The runtime support library for atomic operations (e.g. for
+ The runtime support library for atomic operations (e.g. for
`__sync' and `__atomic').
`libcpp'
@@ -3600,7 +3600,7 @@ languages that are not enabled by default in stage1. For example,
`make f951' will build a Fortran compiler even in the stage1 build
directory.
- ---------- Footnotes ----------
+ ---------- Footnotes ----------
(1) Except if the compiler was buggy and miscompiled some of the files
that were not modified. In this case, it's best to use `make restrap'.
@@ -4935,6 +4935,12 @@ specified for the particular test in an earlier `dg-options' or
7.2.3.8 PowerPC-specific attributes
...................................
+`dfp_hw'
+ PowerPC target supports executing hardware DFP instructions.
+
+`p8vector_hw'
+ PowerPC target supports executing VSX instructions (ISA 2.07).
+
`powerpc64'
Test system supports executing 64-bit instructions.
@@ -4944,12 +4950,24 @@ specified for the particular test in an earlier `dg-options' or
`powerpc_altivec_ok'
PowerPC target supports `-maltivec'.
+`powerpc_eabi_ok'
+ PowerPC target supports `-meabi'.
+
+`powerpc_elfv2'
+ PowerPC target supports `-mabi=elfv2'.
+
`powerpc_fprs'
PowerPC target supports floating-point registers.
`powerpc_hard_double'
PowerPC target supports hardware double-precision floating-point.
+`powerpc_htm_ok'
+ PowerPC target supports `-mhtm'
+
+`powerpc_p8vector_ok'
+ PowerPC target supports `-mpower8-vector'
+
`powerpc_ppu_ok'
PowerPC target supports `-mcpu=cell'.
@@ -4963,10 +4981,6 @@ specified for the particular test in an earlier `dg-options' or
`powerpc_spu'
PowerPC target supports PowerPC SPU.
-`spu_auto_overlay'
- SPU target has toolchain that supports automatic overlay
- generation.
-
`powerpc_vsx_ok'
PowerPC target supports `-mvsx'.
@@ -4974,9 +4988,19 @@ specified for the particular test in an earlier `dg-options' or
Including the options used to compile this particular test, the
PowerPC target supports PowerPC 405.
+`ppc_recip_hw'
+ PowerPC target supports executing reciprocal estimate instructions.
+
+`spu_auto_overlay'
+ SPU target has toolchain that supports automatic overlay
+ generation.
+
`vmx_hw'
PowerPC target supports executing AltiVec instructions.
+`vsx_hw'
+ PowerPC target supports executing VSX instructions (ISA 2.06).
+
7.2.3.9 Other hardware attributes
.................................
@@ -5086,8 +5110,8 @@ specified for the particular test in an earlier `dg-options' or
non-empty string.
`simulator'
- Test system runs executables on a simulator (i.e. slowly) rather
- than hardware (i.e. fast).
+ Test system runs executables on a simulator (i.e. slowly) rather
+ than hardware (i.e. fast).
`stdint_types'
Target has the basic signed and unsigned C types in `stdint.h'.
@@ -6951,7 +6975,7 @@ run after gimplification and what source files they are located in.
Range Propagation, J. R. C. Patterson, PLDI '95). In contrast to
Patterson's algorithm, this implementation does not propagate
branch probabilities nor it uses more than a single range per SSA
- name. This means that the current implementation cannot be used
+ name. This means that the current implementation cannot be used
for branch prediction (though adapting it would not be difficult).
The pass is located in `tree-vrp.c' and is described by `pass_vrp'.
@@ -6971,7 +6995,7 @@ run after gimplification and what source files they are located in.
* Control dependence dead code elimination
This pass is a stronger form of dead code elimination that can
- eliminate unnecessary control flow statements. It is located in
+ eliminate unnecessary control flow statements. It is located in
`tree-ssa-dce.c' and is described by `pass_cd_dce'.
* Tail call elimination
@@ -7027,7 +7051,7 @@ run after gimplification and what source files they are located in.
If a function always returns the same local variable, and that
local variable is an aggregate type, then the variable is replaced
with the return value for the function (i.e., the function's
- DECL_RESULT). This is equivalent to the C++ named return value
+ DECL_RESULT). This is equivalent to the C++ named return value
optimization applied to GIMPLE. The pass is located in
`tree-nrv.c' and is described by `pass_nrv'.
@@ -8265,10 +8289,10 @@ object of `BITS_PER_UNIT' bits (*note Storage Layout::).
"Double Integer" mode represents an eight-byte integer.
`TImode'
- "Tetra Integer" (?) mode represents a sixteen-byte integer.
+ "Tetra Integer" (?) mode represents a sixteen-byte integer.
`OImode'
- "Octa Integer" (?) mode represents a thirty-two-byte integer.
+ "Octa Integer" (?) mode represents a thirty-two-byte integer.
`QFmode'
"Quarter-Floating" mode represents a quarter-precision (single
@@ -8279,7 +8303,7 @@ object of `BITS_PER_UNIT' bits (*note Storage Layout::).
floating point number.
`TQFmode'
- "Three-Quarter-Floating" (?) mode represents a
+ "Three-Quarter-Floating" (?) mode represents a
three-quarter-precision (three byte) floating point number.
`SFmode'
@@ -8840,7 +8864,7 @@ registers and to main memory.
`subreg's come in two distinct flavors, each having its own usage
and rules:
- Paradoxical subregs
+ Paradoxical subregs
When M1 is strictly wider than M2, the `subreg' expression is
called "paradoxical". The canonical test for this class of
`subreg' is:
@@ -8885,7 +8909,7 @@ registers and to main memory.
bytes to an unknown value assuming `SUBREG_PROMOTED_VAR_P' is
false.
- Normal subregs
+ Normal subregs
When M1 is at least as narrow as M2 the `subreg' expression
is called "normal".
@@ -11108,12 +11132,12 @@ case label.
Objective-C++ front ends by allowing efficient comparison between
two type nodes in `same_type_p': if the `TYPE_CANONICAL' values of
the types are equal, the types are equivalent; otherwise, the types
- are not equivalent. The notion of equivalence for canonical types
+ are not equivalent. The notion of equivalence for canonical types
is the same as the notion of type equivalence in the language
- itself. For instance,
+ itself. For instance,
When `TYPE_CANONICAL' is `NULL_TREE', there is no canonical type
- for the given type node. In this case, comparison between this
+ for the given type node. In this case, comparison between this
type and any other type requires the compiler to perform a deep,
"structural" comparison to see if the two type nodes have the same
form and properties.
@@ -11124,7 +11148,7 @@ case label.
canonical type. Similarly, `I*' and a typedef `IP' (defined to
`I*') will has `int*' as their canonical type. When building a new
type node, be sure to set `TYPE_CANONICAL' to the appropriate
- canonical type. If the new type is a compound type (built from
+ canonical type. If the new type is a compound type (built from
other types), and any of those other types require structural
equality, use `SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the
new type also requires structural equality. Finally, if for some
@@ -12663,7 +12687,7 @@ clauses used by the OpenMP API `http://www.openmp.org/'.
which is implicitly private to each thread. Bounds `N1' and `N2'
and the increment expression `INCR' are required to be loop
invariant integer expressions that are evaluated without any
- synchronization. The evaluation order, frequency of evaluation and
+ synchronization. The evaluation order, frequency of evaluation and
side-effects are unspecified by the standard.
`OMP_SECTIONS'
@@ -12711,7 +12735,7 @@ clauses used by the OpenMP API `http://www.openmp.org/'.
`OMP_RETURN'
This does not represent any OpenMP directive, it is an artificial
- marker to indicate the end of the body of an OpenMP. It is used by
+ marker to indicate the end of the body of an OpenMP. It is used by
the flow graph (`tree-cfg.c') and OpenMP region building code
(`omp-low.c').
@@ -13740,7 +13764,7 @@ at McGill University, though we have made some different choices. For
one thing, SIMPLE doesn't support `goto'.
Temporaries are introduced to hold intermediate values needed to
-compute complex expressions. Additionally, all the control structures
+compute complex expressions. Additionally, all the control structures
used in GENERIC are lowered into conditional jumps, lexical scopes are
removed and exception regions are converted into an on the side
exception region tree.
@@ -13751,7 +13775,7 @@ tuples out of the original GENERIC expressions.
One of the early implementation strategies used for the GIMPLE
representation was to use the same internal data structures used by
-front ends to represent parse trees. This simplified implementation
+front ends to represent parse trees. This simplified implementation
because we could leverage existing functionality and interfaces.
However, GIMPLE is a much more restrictive representation than abstract
syntax trees (AST), therefore it does not require the full structural
@@ -13812,14 +13836,14 @@ File: gccint.info, Node: Tuple representation, Next: GIMPLE instruction set,
GIMPLE instructions are tuples of variable size divided in two groups:
a header describing the instruction and its locations, and a variable
-length body with all the operands. Tuples are organized into a
+length body with all the operands. Tuples are organized into a
hierarchy with 3 main classes of tuples.
12.1.1 `gimple_statement_base' (gsbase)
---------------------------------------
This is the root of the hierarchy, it holds basic information needed by
-most GIMPLE statements. There are some fields that may not be relevant
+most GIMPLE statements. There are some fields that may not be relevant
to every GIMPLE statement, but those were moved into the base structure
to take advantage of holes left by other fields (thus making the
structure more compact). The structure takes 4 words (32 bytes) on 64
@@ -13845,12 +13869,12 @@ Total size 32 bytes
* `code' Main identifier for a GIMPLE instruction.
* `subcode' Used to distinguish different variants of the same basic
- instruction or provide flags applicable to a given code. The
+ instruction or provide flags applicable to a given code. The
`subcode' flags field has different uses depending on the code of
the instruction, but mostly it distinguishes instructions of the
- same family. The most prominent use of this field is in
+ same family. The most prominent use of this field is in
assignments, where subcode indicates the operation done on the RHS
- of the assignment. For example, a = b + c is encoded as
+ of the assignment. For example, a = b + c is encoded as
`GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'.
* `no_warning' Bitflag to indicate whether a warning has already
@@ -13865,7 +13889,7 @@ Total size 32 bytes
bit holes left by the previous fields.
* `plf' Pass Local Flags. This 2-bit mask can be used as general
- purpose markers by any pass. Passes are responsible for clearing
+ purpose markers by any pass. Passes are responsible for clearing
and setting these two flags accordingly.
* `modified' Bitflag to indicate whether the statement has been
@@ -13881,11 +13905,11 @@ Total size 32 bytes
memory).
* `uid' This is an unsigned integer used by passes that want to
- assign IDs to every statement. These IDs must be assigned and used
+ assign IDs to every statement. These IDs must be assigned and used
by each pass.
* `location' This is a `location_t' identifier to specify source code
- location for this statement. It is inherited from the front end.
+ location for this statement. It is inherited from the front end.
* `num_ops' Number of operands that this statement has. This
specifies the size of the operand vector embedded in the tuple.
@@ -13902,8 +13926,8 @@ Total size 32 bytes
This tuple is actually split in two: `gimple_statement_with_ops_base'
and `gimple_statement_with_ops'. This is needed to accommodate the way
-the operand vector is allocated. The operand vector is defined to be an
-array of 1 element. So, to allocate a dynamic number of operands, the
+the operand vector is allocated. The operand vector is defined to be an
+array of 1 element. So, to allocate a dynamic number of operands, the
memory allocator (`gimple_alloc') simply allocates enough memory to
hold the structure itself plus `N - 1' operands which run "off the end"
of the structure. For example, to allocate space for a tuple with 3
@@ -13925,7 +13949,7 @@ Total size 48 + 8 * `num_ops' bytes
* `def_ops' Array of pointers into the operand array indicating all
the slots that contain a variable written-to by the statement.
- This array is also used for immediate use chaining. Note that it
+ This array is also used for immediate use chaining. Note that it
would be possible to not rely on this array, but the changes
required to implement this are pretty invasive.
@@ -13956,11 +13980,11 @@ Field Size (bits)
Total size 80 + 8 * `num_ops' bytes
* `vdef_ops' Similar to `def_ops' but for `VDEF' operators. There is
- one entry per memory symbol written by this statement. This is
+ one entry per memory symbol written by this statement. This is
used to maintain the memory SSA use-def and def-def chains.
* `vuse_ops' Similar to `use_ops' but for `VUSE' operators. There is
- one entry per memory symbol loaded by this statement. This is used
+ one entry per memory symbol loaded by this statement. This is used
to maintain the memory SSA use-def chains.
* `stores' Bitset with all the UIDs for the symbols written-to by the
@@ -13974,7 +13998,7 @@ Total size 80 + 8 * `num_ops' bytes
memory utilization further by removing these sets).
All the other tuples are defined in terms of these three basic ones.
-Each tuple will add some fields. The main gimple type is defined to be
+Each tuple will add some fields. The main gimple type is defined to be
the union of all these structures (`GTY' markers elided for clarity):
union gimple_statement_d
@@ -14111,9 +14135,9 @@ value is explicitly loaded into a temporary first. Similarly, storing
the value of an expression to a memory variable goes through a
temporary.
- ---------- Footnotes ----------
+ ---------- Footnotes ----------
- (1) These restrictions are derived from those in Morgan 4.8.
+ (1) These restrictions are derived from those in Morgan 4.8.

File: gccint.info, Node: Operands, Next: Manipulating GIMPLE statements, Prev: Temporaries, Up: GIMPLE
@@ -14190,7 +14214,7 @@ branch assigning to the same temporary. So,
a = T1;
The GIMPLE level if-conversion pass re-introduces `?:' expression, if
-appropriate. It is used to vectorize loops with conditions using vector
+appropriate. It is used to vectorize loops with conditions using vector
conditional operations.
Note that in GIMPLE, `if' statements are represented using
@@ -14336,7 +14360,7 @@ exhaustive):
-- GIMPLE function: bool is_gimple_ip_invariant (tree t)
Return true if t is an interprocedural invariant. This means that
- t is a valid invariant in all functions (e.g. it can be an address
+ t is a valid invariant in all functions (e.g. it can be an address
of a global variable but not of a local one).
-- GIMPLE function: bool is_gimple_ip_invariant_address (tree t)
@@ -14838,7 +14862,7 @@ File: gccint.info, Node: `GIMPLE_CALL', Next: `GIMPLE_CATCH', Prev: `GIMPLE_B
-- GIMPLE function: void gimple_call_set_tail (gimple s)
Mark call statement `S' as being a tail call (i.e., a call just
- before the exit of a function). These calls are candidate for tail
+ before the exit of a function). These calls are candidate for tail
call optimization.
-- GIMPLE function: bool gimple_call_tail_p (gimple s)
@@ -15219,7 +15243,7 @@ File: gccint.info, Node: `GIMPLE_OMP_FOR', Next: `GIMPLE_OMP_MASTER', Prev: `
gimple_seq pre_body, enum tree_code omp_for_cond)
Build a `GIMPLE_OMP_FOR' statement. `BODY' is sequence of
statements inside the for loop. `CLAUSES', are any of the `OMP'
- loop construct's clauses: private, firstprivate, lastprivate,
+ loop construct's clauses: private, firstprivate, lastprivate,
reductions, ordered, schedule, and nowait. `PRE_BODY' is the
sequence of statements that are loop invariant. `INDEX' is the
index variable. `INITIAL' is the initial value of `INDEX'.
@@ -16454,7 +16478,7 @@ File: gccint.info, Node: SSA, Next: Alias analysis, Prev: SSA Operands, Up:
Most of the tree optimizers rely on the data flow information provided
by the Static Single Assignment (SSA) form. We implement the SSA form
as described in `R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K.
-Zadeck. Efficiently Computing Static Single Assignment Form and the
+Zadeck. Efficiently Computing Static Single Assignment Form and the
Control Dependence Graph. ACM Transactions on Programming Languages
and Systems, 13(4):451-490, October 1991'.
@@ -16816,10 +16840,10 @@ disambiguate explicit and implicit memory references.
walking statements related to a reference ref.
`walk_non_aliased_vuses' walks over dominating memory defining
statements and calls back if the statement does not clobber ref
- providing the non-aliased VUSE. The walk stops at the first
+ providing the non-aliased VUSE. The walk stops at the first
clobbering statement or if asked to. `walk_aliased_vdefs' walks
over dominating memory defining statements and calls back on each
- statement clobbering ref providing its aliasing VDEF. The walk
+ statement clobbering ref providing its aliasing VDEF. The walk
stops if asked to.
@@ -17133,7 +17157,7 @@ File: gccint.info, Node: LCSSA, Next: Scalar evolutions, Prev: Loop manipulat
=========================
Throughout the loop optimizations on tree level, one extra condition is
-enforced on the SSA form: No SSA name is used outside of the loop in
+enforced on the SSA form: No SSA name is used outside of the loop in
that it is defined. The SSA form satisfying this condition is called
"loop-closed SSA form" - LCSSA. To enforce LCSSA, PHI nodes must be
created at the exits of the loops for the SSA names that are used
@@ -17360,9 +17384,9 @@ and mapping this order to the elements of this array avoids costly
queries to the loop body representation.
Three types of data references are currently handled: ARRAY_REF,
-INDIRECT_REF and COMPONENT_REF. The data structure for the data
+INDIRECT_REF and COMPONENT_REF. The data structure for the data
reference is `data_reference', where `data_reference_p' is a name of a
-pointer to the data reference structure. The structure contains the
+pointer to the data reference structure. The structure contains the
following elements:
* `base_object_info': Provides information about the base object of
@@ -17377,10 +17401,10 @@ following elements:
* `first_location_in_loop': Provides information about the first
location accessed by the data reference in the loop and about the
access function used to represent evolution relative to this
- location. This data is used to support pointers, and is not used
- for arrays (for which we have base objects). Pointer accesses are
+ location. This data is used to support pointers, and is not used
+ for arrays (for which we have base objects). Pointer accesses are
represented as a one-dimensional access that starts from the first
- location accessed in the loop. For example:
+ location accessed in the loop. For example:
for1 i
for2 j
@@ -17461,7 +17485,7 @@ File: gccint.info, Node: Lambda, Next: Omega, Prev: Dependency analysis, Up:
Lambda is a framework that allows transformations of loops using
non-singular matrix based transformations of the iteration space and
-loop bounds. This allows compositions of skewing, scaling, interchange,
+loop bounds. This allows compositions of skewing, scaling, interchange,
and reversal transformations. These transformations are often used to
improve cache behavior or remove inner loop dependencies to allow
parallelization and vectorization to take place.
@@ -17588,7 +17612,7 @@ all the basic blocks in lexicographical order, except `ENTRY_BLOCK' and
lexicographical order, including `ENTRY_BLOCK' and `EXIT_BLOCK'.
The functions `post_order_compute' and `inverted_post_order_compute'
-can be used to compute topological orders of the CFG. The orders are
+can be used to compute topological orders of the CFG. The orders are
stored as vectors of basic block indices. The `BASIC_BLOCK' array can
be used to iterate each basic block by index. Dominator traversals are
also possible using `walk_dominator_tree'. Given two basic blocks A
@@ -18019,7 +18043,7 @@ available, including the following:
This function inserts a statement before the `gimple_stmt_iterator'
passed in. The final parameter determines whether the statement
iterator is updated to point to the newly inserted statement, or
- left pointing to the original statement.
+ left pointing to the original statement.
`gsi_remove'
This function removes the `gimple_stmt_iterator' passed in and
@@ -19934,7 +19958,7 @@ _picoChip family--`picochip.h'_
16-bit signed integer.
-_PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
+_PowerPC and IBM RS6000--`config/rs6000/constraints.md'_
`b'
Address base register
@@ -19948,17 +19972,64 @@ _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
`v'
Altivec vector register
+ `wa'
+ Any VSX register if the -mvsx option was used or NO_REGS.
+
`wd'
- VSX vector register to hold vector double data
+ VSX vector register to hold vector double data or NO_REGS.
`wf'
- VSX vector register to hold vector float data
+ VSX vector register to hold vector float data or NO_REGS.
+
+ `wg'
+ If `-mmfpgpr' was used, a floating point register or NO_REGS.
+
+ `wl'
+ Floating point register if the LFIWAX instruction is enabled
+ or NO_REGS.
+
+ `wm'
+ VSX register if direct move instructions are enabled, or
+ NO_REGS.
+
+ `wn'
+ No register (NO_REGS).
+
+ `wr'
+ General purpose register if 64-bit instructions are enabled
+ or NO_REGS.
`ws'
- VSX vector register to hold scalar float data
+ VSX vector register to hold scalar double values or NO_REGS.
- `wa'
- Any VSX register
+ `wt'
+ VSX vector register to hold 128 bit integer or NO_REGS.
+
+ `wu'
+ Altivec register to use for float/32-bit int loads/stores or
+ NO_REGS.
+
+ `wv'
+ Altivec register to use for double loads/stores or NO_REGS.
+
+ `ww'
+ FP or VSX register to perform float operations under `-mvsx'
+ or NO_REGS.
+
+ `wx'
+ Floating point register if the STFIWX instruction is enabled
+ or NO_REGS.
+
+ `wy'
+ VSX vector register to hold scalar float values or NO_REGS.
+
+ `wz'
+ Floating point register if the LFIWZX instruction is enabled
+ or NO_REGS.
+
+ `wQ'
+ A memory address that will work with the `lq' and `stq'
+ instructions.
`h'
`MQ', `CTR', or `LINK' register
@@ -20400,7 +20471,7 @@ _Blackfin family--`config/bfin/constraints.md'_
M register
`c'
- Registers used for circular buffering, i.e. I, B, or L
+ Registers used for circular buffering, i.e. I, B, or L
registers.
`C'
@@ -21784,7 +21855,7 @@ in the machine description files:
definitions with more than one alternative. Otherwise the insn
pattern should be disabled or enabled using the insn condition.)
- E.g. the following two patterns could easily be merged using the
+ E.g. the following two patterns could easily be merged using the
`enabled' attribute:
@@ -21882,27 +21953,27 @@ constraint matches.
expression, obeying the same rules as the RTL expressions in
predicate definitions. *Note Defining Predicates::, for details.
If it evaluates true, the constraint matches; if it evaluates
- false, it doesn't. Constraint expressions should indicate which
+ false, it doesn't. Constraint expressions should indicate which
RTL codes they might match, just like predicate expressions.
`match_test' C expressions have access to the following variables:
- OP
+ OP
The RTL object defining the operand.
- MODE
+ MODE
The machine mode of OP.
- IVAL
+ IVAL
`INTVAL (OP)', if OP is a `const_int'.
- HVAL
+ HVAL
`CONST_DOUBLE_HIGH (OP)', if OP is an integer `const_double'.
- LVAL
+ LVAL
`CONST_DOUBLE_LOW (OP)', if OP is an integer `const_double'.
- RVAL
+ RVAL
`CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point
`const_double'.
@@ -21966,7 +22037,7 @@ that match `const_double's or `const_int's.
Each docstring in a constraint definition should be one or more
complete sentences, marked up in Texinfo format. _They are currently
-unused._ In the future they will be copied into the GCC manual, in
+unused._ In the future they will be copied into the GCC manual, in
*note Machine Constraints::, replacing the hand-maintained tables
currently found in that section. Also, in the future the compiler may
use this to give more helpful diagnostics when poor choice of `asm'
@@ -22002,7 +22073,7 @@ not contain angle brackets or underscores are left unchanged.
Underscores are doubled, each `<' is replaced with `_l', and each `>'
with `_g'. Here are some examples:
- *Original* *Mangled*
+ *Original* *Mangled*
`x' `x'
`P42x' `P42x'
`P4_x' `P4__x'
@@ -22373,36 +22444,36 @@ pattern to accomplish a certain task.
the result.
`reduc_smin_M', `reduc_smax_M'
- Find the signed minimum/maximum of the elements of a vector. The
+ Find the signed minimum/maximum of the elements of a vector. The
vector is operand 1, and the scalar result is stored in the least
- significant bits of operand 0 (also a vector). The output and
+ significant bits of operand 0 (also a vector). The output and
input vector should have the same modes.
`reduc_umin_M', `reduc_umax_M'
- Find the unsigned minimum/maximum of the elements of a vector. The
+ Find the unsigned minimum/maximum of the elements of a vector. The
vector is operand 1, and the scalar result is stored in the least
- significant bits of operand 0 (also a vector). The output and
+ significant bits of operand 0 (also a vector). The output and
input vector should have the same modes.
`reduc_splus_M'
- Compute the sum of the signed elements of a vector. The vector is
+ Compute the sum of the signed elements of a vector. The vector is
operand 1, and the scalar result is stored in the least
significant bits of operand 0 (also a vector). The output and
input vector should have the same modes.
`reduc_uplus_M'
- Compute the sum of the unsigned elements of a vector. The vector
+ Compute the sum of the unsigned elements of a vector. The vector
is operand 1, and the scalar result is stored in the least
- significant bits of operand 0 (also a vector). The output and
+ significant bits of operand 0 (also a vector). The output and
input vector should have the same modes.
`sdot_prodM'
`udot_prodM'
Compute the sum of the products of two signed/unsigned elements.
- Operand 1 and operand 2 are of the same mode. Their product, which
- is of a wider mode, is computed and added to operand 3. Operand 3
- is of a mode equal or wider than the mode of the product. The
+ Operand 1 and operand 2 are of the same mode. Their product, which
+ is of a wider mode, is computed and added to operand 3. Operand 3
+ is of a mode equal or wider than the mode of the product. The
result is placed in operand 0, which is of the same mode as
operand 3.
@@ -22421,7 +22492,7 @@ pattern to accomplish a certain task.
output and input vectors should have the same modes.
`vec_pack_trunc_M'
- Narrow (demote) and merge the elements of two vectors. Operands 1
+ Narrow (demote) and merge the elements of two vectors. Operands 1
and 2 are vectors of the same mode having N integral or floating
point elements of size S. Operand 0 is the resulting vector in
which 2*N elements of size N/2 are concatenated after narrowing
@@ -22452,7 +22523,7 @@ pattern to accomplish a certain task.
`vec_unpacku_hi_M', `vec_unpacku_lo_M'
Extract and widen (promote) the high/low part of a vector of
unsigned integral elements. The input vector (operand 1) has N
- elements of size S. Widen (promote) the high/low elements of the
+ elements of size S. Widen (promote) the high/low elements of the
vector using zero extension and place the resulting N/2 values of
size 2*S in the output vector (operand 0).
@@ -22834,7 +22905,7 @@ pattern to accomplish a certain task.
Optional operands 5 and 6 specify expected alignment and size of
block respectively. The expected alignment differs from alignment
in operand 4 in a way that the blocks are not required to be
- aligned according to it in all cases. This expected alignment is
+ aligned according to it in all cases. This expected alignment is
also in bytes, just like operand 4. Expected size, when unknown,
is set to `(const_int -1)'.
@@ -22859,7 +22930,7 @@ pattern to accomplish a certain task.
Block set instruction. The destination string is the first
operand, given as a `mem:BLK' whose address is in mode `Pmode'.
The number of bytes to set is the second operand, in mode M. The
- value to initialize the memory with is the third operand. Targets
+ value to initialize the memory with is the third operand. Targets
that only support the clearing of memory should reject any value
that is not the constant 0. See `movmemM' for a discussion of the
choice of mode.
@@ -22872,7 +22943,7 @@ pattern to accomplish a certain task.
Optional operands 5 and 6 specify expected alignment and size of
block respectively. The expected alignment differs from alignment
in operand 4 in a way that the blocks are not required to be
- aligned according to it in all cases. This expected alignment is
+ aligned according to it in all cases. This expected alignment is
also in bytes, just like operand 4. Expected size, when unknown,
is set to `(const_int -1)'.
@@ -23150,7 +23221,7 @@ pattern to accomplish a certain task.
target and branching around an assignment of zero to the
target--or a libcall. If the predicate for operand 1 only rejects
some operators, it will also try reordering the operands and/or
- inverting the result value (e.g. by an exclusive OR). These
+ inverting the result value (e.g. by an exclusive OR). These
possibilities could be cheaper or equivalent to the instructions
used for the `cstoreMODE4' pattern followed by those required to
convert a positive result from `STORE_FLAG_VALUE' to 1; in this
@@ -23845,7 +23916,7 @@ pattern to accomplish a certain task.
`atomic_orMODE', `atomic_andMODE'
`atomic_xorMODE', `atomic_nandMODE'
These patterns emit code for an atomic operation on memory with
- memory model semantics. Operand 0 is the memory on which the
+ memory model semantics. Operand 0 is the memory on which the
atomic operation is performed. Operand 1 is the second operand to
the binary operator. Operand 2 is the memory model to be used by
the operation.
@@ -23859,7 +23930,7 @@ pattern to accomplish a certain task.
`atomic_fetch_orMODE', `atomic_fetch_andMODE'
`atomic_fetch_xorMODE', `atomic_fetch_nandMODE'
These patterns emit code for an atomic operation on memory with
- memory model semantics, and return the original value. Operand 0
+ memory model semantics, and return the original value. Operand 0
is an output operand which contains the value of the memory
location before the operation was performed. Operand 1 is the
memory on which the atomic operation is performed. Operand 2 is
@@ -24057,7 +24128,7 @@ distinct signed and unsigned flavors) as in the x86 or SPARC, and the
case where there are distinct signed and unsigned compare instructions
and only one set of conditional branch instructions as in the PowerPC.
- ---------- Footnotes ----------
+ ---------- Footnotes ----------
(1) `note' insns can separate them, though.
@@ -24308,7 +24379,7 @@ for RTL generation and it can produce more than one RTL insn.
RTL insns directly by calling routines such as `emit_insn', etc.
Any such insns precede the ones that come from the RTL template.
- * Optionally, a vector containing the values of attributes. *Note
+ * Optionally, a vector containing the values of attributes. *Note
Insn Attributes::.
Every RTL insn emitted by a `define_expand' must match some
@@ -25023,7 +25094,7 @@ The `enabled' attribute can be used to conditionally enable or disable
insn alternatives (*note Disable Insn Alternatives::). The `predicable'
attribute, together with a suitable `define_cond_exec' (*note
Conditional Execution::), can be used to automatically generate
-conditional variants of instruction patterns. The compiler internally
+conditional variants of instruction patterns. The compiler internally
uses the names `ce_enabled' and `nonce_enabled', so they should not be
used elsewhere as alternative names.
@@ -25071,12 +25142,12 @@ attributes are not free to use for other purposes:
`length'
The `length' attribute is used to calculate the length of emitted
code chunks. This is especially important when verifying branch
- distances. *Note Insn Lengths::.
+ distances. *Note Insn Lengths::.
`enabled'
The `enabled' attribute can be defined to prevent certain
alternatives of an insn definition from being used during code
- generation. *Note Disable Insn Alternatives::.
+ generation. *Note Disable Insn Alternatives::.
For each of these special attributes, the corresponding
`HAVE_ATTR_NAME' `#define' is also written when the attribute is not
@@ -25181,14 +25252,14 @@ Attribute value expressions must have one of the following forms:
The test is true if C expression C-EXPR is true. In non-constant
attributes, C-EXPR has access to the following variables:
- INSN
+ INSN
The rtl instruction under test.
- WHICH_ALTERNATIVE
+ WHICH_ALTERNATIVE
The `define_insn' alternative that INSN matches. *Note
Output Statement::.
- OPERANDS
+ OPERANDS
An array of INSN's rtl operands.
C-EXPR behaves like the condition in a C `if' statement, so there
@@ -25589,7 +25660,7 @@ there must be no insn for which tests in two `define_delay' expressions
are both true.
For example, if we have a machine that requires one delay slot for
-branches but two for calls, no delay slot can contain a branch or call
+branches but two for calls, no delay slot can contain a branch or call
insn, and any valid insn in the delay slot for the branch can be
annulled if the branch is true, we might represent this as follows:
@@ -26009,9 +26080,9 @@ construction
(define_insn_reservation "simple" 2 (eq_attr "type" "int")
"(i0_pipeline | i1_pipeline), finish")
- ---------- Footnotes ----------
+ ---------- Footnotes ----------
- (1) However, the size of the automaton depends on processor
+ (1) However, the size of the automaton depends on processor
complexity. To limit this effect, machine descriptions can split
orthogonal parts of the machine description among several automata: but
then, since each of these must be stepped independently, this does
@@ -26129,7 +26200,7 @@ source RTL template is not matched against the input-template of the
`define_subst'. In such case the copy is deleted.
`define_subst' can be used only in `define_insn' and `define_expand',
-it cannot be used in other expressions (e.g. in
+it cannot be used in other expressions (e.g. in
`define_insn_and_split').
* Menu:
@@ -27306,11 +27377,11 @@ You can control the compilation driver.
and the machine suffix.
10. The macro `STANDARD_STARTFILE_PREFIX_1', but only if this is a
- native compiler, or we have a target system root. The default for
+ native compiler, or we have a target system root. The default for
this macro is `/lib/'.
11. The macro `STANDARD_STARTFILE_PREFIX_2', but only if this is a
- native compiler, or we have a target system root. The default for
+ native compiler, or we have a target system root. The default for
this macro is `/usr/lib/'.

@@ -27404,22 +27475,22 @@ Here are run-time target specifications.
-- C Target Hook: tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree
STRING)
Targets may provide a string object type that can be used within
- and between C, C++ and their respective Objective-C dialects. A
+ and between C, C++ and their respective Objective-C dialects. A
string object might, for example, embed encoding and length
- information. These objects are considered opaque to the compiler
- and handled as references. An ideal implementation makes the
+ information. These objects are considered opaque to the compiler
+ and handled as references. An ideal implementation makes the
composition of the string object match that of the Objective-C
`NSString' (`NXString' for GNUStep), allowing efficient
- interworking between C-only and Objective-C code. If a target
+ interworking between C-only and Objective-C code. If a target
implements string objects then this hook should return a reference
to such an object constructed from the normal `C' string
- representation provided in STRING. At present, the hook is used by
+ representation provided in STRING. At present, the hook is used by
Objective-C only, to obtain a common-format string object when the
target provides one.
-- C Target Hook: void TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE
(const char *CLASSNAME)
- Declare that Objective C class CLASSNAME is referenced by the
+ Declare that Objective C class CLASSNAME is referenced by the
current TU.
-- C Target Hook: void TARGET_OBJC_DECLARE_CLASS_DEFINITION (const
@@ -27816,7 +27887,7 @@ expressions that refer to static variables, such as the `target_flags'.
-- Target Hook: HOST_WIDE_INT TARGET_VECTOR_ALIGNMENT (const_tree TYPE)
This hook can be used to define the alignment for a vector of type
- TYPE, in order to comply with a platform ABI. The default is to
+ TYPE, in order to comply with a platform ABI. The default is to
require natural alignment for vector types. The alignment
returned by this hook must be a power-of-two multiple of the
default alignment of the vector element type.
@@ -28469,7 +28540,7 @@ languages, rather than to fundamental aspects of storage layout.
By default, the vtable entries are void pointers, the so the
alignment is the same as pointer alignment. The value of this
macro specifies the alignment of the vtable entry in bits. It
- should be defined only when special alignment is necessary. */
+ should be defined only when special alignment is necessary. */
-- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE
There are a few non-descriptor entries in the vtable at offsets
@@ -29131,7 +29202,7 @@ return.
class to use when it is necessary to rename a register in class
RCLASS to another class, or perhaps NO_REGS, if no preferred
register class is found or hook `preferred_rename_class' is not
- implemented. Sometimes returning a more restrictive class makes
+ implemented. Sometimes returning a more restrictive class makes
better code. For example, on ARM, thumb-2 instructions using
`LO_REGS' may be smaller than instructions using `GENERIC_REGS'.
By returning `LO_REGS' from `preferred_rename_class', code size
@@ -29276,7 +29347,7 @@ return.
If copying a register of RELOAD_CLASS from/to X requires an
intermediate register, the hook `secondary_reload' should return
the register class required for this intermediate register. If no
- intermediate register is required, it should return NO_REGS. If
+ intermediate register is required, it should return NO_REGS. If
more than one intermediate register is required, describe the one
that is closest in the copy chain to the reload register.
@@ -29475,12 +29546,12 @@ return.
-- Target Hook: bool TARGET_LRA_P (void)
A target hook which returns true if we use LRA instead of reload
- pass. It means that LRA was ported to the target. The default
+ pass. It means that LRA was ported to the target. The default
version of this target hook returns always false.
-- Target Hook: int TARGET_REGISTER_PRIORITY (int)
A target hook which returns the register priority number to which
- the register HARD_REGNO belongs to. The bigger the number, the
+ the register HARD_REGNO belongs to. The bigger the number, the
more preferable the hard register usage (when all other conditions
are the same). This hook can be used to prefer some hard
register over others in LRA. For example, some x86-64 register
@@ -30812,7 +30883,7 @@ the stack.
**PNAME, tree *PTREE)
This target hook is used in function `c_common_nodes_and_builtins'
to iterate through the target specific builtin types for va_list.
- The variable IDX is used as iterator. PNAME has to be a pointer to
+ The variable IDX is used as iterator. PNAME has to be a pointer to
a `const char *' and PTREE a pointer to a `tree' typed variable.
The arguments PNAME and PTREE are used to store the result of this
macro and are set to the name of the va_list builtin type and its
@@ -30827,7 +30898,7 @@ the stack.
-- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE)
This hook returns the va_list type of the calling convention
- specified by the type of TYPE. If TYPE is not a valid va_list
+ specified by the type of TYPE. If TYPE is not a valid va_list
type, it returns `NULL_TREE'.
-- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree
@@ -32139,7 +32210,7 @@ This is about addressing modes.
The autovectorizer, when vectorizing a load operation from an
address ADDR that may be unaligned, will generate two vector loads
- from the two aligned addresses around ADDR. It then generates a
+ from the two aligned addresses around ADDR. It then generates a
`REALIGN_LOAD' operation to extract the relevant data from the two
loaded vectors. The first two arguments to `REALIGN_LOAD', V1 and
V2, are the two vectors, each of size VS, and the third argument,
@@ -32250,7 +32321,7 @@ TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES (void)
-- Target Hook: void TARGET_VECTORIZE_DESTROY_COST_DATA (void *DATA)
This hook should release DATA and any related data structures
- allocated by TARGET_VECTORIZE_INIT_COST. The default releases the
+ allocated by TARGET_VECTORIZE_INIT_COST. The default releases the
accumulator.
-- Target Hook: tree TARGET_VECTORIZE_BUILTIN_TM_LOAD (tree)
@@ -32507,7 +32578,7 @@ File: gccint.info, Node: MODE_CC Condition Codes, Next: Cond Exec Macros, Pre
are the left and right operands of the comparison, respectively.
If OP0_PRESERVE_VALUE is `true' the implementation is not allowed
to change the value of OP0 since the value might be used in RTXs
- which aren't comparisons. E.g. the implementation is not allowed
+ which aren't comparisons. E.g. the implementation is not allowed
to swap operands in that case.
GCC will not assume that the comparison resulting from this macro
@@ -32692,7 +32763,7 @@ on the target machine.
Parameter SPEED_P is true when the branch in question should be
optimized for speed. When it is false, `BRANCH_COST' should
return a value optimal for code size rather than performance.
- PREDICTABLE_P is true for well-predicted branches. On many
+ PREDICTABLE_P is true for well-predicted branches. On many
architectures the `BRANCH_COST' can be reduced then.
Here are additional macros which do not specify precise relative costs,
@@ -33520,7 +33591,7 @@ target does not provide them.
-- Target Hook: section * TARGET_ASM_TM_CLONE_TABLE_SECTION (void)
Return the section that should be used for transactional memory
- clone tables.
+ clone tables.
-- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (enum
machine_mode MODE, rtx X, unsigned HOST_WIDE_INT ALIGN)
@@ -36414,7 +36485,7 @@ File: gccint.info, Node: C++ ABI, Next: Named Address Spaces, Prev: PCH Targe
in the same manner as `__cxa_atexit' to register C++ static
destructors. This requires that `atexit'-registered functions in
shared libraries are run in the correct order when the libraries
- are unloaded. The default is to return false.
+ are unloaded. The default is to return false.
-- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE)
TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has
@@ -37032,10 +37103,10 @@ Here are several miscellaneous parameters.
-- Macro: TARGET_POSIX_IO
Define this macro if the target supports the following POSIX file
- functions, access, mkdir and file locking with fcntl / F_SETLKW.
+ functions, access, mkdir and file locking with fcntl / F_SETLKW.
Defining `TARGET_POSIX_IO' will enable the test coverage code to
use file locking when exiting a program, which avoids race
- conditions if the program has forked. It will also create
+ conditions if the program has forked. It will also create
directories at run-time for cross-profiling.
-- Macro: MAX_CONDITIONAL_EXECUTE
@@ -37186,7 +37257,7 @@ Here are several miscellaneous parameters.
low-overhead loop, otherwise return a string explaining why doloop
could not be applied.
- Many targets use special registers for low-overhead looping. For
+ Many targets use special registers for low-overhead looping. For
any instruction that clobbers these this function should return a
string indicating the reason why the doloop could not be applied.
By default, the RTL loop optimizer does not use a present doloop
@@ -37208,10 +37279,10 @@ Here are several miscellaneous parameters.
-- Target Hook: bool TARGET_CAN_FOLLOW_JUMP (const_rtx FOLLOWER,
const_rtx FOLLOWEE)
- FOLLOWER and FOLLOWEE are JUMP_INSN instructions; return true if
- FOLLOWER may be modified to follow FOLLOWEE; false, if it can't.
+ FOLLOWER and FOLLOWEE are JUMP_INSN instructions; return true if
+ FOLLOWER may be modified to follow FOLLOWEE; false, if it can't.
For example, on some targets, certain kinds of branches can't be
- made to follow through a hot/cold partitioning.
+ made to follow through a hot/cold partitioning.
-- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE)
This target hook returns `true' if X is considered to be
@@ -37340,9 +37411,9 @@ Here are several miscellaneous parameters.
-- Target Hook: unsigned TARGET_LOOP_UNROLL_ADJUST (unsigned NUNROLL,
struct loop *LOOP)
This target hook returns a new value for the number of times LOOP
- should be unrolled. The parameter NUNROLL is the number of times
- the loop is to be unrolled. The parameter LOOP is a pointer to the
- loop, which is going to be checked for unrolling. This target hook
+ should be unrolled. The parameter NUNROLL is the number of times
+ the loop is to be unrolled. The parameter LOOP is a pointer to the
+ loop, which is going to be checked for unrolling. This target hook
is required only when the target has special constraints like
maximum number of memory accesses.
@@ -37474,13 +37545,13 @@ Here are several miscellaneous parameters.
-- Macro: TARGET_USE_JCR_SECTION
This macro determines whether to use the JCR section to register
- Java classes. By default, TARGET_USE_JCR_SECTION is defined to 1
+ Java classes. By default, TARGET_USE_JCR_SECTION is defined to 1
if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true,
else 0.
-- Macro: OBJC_JBLEN
This macro determines the size of the objective C jump buffer for
- the NeXT runtime. By default, OBJC_JBLEN is defined to an
+ the NeXT runtime. By default, OBJC_JBLEN is defined to an
innocuous value.
-- Macro: LIBGCC2_UNWIND_ATTRIBUTE
@@ -37516,7 +37587,7 @@ Here are several miscellaneous parameters.
synthesize a constant. If there is another constant already in a
register that is close enough in value then it is preferable that
the new constant is computed from this register using immediate
- addition or subtraction. We accomplish this through CSE. Besides
+ addition or subtraction. We accomplish this through CSE. Besides
the value of the constant we also add a lower and an upper
constant anchor to the available expressions. These are then
queried when encountering new constants. The anchors are computed
@@ -37535,7 +37606,7 @@ Here are several miscellaneous parameters.
-- Target Hook: unsigned HOST_WIDE_INT TARGET_MEMMODEL_CHECK (unsigned
HOST_WIDE_INT VAL)
- Validate target specific memory model mask bits. When NULL no
+ Validate target specific memory model mask bits. When NULL no
target specific memory model bits are allowed.
-- Target Hook: unsigned char TARGET_ATOMIC_TEST_AND_SET_TRUEVAL
@@ -38600,7 +38671,7 @@ In these snippets, there is only one type `T', but there could be more.
gt_pch_nx (&(tp->fld), op, cookie);
}
- Support for user-defined types is currently limited. The following
+ Support for user-defined types is currently limited. The following
restrictions apply:
1. Type `TP' and all the argument types `T' must be marked with `GTY'.
@@ -38697,9 +38768,9 @@ File: gccint.info, Node: Invoking the garbage collector, Next: Troubleshooting
22.5 How to invoke the garbage collector
========================================
-The GCC garbage collector GGC is only invoked explicitly. In contrast
+The GCC garbage collector GGC is only invoked explicitly. In contrast
with many other garbage collectors, it is not implicitly invoked by
-allocation routines when a lot of memory has been consumed. So the only
+allocation routines when a lot of memory has been consumed. So the only
way to have GGC reclaim storage is to call the `ggc_collect' function
explicitly. This call is an expensive operation, as it may have to
scan the entire heap. Beware that local variables (on the GCC call
@@ -38830,7 +38901,7 @@ this is enough:
----------------------------
Every plugin should export a function called `plugin_init' that is
-called right after the plugin is loaded. This function is responsible
+called right after the plugin is loaded. This function is responsible
for registering all the callbacks required by the plugin and do any
other required initialization.
@@ -38872,7 +38943,7 @@ following structure:
};
The function `plugin_default_version_check' takes two pointers to such
-structure and compare them field by field. It can be used by the
+structure and compare them field by field. It can be used by the
plugin's `plugin_init' function.
The version of GCC used to compile the plugin can be found in the
@@ -38977,12 +39048,12 @@ File: gccint.info, Node: Plugins pass, Next: Plugins GC, Prev: Plugin API, U
23.3 Interacting with the pass manager
======================================
-There needs to be a way to add/reorder/remove passes dynamically. This
+There needs to be a way to add/reorder/remove passes dynamically. This
is useful for both analysis plugins (plugging in after a certain pass
such as CFG or an IPA pass) and optimization plugins.
Basic support for inserting new passes or replacing existing passes is
-provided. A plugin registers a new pass with GCC by calling
+provided. A plugin registers a new pass with GCC by calling
`register_callback' with the `PLUGIN_PASS_MANAGER_SETUP' event and a
pointer to a `struct register_pass_info' object defined as follows
@@ -39031,19 +39102,19 @@ File: gccint.info, Node: Plugins GC, Next: Plugins description, Prev: Plugins
===============================================
Some plugins may want to be informed when GGC (the GCC Garbage
-Collector) is running. They can register callbacks for the
+Collector) is running. They can register callbacks for the
`PLUGIN_GGC_START' and `PLUGIN_GGC_END' events (for which the callback
is called with a null `gcc_data') to be notified of the start or end of
the GCC garbage collection.
- Some plugins may need to have GGC mark additional data. This can be
+ Some plugins may need to have GGC mark additional data. This can be
done by registering a callback (called with a null `gcc_data') for the
`PLUGIN_GGC_MARKING' event. Such callbacks can call the `ggc_set_mark'
routine, preferably through the `ggc_mark' macro (and conversely, these
routines should usually not be used in plugins outside of the
`PLUGIN_GGC_MARKING' event).
- Some plugins may need to add extra GGC root tables, e.g. to handle
+ Some plugins may need to add extra GGC root tables, e.g. to handle
their own `GTY'-ed data. This can be done with the
`PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the
extra root table (of type `struct ggc_root_tab*') as `user_data'.
@@ -39064,7 +39135,7 @@ File: gccint.info, Node: Plugins description, Next: Plugins attr, Prev: Plugi
23.5 Giving information about a plugin
======================================
-A plugin should give some information to the user about itself. This
+A plugin should give some information to the user about itself. This
uses the following structure:
struct plugin_info
@@ -39390,7 +39461,7 @@ dealing with the reading/writing of each section are described below.
* Symbol table (`.gnu.lto_.symtab')
This table replaces the ELF symbol table for functions and
- variables represented in the LTO IL. Symbols used and exported by
+ variables represented in the LTO IL. Symbols used and exported by
the optimized assembly code of "fat" objects might not match the
ones used and exported by the intermediate code. This table is
necessary because the intermediate code is less optimized and thus
@@ -39716,7 +39787,7 @@ made. The linker plugin obtains the symbol resolution information
which specifies which symbols provided by the claimed objects are bound
from the rest of a binary being linked.
- Currently, the linker plugin works only in combination with the Gold
+ Currently, the linker plugin works only in combination with the Gold
linker, but a GNU ld implementation is under development.
GCC is designed to be independent of the rest of the toolchain and
@@ -40301,7 +40372,7 @@ TERMS AND CONDITIONS
by modifying or propagating a covered work, you indicate your
acceptance of this License to do so.
- 10. Automatic Licensing of Downstream Recipients.
+ 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
@@ -40329,7 +40400,7 @@ TERMS AND CONDITIONS
using, selling, offering for sale, or importing the Program or any
portion of it.
- 11. Patents.
+ 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.
@@ -40402,7 +40473,7 @@ TERMS AND CONDITIONS
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
- 12. No Surrender of Others' Freedom.
+ 12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order,
agreement or otherwise) that contradict the conditions of this
@@ -40416,7 +40487,7 @@ TERMS AND CONDITIONS
terms and this License would be to refrain entirely from conveying
the Program.
- 13. Use with the GNU Affero General Public License.
+ 13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
@@ -40427,7 +40498,7 @@ TERMS AND CONDITIONS
General Public License, section 13, concerning interaction through
a network will apply to the combination as such.
- 14. Revised Versions of this License.
+ 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new
versions of the GNU General Public License from time to time.
@@ -40454,19 +40525,19 @@ TERMS AND CONDITIONS
author or copyright holder as a result of your choosing to follow a
later version.
- 15. Disclaimer of Warranty.
+ 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
- APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
NECESSARY SERVICING, REPAIR OR CORRECTION.
- 16. Limitation of Liability.
+ 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
@@ -40479,7 +40550,7 @@ TERMS AND CONDITIONS
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
THE POSSIBILITY OF SUCH DAMAGES.
- 17. Interpretation of Sections 15 and 16.
+ 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
@@ -40952,7 +41023,7 @@ GNU Free Documentation License
not permanently reinstated, receipt of a copy of some or all of
the same material does not give you any rights to use it.
- 10. FUTURE REVISIONS OF THIS LICENSE
+ 10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of
the GNU Free Documentation License from time to time. Such new
@@ -40973,7 +41044,7 @@ GNU Free Documentation License
proxy's public statement of acceptance of a version permanently
authorizes you to choose that version for the Document.
- 11. RELICENSING
+ 11. RELICENSING
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
World Wide Web server that publishes copyrightable works and also
@@ -41020,7 +41091,7 @@ notices just after the title page:
Free Documentation License''.
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the "with...Texts." line with this:
+replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with
the Front-Cover Texts being LIST, and with the Back-Cover Texts
@@ -41980,7 +42051,7 @@ GCC version 4.1:
and improvements.
* Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
- 2D support. Lots of imageio framework additions, lots of AWT and
+ 2D support. Lots of imageio framework additions, lots of AWT and
Free Swing bug fixes.
* Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
@@ -42015,7 +42086,7 @@ GCC version 4.1:
* Ito Kazumitsu for `NetworkInterface' implementation and updates.
* Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
- bug fixes all over. Lots of Free Swing work including styled text.
+ bug fixes all over. Lots of Free Swing work including styled text.
* Simon Kitching for `String' cleanups and optimization suggestions.
@@ -49400,373 +49471,373 @@ Concept Index

Tag Table:
-Node: Top1828
-Node: Contributing4916
-Node: Portability5657
-Node: Interface7445
-Node: Libgcc10485
-Node: Integer library routines12326
-Node: Soft float library routines19168
-Node: Decimal float library routines31105
-Node: Fixed-point fractional library routines46862
-Node: Exception handling routines147260
-Node: Miscellaneous routines148367
-Node: Languages150487
-Node: Source Tree152036
-Node: Configure Terms152618
-Node: Top Level155576
-Node: gcc Directory159150
-Node: Subdirectories160100
-Node: Configuration162267
-Node: Config Fragments162987
-Node: System Config164216
-Node: Configuration Files165152
-Node: Build167977
-Node: Makefile168389
-Ref: Makefile-Footnote-1175192
-Ref: Makefile-Footnote-2175337
-Node: Library Files175409
-Node: Headers175971
-Node: Documentation178054
-Node: Texinfo Manuals178913
-Node: Man Page Generation181246
-Node: Miscellaneous Docs183161
-Node: Front End184555
-Node: Front End Directory188248
-Node: Front End Config189568
-Node: Front End Makefile192394
-Node: Back End196176
-Node: Testsuites199973
-Node: Test Idioms200904
-Node: Test Directives204301
-Node: Directives204828
-Node: Selectors215138
-Node: Effective-Target Keywords216496
-Ref: arm_neon_ok224055
-Ref: arm_neonv2_ok224213
-Ref: arm_neon_fp16_ok224385
-Node: Add Options234186
-Node: Require Support235383
-Node: Final Actions237890
-Node: Ada Tests243057
-Node: C Tests244389
-Node: libgcj Tests248812
-Node: LTO Testing249939
-Node: gcov Testing251586
-Node: profopt Testing254573
-Node: compat Testing256288
-Node: Torture Tests260528
-Node: Options262145
-Node: Option file format262585
-Node: Option properties269575
-Node: Passes282454
-Node: Parsing pass283198
-Node: Gimplification pass286728
-Node: Pass manager288561
-Node: Tree SSA passes290355
-Node: RTL passes312827
-Node: RTL325958
-Node: RTL Objects328146
-Node: RTL Classes332020
-Node: Accessors337018
-Node: Special Accessors339412
-Node: Flags345182
-Node: Machine Modes359906
-Node: Constants372218
-Node: Regs and Memory378948
-Node: Arithmetic396849
-Node: Comparisons406939
-Node: Bit-Fields411231
-Node: Vector Operations412783
-Node: Conversions414665
-Node: RTL Declarations419163
-Node: Side Effects419984
-Node: Incdec436584
-Node: Assembler439919
-Node: Debug Information441464
-Node: Insns442662
-Node: Calls469156
-Node: Sharing471749
-Node: Reading RTL474859
-Node: GENERIC475851
-Node: Deficiencies477724
-Node: Tree overview477965
-Node: Macros and Functions482092
-Node: Identifiers482917
-Node: Containers484528
-Node: Types485685
-Node: Declarations497781
-Node: Working with declarations498276
-Node: Internal structure503882
-Node: Current structure hierarchy504266
-Node: Adding new DECL node types506360
-Node: Attributes510433
-Node: Expression trees511678
-Node: Constant expressions513431
-Node: Storage References517650
-Node: Unary and Binary Expressions521169
-Node: Vectors541031
-Node: Statements545758
-Node: Basic Statements546278
-Node: Blocks550785
-Node: Statement Sequences552189
-Node: Empty Statements552522
-Node: Jumps553096
-Node: Cleanups553749
-Node: OpenMP555517
-Node: Functions561357
-Node: Function Basics561828
-Node: Function Properties565513
-Node: Language-dependent trees568295
-Node: C and C++ Trees569181
-Node: Types for C++572085
-Node: Namespaces577063
-Node: Classes580170
-Node: Functions for C++585248
-Node: Statements for C++591501
-Node: C++ Expressions599549
-Node: Java Trees601050
-Node: GIMPLE601163
-Node: Tuple representation604784
-Node: GIMPLE instruction set613060
-Node: GIMPLE Exception Handling614728
-Node: Temporaries616642
-Ref: Temporaries-Footnote-1617957
-Node: Operands618020
-Node: Compound Expressions618782
-Node: Compound Lvalues619016
-Node: Conditional Expressions619778
-Node: Logical Operators620436
-Node: Manipulating GIMPLE statements627193
-Node: Tuple specific accessors633127
-Node: `GIMPLE_ASM'633946
-Node: `GIMPLE_ASSIGN'636579
-Node: `GIMPLE_BIND'640685
-Node: `GIMPLE_CALL'642492
-Node: `GIMPLE_CATCH'646762
-Node: `GIMPLE_COND'647906
-Node: `GIMPLE_DEBUG'650694
-Node: `GIMPLE_EH_FILTER'654077
-Node: `GIMPLE_LABEL'655565
-Node: `GIMPLE_NOP'656540
-Node: `GIMPLE_OMP_ATOMIC_LOAD'656909
-Node: `GIMPLE_OMP_ATOMIC_STORE'657819
-Node: `GIMPLE_OMP_CONTINUE'658458
-Node: `GIMPLE_OMP_CRITICAL'659808
-Node: `GIMPLE_OMP_FOR'660745
-Node: `GIMPLE_OMP_MASTER'664260
-Node: `GIMPLE_OMP_ORDERED'664643
-Node: `GIMPLE_OMP_PARALLEL'665043
-Node: `GIMPLE_OMP_RETURN'667815
-Node: `GIMPLE_OMP_SECTION'668465
-Node: `GIMPLE_OMP_SECTIONS'669131
-Node: `GIMPLE_OMP_SINGLE'670737
-Node: `GIMPLE_PHI'671674
-Node: `GIMPLE_RESX'672960
-Node: `GIMPLE_RETURN'673679
-Node: `GIMPLE_SWITCH'674247
-Node: `GIMPLE_TRY'676047
-Node: `GIMPLE_WITH_CLEANUP_EXPR'677837
-Node: GIMPLE sequences678720
-Node: Sequence iterators681926
-Node: Adding a new GIMPLE statement code690382
-Node: Statement and operand traversals691658
-Node: Tree SSA694258
-Node: Annotations696044
-Node: SSA Operands696570
-Node: SSA711101
-Node: Alias analysis723221
-Node: Memory model727001
-Node: Loop Analysis and Representation728364
-Node: Loop representation729545
-Node: Loop querying736465
-Node: Loop manipulation739298
-Node: LCSSA741666
-Node: Scalar evolutions743738
-Node: loop-iv746982
-Node: Number of iterations748908
-Node: Dependency analysis751717
-Node: Lambda758085
-Node: Omega759756
-Node: Control Flow761321
-Node: Basic Blocks763087
-Node: Edges768378
-Node: Profile information777010
-Node: Maintaining the CFG781694
-Node: Liveness information787556
-Node: Machine Desc789682
-Node: Overview792245
-Node: Patterns794286
-Node: Example797724
-Node: RTL Template799159
-Node: Output Template809814
-Node: Output Statement813779
-Node: Predicates818118
-Node: Machine-Independent Predicates821036
-Node: Defining Predicates825981
-Node: Constraints831946
-Node: Simple Constraints833428
-Node: Multi-Alternative846284
-Node: Class Preferences849125
-Node: Modifiers850017
-Node: Machine Constraints854263
-Node: Disable Insn Alternatives904313
-Node: Define Constraints907215
-Node: C Constraint Interface914002
-Node: Standard Names917643
-Ref: shift patterns940194
-Ref: prologue instruction pattern985134
-Ref: window_save instruction pattern985627
-Ref: epilogue instruction pattern985902
-Node: Pattern Ordering1003473
-Node: Dependent Patterns1004709
-Node: Jump Patterns1006329
-Ref: Jump Patterns-Footnote-11008473
-Node: Looping Patterns1008519
-Node: Insn Canonicalizations1013247
-Node: Expander Definitions1017838
-Node: Insn Splitting1026050
-Node: Including Patterns1035652
-Node: Peephole Definitions1037432
-Node: define_peephole1038685
-Node: define_peephole21045016
-Node: Insn Attributes1048083
-Node: Defining Attributes1049189
-Ref: define_enum_attr1052400
-Node: Expressions1053435
-Node: Tagging Insns1060184
-Node: Attr Example1064537
-Node: Insn Lengths1066911
-Node: Constant Attributes1069970
-Node: Delay Slots1071139
-Node: Processor pipeline description1074363
-Ref: Processor pipeline description-Footnote-11093176
-Node: Conditional Execution1093498
-Node: Define Subst1096560
-Node: Define Subst Example1098594
-Node: Define Subst Pattern Matching1101588
-Node: Define Subst Output Template1102813
-Node: Constant Definitions1104883
-Ref: define_enum1108665
-Node: Iterators1109153
-Node: Mode Iterators1109731
-Node: Defining Mode Iterators1110709
-Node: Substitutions1112203
-Node: Examples1114444
-Node: Code Iterators1115892
-Node: Int Iterators1118171
-Node: Subst Iterators1120629
-Node: Target Macros1122321
-Node: Target Structure1125409
-Node: Driver1127524
-Node: Run-time Target1146307
-Node: Per-Function Data1155460
-Node: Storage Layout1158225
-Node: Type Layout1184300
-Node: Registers1199627
-Node: Register Basics1200601
-Node: Allocation Order1206106
-Node: Values in Registers1208552
-Node: Leaf Functions1216041
-Node: Stack Registers1218899
-Node: Register Classes1220171
-Node: Old Constraints1250176
-Node: Stack and Calling1257328
-Node: Frame Layout1257862
-Node: Exception Handling1268742
-Node: Stack Checking1274964
-Node: Frame Registers1279777
-Node: Elimination1288036
-Node: Stack Arguments1292265
-Node: Register Arguments1299127
-Node: Scalar Return1319443
-Node: Aggregate Return1325529
-Node: Caller Saves1329739
-Node: Function Entry1330917
-Node: Profiling1342021
-Node: Tail Calls1343720
-Node: Stack Smashing Protection1345623
-Node: Varargs1347251
-Node: Trampolines1353947
-Node: Library Calls1359990
-Node: Addressing Modes1364929
-Node: Anchored Addresses1384963
-Node: Condition Code1387612
-Node: CC0 Condition Codes1389741
-Node: MODE_CC Condition Codes1392987
-Node: Cond Exec Macros1399508
-Node: Costs1399854
-Node: Scheduling1416323
-Node: Sections1435729
-Node: PIC1451427
-Node: Assembler Format1453487
-Node: File Framework1454625
-Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1461566
-Node: Data Output1464831
-Node: Uninitialized Data1472607
-Node: Label Output1477618
-Node: Initialization1500586
-Node: Macros for Initialization1506548
-Node: Instruction Output1513271
-Node: Dispatch Tables1523773
-Node: Exception Region Output1528151
-Node: Alignment Output1534834
-Node: Debugging Info1539379
-Node: All Debuggers1540049
-Node: DBX Options1542904
-Node: DBX Hooks1548353
-Node: File Names and DBX1549662
-Node: SDB and DWARF1551774
-Node: VMS Debug1557846
-Node: Floating Point1558433
-Node: Mode Switching1562909
-Node: Target Attributes1566905
-Node: Emulated TLS1575219
-Node: MIPS Coprocessors1578609
-Node: PCH Target1579906
-Node: C++ ABI1581748
-Node: Named Address Spaces1586540
-Node: Misc1591479
-Ref: TARGET_SHIFT_TRUNCATION_MASK1598221
-Node: Host Config1643387
-Node: Host Common1644455
-Node: Filesystem1646834
-Node: Host Misc1650949
-Node: Fragments1653398
-Node: Target Fragment1654593
-Node: Host Fragment1665226
-Node: Collect21665466
-Node: Header Dirs1668102
-Node: Type Information1669525
-Node: GTY Options1672748
-Node: User GC1687069
-Node: GGC Roots1690796
-Node: Files1691512
-Node: Invoking the garbage collector1694219
-Node: Troubleshooting1695722
-Node: Plugins1696798
-Node: Plugins loading1697916
-Node: Plugin API1698785
-Node: Plugins pass1705814
-Node: Plugins GC1707783
-Node: Plugins description1709443
-Node: Plugins attr1709978
-Node: Plugins recording1711863
-Node: Plugins gate1712713
-Node: Plugins tracking1713304
-Node: Plugins building1713892
-Node: LTO1715678
-Node: LTO Overview1716539
-Node: LTO object file layout1722371
-Node: IPA1727003
-Node: WHOPR1735968
-Node: Internal flags1740659
-Node: Funding1741871
-Node: GNU Project1744354
-Node: Copying1745003
-Node: GNU Free Documentation License1782534
-Node: Contributors1807674
-Node: Option Index1845079
-Node: Concept Index1845883
+Node: Top1842
+Node: Contributing4930
+Node: Portability5671
+Node: Interface7459
+Node: Libgcc10499
+Node: Integer library routines12340
+Node: Soft float library routines19182
+Node: Decimal float library routines31119
+Node: Fixed-point fractional library routines46876
+Node: Exception handling routines147274
+Node: Miscellaneous routines148381
+Node: Languages150501
+Node: Source Tree152050
+Node: Configure Terms152632
+Node: Top Level155590
+Node: gcc Directory159164
+Node: Subdirectories160114
+Node: Configuration162281
+Node: Config Fragments163001
+Node: System Config164230
+Node: Configuration Files165166
+Node: Build167991
+Node: Makefile168403
+Ref: Makefile-Footnote-1175206
+Ref: Makefile-Footnote-2175351
+Node: Library Files175423
+Node: Headers175985
+Node: Documentation178068
+Node: Texinfo Manuals178927
+Node: Man Page Generation181260
+Node: Miscellaneous Docs183175
+Node: Front End184569
+Node: Front End Directory188262
+Node: Front End Config189582
+Node: Front End Makefile192408
+Node: Back End196190
+Node: Testsuites199987
+Node: Test Idioms200918
+Node: Test Directives204315
+Node: Directives204842
+Node: Selectors215152
+Node: Effective-Target Keywords216510
+Ref: arm_neon_ok224069
+Ref: arm_neonv2_ok224227
+Ref: arm_neon_fp16_ok224399
+Node: Add Options234770
+Node: Require Support235967
+Node: Final Actions238474
+Node: Ada Tests243641
+Node: C Tests244973
+Node: libgcj Tests249396
+Node: LTO Testing250523
+Node: gcov Testing252170
+Node: profopt Testing255157
+Node: compat Testing256872
+Node: Torture Tests261112
+Node: Options262729
+Node: Option file format263169
+Node: Option properties270159
+Node: Passes283038
+Node: Parsing pass283782
+Node: Gimplification pass287312
+Node: Pass manager289145
+Node: Tree SSA passes290939
+Node: RTL passes313411
+Node: RTL326542
+Node: RTL Objects328730
+Node: RTL Classes332604
+Node: Accessors337602
+Node: Special Accessors339996
+Node: Flags345766
+Node: Machine Modes360490
+Node: Constants372802
+Node: Regs and Memory379532
+Node: Arithmetic397433
+Node: Comparisons407523
+Node: Bit-Fields411815
+Node: Vector Operations413367
+Node: Conversions415249
+Node: RTL Declarations419747
+Node: Side Effects420568
+Node: Incdec437168
+Node: Assembler440503
+Node: Debug Information442048
+Node: Insns443246
+Node: Calls469740
+Node: Sharing472333
+Node: Reading RTL475443
+Node: GENERIC476435
+Node: Deficiencies478308
+Node: Tree overview478549
+Node: Macros and Functions482676
+Node: Identifiers483501
+Node: Containers485112
+Node: Types486269
+Node: Declarations498365
+Node: Working with declarations498860
+Node: Internal structure504466
+Node: Current structure hierarchy504850
+Node: Adding new DECL node types506944
+Node: Attributes511017
+Node: Expression trees512262
+Node: Constant expressions514015
+Node: Storage References518234
+Node: Unary and Binary Expressions521753
+Node: Vectors541615
+Node: Statements546342
+Node: Basic Statements546862
+Node: Blocks551369
+Node: Statement Sequences552773
+Node: Empty Statements553106
+Node: Jumps553680
+Node: Cleanups554333
+Node: OpenMP556101
+Node: Functions561941
+Node: Function Basics562412
+Node: Function Properties566097
+Node: Language-dependent trees568879
+Node: C and C++ Trees569765
+Node: Types for C++572669
+Node: Namespaces577647
+Node: Classes580754
+Node: Functions for C++585832
+Node: Statements for C++592085
+Node: C++ Expressions600133
+Node: Java Trees601634
+Node: GIMPLE601747
+Node: Tuple representation605368
+Node: GIMPLE instruction set613644
+Node: GIMPLE Exception Handling615312
+Node: Temporaries617226
+Ref: Temporaries-Footnote-1618541
+Node: Operands618604
+Node: Compound Expressions619366
+Node: Compound Lvalues619600
+Node: Conditional Expressions620362
+Node: Logical Operators621020
+Node: Manipulating GIMPLE statements627777
+Node: Tuple specific accessors633711
+Node: `GIMPLE_ASM'634530
+Node: `GIMPLE_ASSIGN'637163
+Node: `GIMPLE_BIND'641269
+Node: `GIMPLE_CALL'643076
+Node: `GIMPLE_CATCH'647346
+Node: `GIMPLE_COND'648490
+Node: `GIMPLE_DEBUG'651278
+Node: `GIMPLE_EH_FILTER'654661
+Node: `GIMPLE_LABEL'656149
+Node: `GIMPLE_NOP'657124
+Node: `GIMPLE_OMP_ATOMIC_LOAD'657493
+Node: `GIMPLE_OMP_ATOMIC_STORE'658403
+Node: `GIMPLE_OMP_CONTINUE'659042
+Node: `GIMPLE_OMP_CRITICAL'660392
+Node: `GIMPLE_OMP_FOR'661329
+Node: `GIMPLE_OMP_MASTER'664844
+Node: `GIMPLE_OMP_ORDERED'665227
+Node: `GIMPLE_OMP_PARALLEL'665627
+Node: `GIMPLE_OMP_RETURN'668399
+Node: `GIMPLE_OMP_SECTION'669049
+Node: `GIMPLE_OMP_SECTIONS'669715
+Node: `GIMPLE_OMP_SINGLE'671321
+Node: `GIMPLE_PHI'672258
+Node: `GIMPLE_RESX'673544
+Node: `GIMPLE_RETURN'674263
+Node: `GIMPLE_SWITCH'674831
+Node: `GIMPLE_TRY'676631
+Node: `GIMPLE_WITH_CLEANUP_EXPR'678421
+Node: GIMPLE sequences679304
+Node: Sequence iterators682510
+Node: Adding a new GIMPLE statement code690966
+Node: Statement and operand traversals692242
+Node: Tree SSA694842
+Node: Annotations696628
+Node: SSA Operands697154
+Node: SSA711685
+Node: Alias analysis723805
+Node: Memory model727585
+Node: Loop Analysis and Representation728948
+Node: Loop representation730129
+Node: Loop querying737049
+Node: Loop manipulation739882
+Node: LCSSA742250
+Node: Scalar evolutions744322
+Node: loop-iv747566
+Node: Number of iterations749492
+Node: Dependency analysis752301
+Node: Lambda758669
+Node: Omega760340
+Node: Control Flow761905
+Node: Basic Blocks763671
+Node: Edges768962
+Node: Profile information777594
+Node: Maintaining the CFG782278
+Node: Liveness information788140
+Node: Machine Desc790266
+Node: Overview792829
+Node: Patterns794870
+Node: Example798308
+Node: RTL Template799743
+Node: Output Template810398
+Node: Output Statement814363
+Node: Predicates818702
+Node: Machine-Independent Predicates821620
+Node: Defining Predicates826565
+Node: Constraints832530
+Node: Simple Constraints834012
+Node: Multi-Alternative846868
+Node: Class Preferences849709
+Node: Modifiers850601
+Node: Machine Constraints854847
+Node: Disable Insn Alternatives906156
+Node: Define Constraints909058
+Node: C Constraint Interface915845
+Node: Standard Names919486
+Ref: shift patterns942037
+Ref: prologue instruction pattern986977
+Ref: window_save instruction pattern987470
+Ref: epilogue instruction pattern987745
+Node: Pattern Ordering1005316
+Node: Dependent Patterns1006552
+Node: Jump Patterns1008172
+Ref: Jump Patterns-Footnote-11010316
+Node: Looping Patterns1010362
+Node: Insn Canonicalizations1015090
+Node: Expander Definitions1019681
+Node: Insn Splitting1027893
+Node: Including Patterns1037495
+Node: Peephole Definitions1039275
+Node: define_peephole1040528
+Node: define_peephole21046859
+Node: Insn Attributes1049926
+Node: Defining Attributes1051032
+Ref: define_enum_attr1054243
+Node: Expressions1055278
+Node: Tagging Insns1062027
+Node: Attr Example1066380
+Node: Insn Lengths1068754
+Node: Constant Attributes1071813
+Node: Delay Slots1072982
+Node: Processor pipeline description1076206
+Ref: Processor pipeline description-Footnote-11095019
+Node: Conditional Execution1095341
+Node: Define Subst1098403
+Node: Define Subst Example1100437
+Node: Define Subst Pattern Matching1103431
+Node: Define Subst Output Template1104656
+Node: Constant Definitions1106726
+Ref: define_enum1110508
+Node: Iterators1110996
+Node: Mode Iterators1111574
+Node: Defining Mode Iterators1112552
+Node: Substitutions1114046
+Node: Examples1116287
+Node: Code Iterators1117735
+Node: Int Iterators1120014
+Node: Subst Iterators1122472
+Node: Target Macros1124164
+Node: Target Structure1127252
+Node: Driver1129367
+Node: Run-time Target1148150
+Node: Per-Function Data1157303
+Node: Storage Layout1160068
+Node: Type Layout1186143
+Node: Registers1201470
+Node: Register Basics1202444
+Node: Allocation Order1207949
+Node: Values in Registers1210395
+Node: Leaf Functions1217884
+Node: Stack Registers1220742
+Node: Register Classes1222014
+Node: Old Constraints1252019
+Node: Stack and Calling1259171
+Node: Frame Layout1259705
+Node: Exception Handling1270585
+Node: Stack Checking1276807
+Node: Frame Registers1281620
+Node: Elimination1289879
+Node: Stack Arguments1294108
+Node: Register Arguments1300970
+Node: Scalar Return1321286
+Node: Aggregate Return1327372
+Node: Caller Saves1331582
+Node: Function Entry1332760
+Node: Profiling1343864
+Node: Tail Calls1345563
+Node: Stack Smashing Protection1347466
+Node: Varargs1349094
+Node: Trampolines1355790
+Node: Library Calls1361833
+Node: Addressing Modes1366772
+Node: Anchored Addresses1386806
+Node: Condition Code1389455
+Node: CC0 Condition Codes1391584
+Node: MODE_CC Condition Codes1394830
+Node: Cond Exec Macros1401351
+Node: Costs1401697
+Node: Scheduling1418166
+Node: Sections1437572
+Node: PIC1453270
+Node: Assembler Format1455330
+Node: File Framework1456468
+Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1463409
+Node: Data Output1466674
+Node: Uninitialized Data1474450
+Node: Label Output1479461
+Node: Initialization1502429
+Node: Macros for Initialization1508391
+Node: Instruction Output1515114
+Node: Dispatch Tables1525616
+Node: Exception Region Output1529994
+Node: Alignment Output1536677
+Node: Debugging Info1541222
+Node: All Debuggers1541892
+Node: DBX Options1544747
+Node: DBX Hooks1550196
+Node: File Names and DBX1551505
+Node: SDB and DWARF1553617
+Node: VMS Debug1559689
+Node: Floating Point1560276
+Node: Mode Switching1564752
+Node: Target Attributes1568748
+Node: Emulated TLS1577062
+Node: MIPS Coprocessors1580452
+Node: PCH Target1581749
+Node: C++ ABI1583591
+Node: Named Address Spaces1588383
+Node: Misc1593322
+Ref: TARGET_SHIFT_TRUNCATION_MASK1600064
+Node: Host Config1645230
+Node: Host Common1646298
+Node: Filesystem1648677
+Node: Host Misc1652792
+Node: Fragments1655241
+Node: Target Fragment1656436
+Node: Host Fragment1667069
+Node: Collect21667309
+Node: Header Dirs1669945
+Node: Type Information1671368
+Node: GTY Options1674591
+Node: User GC1688912
+Node: GGC Roots1692639
+Node: Files1693355
+Node: Invoking the garbage collector1696062
+Node: Troubleshooting1697565
+Node: Plugins1698641
+Node: Plugins loading1699759
+Node: Plugin API1700628
+Node: Plugins pass1707657
+Node: Plugins GC1709626
+Node: Plugins description1711286
+Node: Plugins attr1711821
+Node: Plugins recording1713706
+Node: Plugins gate1714556
+Node: Plugins tracking1715147
+Node: Plugins building1715735
+Node: LTO1717521
+Node: LTO Overview1718382
+Node: LTO object file layout1724214
+Node: IPA1728846
+Node: WHOPR1737811
+Node: Internal flags1742502
+Node: Funding1743714
+Node: GNU Project1746197
+Node: Copying1746846
+Node: GNU Free Documentation License1784377
+Node: Contributors1809517
+Node: Option Index1846922
+Node: Concept Index1847726

End Tag Table
diff --git a/gcc-4.8/gcc/doc/gcj-dbtool.1 b/gcc-4.8/gcc/doc/gcj-dbtool.1
index 95332141f..e3ce1acb1 100644
--- a/gcc-4.8/gcc/doc/gcj-dbtool.1
+++ b/gcc-4.8/gcc/doc/gcj-dbtool.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GCJ-DBTOOL 1"
-.TH GCJ-DBTOOL 1 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH GCJ-DBTOOL 1 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/gcc/doc/gcj.1 b/gcc-4.8/gcc/doc/gcj.1
index 1de730eee..2d7c4e612 100644
--- a/gcc-4.8/gcc/doc/gcj.1
+++ b/gcc-4.8/gcc/doc/gcj.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GCJ 1"
-.TH GCJ 1 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH GCJ 1 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -147,7 +155,7 @@ of the same options as gcc. This manual only documents the
options specific to \fBgcj\fR.
.SH "OPTIONS"
.IX Header "OPTIONS"
-.SS "Input and output files"
+.Sh "Input and output files"
.IX Subsection "Input and output files"
A \fBgcj\fR command is like a \fBgcc\fR command, in that it
consists of a number of options and file names. The following kinds
@@ -195,7 +203,7 @@ but not when using \f(CW\*(C`\-C\*(C'\fR or \f(CW\*(C`\-\-resource\*(C'\fR.
(This is an extension beyond the what plain \fBgcc\fR allows.)
(If more than one input file is specified, all must currently
be \f(CW\*(C`.java\*(C'\fR files, though we hope to fix this.)
-.SS "Input Options"
+.Sh "Input Options"
.IX Subsection "Input Options"
\&\fBgcj\fR has options to control where it looks to find files it needs.
For instance, \fBgcj\fR might need to load a class that is referenced
@@ -269,7 +277,7 @@ issue an error if it isn't found.
.IX Item "-fsource=VERSION"
This option is used to choose the source version accepted by
\&\fBgcj\fR. The default is \fB1.5\fR.
-.SS "Encodings"
+.Sh "Encodings"
.IX Subsection "Encodings"
The Java programming language uses Unicode throughout. In an effort to
integrate well with other locales, \fBgcj\fR allows \fI.java\fR files
@@ -292,7 +300,7 @@ to platform (since they are not standardized anywhere). However,
\&\fBgcj\fR implements the encoding named \fB\s-1UTF\-8\s0\fR internally, so if
you choose to use this for your source files you can be assured that it
will work on every host.
-.SS "Warnings"
+.Sh "Warnings"
.IX Subsection "Warnings"
\&\fBgcj\fR implements several warnings. As with other generic
\&\fBgcc\fR warnings, if an option of the form \f(CW\*(C`\-Wfoo\*(C'\fR enables a
@@ -322,7 +330,7 @@ This is the same as \fBgcc\fR's \f(CW\*(C`\-Wunused\*(C'\fR.
.IX Item "-Wall"
This is the same as \f(CW\*(C`\-Wredundant\-modifiers \-Wextraneous\-semicolon
\&\-Wunused\*(C'\fR.
-.SS "Linking"
+.Sh "Linking"
.IX Subsection "Linking"
To turn a Java application into an executable program,
you need to link it with the needed libraries, just as for C or \*(C+.
@@ -383,7 +391,7 @@ link time, it can omit the referred to classes. The result is usually
runtime. Caution must be used when using this option. For more
details see:
<\fBhttp://gcc.gnu.org/wiki/Statically%20linking%20libgcj\fR>
-.SS "Code Generation"
+.Sh "Code Generation"
.IX Subsection "Code Generation"
In addition to the many \fBgcc\fR options controlling code generation,
\&\fBgcj\fR has several options specific to itself.
@@ -517,7 +525,7 @@ with \f(CW\*(C`\-freduced\-reflection\*(C'\fR.
a \f(CW\*(C`SecurityManager\*(C'\fR may not work properly. Also calling
\&\f(CW\*(C`Class.forName()\*(C'\fR may fail if the calling method has no
reflection meta-data.
-.SS "Configure-time Options"
+.Sh "Configure-time Options"
.IX Subsection "Configure-time Options"
Some \fBgcj\fR code generations options affect the resulting \s-1ABI\s0, and
so can only be meaningfully given when \f(CW\*(C`libgcj\*(C'\fR, the runtime
diff --git a/gcc-4.8/gcc/doc/gcj.info b/gcc-4.8/gcc/doc/gcj.info
index 5d089f3f8..a892e6757 100644
--- a/gcc-4.8/gcc/doc/gcj.info
+++ b/gcc-4.8/gcc/doc/gcj.info
@@ -1,5 +1,5 @@
-This is doc/gcj.info, produced by makeinfo version 4.13 from
-/d/gcc-4.8.1/gcc-4.8.1/gcc/java/gcj.texi.
+This is doc/gcj.info, produced by makeinfo version 4.12 from
+/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/java/gcj.texi.
Copyright (C) 2001-2013 Free Software Foundation, Inc.
@@ -570,7 +570,7 @@ TERMS AND CONDITIONS
by modifying or propagating a covered work, you indicate your
acceptance of this License to do so.
- 10. Automatic Licensing of Downstream Recipients.
+ 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
@@ -598,7 +598,7 @@ TERMS AND CONDITIONS
using, selling, offering for sale, or importing the Program or any
portion of it.
- 11. Patents.
+ 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.
@@ -671,7 +671,7 @@ TERMS AND CONDITIONS
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
- 12. No Surrender of Others' Freedom.
+ 12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order,
agreement or otherwise) that contradict the conditions of this
@@ -685,7 +685,7 @@ TERMS AND CONDITIONS
terms and this License would be to refrain entirely from conveying
the Program.
- 13. Use with the GNU Affero General Public License.
+ 13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
@@ -696,7 +696,7 @@ TERMS AND CONDITIONS
General Public License, section 13, concerning interaction through
a network will apply to the combination as such.
- 14. Revised Versions of this License.
+ 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new
versions of the GNU General Public License from time to time.
@@ -723,19 +723,19 @@ TERMS AND CONDITIONS
author or copyright holder as a result of your choosing to follow a
later version.
- 15. Disclaimer of Warranty.
+ 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
- APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
NECESSARY SERVICING, REPAIR OR CORRECTION.
- 16. Limitation of Liability.
+ 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
@@ -748,7 +748,7 @@ TERMS AND CONDITIONS
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
THE POSSIBILITY OF SUCH DAMAGES.
- 17. Interpretation of Sections 15 and 16.
+ 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
@@ -1221,7 +1221,7 @@ GNU Free Documentation License
not permanently reinstated, receipt of a copy of some or all of
the same material does not give you any rights to use it.
- 10. FUTURE REVISIONS OF THIS LICENSE
+ 10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of
the GNU Free Documentation License from time to time. Such new
@@ -1242,7 +1242,7 @@ GNU Free Documentation License
proxy's public statement of acceptance of a version permanently
authorizes you to choose that version for the Document.
- 11. RELICENSING
+ 11. RELICENSING
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
World Wide Web server that publishes copyrightable works and also
@@ -1289,7 +1289,7 @@ notices just after the title page:
Free Documentation License''.
If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
+Texts, replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with
the Front-Cover Texts being LIST, and with the Back-Cover Texts
@@ -1679,7 +1679,7 @@ In addition to the many `gcc' options controlling code generation,
Note that, at present, `-findirect-dispatch' can only be used when
compiling `.class' files. It will not work when compiling from
source. CNI also does not yet work with the binary compatibility
- ABI. These restrictions will be lifted in some future release.
+ ABI. These restrictions will be lifted in some future release.
However, if you compile CNI code with the standard ABI, you can
call it from code built with the binary compatibility ABI.
@@ -1701,7 +1701,7 @@ In addition to the many `gcc' options controlling code generation,
environment. When set all meta-data except for that which is
needed to obtain correct runtime semantics is eliminated.
- For code that does not use reflection (i.e. serialization, RMI,
+ For code that does not use reflection (i.e. serialization, RMI,
CORBA or call methods in the `java.lang.reflect' package),
`-freduced-reflection' will result in proper operation with a
savings in executable code size.
@@ -1773,8 +1773,8 @@ against us. So, there are caveats to using `gcj'.
* Menu:
-* Limitations::
-* Extensions::
+* Limitations::
+* Extensions::

File: gcj.info, Node: Limitations, Next: Extensions, Up: Compatibility
@@ -1866,7 +1866,7 @@ have been added are to facilitate this functionality.
particular `GCJ_PROPERTIES' holds a list of assignments to global
properties, such as would be set with the `-D' option to `java'.
For instance, `java.compiler=gcj' is a valid (but currently
- meaningless) setting.
+ meaningless) setting.

@@ -1959,7 +1959,7 @@ been compiled and put into a shared library on the class path.
Equivalent to `-Xmx'.
`-noverify'
- Do not verify compliance of bytecode with the VM specification. In
+ Do not verify compliance of bytecode with the VM specification. In
addition, this option disables type verification which is
otherwise performed on BC-ABI compiled code.
@@ -2492,7 +2492,7 @@ C++ pointer, so for instance a Java `java.lang.String' becomes, in C++,
Every Java class or interface has a corresponding `Class' instance.
These can be accessed in CNI via the static `class$' field of a class.
The `class$' field is of type `Class' (and not `Class *'), so you will
-typically take the address of it.
+typically take the address of it.
Here is how you can refer to the class of `String', which in Java
would be written `String.class':
@@ -3139,13 +3139,13 @@ File: gcj.info, Node: Invocation, Next: Reflection, Prev: Synchronization, U
================
CNI permits C++ applications to make calls into Java classes, in
-addition to allowing Java code to call into C++. Several functions,
+addition to allowing Java code to call into C++. Several functions,
known as the "invocation API", are provided to support this.
-- Function: jint JvCreateJavaVM (JvVMInitArgs* VM_ARGS)
- Initializes the Java runtime. This function performs essential
+ Initializes the Java runtime. This function performs essential
initialization of the threads interface, garbage collector,
- exception handling and other key aspects of the runtime. It must
+ exception handling and other key aspects of the runtime. It must
be called once by an application with a non-Java `main()'
function, before any other Java or CNI calls are made. It is
safe, but not recommended, to call `JvCreateJavaVM()' more than
@@ -3200,9 +3200,9 @@ known as the "invocation API", are provided to support this.
thread object is returned.
-- Function: jint JvDetachCurrentThread ()
- Unregisters a thread from the Java runtime. This should be called
+ Unregisters a thread from the Java runtime. This should be called
by threads that were attached using `JvAttachCurrentThread()',
- after they have finished making calls to Java code. This ensures
+ after they have finished making calls to Java code. This ensures
that any resources associated with the thread become eligible for
garbage collection. This function returns `0' upon success, or
`-1' if the current thread is not attached.
@@ -3212,7 +3212,7 @@ known as the "invocation API", are provided to support this.
If an exception is thrown from Java code called using the invocation
API, and no handler for the exception can be found, the runtime will
-abort the application. In order to make the application more robust, it
+abort the application. In order to make the application more robust, it
is recommended that code which uses the invocation API be wrapped by a
top-level try/catch block that catches all Java exceptions.
@@ -3506,7 +3506,7 @@ normally not be found in other core libraries for the java language.
`java.net.PlainDatagramSocketImpl'.
`gnu.gcj.progname'
- The class or binary name that was used to invoke the program. This
+ The class or binary name that was used to invoke the program. This
will be the name of the "main" class in the case where the `gij'
front end is used, or the program binary name in the case where an
application is compiled to a native binary.
@@ -3519,7 +3519,7 @@ normally not be found in other core libraries for the java language.
`gnu.gcj.runtime.NameFinder.use_addr2line'
Whether an external process, `addr2line', should be used to
- determine line number information when tracing the stack. Setting
+ determine line number information when tracing the stack. Setting
this to `false' may suppress line numbers when printing stack
traces and when using the java.util.logging infrastructure.
However, performance may improve significantly for applications
@@ -3641,51 +3641,51 @@ Index

Tag Table:
-Node: Top2715
-Node: Copying4134
-Node: GNU Free Documentation License41684
-Node: Invoking gcj66827
-Node: Input and output files67590
-Node: Input Options69116
-Node: Encodings72390
-Node: Warnings73596
-Node: Linking74709
-Node: Code Generation77648
-Node: Configure-time Options84428
-Node: Compatibility86168
-Node: Limitations86652
-Node: Extensions88234
-Node: Invoking jcf-dump91328
-Node: Invoking gij92273
-Node: Invoking gcj-dbtool95524
-Node: Invoking jv-convert97990
-Node: Invoking grmic99069
-Node: Invoking gc-analyze100455
-Node: Invoking aot-compile101896
-Node: Invoking rebuild-gcj-db102845
-Node: About CNI103155
-Node: Basic concepts104614
-Node: Packages107510
-Node: Primitive types109838
-Node: Reference types111516
-Node: Interfaces112605
-Node: Objects and Classes113516
-Node: Class Initialization115711
-Node: Object allocation118053
-Node: Memory allocation118843
-Node: Arrays119475
-Node: Methods122285
-Node: Strings125106
-Node: Mixing with C++126610
-Node: Exception Handling130081
-Node: Synchronization131715
-Node: Invocation133705
-Node: Reflection138641
-Node: System properties139102
-Node: Standard Properties139979
-Node: GNU Classpath Properties144411
-Node: libgcj Runtime Properties145458
-Node: Resources149960
-Node: Index150774
+Node: Top2729
+Node: Copying4148
+Node: GNU Free Documentation License41698
+Node: Invoking gcj66841
+Node: Input and output files67604
+Node: Input Options69130
+Node: Encodings72404
+Node: Warnings73610
+Node: Linking74723
+Node: Code Generation77662
+Node: Configure-time Options84442
+Node: Compatibility86182
+Node: Limitations86666
+Node: Extensions88248
+Node: Invoking jcf-dump91342
+Node: Invoking gij92287
+Node: Invoking gcj-dbtool95538
+Node: Invoking jv-convert98004
+Node: Invoking grmic99083
+Node: Invoking gc-analyze100469
+Node: Invoking aot-compile101910
+Node: Invoking rebuild-gcj-db102859
+Node: About CNI103169
+Node: Basic concepts104628
+Node: Packages107524
+Node: Primitive types109852
+Node: Reference types111530
+Node: Interfaces112619
+Node: Objects and Classes113530
+Node: Class Initialization115725
+Node: Object allocation118067
+Node: Memory allocation118857
+Node: Arrays119489
+Node: Methods122299
+Node: Strings125120
+Node: Mixing with C++126624
+Node: Exception Handling130095
+Node: Synchronization131729
+Node: Invocation133719
+Node: Reflection138655
+Node: System properties139116
+Node: Standard Properties139993
+Node: GNU Classpath Properties144425
+Node: libgcj Runtime Properties145472
+Node: Resources149974
+Node: Index150788

End Tag Table
diff --git a/gcc-4.8/gcc/doc/gcov.1 b/gcc-4.8/gcc/doc/gcov.1
index 145b71a34..27cb28aaf 100644
--- a/gcc-4.8/gcc/doc/gcov.1
+++ b/gcc-4.8/gcc/doc/gcov.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GCOV 1"
-.TH GCOV 1 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH GCOV 1 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -579,7 +587,7 @@ profiling code first attempts to read in an existing \fI.gcda\fR file; if
the file doesn't match the executable (differing number of basic block
counts) it will ignore the contents of the file. It then adds in the
new execution counts and finally writes the data to the file.
-.SS "Using \fBgcov\fP with \s-1GCC\s0 Optimization"
+.Sh "Using \fBgcov\fP with \s-1GCC\s0 Optimization"
.IX Subsection "Using gcov with GCC Optimization"
If you plan to use \fBgcov\fR to help optimize your code, you must
first compile your program with two special \s-1GCC\s0 options:
diff --git a/gcc-4.8/gcc/doc/gfdl.7 b/gcc-4.8/gcc/doc/gfdl.7
index 46f4005fd..dc99bad35 100644
--- a/gcc-4.8/gcc/doc/gfdl.7
+++ b/gcc-4.8/gcc/doc/gfdl.7
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GFDL 7"
-.TH GFDL 7 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH GFDL 7 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -133,9 +141,9 @@
gfdl \- GNU Free Documentation License
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
-.SS "\s-1GNU\s0 Free Documentation License"
+.Sh "\s-1GNU\s0 Free Documentation License"
.IX Subsection "GNU Free Documentation License"
-.SS "Version 1.3, 3 November 2008"
+.Sh "Version 1.3, 3 November 2008"
.IX Subsection "Version 1.3, 3 November 2008"
.Vb 2
\& Copyright (c) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
@@ -592,7 +600,7 @@ and (2) were thus incorporated prior to November 1, 2008.
The operator of an \s-1MMC\s0 Site may republish an \s-1MMC\s0 contained in the site
under CC-BY-SA on the same site at any time before August 1, 2009,
provided the \s-1MMC\s0 is eligible for relicensing.
-.SS "\s-1ADDENDUM:\s0 How to use this License for your documents"
+.Sh "\s-1ADDENDUM:\s0 How to use this License for your documents"
.IX Subsection "ADDENDUM: How to use this License for your documents"
To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
diff --git a/gcc-4.8/gcc/doc/gfortran.1 b/gcc-4.8/gcc/doc/gfortran.1
index acaf61f9f..eff1ba070 100644
--- a/gcc-4.8/gcc/doc/gfortran.1
+++ b/gcc-4.8/gcc/doc/gfortran.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GFORTRAN 1"
-.TH GFORTRAN 1 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH GFORTRAN 1 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -224,7 +232,7 @@ by type. Explanations are in the following sections.
\&\-fno\-automatic \-fno\-protect\-parens \-fno\-underscoring \-fno\-whole\-file
\&\-fsecond\-underscore \-fpack\-derived \-frealloc\-lhs \-frecursive
\&\-frepack\-arrays \-fshort\-enums \-fstack\-arrays\fR
-.SS "Options controlling Fortran dialect"
+.Sh "Options controlling Fortran dialect"
.IX Subsection "Options controlling Fortran dialect"
The following options control the details of the Fortran dialect
accepted by the compiler:
@@ -406,7 +414,7 @@ that are permitted but obsolescent in later standards. \fB\-std=f2008ts\fR
allows the Fortran 2008 standard including the additions of the
Technical Specification (\s-1TS\s0) 29113 on Further Interoperability of Fortran
with C.
-.SS "Enable and customize preprocessing"
+.Sh "Enable and customize preprocessing"
.IX Subsection "Enable and customize preprocessing"
Preprocessor related options. See section
\&\fBPreprocessing and conditional compilation\fR for more detailed
@@ -594,7 +602,7 @@ by the linemarkers.
.IX Item "-Uname"
Cancel any previous definition of \fIname\fR, either built in or provided
with a \fB\-D\fR option.
-.SS "Options to request or suppress errors and warnings"
+.Sh "Options to request or suppress errors and warnings"
.IX Subsection "Options to request or suppress errors and warnings"
Errors are diagnostic messages that report that the \s-1GNU\s0 Fortran compiler
cannot compile the relevant piece of source code. The compiler will
@@ -825,7 +833,7 @@ target. This option is implied by \fB\-Wall\fR.
Turns all warnings into errors.
.PP
Some of these have no effect when compiling programs written in Fortran.
-.SS "Options for debugging your program or \s-1GNU\s0 Fortran"
+.Sh "Options for debugging your program or \s-1GNU\s0 Fortran"
.IX Subsection "Options for debugging your program or GNU Fortran"
\&\s-1GNU\s0 Fortran has various special options that are used for debugging
either your program or the \s-1GNU\s0 Fortran compiler.
@@ -834,11 +842,12 @@ either your program or the \s-1GNU\s0 Fortran compiler.
Output the internal parse tree after translating the source program
into internal representation. Only really useful for debugging the
\&\s-1GNU\s0 Fortran compiler itself.
-.IP "\fB\-fdump\-optimized\-tree\fR" 4
-.IX Item "-fdump-optimized-tree"
+.IP "\fB\-fdump\-fortran\-optimized\fR" 4
+.IX Item "-fdump-fortran-optimized"
Output the parse tree after front-end optimization. Only really
useful for debugging the \s-1GNU\s0 Fortran compiler itself.
-.Sp
+.IP "\fB\-fdump\-parse\-tree\fR" 4
+.IX Item "-fdump-parse-tree"
Output the internal parse tree after translating the source program
into internal representation. Only really useful for debugging the
\&\s-1GNU\s0 Fortran compiler itself. This option is deprecated; use
@@ -879,7 +888,7 @@ action \fBcore\fR), the Fortran runtime library tries to output a
backtrace of the error. \f(CW\*(C`\-fno\-backtrace\*(C'\fR disables the backtrace
generation. This option only has influence for compilation of the
Fortran main program.
-.SS "Options for directory search"
+.Sh "Options for directory search"
.IX Subsection "Options for directory search"
These options affect how \s-1GNU\s0 Fortran searches
for files specified by the \f(CW\*(C`INCLUDE\*(C'\fR directive and where it searches
@@ -911,7 +920,7 @@ The default is the current directory.
.IX Item "-fintrinsic-modules-path dir"
This option specifies the location of pre-compiled intrinsic modules, if
they are not in the default location expected by the compiler.
-.SS "Influencing the linking step"
+.Sh "Influencing the linking step"
.IX Subsection "Influencing the linking step"
These options come into play when the compiler links object files into an
executable output file. They are meaningless if the compiler is not doing
@@ -922,7 +931,7 @@ On systems that provide \fIlibgfortran\fR as a shared and a static
library, this option forces the use of the static version. If no
shared version of \fIlibgfortran\fR was built when the compiler was
configured, this option has no effect.
-.SS "Influencing runtime behavior"
+.Sh "Influencing runtime behavior"
.IX Subsection "Influencing runtime behavior"
These options affect the runtime behavior of programs compiled with \s-1GNU\s0 Fortran.
.IP "\fB\-fconvert=\fR\fIconversion\fR" 4
@@ -957,7 +966,7 @@ negative in the \f(CW\*(C`SIGN\*(C'\fR intrinsic. \fB\-fno\-sign\-zero\fR does
print the negative sign of zero values (or values rounded to zero for I/O)
and regards zero as positive number in the \f(CW\*(C`SIGN\*(C'\fR intrinsic for
compatibility with Fortran 77. The default is \fB\-fsign\-zero\fR.
-.SS "Options for code generation conventions"
+.Sh "Options for code generation conventions"
.IX Subsection "Options for code generation conventions"
These machine-independent options control the interface conventions
used in code generation.
diff --git a/gcc-4.8/gcc/doc/gij.1 b/gcc-4.8/gcc/doc/gij.1
index b9f753ea5..df2a7dc00 100644
--- a/gcc-4.8/gcc/doc/gij.1
+++ b/gcc-4.8/gcc/doc/gij.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GIJ 1"
-.TH GIJ 1 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH GIJ 1 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/gcc/doc/gpl.7 b/gcc-4.8/gcc/doc/gpl.7
index 30cfa1c71..324dbb93a 100644
--- a/gcc-4.8/gcc/doc/gpl.7
+++ b/gcc-4.8/gcc/doc/gpl.7
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GPL 7"
-.TH GPL 7 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH GPL 7 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -133,9 +141,9 @@
gpl \- GNU General Public License
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
-.SS "\s-1GNU\s0 General Public License"
+.Sh "\s-1GNU\s0 General Public License"
.IX Subsection "GNU General Public License"
-.SS "Version 3, 29 June 2007"
+.Sh "Version 3, 29 June 2007"
.IX Subsection "Version 3, 29 June 2007"
.Vb 1
\& Copyright (c) 2007 Free Software Foundation, Inc. <http://fsf.org/>
@@ -143,7 +151,7 @@ gpl \- GNU General Public License
\& Everyone is permitted to copy and distribute verbatim copies of this
\& license document, but changing it is not allowed.
.Ve
-.SS "Preamble"
+.Sh "Preamble"
.IX Subsection "Preamble"
The \s-1GNU\s0 General Public License is a free, copyleft license for
software and other kinds of works.
@@ -207,7 +215,7 @@ assures that patents cannot be used to render the program non-free.
.PP
The precise terms and conditions for copying, distribution and
modification follow.
-.SS "\s-1TERMS\s0 \s-1AND\s0 \s-1CONDITIONS\s0"
+.Sh "\s-1TERMS\s0 \s-1AND\s0 \s-1CONDITIONS\s0"
.IX Subsection "TERMS AND CONDITIONS"
.IP "0. Definitions." 4
.IX Item "0. Definitions."
@@ -770,9 +778,9 @@ reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
-.SS "\s-1END\s0 \s-1OF\s0 \s-1TERMS\s0 \s-1AND\s0 \s-1CONDITIONS\s0"
+.Sh "\s-1END\s0 \s-1OF\s0 \s-1TERMS\s0 \s-1AND\s0 \s-1CONDITIONS\s0"
.IX Subsection "END OF TERMS AND CONDITIONS"
-.SS "How to Apply These Terms to Your New Programs"
+.Sh "How to Apply These Terms to Your New Programs"
.IX Subsection "How to Apply These Terms to Your New Programs"
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
diff --git a/gcc-4.8/gcc/doc/grmic.1 b/gcc-4.8/gcc/doc/grmic.1
index 8c29a7604..517d51ad8 100644
--- a/gcc-4.8/gcc/doc/grmic.1
+++ b/gcc-4.8/gcc/doc/grmic.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GRMIC 1"
-.TH GRMIC 1 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH GRMIC 1 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/gcc/doc/invoke.texi b/gcc-4.8/gcc/doc/invoke.texi
index cb0d50ec7..a09553ccf 100644
--- a/gcc-4.8/gcc/doc/invoke.texi
+++ b/gcc-4.8/gcc/doc/invoke.texi
@@ -161,7 +161,7 @@ in the following sections.
-pipe -pass-exit-codes @gol
-x @var{language} -v -### --help@r{[}=@var{class}@r{[},@dots{}@r{]]} --target-help @gol
--version -wrapper @@@var{file} -fplugin=@var{file} -fplugin-arg-@var{name}=@var{arg} @gol
--fdump-ada-spec@r{[}-slim@r{]} -fada-spec-parent=@var{arg} -fdump-go-spec=@var{file}}
+-fdump-ada-spec@r{[}-slim@r{]} -fada-spec-parent=@var{unit} -fdump-go-spec=@var{file}}
@item C Language Options
@xref{C Dialect Options,,Options Controlling C Dialect}.
@@ -857,7 +857,12 @@ See RS/6000 and PowerPC Options.
-mno-recip-precision @gol
-mveclibabi=@var{type} -mfriz -mno-friz @gol
-mpointers-to-nested-functions -mno-pointers-to-nested-functions @gol
--msave-toc-indirect -mno-save-toc-indirect}
+-msave-toc-indirect -mno-save-toc-indirect @gol
+-mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector @gol
+-mcrypto -mno-crypto -mdirect-move -mno-direct-move @gol
+-mquad-memory -mno-quad-memory @gol
+-mquad-memory-atomic -mno-quad-memory-atomic @gol
+-mcompat-align-parm -mno-compat-align-parm}
@emph{RX Options}
@gccoptlist{-m64bit-doubles -m32bit-doubles -fpu -nofpu@gol
@@ -881,7 +886,8 @@ See RS/6000 and PowerPC Options.
-msmall-exec -mno-small-exec -mmvcle -mno-mvcle @gol
-m64 -m31 -mdebug -mno-debug -mesa -mzarch @gol
-mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd @gol
--mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard}
+-mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard @gol
+-mhotpatch[=@var{halfwords}] -mno-hotpatch}
@emph{Score Options}
@gccoptlist{-meb -mel @gol
@@ -926,11 +932,12 @@ See RS/6000 and PowerPC Options.
-mhard-quad-float -msoft-quad-float @gol
-mstack-bias -mno-stack-bias @gol
-munaligned-doubles -mno-unaligned-doubles @gol
+-muser-mode -mno-user-mode @gol
-mv8plus -mno-v8plus -mvis -mno-vis @gol
-mvis2 -mno-vis2 -mvis3 -mno-vis3 @gol
-mcbcond -mno-cbcond @gol
-mfmaf -mno-fmaf -mpopc -mno-popc @gol
--mfix-at697f}
+-mfix-at697f -mfix-ut699}
@emph{SPU Options}
@gccoptlist{-mwarn-reloc -merror-reloc @gol
@@ -1462,11 +1469,18 @@ Define an argument called @var{key} with a value of @var{value}
for the plugin called @var{name}.
@item -fdump-ada-spec@r{[}-slim@r{]}
-For C and C++ source and include files, generate corresponding Ada
-specs. @xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn,
+@opindex fdump-ada-spec
+For C and C++ source and include files, generate corresponding Ada specs.
+@xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn,
GNAT User's Guide}, which provides detailed documentation on this feature.
+@item -fada-spec-parent=@var{unit}
+@opindex fada-spec-parent
+In conjunction with @option{-fdump-ada-spec@r{[}-slim@r{]}} above, generate
+Ada specs as child units of parent @var{unit}.
+
@item -fdump-go-spec=@var{file}
+@opindex fdump-go-spec
For input files in any language, generate corresponding Go
declarations in @var{file}. This generates Go @code{const},
@code{type}, @code{var}, and @code{func} declarations which may be a
@@ -11317,11 +11331,32 @@ option should only be used if you require compatibility with code for
big-endian ARM processors generated by versions of the compiler prior to
2.8. This option is now deprecated.
-@item -mcpu=@var{name}
-@opindex mcpu
-This specifies the name of the target ARM processor. GCC uses this name
-to determine what kind of instructions it can emit when generating
-assembly code. Permissible names are: @samp{arm2}, @samp{arm250},
+@item -march=@var{name}
+@opindex march
+This specifies the name of the target ARM architecture. GCC uses this
+name to determine what kind of instructions it can emit when generating
+assembly code. This option can be used in conjunction with or instead
+of the @option{-mcpu=} option. Permissible names are: @samp{armv2},
+@samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
+@samp{armv5}, @samp{armv5t}, @samp{armv5e}, @samp{armv5te},
+@samp{armv6}, @samp{armv6j},
+@samp{armv6t2}, @samp{armv6z}, @samp{armv6zk}, @samp{armv6-m},
+@samp{armv7}, @samp{armv7-a}, @samp{armv7-r}, @samp{armv7-m}, @samp{armv7e-m}
+@samp{armv8-a},
+@samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
+
+@option{-march=native} causes the compiler to auto-detect the architecture
+of the build computer. At present, this feature is only supported on
+Linux, and not all architectures are recognized. If the auto-detect is
+unsuccessful the option has no effect.
+
+@item -mtune=@var{name}
+@opindex mtune
+This option specifies the name of the target ARM processor for
+which GCC should tune the performance of the code.
+For some ARM implementations better performance can be obtained by using
+this option.
+Permissible names are: @samp{arm2}, @samp{arm250},
@samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
@samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
@samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
@@ -11349,27 +11384,6 @@ assembly code. Permissible names are: @samp{arm2}, @samp{arm250},
@samp{fa526}, @samp{fa626},
@samp{fa606te}, @samp{fa626te}, @samp{fmp626}, @samp{fa726te}.
-
-@option{-mcpu=generic-@var{arch}} is also permissible, and is
-equivalent to @option{-march=@var{arch} -mtune=generic-@var{arch}}.
-See @option{-mtune} for more information.
-
-@option{-mcpu=native} causes the compiler to auto-detect the CPU
-of the build computer. At present, this feature is only supported on
-Linux, and not all architectures are recognized. If the auto-detect is
-unsuccessful the option has no effect.
-
-@item -mtune=@var{name}
-@opindex mtune
-This option is very similar to the @option{-mcpu=} option, except that
-instead of specifying the actual target processor type, and hence
-restricting which instructions can be used, it specifies that GCC should
-tune the performance of the code as if the target were of the type
-specified in this option, but still choosing the instructions it
-generates based on the CPU specified by a @option{-mcpu=} option.
-For some ARM implementations better performance can be obtained by using
-this option.
-
@option{-mtune=generic-@var{arch}} specifies that GCC should tune the
performance for a blend of processors within architecture @var{arch}.
The aim is to generate code that run well on the current most popular
@@ -11382,21 +11396,23 @@ of the build computer. At present, this feature is only supported on
Linux, and not all architectures are recognized. If the auto-detect is
unsuccessful the option has no effect.
-@item -march=@var{name}
-@opindex march
-This specifies the name of the target ARM architecture. GCC uses this
-name to determine what kind of instructions it can emit when generating
-assembly code. This option can be used in conjunction with or instead
-of the @option{-mcpu=} option. Permissible names are: @samp{armv2},
-@samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
-@samp{armv5}, @samp{armv5t}, @samp{armv5e}, @samp{armv5te},
-@samp{armv6}, @samp{armv6j},
-@samp{armv6t2}, @samp{armv6z}, @samp{armv6zk}, @samp{armv6-m},
-@samp{armv7}, @samp{armv7-a}, @samp{armv7-r}, @samp{armv7-m},
-@samp{armv8-a},
-@samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
+@item -mcpu=@var{name}
+@opindex mcpu
+This specifies the name of the target ARM processor. GCC uses this name
+to derive the name of the target ARM architecture (as if specified
+by @option{-march}) and the ARM processor type for which to tune for
+performance (as if specified by @option{-mtune}). Where this option
+is used in conjunction with @option{-march} or @option{-mtune},
+those options take precedence over the appropriate part of this option.
-@option{-march=native} causes the compiler to auto-detect the architecture
+Permissible names for this option are the same as those for
+@option{-mtune}.
+
+@option{-mcpu=generic-@var{arch}} is also permissible, and is
+equivalent to @option{-march=@var{arch} -mtune=generic-@var{arch}}.
+See @option{-mtune} for more information.
+
+@option{-mcpu=native} causes the compiler to auto-detect the CPU
of the build computer. At present, this feature is only supported on
Linux, and not all architectures are recognized. If the auto-detect is
unsuccessful the option has no effect.
@@ -11485,8 +11501,11 @@ before execution begins.
@item -mpic-register=@var{reg}
@opindex mpic-register
-Specify the register to be used for PIC addressing. The default is R10
-unless stack-checking is enabled, when R9 is used.
+Specify the register to be used for PIC addressing.
+For standard PIC base case, the default will be any suitable register
+determined by compiler. For single PIC base case, the default is
+@samp{R9} if target is EABI based or stack-checking is enabled,
+otherwise the default is @samp{R10}.
@item -mpoke-function-name
@opindex mpoke-function-name
@@ -17313,7 +17332,9 @@ following options:
@gccoptlist{-maltivec -mfprnd -mhard-float -mmfcrf -mmultiple @gol
-mpopcntb -mpopcntd -mpowerpc64 @gol
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float @gol
--msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx}
+-msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx @gol
+-mcrypto -mdirect-move -mpower8-fusion -mpower8-vector @gol
+-mquad-memory -mquad-memory-atomic}
The particular options set for any particular CPU varies between
compiler versions, depending on what setting seems to produce optimal
@@ -17364,6 +17385,38 @@ the AltiVec instruction set. You may also need to set
@option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
enhancements.
+When @option{-maltivec} is used, rather than @option{-maltivec=le} or
+@option{-maltivec=be}, the element order for Altivec intrinsics such
+as @code{vec_splat}, @code{vec_extract}, and @code{vec_insert} will
+match array element order corresponding to the endianness of the
+target. That is, element zero identifies the leftmost element in a
+vector register when targeting a big-endian platform, and identifies
+the rightmost element in a vector register when targeting a
+little-endian platform.
+
+@item -maltivec=be
+@opindex maltivec=be
+Generate Altivec instructions using big-endian element order,
+regardless of whether the target is big- or little-endian. This is
+the default when targeting a big-endian platform.
+
+The element order is used to interpret element numbers in Altivec
+intrinsics such as @code{vec_splat}, @code{vec_extract}, and
+@code{vec_insert}. By default, these will match array element order
+corresponding to the endianness for the target.
+
+@item -maltivec=le
+@opindex maltivec=le
+Generate Altivec instructions using little-endian element order,
+regardless of whether the target is big- or little-endian. This is
+the default when targeting a little-endian platform. This option is
+currently ignored when targeting a big-endian platform.
+
+The element order is used to interpret element numbers in Altivec
+intrinsics such as @code{vec_splat}, @code{vec_extract}, and
+@code{vec_insert}. By default, these will match array element order
+corresponding to the endianness for the target.
+
@item -mvrsave
@itemx -mno-vrsave
@opindex mvrsave
@@ -17431,6 +17484,55 @@ Generate code that uses (does not use) vector/scalar (VSX)
instructions, and also enable the use of built-in functions that allow
more direct access to the VSX instruction set.
+@item -mcrypto
+@itemx -mno-crypto
+@opindex mcrypto
+@opindex mno-crypto
+Enable the use (disable) of the built-in functions that allow direct
+access to the cryptographic instructions that were added in version
+2.07 of the PowerPC ISA.
+
+@item -mdirect-move
+@itemx -mno-direct-move
+@opindex mdirect-move
+@opindex mno-direct-move
+Generate code that uses (does not use) the instructions to move data
+between the general purpose registers and the vector/scalar (VSX)
+registers that were added in version 2.07 of the PowerPC ISA.
+
+@item -mpower8-fusion
+@itemx -mno-power8-fusion
+@opindex mpower8-fusion
+@opindex mno-power8-fusion
+Generate code that keeps (does not keeps) some integer operations
+adjacent so that the instructions can be fused together on power8 and
+later processors.
+
+@item -mpower8-vector
+@itemx -mno-power8-vector
+@opindex mpower8-vector
+@opindex mno-power8-vector
+Generate code that uses (does not use) the vector and scalar
+instructions that were added in version 2.07 of the PowerPC ISA. Also
+enable the use of built-in functions that allow more direct access to
+the vector instructions.
+
+@item -mquad-memory
+@itemx -mno-quad-memory
+@opindex mquad-memory
+@opindex mno-quad-memory
+Generate code that uses (does not use) the non-atomic quad word memory
+instructions. The @option{-mquad-memory} option requires use of
+64-bit mode.
+
+@item -mquad-memory-atomic
+@itemx -mno-quad-memory-atomic
+@opindex mquad-memory-atomic
+@opindex mno-quad-memory-atomic
+Generate code that uses (does not use) the atomic quad word memory
+instructions. The @option{-mquad-memory-atomic} option requires use of
+64-bit mode.
+
@item -mfloat-gprs=@var{yes/single/double/no}
@itemx -mfloat-gprs
@opindex mfloat-gprs
@@ -17850,7 +17952,8 @@ SVR4 ABI)@.
@opindex mabi
Extend the current ABI with a particular extension, or remove such extension.
Valid values are @var{altivec}, @var{no-altivec}, @var{spe},
-@var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble}@.
+@var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble},
+@var{elfv1}, @var{elfv2}@.
@item -mabi=spe
@opindex mabi=spe
@@ -17872,6 +17975,20 @@ This is a PowerPC 32-bit SYSV ABI option.
Change the current ABI to use IEEE extended-precision long double.
This is a PowerPC 32-bit Linux ABI option.
+@item -mabi=elfv1
+@opindex mabi=elfv1
+Change the current ABI to use the ELFv1 ABI.
+This is the default ABI for big-endian PowerPC 64-bit Linux.
+Overriding the default ABI requires special system support and is
+likely to fail in spectacular ways.
+
+@item -mabi=elfv2
+@opindex mabi=elfv2
+Change the current ABI to use the ELFv2 ABI.
+This is the default ABI for little-endian PowerPC 64-bit Linux.
+Overriding the default ABI requires special system support and is
+likely to fail in spectacular ways.
+
@item -mprototype
@itemx -mno-prototype
@opindex mprototype
@@ -18157,6 +18274,23 @@ stack location in the function prologue if the function calls through
a pointer on AIX and 64-bit Linux systems. If the TOC value is not
saved in the prologue, it is saved just before the call through the
pointer. The @option{-mno-save-toc-indirect} option is the default.
+
+@item -mcompat-align-parm
+@itemx -mno-compat-align-parm
+@opindex mcompat-align-parm
+Generate (do not generate) code to pass structure parameters with a
+maximum alignment of 64 bits, for compatibility with older versions
+of GCC.
+
+Older versions of GCC (prior to 4.9.0) incorrectly did not align a
+structure parameter on a 128-bit boundary when that structure contained
+a member requiring 128-bit alignment. This is corrected in more
+recent versions of GCC. This option may be used to generate code
+that is compatible with functions compiled with older versions of
+GCC.
+
+In this version of the compiler, the @option{-mcompat-align-parm}
+is the default, except when using the Linux ELFv2 ABI.
@end table
@node RX Options
@@ -18536,6 +18670,21 @@ values have to be exact powers of 2 and @var{stack-size} has to be greater than
In order to be efficient the extra code makes the assumption that the stack starts
at an address aligned to the value given by @var{stack-size}.
The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.
+
+@item -mhotpatch[=@var{halfwords}]
+@itemx -mno-hotpatch
+@opindex mhotpatch
+If the hotpatch option is enabled, a ``hot-patching'' function
+prologue is generated for all functions in the compilation unit.
+The funtion label is prepended with the given number of two-byte
+Nop instructions (@var{halfwords}, maximum 1000000) or 12 Nop
+instructions if no argument is present. Functions with a
+hot-patching prologue are never inlined automatically, and a
+hot-patching prologue is never generated for functions functions
+that are explicitly inline.
+
+This option can be overridden for individual functions with the
+@code{hotpatch} attribute.
@end table
@node Score Options
@@ -19126,8 +19275,9 @@ These @samp{-m} options are supported on the SPARC:
@opindex mno-app-regs
@opindex mapp-regs
Specify @option{-mapp-regs} to generate output using the global registers
-2 through 4, which the SPARC SVR4 ABI reserves for applications. This
-is the default.
+2 through 4, which the SPARC SVR4 ABI reserves for applications. Like the
+global register 1, each global register 2 through 4 is then treated as an
+allocable register that is clobbered by function calls. This is the default.
To be fully SVR4 ABI-compliant at the cost of some performance loss,
specify @option{-mno-app-regs}. You should compile libraries and system
@@ -19202,6 +19352,14 @@ Specifying this option avoids some rare compatibility problems with code
generated by other compilers. It is not the default because it results
in a performance loss, especially for floating-point code.
+@item -muser-mode
+@itemx -mno-user-mode
+@opindex muser-mode
+@opindex mno-user-mode
+Do not generate code that can only run in supervisor mode. This is relevant
+only for the @code{casa} instruction emitted for the LEON3 processor. The
+default is @option{-mno-user-mode}.
+
@item -mno-faster-structs
@itemx -mfaster-structs
@opindex mno-faster-structs
@@ -19220,10 +19378,10 @@ the rules of the ABI@.
Set the instruction set, register set, and instruction scheduling parameters
for machine type @var{cpu_type}. Supported values for @var{cpu_type} are
@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{hypersparc},
-@samp{leon}, @samp{sparclite}, @samp{f930}, @samp{f934}, @samp{sparclite86x},
-@samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc},
-@samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, @samp{niagara3},
-and @samp{niagara4}.
+@samp{leon}, @samp{leon3}, @samp{sparclite}, @samp{f930}, @samp{f934},
+@samp{sparclite86x}, @samp{sparclet}, @samp{tsc701}, @samp{v9},
+@samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2},
+@samp{niagara3} and @samp{niagara4}.
Native Solaris and GNU/Linux toolchains also support the value @samp{native},
which selects the best architecture option for the host processor.
@@ -19242,7 +19400,7 @@ implementations.
cypress
@item v8
-supersparc, hypersparc, leon
+supersparc, hypersparc, leon, leon3
@item sparclite
f930, f934, sparclite86x
@@ -19304,10 +19462,11 @@ option @option{-mcpu=@var{cpu_type}} does.
The same values for @option{-mcpu=@var{cpu_type}} can be used for
@option{-mtune=@var{cpu_type}}, but the only useful values are those
that select a particular CPU implementation. Those are @samp{cypress},
-@samp{supersparc}, @samp{hypersparc}, @samp{leon}, @samp{f930}, @samp{f934},
-@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, @samp{ultrasparc3},
-@samp{niagara}, @samp{niagara2}, @samp{niagara3} and @samp{niagara4}. With
-native Solaris and GNU/Linux toolchains, @samp{native} can also be used.
+@samp{supersparc}, @samp{hypersparc}, @samp{leon}, @samp{leon3}, @samp{f930},
+@samp{f934}, @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
+@samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, @samp{niagara3} and
+@samp{niagara4}. With native Solaris and GNU/Linux toolchains, @samp{native}
+can also be used.
@item -mv8plus
@itemx -mno-v8plus
@@ -19376,6 +19535,11 @@ later.
@opindex mfix-at697f
Enable the documented workaround for the single erratum of the Atmel AT697F
processor (which corresponds to erratum #13 of the AT697E processor).
+
+@item -mfix-ut699
+@opindex mfix-ut699
+Enable the documented workarounds for the floating-point errata and the data
+cache nullify errata of the UT699 processor.
@end table
These @samp{-m} options are supported in addition to the above
diff --git a/gcc-4.8/gcc/doc/jcf-dump.1 b/gcc-4.8/gcc/doc/jcf-dump.1
index 72a9e4def..2cc5c6172 100644
--- a/gcc-4.8/gcc/doc/jcf-dump.1
+++ b/gcc-4.8/gcc/doc/jcf-dump.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "JCF-DUMP 1"
-.TH JCF-DUMP 1 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH JCF-DUMP 1 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/gcc/doc/jv-convert.1 b/gcc-4.8/gcc/doc/jv-convert.1
index 65f6136f3..66e5cb3d5 100644
--- a/gcc-4.8/gcc/doc/jv-convert.1
+++ b/gcc-4.8/gcc/doc/jv-convert.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "JV-CONVERT 1"
-.TH JV-CONVERT 1 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH JV-CONVERT 1 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/gcc/doc/md.texi b/gcc-4.8/gcc/doc/md.texi
index 63ec92f6b..dacb83a70 100644
--- a/gcc-4.8/gcc/doc/md.texi
+++ b/gcc-4.8/gcc/doc/md.texi
@@ -2055,7 +2055,7 @@ Any constant whose absolute value is no greater than 4-bits.
@end table
-@item PowerPC and IBM RS6000---@file{config/rs6000/rs6000.h}
+@item PowerPC and IBM RS6000---@file{config/rs6000/constraints.md}
@table @code
@item b
Address base register
@@ -2069,17 +2069,57 @@ Floating point register (containing 32-bit value)
@item v
Altivec vector register
+@item wa
+Any VSX register if the -mvsx option was used or NO_REGS.
+
@item wd
-VSX vector register to hold vector double data
+VSX vector register to hold vector double data or NO_REGS.
@item wf
-VSX vector register to hold vector float data
+VSX vector register to hold vector float data or NO_REGS.
+
+@item wg
+If @option{-mmfpgpr} was used, a floating point register or NO_REGS.
+
+@item wl
+Floating point register if the LFIWAX instruction is enabled or NO_REGS.
+
+@item wm
+VSX register if direct move instructions are enabled, or NO_REGS.
+
+@item wn
+No register (NO_REGS).
+
+@item wr
+General purpose register if 64-bit instructions are enabled or NO_REGS.
@item ws
-VSX vector register to hold scalar float data
+VSX vector register to hold scalar double values or NO_REGS.
-@item wa
-Any VSX register
+@item wt
+VSX vector register to hold 128 bit integer or NO_REGS.
+
+@item wu
+Altivec register to use for float/32-bit int loads/stores or NO_REGS.
+
+@item wv
+Altivec register to use for double loads/stores or NO_REGS.
+
+@item ww
+FP or VSX register to perform float operations under @option{-mvsx} or NO_REGS.
+
+@item wx
+Floating point register if the STFIWX instruction is enabled or NO_REGS.
+
+@item wy
+VSX vector register to hold scalar float values or NO_REGS.
+
+@item wz
+Floating point register if the LFIWZX instruction is enabled or NO_REGS.
+
+@item wQ
+A memory address that will work with the @code{lq} and @code{stq}
+instructions.
@item h
@samp{MQ}, @samp{CTR}, or @samp{LINK} register
diff --git a/gcc-4.8/gcc/doc/rebuild-gcj-db.1 b/gcc-4.8/gcc/doc/rebuild-gcj-db.1
index c0fce32e8..899aa6b52 100644
--- a/gcc-4.8/gcc/doc/rebuild-gcj-db.1
+++ b/gcc-4.8/gcc/doc/rebuild-gcj-db.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "REBUILD-GCJ-DB 1"
-.TH REBUILD-GCJ-DB 1 "2013-05-31" "gcc-4.8.1" "GNU"
+.TH REBUILD-GCJ-DB 1 "2014-05-22" "gcc-4.8.3" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/gcc/doc/sourcebuild.texi b/gcc-4.8/gcc/doc/sourcebuild.texi
index 90bd0bdf2..9330aae52 100644
--- a/gcc-4.8/gcc/doc/sourcebuild.texi
+++ b/gcc-4.8/gcc/doc/sourcebuild.texi
@@ -1596,6 +1596,13 @@ MIPS target supports @code{-mpaired-single}.
@subsubsection PowerPC-specific attributes
@table @code
+
+@item dfp_hw
+PowerPC target supports executing hardware DFP instructions.
+
+@item p8vector_hw
+PowerPC target supports executing VSX instructions (ISA 2.07).
+
@item powerpc64
Test system supports executing 64-bit instructions.
@@ -1605,12 +1612,24 @@ PowerPC target supports AltiVec.
@item powerpc_altivec_ok
PowerPC target supports @code{-maltivec}.
+@item powerpc_eabi_ok
+PowerPC target supports @code{-meabi}.
+
+@item powerpc_elfv2
+PowerPC target supports @code{-mabi=elfv2}.
+
@item powerpc_fprs
PowerPC target supports floating-point registers.
@item powerpc_hard_double
PowerPC target supports hardware double-precision floating-point.
+@item powerpc_htm_ok
+PowerPC target supports @code{-mhtm}
+
+@item powerpc_p8vector_ok
+PowerPC target supports @code{-mpower8-vector}
+
@item powerpc_ppu_ok
PowerPC target supports @code{-mcpu=cell}.
@@ -1624,9 +1643,6 @@ PowerPC target supports PowerPC SPE.
@item powerpc_spu
PowerPC target supports PowerPC SPU.
-@item spu_auto_overlay
-SPU target has toolchain that supports automatic overlay generation.
-
@item powerpc_vsx_ok
PowerPC target supports @code{-mvsx}.
@@ -1634,8 +1650,17 @@ PowerPC target supports @code{-mvsx}.
Including the options used to compile this particular test, the
PowerPC target supports PowerPC 405.
+@item ppc_recip_hw
+PowerPC target supports executing reciprocal estimate instructions.
+
+@item spu_auto_overlay
+SPU target has toolchain that supports automatic overlay generation.
+
@item vmx_hw
PowerPC target supports executing AltiVec instructions.
+
+@item vsx_hw
+PowerPC target supports executing VSX instructions (ISA 2.06).
@end table
@subsubsection Other hardware attributes
diff --git a/gcc-4.8/gcc/dse.c b/gcc-4.8/gcc/dse.c
index 080822292..e853b4118 100644
--- a/gcc-4.8/gcc/dse.c
+++ b/gcc-4.8/gcc/dse.c
@@ -2518,7 +2518,8 @@ scan_insn (bb_info_t bb_info, rtx insn)
/* Cselib clears the table for this case, so we have to essentially
do the same. */
if (NONJUMP_INSN_P (insn)
- && volatile_insn_p (PATTERN (insn)))
+ && GET_CODE (PATTERN (insn)) == ASM_OPERANDS
+ && MEM_VOLATILE_P (PATTERN (insn)))
{
add_wild_read (bb_info);
insn_info->cannot_delete = true;
diff --git a/gcc-4.8/gcc/expr.c b/gcc-4.8/gcc/expr.c
index 7e909bc0f..92ea1387e 100644
--- a/gcc-4.8/gcc/expr.c
+++ b/gcc-4.8/gcc/expr.c
@@ -1994,12 +1994,14 @@ emit_group_store (rtx orig_dst, rtx src, tree type ATTRIBUTE_UNUSED, int ssize)
HOST_WIDE_INT bytepos = INTVAL (XEXP (XVECEXP (src, 0, i), 1));
enum machine_mode mode = GET_MODE (tmps[i]);
unsigned int bytelen = GET_MODE_SIZE (mode);
- unsigned int adj_bytelen = bytelen;
+ unsigned int adj_bytelen;
rtx dest = dst;
/* Handle trailing fragments that run over the size of the struct. */
if (ssize >= 0 && bytepos + (HOST_WIDE_INT) bytelen > ssize)
adj_bytelen = ssize - bytepos;
+ else
+ adj_bytelen = bytelen;
if (GET_CODE (dst) == CONCAT)
{
@@ -2040,6 +2042,7 @@ emit_group_store (rtx orig_dst, rtx src, tree type ATTRIBUTE_UNUSED, int ssize)
}
}
+ /* Handle trailing fragments that run over the size of the struct. */
if (ssize >= 0 && bytepos + (HOST_WIDE_INT) bytelen > ssize)
{
/* store_bit_field always takes its value from the lsb.
@@ -2057,16 +2060,22 @@ emit_group_store (rtx orig_dst, rtx src, tree type ATTRIBUTE_UNUSED, int ssize)
tmps[i] = expand_shift (RSHIFT_EXPR, mode, tmps[i],
shift, tmps[i], 0);
}
- bytelen = adj_bytelen;
+
+ /* Make sure not to write past the end of the struct. */
+ store_bit_field (dest,
+ adj_bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT,
+ bytepos * BITS_PER_UNIT, ssize * BITS_PER_UNIT - 1,
+ VOIDmode, tmps[i]);
}
/* Optimize the access just a bit. */
- if (MEM_P (dest)
- && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (dest))
+ else if (MEM_P (dest)
+ && (!SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (dest))
|| MEM_ALIGN (dest) >= GET_MODE_ALIGNMENT (mode))
&& bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0
&& bytelen == GET_MODE_SIZE (mode))
emit_move_insn (adjust_address (dest, mode, bytepos), tmps[i]);
+
else
store_bit_field (dest, bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT,
0, 0, mode, tmps[i]);
@@ -3602,12 +3611,21 @@ compress_float_constant (rtx x, rtx y)
into a new pseudo. This constant may be used in different modes,
and if not, combine will put things back together for us. */
trunc_y = force_reg (srcmode, trunc_y);
- emit_unop_insn (ic, x, trunc_y, UNKNOWN);
+
+ /* If x is a hard register, perform the extension into a pseudo,
+ so that e.g. stack realignment code is aware of it. */
+ rtx target = x;
+ if (REG_P (x) && HARD_REGISTER_P (x))
+ target = gen_reg_rtx (dstmode);
+
+ emit_unop_insn (ic, target, trunc_y, UNKNOWN);
last_insn = get_last_insn ();
- if (REG_P (x))
+ if (REG_P (target))
set_unique_reg_note (last_insn, REG_EQUAL, y);
+ if (target != x)
+ return emit_move_insn (x, target);
return last_insn;
}
@@ -4551,17 +4569,17 @@ get_bit_range (unsigned HOST_WIDE_INT *bitstart,
- tree_low_cst (DECL_FIELD_BIT_OFFSET (repr), 1));
/* If the adjustment is larger than bitpos, we would have a negative bit
- position for the lower bound and this may wreak havoc later. This can
- occur only if we have a non-null offset, so adjust offset and bitpos
- to make the lower bound non-negative. */
+ position for the lower bound and this may wreak havoc later. Adjust
+ offset and bitpos to make the lower bound non-negative in that case. */
if (bitoffset > *bitpos)
{
HOST_WIDE_INT adjust = bitoffset - *bitpos;
-
gcc_assert ((adjust % BITS_PER_UNIT) == 0);
- gcc_assert (*offset != NULL_TREE);
*bitpos += adjust;
+ if (*offset == NULL_TREE)
+ *offset = size_int (-adjust / BITS_PER_UNIT);
+ else
*offset
= size_binop (MINUS_EXPR, *offset, size_int (adjust / BITS_PER_UNIT));
*bitstart = 0;
@@ -4668,8 +4686,7 @@ expand_assignment (tree to, tree from, bool nontemporal)
expand_insn (icode, 2, ops);
}
else
- store_bit_field (mem, GET_MODE_BITSIZE (mode),
- 0, 0, 0, mode, reg);
+ store_bit_field (mem, GET_MODE_BITSIZE (mode), 0, 0, 0, mode, reg);
return;
}
@@ -4698,6 +4715,15 @@ expand_assignment (tree to, tree from, bool nontemporal)
tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1,
&unsignedp, &volatilep, true);
+ /* Make sure bitpos is not negative, it can wreak havoc later. */
+ if (bitpos < 0)
+ {
+ gcc_assert (offset == NULL_TREE);
+ offset = size_int (bitpos >> (BITS_PER_UNIT == 8
+ ? 3 : exact_log2 (BITS_PER_UNIT)));
+ bitpos &= BITS_PER_UNIT - 1;
+ }
+
if (TREE_CODE (to) == COMPONENT_REF
&& DECL_BIT_FIELD_TYPE (TREE_OPERAND (to, 1)))
get_bit_range (&bitregion_start, &bitregion_end, to, &bitpos, &offset);
diff --git a/gcc-4.8/gcc/expr.h b/gcc-4.8/gcc/expr.h
index 15fcb471d..98c9daeda 100644
--- a/gcc-4.8/gcc/expr.h
+++ b/gcc-4.8/gcc/expr.h
@@ -521,8 +521,8 @@ extern rtx expand_divmod (int, enum tree_code, enum machine_mode, rtx, rtx,
rtx, int);
#endif
-extern void locate_and_pad_parm (enum machine_mode, tree, int, int, tree,
- struct args_size *,
+extern void locate_and_pad_parm (enum machine_mode, tree, int, int, int,
+ tree, struct args_size *,
struct locate_and_pad_arg_data *);
/* Return the CODE_LABEL rtx for a LABEL_DECL, creating it if necessary. */
diff --git a/gcc-4.8/gcc/fold-const.c b/gcc-4.8/gcc/fold-const.c
index 6dc8934f3..3a60201e2 100644
--- a/gcc-4.8/gcc/fold-const.c
+++ b/gcc-4.8/gcc/fold-const.c
@@ -461,8 +461,6 @@ negate_expr_p (tree t)
case TRUNC_DIV_EXPR:
case ROUND_DIV_EXPR:
- case FLOOR_DIV_EXPR:
- case CEIL_DIV_EXPR:
case EXACT_DIV_EXPR:
/* In general we can't negate A / B, because if A is INT_MIN and
B is 1, we may turn this into INT_MIN / -1 which is undefined
@@ -644,8 +642,6 @@ fold_negate_expr (location_t loc, tree t)
case TRUNC_DIV_EXPR:
case ROUND_DIV_EXPR:
- case FLOOR_DIV_EXPR:
- case CEIL_DIV_EXPR:
case EXACT_DIV_EXPR:
/* In general we can't negate A / B, because if A is INT_MIN and
B is 1, we may turn this into INT_MIN / -1 which is undefined
@@ -2664,10 +2660,11 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
case COMPONENT_REF:
/* Handle operand 2 the same as for ARRAY_REF. Operand 0
may be NULL when we're called to compare MEM_EXPRs. */
- if (!OP_SAME_WITH_NULL (0))
+ if (!OP_SAME_WITH_NULL (0)
+ || !OP_SAME (1))
return 0;
flags &= ~OEP_CONSTANT_ADDRESS_OF;
- return OP_SAME (1) && OP_SAME_WITH_NULL (2);
+ return OP_SAME_WITH_NULL (2);
case BIT_FIELD_REF:
if (!OP_SAME (0))
@@ -4920,12 +4917,16 @@ fold_range_test (location_t loc, enum tree_code code, tree type,
int in0_p, in1_p, in_p;
tree low0, low1, low, high0, high1, high;
bool strict_overflow_p = false;
- tree lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p);
- tree rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p);
- tree tem;
+ tree tem, lhs, rhs;
const char * const warnmsg = G_("assuming signed overflow does not occur "
"when simplifying range test");
+ if (!INTEGRAL_TYPE_P (type))
+ return 0;
+
+ lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p);
+ rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p);
+
/* If this is an OR operation, invert both sides; we will invert
again at the end. */
if (or_op)
@@ -10927,6 +10928,13 @@ fold_binary_loc (location_t loc,
fold_build2_loc (loc, MULT_EXPR, type,
build_int_cst (type, 2) , arg1));
+ /* ((T) (X /[ex] C)) * C cancels out if the conversion is
+ sign-changing only. */
+ if (TREE_CODE (arg1) == INTEGER_CST
+ && TREE_CODE (arg0) == EXACT_DIV_EXPR
+ && operand_equal_p (arg1, TREE_OPERAND (arg0, 1), 0))
+ return fold_convert_loc (loc, type, TREE_OPERAND (arg0, 0));
+
strict_overflow_p = false;
if (TREE_CODE (arg1) == INTEGER_CST
&& 0 != (tem = extract_muldiv (op0, arg1, code, NULL_TREE,
@@ -16587,7 +16595,7 @@ fold_indirect_ref_1 (location_t loc, tree type, tree op0)
unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
tree index = bitsize_int (indexi);
- if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
+ if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
return fold_build3_loc (loc,
BIT_FIELD_REF, type, op00,
part_width, index);
diff --git a/gcc-4.8/gcc/fortran/ChangeLog b/gcc-4.8/gcc/fortran/ChangeLog
index c8733a6d7..44c59c77b 100644
--- a/gcc-4.8/gcc/fortran/ChangeLog
+++ b/gcc-4.8/gcc/fortran/ChangeLog
@@ -1,3 +1,263 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-11 Janne Blomqvist <jb@gcc.gnu.org>
+
+ * intrinsic.texi (RANDOM_SEED): Improve example.
+
+2014-04-10 Jakub Jelinek <jakub@redhat.com>
+
+ Backport from mainline
+ 2014-03-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/60603
+ * cpp.c (gfc_cpp_init): Restore cb_change_file call to
+ <built-in>.
+
+2014-03-29 Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/60677
+ * trans-intrinsic.c (gfc_conv_intrinsic_ichar): Enlarge argument
+ list buffer.
+
+2014-03-28 Mikael Morin <mikael@gcc.gnu.org>
+ Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/60576
+ * trans-expr.c (gfc_conv_derived_to_class): Avoid
+ generation of out-of-bounds range expr.
+
+2014-03-28 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/60522
+ * frontend-passes.c (cfe_code): Do not walk subtrees
+ for WHERE.
+
+2014-03-20 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/60543
+ PR fortran/60283
+ * gfortran.h (gfc_unset_implicit_pure): New prototype.
+ * resolve.c (gfc_unset_implicit_pure): New.
+ (resolve_structure_cons, resolve_function,
+ pure_subroutine, resolve_ordinary_assign): Use it.
+ * decl.c (match_old_style_init, gfc_match_data,
+ match_pointer_init, variable_decl): Ditto.
+ * expr.c (gfc_check_pointer_assign): Ditto.
+ * intrinsic.c (gfc_intrinsic_sub_interface): Ditto.
+ * io.c (match_vtag, gfc_match_open, gfc_match_close,
+ match_filepos, gfc_match_inquire, gfc_match_print,
+ gfc_match_wait, check_io_constraints): Ditto.
+ * match.c (gfc_match_critical, gfc_match_stopcode,
+ lock_unlock_statement, sync_statement, gfc_match_allocate,
+ gfc_match_deallocate): Ditto.
+ * parse.c (decode_omp_directive): Ditto.
+ * symbol.c (gfc_add_save): Ditto.
+
+2014-03-08 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/60450
+ * simplify.c (gfc_simplify_shape): Only clear shape if it was really
+ created successfully.
+
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
+
+ Backport from mainline
+ 2014-02-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/52370
+ * trans-decl.c (gfc_build_dummy_array_decl): Set TREE_NO_WARNING
+ on decl if sym->attr.optional.
+
+2014-03-02 Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/60341
+ * frontend-passes.c (optimize_comparison): Guard two union accesses
+ with the corresponding tag checks.
+
+2014-02-22 Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/59599
+ * trans-intrinsic.c (gfc_conv_intrinsic_ichar): Calculate the
+ number of arguments.
+
+2014-02-19 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/49397
+ * expr.c (gfc_check_pointer_assign): Add check for
+ F2008Cor2, C729.
+ * trans-decl.c (gfc_get_symbol_decl): Correctly generate
+ external decl in a corner case.
+
+2014-02-19 Janus Weil <janus@gcc.gnu.org>
+
+ Backports from mainline:
+ 2014-02-17 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/55907
+ * resolve.c (build_default_init_expr): Don't initialize character
+ variable if -fno-automatic is given.
+
+ 2014-02-18 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/60231
+ * resolve.c (check_generic_tbp_ambiguity): Check for presence of dummy
+ arguments to prevent ICE.
+
+2014-02-09 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-10-21 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/58803
+ PR fortran/59395
+ * decl.c (match_ppc_decl): Prevent later double free.
+
+2014-02-08 Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/57033
+ * primary.c (gfc_convert_to_structure_constructor): Avoid null pointer
+ dereference.
+
+2014-02-07 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/59906
+ * trans-stmt.c (gfc_add_loop_ss_code): In the case of character
+ SS_REFERENCE, use gfc_conv_string_parameter to ensure that a
+ pointer to the string is stored.
+ * trans-expr.c (gfc_conv_expr_reference): Likewise, use
+ gfc_conv_string_parameter to ensure that a pointer to is passed
+ to the elemental function.
+
+2014-02-01 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/59414
+ * trans-stmt.c (gfc_trans_allocate): Before the pointer
+ assignment to transfer the source _vptr to a class allocate
+ expression, the final class reference should be exposed. The
+ tail that includes the _data and array references is stored.
+ This reduced expression is transferred to 'lhs' and the _vptr
+ added. Then the tail is restored to the allocate expression.
+
+2014-01-26 Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/58007
+ * module.c
+ (fp2, find_pointer2): Remove.
+ (mio_component_ref): Don't forcedfully set the containing derived type
+ symbol for loading. Remove unused argument.
+ (mio_ref): Update caller
+ (skip_list): New argument nest_level. Initialize level with the new
+ argument.
+ (read_module): Add forced pointer components association for derived
+ type symbols.
+
+2014-01-19 Paul Thomas <pault@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-12-01 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/58410
+ * trans-array.c (gfc_alloc_allocatable_for_assignment): Do not
+ use the array bounds of an unallocated array but set its size
+ to zero instead.
+
+2014-01-19 Paul Thomas <pault@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-12-01 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/34547
+ * resolve.c (resolve_transfer): EXPR_NULL is always in an
+ invalid context in a transfer statement.
+
+2014-01-11 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-12-29 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/59612
+ PR fortran/57042
+ * dump-parse-tree.c (show_typespec): Check for charlen.
+ * invoke.texi: Fix documentation of -fdump-fortran-optimized and
+ -fdump-parse-tree.
+
+2014-01-04 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2014-01-02 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/59654
+ * resolve.c (resolve_typebound_procedures): No need to create the vtab
+ here.
+
+2013-12-31 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-12-30 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/58998
+ * resolve.c (resolve_symbol): Check that symbol is not only flavorless
+ but also untyped.
+
+2013-12-18 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-12-15 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/59493
+ * class.c (gfc_find_intrinsic_vtab): Handle BT_CLASS.
+
+2013-11-30 Paul Thomas <pault@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-11-04 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/57445
+ * trans-expr.c (gfc_conv_class_to_class): Remove spurious
+ assert.
+
+2013-11-17 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-11-07 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/58471
+ * primary.c (gfc_expr_attr): Check for result symbol.
+
+2013-11-16 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-09-20 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/58099
+ * expr.c (gfc_check_pointer_assign): Remove second call to
+ 'gfc_compare_interfaces' with swapped arguments.
+ * interface.c (gfc_compare_interfaces): Symmetrize the call to
+ 'check_result_characteristics' by calling it with swapped arguments.
+
+2013-11-16 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/58771
+ * trans-io.c (transfer_expr): If the backend_decl for a derived
+ type is missing, build it with gfc_typenode_for_spec.
+
+2013-11-05 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/58989
+ * check.c (gfc_check_reshape): ensure that shape is a constant
+ expression.
+
+2013-11-02 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-09-23 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/58355
+ * decl.c (check_extended_derived_type): Prevent segfault, modify error
+ message.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/gcc/fortran/check.c b/gcc-4.8/gcc/fortran/check.c
index 586adee8b..c9520f628 100644
--- a/gcc-4.8/gcc/fortran/check.c
+++ b/gcc-4.8/gcc/fortran/check.c
@@ -3208,7 +3208,7 @@ gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
"than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
return FAILURE;
}
- else if (shape->expr_type == EXPR_ARRAY)
+ else if (shape->expr_type == EXPR_ARRAY && gfc_is_constant_expr (shape))
{
gfc_expr *e;
int i, extent;
diff --git a/gcc-4.8/gcc/fortran/class.c b/gcc-4.8/gcc/fortran/class.c
index d8e7b6ded..55c072b82 100644
--- a/gcc-4.8/gcc/fortran/class.c
+++ b/gcc-4.8/gcc/fortran/class.c
@@ -2486,7 +2486,7 @@ gfc_find_intrinsic_vtab (gfc_typespec *ts)
return NULL;
/* Sometimes the typespec is passed from a single call. */
- if (ts->type == BT_DERIVED)
+ if (ts->type == BT_DERIVED || ts->type == BT_CLASS)
return gfc_find_derived_vtab (ts->u.derived);
/* Find the top-level namespace. */
diff --git a/gcc-4.8/gcc/fortran/cpp.c b/gcc-4.8/gcc/fortran/cpp.c
index 0a176b2ad..36e96ea5c 100644
--- a/gcc-4.8/gcc/fortran/cpp.c
+++ b/gcc-4.8/gcc/fortran/cpp.c
@@ -569,6 +569,7 @@ gfc_cpp_init (void)
if (gfc_option.flag_preprocessed)
return;
+ cpp_change_file (cpp_in, LC_RENAME, _("<built-in>"));
if (!gfc_cpp_option.no_predefined)
{
/* Make sure all of the builtins about to be declared have
diff --git a/gcc-4.8/gcc/fortran/decl.c b/gcc-4.8/gcc/fortran/decl.c
index 72c511c8b..90aee19db 100644
--- a/gcc-4.8/gcc/fortran/decl.c
+++ b/gcc-4.8/gcc/fortran/decl.c
@@ -510,9 +510,7 @@ match_old_style_init (const char *name)
free (newdata);
return MATCH_ERROR;
}
-
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (gfc_current_ns->proc_name);
/* Mark the variable as having appeared in a data statement. */
if (gfc_add_data (&sym->attr, sym->name, &sym->declared_at) == FAILURE)
@@ -571,9 +569,7 @@ gfc_match_data (void)
gfc_error ("DATA statement at %C is not allowed in a PURE procedure");
return MATCH_ERROR;
}
-
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (gfc_current_ns->proc_name);
return MATCH_YES;
@@ -1737,6 +1733,7 @@ match_pointer_init (gfc_expr **init, int procptr)
"a PURE procedure");
return MATCH_ERROR;
}
+ gfc_unset_implicit_pure (gfc_current_ns->proc_name);
/* Match NULL() initialization. */
m = gfc_match_null (init);
@@ -2045,6 +2042,10 @@ variable_decl (int elem)
m = MATCH_ERROR;
}
+ if (current_attr.flavor != FL_PARAMETER
+ && gfc_state_stack->state != COMP_DERIVED)
+ gfc_unset_implicit_pure (gfc_current_ns->proc_name);
+
if (m != MATCH_YES)
goto cleanup;
}
@@ -5069,7 +5070,14 @@ match_ppc_decl (void)
if (gfc_add_proc (&c->attr, name, NULL) == FAILURE)
return MATCH_ERROR;
+ if (num == 1)
c->tb = tb;
+ else
+ {
+ c->tb = XCNEW (gfc_typebound_proc);
+ c->tb->where = gfc_current_locus;
+ *c->tb = *tb;
+ }
/* Set interface. */
if (proc_if != NULL)
@@ -7384,6 +7392,7 @@ syntax:
/* Check a derived type that is being extended. */
+
static gfc_symbol*
check_extended_derived_type (char *name)
{
@@ -7395,14 +7404,15 @@ check_extended_derived_type (char *name)
return NULL;
}
+ extended = gfc_find_dt_in_generic (extended);
+
+ /* F08:C428. */
if (!extended)
{
- gfc_error ("No such symbol in TYPE definition at %C");
+ gfc_error ("Symbol '%s' at %C has not been previously defined", name);
return NULL;
}
- extended = gfc_find_dt_in_generic (extended);
-
if (extended->attr.flavor != FL_DERIVED)
{
gfc_error ("'%s' in EXTENDS expression at %C is not a "
diff --git a/gcc-4.8/gcc/fortran/dump-parse-tree.c b/gcc-4.8/gcc/fortran/dump-parse-tree.c
index 14ff00412..77404c8d6 100644
--- a/gcc-4.8/gcc/fortran/dump-parse-tree.c
+++ b/gcc-4.8/gcc/fortran/dump-parse-tree.c
@@ -110,6 +110,7 @@ show_typespec (gfc_typespec *ts)
break;
case BT_CHARACTER:
+ if (ts->u.cl)
show_expr (ts->u.cl->length);
fprintf(dumpfile, " %d", ts->kind);
break;
diff --git a/gcc-4.8/gcc/fortran/expr.c b/gcc-4.8/gcc/fortran/expr.c
index d16bdb090..0e89a4ce9 100644
--- a/gcc-4.8/gcc/fortran/expr.c
+++ b/gcc-4.8/gcc/fortran/expr.c
@@ -3555,11 +3555,13 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue)
return FAILURE;
}
- if (!gfc_compare_interfaces (s2, s1, name, 0, 1,
- err, sizeof(err), NULL, NULL))
+ /* Check F2008Cor2, C729. */
+ if (!s2->attr.intrinsic && s2->attr.if_source == IFSRC_UNKNOWN
+ && !s2->attr.external && !s2->attr.subroutine && !s2->attr.function)
{
- gfc_error ("Interface mismatch in procedure pointer assignment "
- "at %L: %s", &rvalue->where, err);
+ gfc_error ("Procedure pointer target '%s' at %L must be either an "
+ "intrinsic, host or use associated, referenced or have "
+ "the EXTERNAL attribute", s2->name, &rvalue->where);
return FAILURE;
}
@@ -3679,8 +3681,7 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue)
}
if (is_implicit_pure && gfc_impure_variable (rvalue->symtree->n.sym))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
-
+ gfc_unset_implicit_pure (gfc_current_ns->proc_name);
if (gfc_has_vector_index (rvalue))
{
diff --git a/gcc-4.8/gcc/fortran/frontend-passes.c b/gcc-4.8/gcc/fortran/frontend-passes.c
index fdfbce094..27729324c 100644
--- a/gcc-4.8/gcc/fortran/frontend-passes.c
+++ b/gcc-4.8/gcc/fortran/frontend-passes.c
@@ -623,12 +623,35 @@ cfe_expr_0 (gfc_expr **e, int *walk_subtrees,
to insert statements as needed. */
static int
-cfe_code (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED,
- void *data ATTRIBUTE_UNUSED)
+cfe_code (gfc_code **c, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
{
current_code = c;
inserted_block = NULL;
changed_statement = NULL;
+
+ /* Do not do anything inside a WHERE statement; scalar assignments, BLOCKs
+ and allocation on assigment are prohibited inside WHERE, and finally
+ masking an expression would lead to wrong-code when replacing
+
+ WHERE (a>0)
+ b = sum(foo(a) + foo(a))
+ END WHERE
+
+ with
+
+ WHERE (a > 0)
+ tmp = foo(a)
+ b = sum(tmp + tmp)
+ END WHERE
+*/
+
+ if ((*c)->op == EXEC_WHERE)
+ {
+ *walk_subtrees = 0;
+ return 0;
+ }
+
+
return 0;
}
@@ -1214,7 +1237,9 @@ optimize_comparison (gfc_expr *e, gfc_intrinsic_op op)
/* Replace A // B < A // C with B < C, and A // B < C // B
with A < C. */
if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
+ && op1->expr_type == EXPR_OP
&& op1->value.op.op == INTRINSIC_CONCAT
+ && op2->expr_type == EXPR_OP
&& op2->value.op.op == INTRINSIC_CONCAT)
{
gfc_expr *op1_left = op1->value.op.op1;
diff --git a/gcc-4.8/gcc/fortran/gfortran.h b/gcc-4.8/gcc/fortran/gfortran.h
index 18bbf7954..bd1aeb9ff 100644
--- a/gcc-4.8/gcc/fortran/gfortran.h
+++ b/gcc-4.8/gcc/fortran/gfortran.h
@@ -2830,6 +2830,7 @@ void gfc_resolve_blocks (gfc_code *, gfc_namespace *);
int gfc_impure_variable (gfc_symbol *);
int gfc_pure (gfc_symbol *);
int gfc_implicit_pure (gfc_symbol *);
+void gfc_unset_implicit_pure (gfc_symbol *);
int gfc_elemental (gfc_symbol *);
gfc_try gfc_resolve_iterator (gfc_iterator *, bool, bool);
gfc_try find_forall_index (gfc_expr *, gfc_symbol *, int);
diff --git a/gcc-4.8/gcc/fortran/gfortran.info b/gcc-4.8/gcc/fortran/gfortran.info
index 676a8d1dd..d7c4d0ca1 100644
--- a/gcc-4.8/gcc/fortran/gfortran.info
+++ b/gcc-4.8/gcc/fortran/gfortran.info
@@ -1,5 +1,5 @@
-This is doc/gfortran.info, produced by makeinfo version 4.13 from
-/d/gcc-4.8.1/gcc-4.8.1/gcc/fortran/gfortran.texi.
+This is doc/gfortran.info, produced by makeinfo version 4.12 from
+/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/fortran/gfortran.texi.
Copyright (C) 1999-2013 Free Software Foundation, Inc.
@@ -364,7 +364,7 @@ for them, which work with GNU Fortran. They can be found at
Deferred-length character strings of Fortran 2003 supports part of
the features of `ISO_VARYING_STRING' and should be considered as
-replacement. (Namely, allocatable or pointers of the type
+replacement. (Namely, allocatable or pointers of the type
`character(len=:)'.)

@@ -544,14 +544,14 @@ accepted by the compiler:
`-fbackslash'
Change the interpretation of backslashes in string literals from a
- single backslash character to "C-style" escape characters. The
+ single backslash character to "C-style" escape characters. The
following combinations are expanded `\a', `\b', `\f', `\n', `\r',
`\t', `\v', `\\', and `\0' to the ASCII characters alert,
backspace, form feed, newline, carriage return, horizontal tab,
vertical tab, backslash, and NUL, respectively. Additionally,
`\x'NN, `\u'NNNN and `\U'NNNNNNNN (where each N is a hexadecimal
digit) are translated into the Unicode characters corresponding to
- the specified code points. All other combinations of a character
+ the specified code points. All other combinations of a character
preceded by \ are unexpanded.
`-fmodule-private'
@@ -574,13 +574,13 @@ accepted by the compiler:
`-ffree-line-length-N'
Set column after which characters are ignored in typical free-form
- lines in the source file. The default value is 132. N may be
+ lines in the source file. The default value is 132. N may be
`none', meaning that the entire line is meaningful.
`-ffree-line-length-0' means the same thing as
`-ffree-line-length-none'.
`-fmax-identifier-length=N'
- Specify the maximum allowed identifier length. Typical values are
+ Specify the maximum allowed identifier length. Typical values are
31 (Fortran 95) and 63 (Fortran 2003 and Fortran 2008).
`-fimplicit-none'
@@ -663,13 +663,13 @@ File: gfortran.info, Node: Preprocessing Options, Next: Error and Warning Opti
2.3 Enable and customize preprocessing
======================================
-Preprocessor related options. See section *note Preprocessing and
+Preprocessor related options. See section *note Preprocessing and
conditional compilation:: for more detailed information on
preprocessing in `gfortran'.
`-cpp'
`-nocpp'
- Enable preprocessing. The preprocessor is automatically invoked if
+ Enable preprocessing. The preprocessor is automatically invoked if
the file extension is `.fpp', `.FPP', `.F', `.FOR', `.FTN',
`.F90', `.F95', `.F03' or `.F08'. Use this option to manually
enable preprocessing of any kind of Fortran file.
@@ -677,7 +677,7 @@ preprocessing in `gfortran'.
To disable preprocessing of files with any of the above listed
extensions, use the negative form: `-nocpp'.
- The preprocessor is run in traditional mode. Any restrictions of
+ The preprocessor is run in traditional mode. Any restrictions of
the file-format, especially the limits on line length, apply for
preprocessed output as well, so it might be advisable to use the
`-ffree-line-length-none' or `-ffixed-line-length-none' options.
@@ -685,7 +685,7 @@ preprocessing in `gfortran'.
`-dM'
Instead of the normal output, generate a list of `'#define''
directives for all the macros defined during the execution of the
- preprocessor, including predefined macros. This gives you a way of
+ preprocessor, including predefined macros. This gives you a way of
finding out what is predefined in your version of the preprocessor.
Assuming you have no file `foo.f90', the command
touch foo.f90; gfortran -cpp -E -dM foo.f90
@@ -714,10 +714,10 @@ preprocessing in `gfortran'.
`-fworking-directory'
Enable generation of linemarkers in the preprocessor output that
will let the compiler know the current working directory at the
- time of preprocessing. When this option is enabled, the
+ time of preprocessing. When this option is enabled, the
preprocessor will emit, after the initial linemarker, a second
linemarker with the current working directory followed by two
- slashes. GCC will use this directory, when it is present in the
+ slashes. GCC will use this directory, when it is present in the
preprocessed input, as the directory emitted as the current
working directory in some debugging information formats. This
option is implicitly enabled if debugging information is enabled,
@@ -729,7 +729,7 @@ preprocessing in `gfortran'.
`-idirafter DIR'
Search DIR for include files, but do it after all directories
specified with `-I' and the standard system directories have been
- exhausted. DIR is treated as a system include directory. If dir
+ exhausted. DIR is treated as a system include directory. If dir
begins with `=', then the `=' will be replaced by the sysroot
prefix; see `--sysroot' and `-isysroot'.
@@ -757,7 +757,7 @@ preprocessing in `gfortran'.
Search DIR for header files, after all directories specified by
`-I' but before the standard system directories. Mark it as a
system directory, so that it gets the same special treatment as is
- applied to the standard system directories. If DIR begins with
+ applied to the standard system directories. If DIR begins with
`=', then the `=' will be replaced by the sysroot prefix; see
`--sysroot' and `-isysroot'.
@@ -780,7 +780,7 @@ preprocessing in `gfortran'.
Cancel an assertion with the predicate PREDICATE and answer ANSWER.
`-C'
- Do not discard comments. All comments are passed through to the
+ Do not discard comments. All comments are passed through to the
output file, except for comments in processed directives, which
are deleted along with the directive.
@@ -791,11 +791,11 @@ preprocessing in `gfortran'.
ordinary source line, since the first token on the line is no
longer a `'#''.
- Warning: this currently handles C-Style comments only. The
+ Warning: this currently handles C-Style comments only. The
preprocessor does not yet recognize Fortran-style comments.
`-CC'
- Do not discard comments, including during macro expansion. This is
+ Do not discard comments, including during macro expansion. This is
like `-C', except that comments contained within macros are also
passed through to the output file where the macro is expanded.
@@ -824,17 +824,17 @@ preprocessing in `gfortran'.
If you wish to define a function-like macro on the command line,
write its argument list with surrounding parentheses before the
- equals sign (if any). Parentheses are meaningful to most shells,
- so you will need to quote the option. With sh and csh,
+ equals sign (if any). Parentheses are meaningful to most shells,
+ so you will need to quote the option. With sh and csh,
`-D'name(args...)=definition'' works.
`-D' and `-U' options are processed in the order they are given on
- the command line. All -imacros file and -include file options are
+ the command line. All -imacros file and -include file options are
processed after all -D and -U options.
`-H'
Print the name of each header file used, in addition to other
- normal activities. Each name is indented to show how deep in the
+ normal activities. Each name is indented to show how deep in the
`'#include'' stack it is.
`-P'
@@ -916,7 +916,7 @@ produced by GNU Fortran:
`-Wtarget-lifetime', `-Wreal-q-constant' and `-Wunused'.
`-Waliasing'
- Warn about possible aliasing of dummy arguments. Specifically, it
+ Warn about possible aliasing of dummy arguments. Specifically, it
warns if the same actual argument is associated with a dummy
argument with `INTENT(IN)' and a dummy argument with `INTENT(OUT)'
in a call with an explicit interface.
@@ -933,7 +933,7 @@ produced by GNU Fortran:
call bar(a,a)
`-Wampersand'
- Warn about missing ampersand in continued character constants. The
+ Warn about missing ampersand in continued character constants. The
warning is given with `-Wampersand', `-pedantic', `-std=f95',
`-std=f2003' and `-std=f2008'. Note: With no ampersand given in a
continued character constant, GNU Fortran assumes continuation at
@@ -1018,7 +1018,7 @@ produced by GNU Fortran:
By default, tabs are accepted as whitespace, but tabs are not
members of the Fortran Character Set. For continuation lines, a
tab followed by a digit between 1 and 9 is supported. `-Wno-tabs'
- will cause a warning to be issued if a tab is encountered. Note,
+ will cause a warning to be issued if a tab is encountered. Note,
`-Wno-tabs' is active for `-pedantic', `-std=f95', `-std=f2003',
`-std=f2008' and `-Wall'.
@@ -1034,7 +1034,7 @@ produced by GNU Fortran:
implied by `-Wall'.
`-Wunused-dummy-argument'
- Warn about unused dummy arguments. This option is implied by
+ Warn about unused dummy arguments. This option is implied by
`-Wall'.
`-Wunused-parameter'
@@ -1104,10 +1104,11 @@ either your program or the GNU Fortran compiler.
into internal representation. Only really useful for debugging the
GNU Fortran compiler itself.
-`-fdump-optimized-tree'
+`-fdump-fortran-optimized'
Output the parse tree after front-end optimization. Only really
useful for debugging the GNU Fortran compiler itself.
+`-fdump-parse-tree'
Output the internal parse tree after translating the source program
into internal representation. Only really useful for debugging the
GNU Fortran compiler itself. This option is deprecated; use
@@ -1146,7 +1147,7 @@ either your program or the GNU Fortran compiler.
floating-point exception, and the other POSIX signals that have the
action `core'), the Fortran runtime library tries to output a
backtrace of the error. `-fno-backtrace' disables the backtrace
- generation. This option only has influence for compilation of the
+ generation. This option only has influence for compilation of the
Fortran main program.
@@ -1200,12 +1201,12 @@ File: gfortran.info, Node: Link Options, Next: Runtime Options, Prev: Directo
================================
These options come into play when the compiler links object files into
-an executable output file. They are meaningless if the compiler is not
+an executable output file. They are meaningless if the compiler is not
doing a link step.
`-static-libgfortran'
On systems that provide `libgfortran' as a shared and a static
- library, this option forces the use of the static version. If no
+ library, this option forces the use of the static version. If no
shared version of `libgfortran' was built when the compiler was
configured, this option has no effect.
@@ -1248,7 +1249,7 @@ Fortran.
treated as negative in the `SIGN' intrinsic. `-fno-sign-zero'
does not print the negative sign of zero values (or values rounded
to zero for I/O) and regards zero as positive number in the `SIGN'
- intrinsic for compatibility with Fortran 77. The default is
+ intrinsic for compatibility with Fortran 77. The default is
`-fsign-zero'.

@@ -1268,7 +1269,7 @@ the other form by either removing `no-' or adding it.
`-fno-automatic'
Treat each program unit (except those marked as RECURSIVE) as if
the `SAVE' statement were specified for every local variable and
- array referenced in it. Does not affect common blocks. (Some
+ array referenced in it. Does not affect common blocks. (Some
Fortran compilers provide this option under the name `-static' or
`-save'.) The default, which is `-fautomatic', uses the stack for
local variables smaller than the value given by
@@ -1420,7 +1421,7 @@ the other form by either removing `no-' or adding it.
`array-temps'
Warns at run time when for passing an actual argument a
- temporary array had to be generated. The information
+ temporary array had to be generated. The information
generated by this warning is sometimes useful in
optimization, in order to avoid such temporaries.
@@ -1479,7 +1480,7 @@ the other form by either removing `no-' or adding it.
print '(10(I0,1X))', i
end program test
- _Caution: This option can lead to long compile times and
+ _Caution: This option can lead to long compile times and
excessively large object files._
The default value for N is 65535.
@@ -1503,7 +1504,7 @@ the other form by either removing `no-' or adding it.
arrays, even those of unknown size onto stack memory. If your
program uses very large local arrays it is possible that you will
have to extend your runtime limits for stack memory on some
- operating systems. This flag is enabled by default at optimization
+ operating systems. This flag is enabled by default at optimization
level `-Ofast'.
`-fpack-derived'
@@ -1549,7 +1550,7 @@ the other form by either removing `no-' or adding it.
`-frecursive'
Allow indirect recursion by forcing all local arrays to be
- allocated on the stack. This flag cannot be used together with
+ allocated on the stack. This flag cannot be used together with
`-fmax-stack-var-size=' or `-fno-automatic'.
`-finit-local-zero'
@@ -1608,7 +1609,7 @@ the other form by either removing `no-' or adding it.
`-frealloc-lhs'
An allocatable left-hand side of an intrinsic assignment is
automatically (re)allocated if it is either unallocated or has a
- different shape. The option is enabled by default except when
+ different shape. The option is enabled by default except when
`-std=f95' is given. See also `-Wrealloc-lhs'.
`-faggressive-function-elimination'
@@ -1651,7 +1652,7 @@ behavior of programs compiled with GNU Fortran.

File: gfortran.info, Node: Runtime, Next: Fortran 2003 and 2008 status, Prev: Invoking GNU Fortran, Up: Top
-3 Runtime: Influencing runtime behavior with environment variables
+3 Runtime: Influencing runtime behavior with environment variables
*******************************************************************
The behavior of the `gfortran' can be influenced by environment
@@ -1906,7 +1907,7 @@ can be found below. See also the wiki page
and arrays, including unlimited polymorphism.
* Generic interface names, which have the same name as derived types,
- are now supported. This allows one to write constructor functions.
+ are now supported. This allows one to write constructor functions.
Note that Fortran does not support static constructor functions.
For static variables, only default initialization or
structure-constructor initialization are available.
@@ -1927,7 +1928,7 @@ can be found below. See also the wiki page
* Reallocation on assignment: If an intrinsic assignment is used, an
allocatable variable on the left-hand side is automatically
allocated (if unallocated) or reallocated (if the shape is
- different). Currently, scalar deferred character length left-hand
+ different). Currently, scalar deferred character length left-hand
sides are correctly handled but arrays are not yet fully
implemented.
@@ -2025,7 +2026,7 @@ downloaded free of charge from
`http://www.nag.co.uk/sc22wg5/links.html'. Fortran is developed by the
Working Group 5 of Sub-Committee 22 of the Joint Technical Committee 1
of the International Organization for Standardization and the
-International Electrotechnical Commission (IEC). This group is known as
+International Electrotechnical Commission (IEC). This group is known as
WG5 (http://www.nag.co.uk/sc22wg5/).
The GNU Fortran compiler supports several of the new features of
@@ -2272,9 +2273,9 @@ This section contains a brief overview of data and metadata consistency
and durability issues when doing I/O.
With respect to durability, GNU Fortran makes no effort to ensure
-that data is committed to stable storage. If this is required, the GNU
+that data is committed to stable storage. If this is required, the GNU
Fortran programmer can use the intrinsic `FNUM' to retrieve the low
-level file descriptor corresponding to an open Fortran unit. Then,
+level file descriptor corresponding to an open Fortran unit. Then,
using e.g. the `ISO_C_BINDING' feature, one can call the underlying
system call to flush dirty data to stable storage, such as `fsync' on
POSIX, `_commit' on MingW, or `fcntl(fd, F_FULLSYNC, 0)' on Mac OS X.
@@ -2307,8 +2308,8 @@ The following example shows how to call fsync:
if (ret /= 0) stop "Error calling FSYNC"
With respect to consistency, for regular files GNU Fortran uses
-buffered I/O in order to improve performance. This buffer is flushed
-automatically when full and in some other situations, e.g. when closing
+buffered I/O in order to improve performance. This buffer is flushed
+automatically when full and in some other situations, e.g. when closing
a unit. It can also be explicitly flushed with the `FLUSH' statement.
Also, the buffering can be turned off with the
`GFORTRAN_UNBUFFERED_ALL' and `GFORTRAN_UNBUFFERED_PRECONNECTED'
@@ -2318,7 +2319,7 @@ done in order to allow other processes to see data that GNU Fortran has
written, as follows.
The Windows platform supports a relaxed metadata consistency model,
-where file metadata is written to the directory lazily. This means
+where file metadata is written to the directory lazily. This means
that, for instance, the `dir' command can show a stale size for a file.
One can force a directory metadata update by closing the unit, or by
calling `_commit' on the file descriptor. Note, though, that `_commit'
@@ -2326,7 +2327,7 @@ will force all dirty data to stable storage, which is often a very slow
operation.
The Network File System (NFS) implements a relaxed consistency model
-called open-to-close consistency. Closing a file forces dirty data and
+called open-to-close consistency. Closing a file forces dirty data and
metadata to be flushed to the server, and opening a file forces the
client to contact the server in order to revalidate cached data.
`fsync' will also force a flush of dirty data and metadata to the
@@ -3185,7 +3186,7 @@ In order to ensure that exactly the same variable type and kind is used
in C and Fortran, the named constants shall be used which are defined
in the `ISO_C_BINDING' intrinsic module. That module contains named
constants for kind parameters and character named constants for the
-escape sequences in C. For a list of the constants, see *note
+escape sequences in C. For a list of the constants, see *note
ISO_C_BINDING::.

@@ -3263,13 +3264,13 @@ File: gfortran.info, Node: Interoperable Subroutines and Functions, Next: Work
---------------------------------------------
Subroutines and functions have to have the `BIND(C)' attribute to be
-compatible with C. The dummy argument declaration is relatively
+compatible with C. The dummy argument declaration is relatively
straightforward. However, one needs to be careful because C uses
call-by-value by default while Fortran behaves usually similar to
call-by-reference. Furthermore, strings and pointers are handled
differently. Note that in Fortran 2003 and 2008 only explicit size and
assumed-size arrays are supported but not assumed-shape or
-deferred-shape (i.e. allocatable or pointer) arrays. However, those
+deferred-shape (i.e. allocatable or pointer) arrays. However, those
are allowed since the Technical Specification 29113, see *note Further
Interoperability of Fortran with C::
@@ -3504,7 +3505,7 @@ File: gfortran.info, Node: Further Interoperability of Fortran with C, Prev: W
The Technical Specification ISO/IEC TS 29113:2012 on further
interoperability of Fortran with C extends the interoperability support
-of Fortran 2003 and Fortran 2008. Besides removing some restrictions
+of Fortran 2003 and Fortran 2008. Besides removing some restrictions
and constraints, it adds assumed-type (`TYPE(*)') and assumed-rank
(`dimension') variables and allows for interoperability of
assumed-shape, assumed-rank and deferred-shape arrays, including
@@ -3512,7 +3513,7 @@ allocatables and pointers.
Note: Currently, GNU Fortran does not support the array descriptor
(dope vector) as specified in the Technical Specification, but uses an
-array descriptor with different fields. The Chasm Language
+array descriptor with different fields. The Chasm Language
Interoperability Tools, `http://chasm-interop.sourceforge.net/',
provide an interface to GNU Fortran's array descriptor.
@@ -3556,7 +3557,7 @@ are supported by GNU Fortran:
Currently unimplemented:
* GNU Fortran always uses an array descriptor, which does not match
- the one of the Technical Specification. The
+ the one of the Technical Specification. The
`ISO_Fortran_binding.h' header file and the C functions it
specifies are not available.
@@ -3577,7 +3578,7 @@ allow the user to choose specific implementation details, compiler
directives can be used to set attributes of variables and procedures
which are not part of the standard. Whether a given attribute is
supported and its exact effects depend on both the operating system and
-on the processor; see *note C Extensions: (gcc)Top. for details.
+on the processor; see *note C Extensions: (gcc)Top. for details.
For procedures and procedure pointers, the following attributes can
be used to change the calling convention:
@@ -3676,9 +3677,9 @@ _Syntax_:
`void _gfortran_set_args (int argc, char *argv[])'
_Arguments_:
- ARGC number of command line argument strings
- ARGV the command-line argument strings; argv[0] is
- the pathname of the executable itself.
+ ARGC number of command line argument strings
+ ARGV the command-line argument strings; argv[0] is
+ the pathname of the executable itself.
_Example_:
int main (int argc, char *argv[])
@@ -3707,11 +3708,11 @@ _Syntax_:
`void _gfortran_set_options (int num, int options[])'
_Arguments_:
- NUM number of options passed
- ARGV The list of flag values
+ NUM number of options passed
+ ARGV The list of flag values
_option flag list_:
- OPTION[0] Allowed standard; can give run-time errors if
+ OPTION[0] Allowed standard; can give run-time errors if
e.g. an input-output edit descriptor is
invalid in a given standard. Possible values
are (bitwise or-ed) `GFC_STD_F77' (1),
@@ -3722,23 +3723,23 @@ _option flag list_:
(256) and GFC_STD_F2008_TS (512). Default:
`GFC_STD_F95_OBS | GFC_STD_F95_DEL |
GFC_STD_F95 | GFC_STD_F2003 | GFC_STD_F2008 |
- GFC_STD_F2008_TS | GFC_STD_F2008_OBS |
- GFC_STD_F77 | GFC_STD_GNU | GFC_STD_LEGACY'.
- OPTION[1] Standard-warning flag; prints a warning to
+ GFC_STD_F2008_TS | GFC_STD_F2008_OBS |
+ GFC_STD_F77 | GFC_STD_GNU | GFC_STD_LEGACY'.
+ OPTION[1] Standard-warning flag; prints a warning to
standard error. Default: `GFC_STD_F95_DEL |
- GFC_STD_LEGACY'.
+ GFC_STD_LEGACY'.
OPTION[2] If non zero, enable pedantic checking.
Default: off.
- OPTION[3] Unused.
- OPTION[4] If non zero, enable backtracing on run-time
+ OPTION[3] Unused.
+ OPTION[4] If non zero, enable backtracing on run-time
errors. Default: off. Note: Installs a
signal handler and requires command-line
initialization using `_gfortran_set_args'.
- OPTION[5] If non zero, supports signed zeros. Default:
- enabled.
+ OPTION[5] If non zero, supports signed zeros. Default:
+ enabled.
OPTION[6] Enables run-time checking. Possible values
are (bitwise or-ed): GFC_RTCHECK_BOUNDS (1),
- GFC_RTCHECK_ARRAY_TEMPS (2),
+ GFC_RTCHECK_ARRAY_TEMPS (2),
GFC_RTCHECK_RECURSION (4), GFC_RTCHECK_DO
(16), GFC_RTCHECK_POINTER (32). Default:
disabled.
@@ -3762,10 +3763,10 @@ _Syntax_:
`void _gfortran_set_convert (int conv)'
_Arguments_:
- CONV Endian conversion, possible values:
- GFC_CONVERT_NATIVE (0, default),
- GFC_CONVERT_SWAP (1), GFC_CONVERT_BIG (2),
- GFC_CONVERT_LITTLE (3).
+ CONV Endian conversion, possible values:
+ GFC_CONVERT_NATIVE (0, default),
+ GFC_CONVERT_SWAP (1), GFC_CONVERT_BIG (2),
+ GFC_CONVERT_LITTLE (3).
_Example_:
int main (int argc, char *argv[])
@@ -3817,8 +3818,8 @@ _Syntax_:
`void _gfortran_set_fpe (int val)'
_Arguments_:
- OPTION[0] IEEE exceptions. Possible values are (bitwise
- or-ed) zero (0, default) no trapping,
+ OPTION[0] IEEE exceptions. Possible values are (bitwise
+ or-ed) zero (0, default) no trapping,
`GFC_FPE_INVALID' (1), `GFC_FPE_DENORMAL' (2),
`GFC_FPE_ZERO' (4), `GFC_FPE_OVERFLOW' (8),
`GFC_FPE_UNDERFLOW' (16), and
@@ -4241,19 +4242,19 @@ _Example_:
end program test_abs
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`ABS(A)' `REAL(4) A' `REAL(4)' Fortran 77 and
- later
+ later
`CABS(A)' `COMPLEX(4) `REAL(4)' Fortran 77 and
- A' later
+ A' later
`DABS(A)' `REAL(8) A' `REAL(8)' Fortran 77 and
- later
+ later
`IABS(A)' `INTEGER(4) `INTEGER(4)' Fortran 77 and
- A' later
+ A' later
`ZABS(A)' `COMPLEX(8) `COMPLEX(8)' GNU extension
- A'
+ A'
`CDABS(A)' `COMPLEX(8) `COMPLEX(8)' GNU extension
- A'
+ A'

File: gfortran.info, Node: ACCESS, Next: ACHAR, Prev: ABS, Up: Intrinsic Procedures
@@ -4263,7 +4264,7 @@ File: gfortran.info, Node: ACCESS, Next: ACHAR, Prev: ABS, Up: Intrinsic Pro
_Description_:
`ACCESS(NAME, MODE)' checks whether the file NAME exists, is
- readable, writable or executable. Except for the executable check,
+ readable, writable or executable. Except for the executable check,
`ACCESS' can be replaced by Fortran 95's `INQUIRE'.
_Standard_:
@@ -4280,7 +4281,7 @@ _Arguments_:
file name. Tailing blank are ignored unless
the character `achar(0)' is present, then all
characters up to and excluding `achar(0)' are
- used as file name.
+ used as file name.
MODE Scalar `CHARACTER' of default kind with the
file access mode, may be any concatenation of
`"r"' (readable), `"w"' (writable) and `"x"'
@@ -4387,11 +4388,11 @@ _Example_:
end program test_acos
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`ACOS(X)' `REAL(4) X' `REAL(4)' Fortran 77 and
- later
+ later
`DACOS(X)' `REAL(8) X' `REAL(8)' Fortran 77 and
- later
+ later
_See also_:
Inverse function: *note COS::
@@ -4419,8 +4420,8 @@ _Arguments_:
X The type shall be `REAL' or `COMPLEX'.
_Return value_:
- The return value has the same type and kind as X. If X is complex,
- the imaginary part of the result is in radians and lies between 0
+ The return value has the same type and kind as X. If X is complex,
+ the imaginary part of the result is in radians and lies between 0
\leq \Im \acosh(x) \leq \pi.
_Example_:
@@ -4430,7 +4431,7 @@ _Example_:
END PROGRAM
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`DACOSH(X)' `REAL(8) X' `REAL(8)' GNU extension
_See also_:
@@ -4548,10 +4549,10 @@ _Example_:
end program test_aimag
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`AIMAG(Z)' `COMPLEX Z' `REAL' GNU extension
`DIMAG(Z)' `COMPLEX(8) `REAL(8)' GNU extension
- Z'
+ Z'
`IMAG(Z)' `COMPLEX Z' `REAL' GNU extension
`IMAGPART(Z)' `COMPLEX Z' `REAL' GNU extension
@@ -4599,11 +4600,11 @@ _Example_:
end program test_aint
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`AINT(A)' `REAL(4) A' `REAL(4)' Fortran 77 and
- later
+ later
`DINT(A)' `REAL(8) A' `REAL(8)' Fortran 77 and
- later
+ later

File: gfortran.info, Node: ALARM, Next: ALL, Prev: AINT, Up: Intrinsic Procedures
@@ -4629,7 +4630,7 @@ _Syntax_:
`CALL ALARM(SECONDS, HANDLER [, STATUS])'
_Arguments_:
- SECONDS The type of the argument shall be a scalar
+ SECONDS The type of the argument shall be a scalar
`INTEGER'. It is `INTENT(IN)'.
HANDLER Signal handler (`INTEGER FUNCTION' or
`SUBROUTINE') or dummy/global `INTEGER'
@@ -4673,10 +4674,10 @@ _Syntax_:
_Arguments_:
MASK The type of the argument shall be `LOGICAL' and
- it shall not be scalar.
+ it shall not be scalar.
DIM (Optional) DIM shall be a scalar integer with
a value that lies between one and the rank of
- MASK.
+ MASK.
_Return value_:
`ALL(MASK)' returns a scalar value of type `LOGICAL' where the
@@ -4685,11 +4686,11 @@ _Return value_:
with the rank of MASK minus 1. The shape is determined from the
shape of MASK where the DIM dimension is elided.
- (A)
+ (A)
`ALL(MASK)' is true if all elements of MASK are true. It
also is true if MASK has zero size; otherwise, it is false.
- (B)
+ (B)
If the rank of MASK is one, then `ALL(MASK,DIM)' is equivalent
to `ALL(MASK)'. If the rank is greater than one, then
`ALL(MASK,DIM)' is determined by applying `ALL' to the array
@@ -4775,7 +4776,7 @@ _Syntax_:
_Arguments_:
I The type shall be either a scalar `INTEGER'
type or a scalar `LOGICAL' type.
- J The type shall be the same as the type of I.
+ J The type shall be the same as the type of I.
_Return value_:
The return type is either a scalar `INTEGER' or a scalar
@@ -4839,11 +4840,11 @@ _Example_:
end program test_anint
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`AINT(A)' `REAL(4) A' `REAL(4)' Fortran 77 and
- later
+ later
`DNINT(A)' `REAL(8) A' `REAL(8)' Fortran 77 and
- later
+ later

File: gfortran.info, Node: ANY, Next: ASIN, Prev: ANINT, Up: Intrinsic Procedures
@@ -4866,10 +4867,10 @@ _Syntax_:
_Arguments_:
MASK The type of the argument shall be `LOGICAL' and
- it shall not be scalar.
+ it shall not be scalar.
DIM (Optional) DIM shall be a scalar integer with
a value that lies between one and the rank of
- MASK.
+ MASK.
_Return value_:
`ANY(MASK)' returns a scalar value of type `LOGICAL' where the
@@ -4878,12 +4879,12 @@ _Return value_:
with the rank of MASK minus 1. The shape is determined from the
shape of MASK where the DIM dimension is elided.
- (A)
+ (A)
`ANY(MASK)' is true if any element of MASK is true;
otherwise, it is false. It also is false if MASK has zero
size.
- (B)
+ (B)
If the rank of MASK is one, then `ANY(MASK,DIM)' is equivalent
to `ANY(MASK)'. If the rank is greater than one, then
`ANY(MASK,DIM)' is determined by applying `ANY' to the array
@@ -4941,11 +4942,11 @@ _Example_:
end program test_asin
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`ASIN(X)' `REAL(4) X' `REAL(4)' Fortran 77 and
- later
+ later
`DASIN(X)' `REAL(8) X' `REAL(8)' Fortran 77 and
- later
+ later
_See also_:
Inverse function: *note SIN::
@@ -4973,7 +4974,7 @@ _Arguments_:
X The type shall be `REAL' or `COMPLEX'.
_Return value_:
- The return value is of the same type and kind as X. If X is
+ The return value is of the same type and kind as X. If X is
complex, the imaginary part of the result is in radians and lies
between -\pi/2 \leq \Im \asinh(x) \leq \pi/2.
@@ -4984,7 +4985,7 @@ _Example_:
END PROGRAM
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`DASINH(X)' `REAL(8) X' `REAL(8)' GNU extension.
_See also_:
@@ -5011,39 +5012,39 @@ _Syntax_:
_Arguments_:
POINTER POINTER shall have the `POINTER' attribute and
- it can be of any type.
- TARGET (Optional) TARGET shall be a pointer or a
- target. It must have the same type, kind type
- parameter, and array rank as POINTER.
+ it can be of any type.
+ TARGET (Optional) TARGET shall be a pointer or a
+ target. It must have the same type, kind type
+ parameter, and array rank as POINTER.
The association status of neither POINTER nor TARGET shall be
undefined.
_Return value_:
`ASSOCIATED(POINTER)' returns a scalar value of type `LOGICAL(4)'.
There are several cases:
- (A) When the optional TARGET is not present then
+ (A) When the optional TARGET is not present then
`ASSOCIATED(POINTER)' is true if POINTER is associated with a
target; otherwise, it returns false.
- (B) If TARGET is present and a scalar target, the result is true if
+ (B) If TARGET is present and a scalar target, the result is true if
TARGET is not a zero-sized storage sequence and the target
associated with POINTER occupies the same storage units. If
POINTER is disassociated, the result is false.
- (C) If TARGET is present and an array target, the result is true if
+ (C) If TARGET is present and an array target, the result is true if
TARGET and POINTER have the same shape, are not zero-sized
arrays, are arrays whose elements are not zero-sized storage
sequences, and TARGET and POINTER occupy the same storage
units in array element order. As in case(B), the result is
false, if POINTER is disassociated.
- (D) If TARGET is present and an scalar pointer, the result is true
+ (D) If TARGET is present and an scalar pointer, the result is true
if TARGET is associated with POINTER, the target associated
with TARGET are not zero-sized storage sequences and occupy
the same storage units. The result is false, if either
TARGET or POINTER is disassociated.
- (E) If TARGET is present and an array pointer, the result is true if
+ (E) If TARGET is present and an array pointer, the result is true if
target associated with POINTER and the target associated with
TARGET have the same shape, are not zero-sized arrays, are
arrays whose elements are not zero-sized storage sequences,
@@ -5086,12 +5087,12 @@ _Syntax_:
_Arguments_:
X The type shall be `REAL' or `COMPLEX'; if Y is
- present, X shall be REAL.
- Y shall
- be of the
- same type
- and kind
- as X.
+ present, X shall be REAL.
+ Y shall
+ be of the
+ same type
+ and kind
+ as X.
_Return value_:
The return value is of the same type and kind as X. If Y is
@@ -5106,11 +5107,11 @@ _Example_:
end program test_atan
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`ATAN(X)' `REAL(4) X' `REAL(4)' Fortran 77 and
- later
+ later
`DATAN(X)' `REAL(8) X' `REAL(8)' Fortran 77 and
- later
+ later
_See also_:
Inverse function: *note TAN::
@@ -5139,9 +5140,9 @@ _Syntax_:
_Arguments_:
Y The type shall be `REAL'.
- X The type and kind type parameter shall be the
- same as Y. If Y is zero, then X must be
- nonzero.
+ X The type and kind type parameter shall be the
+ same as Y. If Y is zero, then X must be
+ nonzero.
_Return value_:
The return value has the same type and kind type parameter as Y. It
@@ -5160,11 +5161,11 @@ _Example_:
end program test_atan2
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`ATAN2(X, `REAL(4) X, `REAL(4)' Fortran 77 and
- Y)' Y' later
+ Y)' Y' later
`DATAN2(X, `REAL(8) X, `REAL(8)' Fortran 77 and
- Y)' Y' later
+ Y)' Y' later

File: gfortran.info, Node: ATANH, Next: ATOMIC_DEFINE, Prev: ATAN2, Up: Intrinsic Procedures
@@ -5188,7 +5189,7 @@ _Arguments_:
X The type shall be `REAL' or `COMPLEX'.
_Return value_:
- The return value has same type and kind as X. If X is complex, the
+ The return value has same type and kind as X. If X is complex, the
imaginary part of the result is in radians and lies between -\pi/2
\leq \Im \atanh(x) \leq \pi/2.
@@ -5199,7 +5200,7 @@ _Example_:
END PROGRAM
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`DATANH(X)' `REAL(8) X' `REAL(8)' GNU extension
_See also_:
@@ -5225,11 +5226,11 @@ _Syntax_:
`CALL ATOMIC_DEFINE(ATOM, VALUE)'
_Arguments_:
- ATOM Scalar coarray or coindexed variable of either
+ ATOM Scalar coarray or coindexed variable of either
integer type with
`ATOMIC_INT_KIND' kind or logical type
with `ATOMIC_LOGICAL_KIND' kind.
- VALURE Scalar and of the same type as ATOM. If the
+ VALURE Scalar and of the same type as ATOM. If the
kind is different, the
value is converted to the kind of
ATOM.
@@ -5264,11 +5265,11 @@ _Syntax_:
`CALL ATOMIC_REF(VALUE, ATOM)'
_Arguments_:
- VALURE Scalar and of the same type as ATOM. If the
+ VALURE Scalar and of the same type as ATOM. If the
kind is different, the
value is converted to the kind of
ATOM.
- ATOM Scalar coarray or coindexed variable of either
+ ATOM Scalar coarray or coindexed variable of either
integer type with
`ATOMIC_INT_KIND' kind or logical type
with `ATOMIC_LOGICAL_KIND' kind.
@@ -5297,7 +5298,7 @@ File: gfortran.info, Node: BACKTRACE, Next: BESSEL_J0, Prev: ATOMIC_REF, Up:
_Description_:
`BACKTRACE' shows a backtrace at an arbitrary place in user code.
- Program execution continues normally afterwards. The backtrace
+ Program execution continues normally afterwards. The backtrace
information is printed to the unit corresponding to `ERROR_UNIT'
in `ISO_FORTRAN_ENV'.
@@ -5338,11 +5339,11 @@ _Syntax_:
_Arguments_:
X The type shall be `REAL', and it shall be
- scalar.
+ scalar.
_Return value_:
The return value is of type `REAL' and lies in the range -
- 0.4027... \leq Bessel (0,x) \leq 1. It has the same kind as X.
+ 0.4027... \leq Bessel (0,x) \leq 1. It has the same kind as X.
_Example_:
program test_besj0
@@ -5351,7 +5352,7 @@ _Example_:
end program test_besj0
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`DBESJ0(X)' `REAL(8) X' `REAL(8)' GNU extension

@@ -5376,11 +5377,11 @@ _Syntax_:
_Arguments_:
X The type shall be `REAL', and it shall be
- scalar.
+ scalar.
_Return value_:
The return value is of type `REAL' and it lies in the range -
- 0.5818... \leq Bessel (0,x) \leq 0.5818 . It has the same kind as
+ 0.5818... \leq Bessel (0,x) \leq 0.5818 . It has the same kind as
X.
_Example_:
@@ -5390,7 +5391,7 @@ _Example_:
end program test_besj1
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`DBESJ1(X)' `REAL(8) X' `REAL(8)' GNU extension

@@ -5422,9 +5423,9 @@ _Syntax_:
_Arguments_:
N Shall be a scalar or an array of type
`INTEGER'.
- N1 Shall be a non-negative scalar of type
+ N1 Shall be a non-negative scalar of type
`INTEGER'.
- N2 Shall be a non-negative scalar of type
+ N2 Shall be a non-negative scalar of type
`INTEGER'.
X Shall be a scalar or an array of type `REAL';
for `BESSEL_JN(N1, N2, X)' it shall be scalar.
@@ -5445,9 +5446,9 @@ _Example_:
end program test_besjn
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`DBESJN(N, `INTEGER N' `REAL(8)' GNU extension
- X)'
+ X)'
`REAL(8) X'

@@ -5472,7 +5473,7 @@ _Syntax_:
_Arguments_:
X The type shall be `REAL', and it shall be
- scalar.
+ scalar.
_Return value_:
The return value is a scalar of type `REAL'. It has the same kind
@@ -5485,7 +5486,7 @@ _Example_:
end program test_besy0
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`DBESY0(X)' `REAL(8) X' `REAL(8)' GNU extension

@@ -5510,7 +5511,7 @@ _Syntax_:
_Arguments_:
X The type shall be `REAL', and it shall be
- scalar.
+ scalar.
_Return value_:
The return value is a scalar of type `REAL'. It has the same kind
@@ -5523,7 +5524,7 @@ _Example_:
end program test_besy1
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`DBESY1(X)' `REAL(8) X' `REAL(8)' GNU extension

@@ -5555,9 +5556,9 @@ _Syntax_:
_Arguments_:
N Shall be a scalar or an array of type
`INTEGER' .
- N1 Shall be a non-negative scalar of type
+ N1 Shall be a non-negative scalar of type
`INTEGER'.
- N2 Shall be a non-negative scalar of type
+ N2 Shall be a non-negative scalar of type
`INTEGER'.
X Shall be a scalar or an array of type `REAL';
for `BESSEL_YN(N1, N2, X)' it shall be scalar.
@@ -5578,7 +5579,7 @@ _Example_:
end program test_besyn
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`DBESYN(N,X)' `INTEGER N' `REAL(8)' GNU extension
`REAL(8) X'
@@ -5793,7 +5794,7 @@ _Syntax_:
_Arguments_:
C_PTR_1 Scalar of the type `C_PTR' or `C_FUNPTR'.
- C_PTR_2 (Optional) Scalar of the same type as C_PTR_1.
+ C_PTR_2 (Optional) Scalar of the same type as C_PTR_1.
_Return value_:
The return value is of type `LOGICAL'; it is `.false.' if either
@@ -5834,7 +5835,7 @@ _Syntax_:
_Arguments_:
CPTR scalar of the type `C_PTR'. It is `INTENT(IN)'.
- FPTR pointer interoperable with CPTR. It is
+ FPTR pointer interoperable with CPTR. It is
`INTENT(OUT)'.
SHAPE (Optional) Rank-one array of type `INTEGER'
with `INTENT(IN)'. It shall be present if and
@@ -5882,7 +5883,7 @@ _Syntax_:
_Arguments_:
CPTR scalar of the type `C_FUNPTR'. It is
`INTENT(IN)'.
- FPTR procedure pointer interoperable with CPTR. It
+ FPTR procedure pointer interoperable with CPTR. It
is `INTENT(OUT)'.
_Example_:
@@ -5930,8 +5931,8 @@ _Syntax_:
`RESULT = C_FUNLOC(x)'
_Arguments_:
- X Interoperable function or pointer to such
- function.
+ X Interoperable function or pointer to such
+ function.
_Return value_:
The return value is of type `C_FUNPTR' and contains the C address
@@ -6028,8 +6029,8 @@ _Syntax_:
`N = C_SIZEOF(X)'
_Arguments_:
- X The argument shall be an interoperable data
- entity.
+ X The argument shall be an interoperable data
+ entity.
_Return value_:
The return value is of type integer and of the system-dependent
@@ -6129,7 +6130,7 @@ _Example_:
end program test_char
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`CHAR(I)' `INTEGER I' `CHARACTER(LEN=1)'F77 and later
_Note_:
@@ -6164,11 +6165,11 @@ _Syntax_:
_Arguments_:
NAME The type shall be `CHARACTER' of default kind
- and shall specify a valid path within the file
- system.
+ and shall specify a valid path within the file
+ system.
STATUS (Optional) `INTEGER' status flag of the default
- kind. Returns 0 on success, and a system
- specific and nonzero error code otherwise.
+ kind. Returns 0 on success, and a system
+ specific and nonzero error code otherwise.
_Example_:
PROGRAM test_chdir
@@ -6210,15 +6211,15 @@ _Arguments_:
file name. Trailing blanks are ignored unless
the character `achar(0)' is present, then all
characters up to and excluding `achar(0)' are
- used as the file name.
+ used as the file name.
MODE Scalar `CHARACTER' of default kind giving the
- file permission. MODE uses the same syntax as
+ file permission. MODE uses the same syntax as
the `chmod' utility as defined by the POSIX
standard. The argument shall either be a
string of a nonnegative octal number or a
symbolic mode.
STATUS (optional) scalar `INTEGER', which is `0' on
- success and nonzero otherwise.
+ success and nonzero otherwise.
_Return value_:
In either syntax, STATUS is set to `0' on success and nonzero
@@ -6309,7 +6310,7 @@ _Syntax_:
`RESULT = COMMAND_ARGUMENT_COUNT()'
_Arguments_:
- None
+ None
_Return value_:
The return value is an `INTEGER' of default kind.
@@ -6476,10 +6477,10 @@ _Example_:
end program test_conjg
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`CONJG(Z)' `COMPLEX Z' `COMPLEX' GNU extension
`DCONJG(Z)' `COMPLEX(8) `COMPLEX(8)' GNU extension
- Z'
+ Z'

File: gfortran.info, Node: COS, Next: COSH, Prev: CONJG, Up: Intrinsic Procedures
@@ -6503,9 +6504,9 @@ _Arguments_:
X The type shall be `REAL' or `COMPLEX'.
_Return value_:
- The return value is of the same type and kind as X. The real part
+ The return value is of the same type and kind as X. The real part
of the result is in radians. If X is of the type `REAL', the
- return value lies in the range -1 \leq \cos (x) \leq 1.
+ return value lies in the range -1 \leq \cos (x) \leq 1.
_Example_:
program test_cos
@@ -6514,17 +6515,17 @@ _Example_:
end program test_cos
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`COS(X)' `REAL(4) X' `REAL(4)' Fortran 77 and
- later
+ later
`DCOS(X)' `REAL(8) X' `REAL(8)' Fortran 77 and
- later
+ later
`CCOS(X)' `COMPLEX(4) `COMPLEX(4)' Fortran 77 and
- X' later
+ X' later
`ZCOS(X)' `COMPLEX(8) `COMPLEX(8)' GNU extension
- X'
+ X'
`CDCOS(X)' `COMPLEX(8) `COMPLEX(8)' GNU extension
- X'
+ X'
_See also_:
Inverse function: *note ACOS::
@@ -6552,7 +6553,7 @@ _Arguments_:
X The type shall be `REAL' or `COMPLEX'.
_Return value_:
- The return value has same type and kind as X. If X is complex, the
+ The return value has same type and kind as X. If X is complex, the
imaginary part of the result is in radians. If X is `REAL', the
return value has a lower bound of one, \cosh (x) \geq 1.
@@ -6563,11 +6564,11 @@ _Example_:
end program test_cosh
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`COSH(X)' `REAL(4) X' `REAL(4)' Fortran 77 and
- later
+ later
`DCOSH(X)' `REAL(8) X' `REAL(8)' Fortran 77 and
- later
+ later
_See also_:
Inverse function: *note ACOSH::
@@ -6644,7 +6645,7 @@ _Description_:
execution time.
If a time source is available, time will be reported with
- microsecond resolution. If no time source is available, TIME is
+ microsecond resolution. If no time source is available, TIME is
set to `-1.0'.
Note that TIME may contain a, system dependent, arbitrary offset
@@ -6706,7 +6707,7 @@ _Syntax_:
`RESULT = CSHIFT(ARRAY, SHIFT [, DIM])'
_Arguments_:
- ARRAY Shall be an array of any type.
+ ARRAY Shall be an array of any type.
SHIFT The type shall be `INTEGER'.
DIM The type shall be `INTEGER'.
@@ -6793,7 +6794,7 @@ _Description_:
`INTENT(OUT)' and has form ccyymmdd. TIME is `INTENT(OUT)' and
has form hhmmss.sss. ZONE is `INTENT(OUT)' and has form (+-)hhmm,
representing the difference with respect to Coordinated Universal
- Time (UTC). Unavailable time and date parameters return blanks.
+ Time (UTC). Unavailable time and date parameters return blanks.
VALUES is `INTENT(OUT)' and provides the following:
@@ -6806,7 +6807,7 @@ _Description_:
`VALUE(6)': The minutes of the hour
`VALUE(7)': The seconds of the minute
`VALUE(8)': The milliseconds of the
- second
+ second
_Standard_:
Fortran 95 and later
@@ -6819,12 +6820,12 @@ _Syntax_:
_Arguments_:
DATE (Optional) The type shall be `CHARACTER(LEN=8)'
- or larger, and of default kind.
+ or larger, and of default kind.
TIME (Optional) The type shall be
`CHARACTER(LEN=10)' or larger, and of default
kind.
ZONE (Optional) The type shall be `CHARACTER(LEN=5)'
- or larger, and of default kind.
+ or larger, and of default kind.
VALUES (Optional) The type shall be `INTEGER(8)'.
_Return value_:
@@ -6985,7 +6986,7 @@ _Syntax_:
_Arguments_:
X The type shall be `INTEGER' or `REAL'
- Y The type shall be the same type and kind as X.
+ Y The type shall be the same type and kind as X.
_Return value_:
The return value is of type `INTEGER' or `REAL'.
@@ -7001,13 +7002,13 @@ _Example_:
end program test_dim
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`DIM(X,Y)' `REAL(4) X, `REAL(4)' Fortran 77 and
- Y' later
+ Y' later
`IDIM(X,Y)' `INTEGER(4) `INTEGER(4)' Fortran 77 and
- X, Y' later
+ X, Y' later
`DDIM(X,Y)' `REAL(8) X, `REAL(8)' Fortran 77 and
- Y' later
+ Y' later

File: gfortran.info, Node: DOT_PRODUCT, Next: DPROD, Prev: DIM, Up: Intrinsic Procedures
@@ -7036,7 +7037,7 @@ _Syntax_:
_Arguments_:
VECTOR_A The type shall be numeric or `LOGICAL', rank 1.
- VECTOR_B The type shall be numeric if VECTOR_A is of
+ VECTOR_B The type shall be numeric if VECTOR_A is of
numeric type or `LOGICAL' if VECTOR_A is of
type `LOGICAL'. VECTOR_B shall be a rank-one
array.
@@ -7093,9 +7094,9 @@ _Example_:
end program test_dprod
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`DPROD(X,Y)' `REAL(4) X, `REAL(4)' Fortran 77 and
- Y' later
+ Y' later

@@ -7155,12 +7156,12 @@ _Syntax_:
_Arguments_:
I Shall be of type `INTEGER' or a BOZ constant.
J Shall be of type `INTEGER' or a BOZ constant.
- If both I and J have integer type, then they
- shall have the same kind type parameter. I and
- J shall not both be BOZ constants.
+ If both I and J have integer type, then they
+ shall have the same kind type parameter. I and
+ J shall not both be BOZ constants.
SHIFT Shall be of type `INTEGER'. It shall be
- nonnegative. If I is not a BOZ constant, then
- SHIFT shall be less than or equal to
+ nonnegative. If I is not a BOZ constant, then
+ SHIFT shall be less than or equal to
`BIT_SIZE(I)'; otherwise, SHIFT shall be less
than or equal to `BIT_SIZE(J)'.
@@ -7195,12 +7196,12 @@ _Syntax_:
_Arguments_:
I Shall be of type `INTEGER' or a BOZ constant.
J Shall be of type `INTEGER' or a BOZ constant.
- If both I and J have integer type, then they
- shall have the same kind type parameter. I and
- J shall not both be BOZ constants.
+ If both I and J have integer type, then they
+ shall have the same kind type parameter. I and
+ J shall not both be BOZ constants.
SHIFT Shall be of type `INTEGER'. It shall be
- nonnegative. If I is not a BOZ constant, then
- SHIFT shall be less than or equal to
+ nonnegative. If I is not a BOZ constant, then
+ SHIFT shall be less than or equal to
`BIT_SIZE(I)'; otherwise, SHIFT shall be less
than or equal to `BIT_SIZE(J)'.
@@ -7250,7 +7251,7 @@ _Description_:
`VALUES(1)': User time in seconds.
`VALUES(2)': System time in seconds.
`TIME': Run time since start in
- seconds.
+ seconds.
_Standard_:
GNU extension
@@ -7312,9 +7313,9 @@ _Description_:
not present then the following are copied in depending on the type
of ARRAY.
- _Array _Boundary Value_
- Type_
- Numeric 0 of the type and kind of ARRAY.
+ _Array _Boundary Value_
+ Type_
+ Numeric 0 of the type and kind of ARRAY.
Logical `.FALSE.'.
Character(LEN)LEN blanks.
@@ -7328,9 +7329,9 @@ _Syntax_:
`RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])'
_Arguments_:
- ARRAY May be any type, not scalar.
+ ARRAY May be any type, not scalar.
SHIFT The type shall be `INTEGER'.
- BOUNDARY Same type as ARRAY.
+ BOUNDARY Same type as ARRAY.
DIM The type shall be `INTEGER'.
_Return value_:
@@ -7415,7 +7416,7 @@ _Example_:
end program test_erf
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`DERF(X)' `REAL(8) X' `REAL(8)' GNU extension

@@ -7441,7 +7442,7 @@ _Arguments_:
_Return value_:
The return value is of type `REAL' and of the same kind as X. It
- lies in the range 0 \leq erfc (x) \leq 2 .
+ lies in the range 0 \leq erfc (x) \leq 2 .
_Example_:
program test_erfc
@@ -7450,7 +7451,7 @@ _Example_:
end program test_erfc
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`DERFC(X)' `REAL(8) X' `REAL(8)' GNU extension

@@ -7596,7 +7597,7 @@ _Arguments_:
EXITSTAT (Optional) Shall be an `INTEGER' of the
default kind.
CMDSTAT (Optional) Shall be an `INTEGER' of the
- default kind.
+ default kind.
CMDMSG (Optional) Shall be an `CHARACTER' scalar of
the default kind.
@@ -7615,9 +7616,9 @@ _Example_:
_Note_:
Because this intrinsic is implemented in terms of the `system'
function call, its behavior with respect to signaling is processor
- dependent. In particular, on POSIX-compliant systems, the SIGINT
+ dependent. In particular, on POSIX-compliant systems, the SIGINT
and SIGQUIT signals will be ignored, and the SIGCHLD will be
- blocked. As such, if the parent process is terminated, the child
+ blocked. As such, if the parent process is terminated, the child
process might not be terminated alongside.
_See also_:
@@ -7690,17 +7691,17 @@ _Example_:
end program test_exp
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`EXP(X)' `REAL(4) X' `REAL(4)' Fortran 77 and
- later
+ later
`DEXP(X)' `REAL(8) X' `REAL(8)' Fortran 77 and
- later
+ later
`CEXP(X)' `COMPLEX(4) `COMPLEX(4)' Fortran 77 and
- X' later
+ X' later
`ZEXP(X)' `COMPLEX(8) `COMPLEX(8)' GNU extension
- X'
+ X'
`CDEXP(X)' `COMPLEX(8) `COMPLEX(8)' GNU extension
- X'
+ X'

File: gfortran.info, Node: EXPONENT, Next: EXTENDS_TYPE_OF, Prev: EXP, Up: Intrinsic Procedures
@@ -7755,13 +7756,13 @@ _Syntax_:
`RESULT = EXTENDS_TYPE_OF(A, MOLD)'
_Arguments_:
- A Shall be an object of extensible declared type
- or unlimited polymorphic.
- MOLD Shall be an object of extensible declared type
- or unlimited polymorphic.
+ A Shall be an object of extensible declared type
+ or unlimited polymorphic.
+ MOLD Shall be an object of extensible declared type
+ or unlimited polymorphic.
_Return value_:
- The return value is a scalar of type default logical. It is true
+ The return value is a scalar of type default logical. It is true
if and only if the dynamic type of A is an extension type of the
dynamic type of MOLD.
@@ -7826,7 +7827,7 @@ File: gfortran.info, Node: FGET, Next: FGETC, Prev: FDATE, Up: Intrinsic Pro
_Description_:
Read a single character in stream mode from stdin by bypassing
- normal formatted output. Stream I/O should not be mixed with
+ normal formatted output. Stream I/O should not be mixed with
normal record-oriented (formatted or unformatted) I/O on the same
unit; the results are unpredictable.
@@ -7851,10 +7852,10 @@ _Syntax_:
_Arguments_:
C The type shall be `CHARACTER' and of default
- kind.
+ kind.
STATUS (Optional) status flag of type `INTEGER'.
- Returns 0 on success, -1 on end-of-file, and a
- system specific positive error code otherwise.
+ Returns 0 on success, -1 on end-of-file, and a
+ system specific positive error code otherwise.
_Example_:
PROGRAM test_fget
@@ -7908,10 +7909,10 @@ _Syntax_:
_Arguments_:
UNIT The type shall be `INTEGER'.
C The type shall be `CHARACTER' and of default
- kind.
+ kind.
STATUS (Optional) status flag of type `INTEGER'.
- Returns 0 on success, -1 on end-of-file and a
- system specific positive error code otherwise.
+ Returns 0 on success, -1 on end-of-file and a
+ system specific positive error code otherwise.
_Example_:
PROGRAM test_fgetc
@@ -7977,7 +7978,7 @@ File: gfortran.info, Node: FLUSH, Next: FNUM, Prev: FLOOR, Up: Intrinsic Pro
=================================
_Description_:
- Flushes Fortran unit(s) currently open for output. Without the
+ Flushes Fortran unit(s) currently open for output. Without the
optional argument, all units are flushed, otherwise just the unit
specified.
@@ -7999,10 +8000,10 @@ _Note_:
The `FLUSH' intrinsic and the Fortran 2003 `FLUSH' statement have
identical effect: they flush the runtime library's I/O buffer so
- that the data becomes visible to other processes. This does not
+ that the data becomes visible to other processes. This does not
guarantee that the data is committed to disk.
- On POSIX systems, you can request that all data is transferred to
+ On POSIX systems, you can request that all data is transferred to
the storage device by calling the `fsync' function, with the POSIX
file descriptor of the I/O unit as argument (retrieved with GNU
intrinsic `FNUM'). The following example shows how:
@@ -8076,7 +8077,7 @@ File: gfortran.info, Node: FPUT, Next: FPUTC, Prev: FNUM, Up: Intrinsic Proc
_Description_:
Write a single character in stream mode to stdout by bypassing
- normal formatted output. Stream I/O should not be mixed with
+ normal formatted output. Stream I/O should not be mixed with
normal record-oriented (formatted or unformatted) I/O on the same
unit; the results are unpredictable.
@@ -8101,10 +8102,10 @@ _Syntax_:
_Arguments_:
C The type shall be `CHARACTER' and of default
- kind.
+ kind.
STATUS (Optional) status flag of type `INTEGER'.
- Returns 0 on success, -1 on end-of-file and a
- system specific positive error code otherwise.
+ Returns 0 on success, -1 on end-of-file and a
+ system specific positive error code otherwise.
_Example_:
PROGRAM test_fput
@@ -8126,7 +8127,7 @@ File: gfortran.info, Node: FPUTC, Next: FRACTION, Prev: FPUT, Up: Intrinsic
_Description_:
Write a single character in stream mode by bypassing normal
- formatted output. Stream I/O should not be mixed with normal
+ formatted output. Stream I/O should not be mixed with normal
record-oriented (formatted or unformatted) I/O on the same unit;
the results are unpredictable.
@@ -8152,10 +8153,10 @@ _Syntax_:
_Arguments_:
UNIT The type shall be `INTEGER'.
C The type shall be `CHARACTER' and of default
- kind.
+ kind.
STATUS (Optional) status flag of type `INTEGER'.
- Returns 0 on success, -1 on end-of-file and a
- system specific positive error code otherwise.
+ Returns 0 on success, -1 on end-of-file and a
+ system specific positive error code otherwise.
_Example_:
PROGRAM test_fputc
@@ -8217,7 +8218,7 @@ _Description_:
Frees memory previously allocated by `MALLOC'. The `FREE'
intrinsic is an extension intended to be used with Cray pointers,
and is provided in GNU Fortran to allow user to compile legacy
- code. For new code using Fortran 95 pointers, the memory
+ code. For new code using Fortran 95 pointers, the memory
de-allocation intrinsic is `DEALLOCATE'.
_Standard_:
@@ -8231,8 +8232,8 @@ _Syntax_:
_Arguments_:
PTR The type shall be `INTEGER'. It represents the
- location of the memory that should be
- de-allocated.
+ location of the memory that should be
+ de-allocated.
_Return value_:
None
@@ -8250,16 +8251,16 @@ File: gfortran.info, Node: FSEEK, Next: FSTAT, Prev: FREE, Up: Intrinsic Pro
=====================================================
_Description_:
- Moves UNIT to the specified OFFSET. If WHENCE is set to 0, the
+ Moves UNIT to the specified OFFSET. If WHENCE is set to 0, the
OFFSET is taken as an absolute value `SEEK_SET', if set to 1,
OFFSET is taken to be relative to the current position `SEEK_CUR',
and if set to 2 relative to the end of the file `SEEK_END'. On
- error, STATUS is set to a nonzero value. If STATUS the seek fails
+ error, STATUS is set to a nonzero value. If STATUS the seek fails
silently.
This intrinsic routine is not fully backwards compatible with
`g77'. In `g77', the `FSEEK' takes a statement label instead of a
- STATUS variable. If FSEEK is used in old code, change
+ STATUS variable. If FSEEK is used in old code, change
CALL FSEEK(UNIT, OFFSET, WHENCE, *label)
to
INTEGER :: status
@@ -8268,7 +8269,7 @@ _Description_:
Please note that GNU Fortran provides the Fortran 2003 Stream
facility. Programmers should consider the use of new stream IO
- feature in new code for future portability. See also *note Fortran
+ feature in new code for future portability. See also *note Fortran
2003 status::.
_Standard_:
@@ -8285,7 +8286,7 @@ _Arguments_:
OFFSET Shall be a scalar of type `INTEGER'.
WHENCE Shall be a scalar of type `INTEGER'. Its
value shall be either 0, 1 or 2.
- STATUS (Optional) shall be a scalar of type
+ STATUS (Optional) shall be a scalar of type
`INTEGER(4)'.
_Example_:
@@ -8414,7 +8415,7 @@ _Syntax_:
_Arguments_:
X Shall be of type `REAL' and neither zero nor a
- negative integer.
+ negative integer.
_Return value_:
The return value is of type `REAL' of the same kind as X.
@@ -8426,7 +8427,7 @@ _Example_:
end program test_gamma
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`GAMMA(X)' `REAL(4) X' `REAL(4)' GNU Extension
`DGAMMA(X)' `REAL(8) X' `REAL(8)' GNU Extension
@@ -8492,15 +8493,15 @@ _Syntax_:
_Arguments_:
POS Shall be of type `INTEGER' and not wider than
- the default integer kind; POS \geq 0
+ the default integer kind; POS \geq 0
VALUE Shall be of type `CHARACTER' and of default
- kind.
+ kind.
VALUE Shall be of type `CHARACTER'.
_Return value_:
After `GETARG' returns, the VALUE argument holds the POSth command
- line argument. If VALUE can not hold the argument, it is truncated
- to fit the length of VALUE. If there are less than POS arguments
+ line argument. If VALUE can not hold the argument, it is truncated
+ to fit the length of VALUE. If there are less than POS arguments
specified at the command line, VALUE will be filled with blanks.
If POS = 0, VALUE is set to the name of the program (on systems
that support this feature).
@@ -8543,16 +8544,16 @@ _Syntax_:
_Arguments_:
COMMAND (Optional) shall be of type `CHARACTER' and of
- default kind.
+ default kind.
LENGTH (Optional) Shall be of type `INTEGER' and of
- default kind.
+ default kind.
STATUS (Optional) Shall be of type `INTEGER' and of
- default kind.
+ default kind.
_Return value_:
If COMMAND is present, stores the entire command line that was used
- to invoke the program in COMMAND. If LENGTH is present, it is
- assigned the length of the command line. If STATUS is present, it
+ to invoke the program in COMMAND. If LENGTH is present, it is
+ assigned the length of the command line. If STATUS is present, it
is assigned 0 upon success of the command, -1 if COMMAND is too
short to store the command line, or a positive value in case of an
error.
@@ -8588,23 +8589,23 @@ _Syntax_:
_Arguments_:
NUMBER Shall be a scalar of type `INTEGER' and of
- default kind, NUMBER \geq 0
+ default kind, NUMBER \geq 0
VALUE (Optional) Shall be a scalar of type
`CHARACTER' and of default kind.
LENGTH (Optional) Shall be a scalar of type `INTEGER'
- and of default kind.
+ and of default kind.
STATUS (Optional) Shall be a scalar of type `INTEGER'
- and of default kind.
+ and of default kind.
_Return value_:
After `GET_COMMAND_ARGUMENT' returns, the VALUE argument holds the
- NUMBER-th command line argument. If VALUE can not hold the
- argument, it is truncated to fit the length of VALUE. If there are
+ NUMBER-th command line argument. If VALUE can not hold the
+ argument, it is truncated to fit the length of VALUE. If there are
less than NUMBER arguments specified at the command line, VALUE
will be filled with blanks. If NUMBER = 0, VALUE is set to the
- name of the program (on systems that support this feature). The
+ name of the program (on systems that support this feature). The
LENGTH argument contains the length of the NUMBER-th command line
- argument. If the argument retrieval fails, STATUS is a positive
+ argument. If the argument retrieval fails, STATUS is a positive
number; if VALUE contains a truncated command line argument,
STATUS is -1; and otherwise the STATUS is zero.
@@ -8650,10 +8651,10 @@ _Syntax_:
_Arguments_:
C The type shall be `CHARACTER' and of default
- kind.
+ kind.
STATUS (Optional) status flag. Returns 0 on success,
a system specific and nonzero error code
- otherwise.
+ otherwise.
_Example_:
PROGRAM test_getcwd
@@ -8694,13 +8695,13 @@ _Syntax_:
_Arguments_:
NAME Shall be of type `CHARACTER' and of default
- kind.
+ kind.
VALUE Shall be of type `CHARACTER' and of default
- kind.
+ kind.
_Return value_:
- Stores the value of NAME in VALUE. If VALUE is not large enough to
- hold the data, it is truncated. If NAME is not set, VALUE will be
+ Stores the value of NAME in VALUE. If VALUE is not large enough to
+ hold the data, it is truncated. If NAME is not set, VALUE will be
filled with blanks.
_Example_:
@@ -8739,20 +8740,20 @@ _Syntax_:
_Arguments_:
NAME Shall be a scalar of type `CHARACTER' and of
- default kind.
+ default kind.
VALUE (Optional) Shall be a scalar of type
`CHARACTER' and of default kind.
LENGTH (Optional) Shall be a scalar of type `INTEGER'
- and of default kind.
+ and of default kind.
STATUS (Optional) Shall be a scalar of type `INTEGER'
- and of default kind.
+ and of default kind.
TRIM_NAME (Optional) Shall be a scalar of type `LOGICAL'
- and of default kind.
+ and of default kind.
_Return value_:
- Stores the value of NAME in VALUE. If VALUE is not large enough to
- hold the data, it is truncated. If NAME is not set, VALUE will be
- filled with blanks. Argument LENGTH contains the length needed for
+ Stores the value of NAME in VALUE. If VALUE is not large enough to
+ hold the data, it is truncated. If NAME is not set, VALUE will be
+ filled with blanks. Argument LENGTH contains the length needed for
storing the environment variable NAME or zero if it is not
present. STATUS is -1 if VALUE is present but too short for the
environment variable; it is 1 if the environment variable does not
@@ -8816,7 +8817,7 @@ _Syntax_:
_Arguments_:
C Shall be of type `CHARACTER' and of default
- kind.
+ kind.
_Return value_:
Stores the current user name in LOGIN. (On systems where POSIX
@@ -9032,8 +9033,8 @@ _Syntax_:
_Arguments_:
X The type shall be `REAL'.
- Y The type and kind type parameter shall be the
- same as X.
+ Y The type and kind type parameter shall be the
+ same as X.
_Return value_:
The return value has the same type and kind type parameter as X.
@@ -9111,8 +9112,8 @@ _Syntax_:
_Arguments_:
ARRAY Shall be an array of type `INTEGER'
DIM (Optional) shall be a scalar of type `INTEGER'
- with a value in the range from 1 to n, where n
- equals the rank of ARRAY.
+ with a value in the range from 1 to n, where n
+ equals the rank of ARRAY.
MASK (Optional) shall be of type `LOGICAL' and
either be a scalar or an array of the same
shape as ARRAY.
@@ -9121,7 +9122,7 @@ _Return value_:
The result is of the same type as ARRAY.
If DIM is absent, a scalar with the bitwise ALL of all elements in
- ARRAY is returned. Otherwise, an array of rank n-1, where n equals
+ ARRAY is returned. Otherwise, an array of rank n-1, where n equals
the rank of ARRAY, and a shape similar to that of ARRAY with
dimension DIM dropped is returned.
@@ -9203,8 +9204,8 @@ _Syntax_:
_Arguments_:
ARRAY Shall be an array of type `INTEGER'
DIM (Optional) shall be a scalar of type `INTEGER'
- with a value in the range from 1 to n, where n
- equals the rank of ARRAY.
+ with a value in the range from 1 to n, where n
+ equals the rank of ARRAY.
MASK (Optional) shall be of type `LOGICAL' and
either be a scalar or an array of the same
shape as ARRAY.
@@ -9213,7 +9214,7 @@ _Return value_:
The result is of the same type as ARRAY.
If DIM is absent, a scalar with the bitwise OR of all elements in
- ARRAY is returned. Otherwise, an array of rank n-1, where n equals
+ ARRAY is returned. Otherwise, an array of rank n-1, where n equals
the rank of ARRAY, and a shape similar to that of ARRAY with
dimension DIM dropped is returned.
@@ -9404,15 +9405,15 @@ _Example_:
end program test_ichar
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`ICHAR(C)' `CHARACTER `INTEGER(4)' Fortran 77 and
- C' later
+ C' later
_Note_:
No intrinsic exists to convert between a numeric value and a
formatted character string representation - for instance, given the
`CHARACTER' value `'154'', obtaining an `INTEGER' or `REAL' value
- with the value 154, or vice versa. Instead, this functionality is
+ with the value 154, or vice versa. Instead, this functionality is
provided by internal-file I/O, as in the following example:
program read_val
integer value
@@ -9440,7 +9441,7 @@ File: gfortran.info, Node: IDATE, Next: IEOR, Prev: ICHAR, Up: Intrinsic Pro
_Description_:
`IDATE(VALUES)' Fills VALUES with the numerical values at the
- current local time. The day (in the range 1-31), month (in the
+ current local time. The day (in the range 1-31), month (in the
range 1-12), and year appear in elements 1, 2, and 3 of VALUES,
respectively. The year has four significant digits.
@@ -9455,7 +9456,7 @@ _Syntax_:
_Arguments_:
VALUES The type shall be `INTEGER, DIMENSION(3)' and
- the kind shall be the default integer kind.
+ the kind shall be the default integer kind.
_Return value_:
Does not return anything.
@@ -9550,13 +9551,13 @@ _Syntax_:
`RESULT = IMAGE_INDEX(COARRAY, SUB)'
_Arguments_: None.
- COARRAY Coarray of any type.
- SUB default integer rank-1 array of a size equal to
- the corank of COARRAY.
+ COARRAY Coarray of any type.
+ SUB default integer rank-1 array of a size equal to
+ the corank of COARRAY.
_Return value_:
Scalar default integer with the value of the image index which
- corresponds to the cosubscripts. For invalid cosubscripts the
+ corresponds to the cosubscripts. For invalid cosubscripts the
result is zero.
_Example_:
@@ -9605,9 +9606,9 @@ _Return value_:
absent, the return value is of default integer kind.
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`INDEX(STRING,`CHARACTER' `INTEGER(4)' Fortran 77 and
- SUBSTRING)' later
+ SUBSTRING)' later
_See also_:
*note SCAN::, *note VERIFY::
@@ -9641,16 +9642,16 @@ _Return value_:
These functions return a `INTEGER' variable or array under the
following rules:
- (A)
+ (A)
If A is of type `INTEGER', `INT(A) = A'
- (B)
+ (B)
If A is of type `REAL' and |A| < 1, `INT(A)' equals `0'. If
|A| \geq 1, then `INT(A)' equals the largest integer that
does not exceed the range of A and whose sign is the same as
the sign of A.
- (C)
+ (C)
If A is of type `COMPLEX', rule B is applied to the real part
of A.
@@ -9663,13 +9664,13 @@ _Example_:
end program
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`INT(A)' `REAL(4) A' `INTEGER' Fortran 77 and
- later
+ later
`IFIX(A)' `REAL(4) A' `INTEGER' Fortran 77 and
- later
+ later
`IDINT(A)' `REAL(8) A' `INTEGER' Fortran 77 and
- later
+ later

@@ -9790,8 +9791,8 @@ _Syntax_:
_Arguments_:
ARRAY Shall be an array of type `INTEGER'
DIM (Optional) shall be a scalar of type `INTEGER'
- with a value in the range from 1 to n, where n
- equals the rank of ARRAY.
+ with a value in the range from 1 to n, where n
+ equals the rank of ARRAY.
MASK (Optional) shall be of type `LOGICAL' and
either be a scalar or an array of the same
shape as ARRAY.
@@ -9800,7 +9801,7 @@ _Return value_:
The result is of the same type as ARRAY.
If DIM is absent, a scalar with the bitwise XOR of all elements in
- ARRAY is returned. Otherwise, an array of rank n-1, where n equals
+ ARRAY is returned. Otherwise, an array of rank n-1, where n equals
the rank of ARRAY, and a shape similar to that of ARRAY with
dimension DIM dropped is returned.
@@ -9827,7 +9828,7 @@ File: gfortran.info, Node: IRAND, Next: IS_IOSTAT_END, Prev: IPARITY, Up: In
_Description_:
`IRAND(FLAG)' returns a pseudo-random number from a uniform
distribution between 0 and a system-dependent limit (which is in
- most cases 2147483647). If FLAG is 0, the next number in the
+ most cases 2147483647). If FLAG is 0, the next number in the
current sequence is returned; if FLAG is 1, the generator is
restarted by `CALL SRAND(0)'; if FLAG has any other value, it is
used as a new seed with `SRAND'.
@@ -9870,7 +9871,7 @@ File: gfortran.info, Node: IS_IOSTAT_END, Next: IS_IOSTAT_EOR, Prev: IRAND,
_Description_:
`IS_IOSTAT_END' tests whether an variable has the value of the I/O
- status "end of file". The function is equivalent to comparing the
+ status "end of file". The function is equivalent to comparing the
variable with the `IOSTAT_END' parameter of the intrinsic module
`ISO_FORTRAN_ENV'.
@@ -10089,7 +10090,7 @@ File: gfortran.info, Node: ITIME, Next: KILL, Prev: ISNAN, Up: Intrinsic Pro
_Description_:
`IDATE(VALUES)' Fills VALUES with the numerical values at the
- current local time. The hour (in the range 1-24), minute (in the
+ current local time. The hour (in the range 1-24), minute (in the
range 1-60), and seconds (in the range 1-60) appear in elements 1,
2, and 3 of VALUES, respectively.
@@ -10104,7 +10105,7 @@ _Syntax_:
_Arguments_:
VALUES The type shall be `INTEGER, DIMENSION(3)' and
- the kind shall be the default integer kind.
+ the kind shall be the default integer kind.
_Return value_:
Does not return anything.
@@ -10145,7 +10146,7 @@ _Arguments_:
VALUE Shall be a scalar `INTEGER', with `INTENT(IN)'
STATUS (Optional) status flag of type `INTEGER(4)' or
`INTEGER(8)'. Returns 0 on success, or a
- system-specific error code otherwise.
+ system-specific error code otherwise.
_See also_:
*note ABORT::, *note EXIT::
@@ -10206,7 +10207,7 @@ _Syntax_:
`RESULT = LBOUND(ARRAY [, DIM [, KIND]])'
_Arguments_:
- ARRAY Shall be an array, of any type.
+ ARRAY Shall be an array, of any type.
DIM (Optional) Shall be a scalar `INTEGER'.
KIND (Optional) An `INTEGER' initialization
expression indicating the kind parameter of
@@ -10245,7 +10246,7 @@ _Syntax_:
`RESULT = LCOBOUND(COARRAY [, DIM [, KIND]])'
_Arguments_:
- ARRAY Shall be an coarray, of any type.
+ ARRAY Shall be an coarray, of any type.
DIM (Optional) Shall be a scalar `INTEGER'.
KIND (Optional) An `INTEGER' initialization
expression indicating the kind parameter of
@@ -10328,9 +10329,9 @@ _Return value_:
absent, the return value is of default integer kind.
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`LEN(STRING)' `CHARACTER' `INTEGER' Fortran 77 and
- later
+ later
_See also_:
*note LEN_TRIM::, *note ADJUSTL::, *note ADJUSTR::
@@ -10405,9 +10406,9 @@ _Return value_:
otherwise, based on the ASCII ordering.
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`LGE(STRING_A,`CHARACTER' `LOGICAL' Fortran 77 and
- STRING_B)' later
+ STRING_B)' later
_See also_:
*note LGT::, *note LLE::, *note LLT::
@@ -10449,9 +10450,9 @@ _Return value_:
otherwise, based on the ASCII ordering.
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`LGT(STRING_A,`CHARACTER' `LOGICAL' Fortran 77 and
- STRING_B)' later
+ STRING_B)' later
_See also_:
*note LGE::, *note LLE::, *note LLT::
@@ -10463,7 +10464,7 @@ File: gfortran.info, Node: LINK, Next: LLE, Prev: LGT, Up: Intrinsic Procedu
==================================
_Description_:
- Makes a (hard) link from file PATH1 to PATH2. A null character
+ Makes a (hard) link from file PATH1 to PATH2. A null character
(`CHAR(0)') can be used to mark the end of the names in PATH1 and
PATH2; otherwise, trailing blanks in the file names are ignored.
If the STATUS argument is supplied, it contains 0 on success or a
@@ -10528,9 +10529,9 @@ _Return value_:
otherwise, based on the ASCII ordering.
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`LLE(STRING_A,`CHARACTER' `LOGICAL' Fortran 77 and
- STRING_B)' later
+ STRING_B)' later
_See also_:
*note LGE::, *note LGT::, *note LLT::
@@ -10572,9 +10573,9 @@ _Return value_:
otherwise, based on the ASCII ordering.
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`LLT(STRING_A,`CHARACTER' `LOGICAL' Fortran 77 and
- STRING_B)' later
+ STRING_B)' later
_See also_:
*note LGE::, *note LGT::, *note LLE::
@@ -10628,7 +10629,7 @@ _Syntax_:
`RESULT = LOC(X)'
_Arguments_:
- X Variable of any type.
+ X Variable of any type.
_Return value_:
The return value is of type `INTEGER', with a `KIND' corresponding
@@ -10678,15 +10679,15 @@ _Example_:
end program test_log
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`ALOG(X)' `REAL(4) X' `REAL(4)' f95, gnu
`DLOG(X)' `REAL(8) X' `REAL(8)' f95, gnu
`CLOG(X)' `COMPLEX(4) `COMPLEX(4)' f95, gnu
- X'
+ X'
`ZLOG(X)' `COMPLEX(8) `COMPLEX(8)' f95, gnu
- X'
+ X'
`CDLOG(X)' `COMPLEX(8) `COMPLEX(8)' f95, gnu
- X'
+ X'

File: gfortran.info, Node: LOG10, Next: LOG_GAMMA, Prev: LOG, Up: Intrinsic Procedures
@@ -10720,11 +10721,11 @@ _Example_:
end program test_log10
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`ALOG10(X)' `REAL(4) X' `REAL(4)' Fortran 95 and
- later
+ later
`DLOG10(X)' `REAL(8) X' `REAL(8)' Fortran 95 and
- later
+ later

File: gfortran.info, Node: LOG_GAMMA, Next: LOGICAL, Prev: LOG10, Up: Intrinsic Procedures
@@ -10747,7 +10748,7 @@ _Syntax_:
_Arguments_:
X Shall be of type `REAL' and neither zero nor a
- negative integer.
+ negative integer.
_Return value_:
The return value is of type `REAL' of the same kind as X.
@@ -10759,7 +10760,7 @@ _Example_:
end program test_log_gamma
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`LGAMMA(X)' `REAL(4) X' `REAL(4)' GNU Extension
`ALGAMA(X)' `REAL(4) X' `REAL(4)' GNU Extension
`DLGAMA(X)' `REAL(8) X' `REAL(8)' GNU Extension
@@ -10897,7 +10898,7 @@ _Syntax_:
_Arguments_:
NAME The type shall be `CHARACTER' of the default
- kind, a valid path within the file system.
+ kind, a valid path within the file system.
VALUES The type shall be `INTEGER(4), DIMENSION(13)'.
STATUS (Optional) status flag of type `INTEGER(4)'.
Returns 0 on success and a system specific
@@ -10972,7 +10973,7 @@ _Description_:
`MALLOC(SIZE)' allocates SIZE bytes of dynamic memory and returns
the address of the allocated memory. The `MALLOC' intrinsic is an
extension intended to be used with Cray pointers, and is provided
- in GNU Fortran to allow the user to compile legacy code. For new
+ in GNU Fortran to allow the user to compile legacy code. For new
code using Fortran 95 pointers, the memory allocation intrinsic is
`ALLOCATE'.
@@ -11039,7 +11040,7 @@ _Syntax_:
_Arguments_:
I Shall be of type `INTEGER'.
- KIND Shall be a scalar constant expression of type
+ KIND Shall be a scalar constant expression of type
`INTEGER'.
_Return value_:
@@ -11071,7 +11072,7 @@ _Syntax_:
_Arguments_:
I Shall be of type `INTEGER'.
- KIND Shall be a scalar constant expression of type
+ KIND Shall be a scalar constant expression of type
`INTEGER'.
_Return value_:
@@ -11137,26 +11138,26 @@ _Syntax_:
_Arguments_:
A1 The type shall be `INTEGER' or `REAL'.
- A2, A3, An expression of the same type and kind as A1.
- ... (As a GNU extension, arguments of different
- kinds are permitted.)
+ A2, A3, An expression of the same type and kind as A1.
+ ... (As a GNU extension, arguments of different
+ kinds are permitted.)
_Return value_:
The return value corresponds to the maximum value among the
arguments, and has the same type and kind as the first argument.
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`MAX0(A1)' `INTEGER(4) `INTEGER(4)' Fortran 77 and
- A1' later
+ A1' later
`AMAX0(A1)' `INTEGER(4) `REAL(MAX(X))'Fortran 77 and
- A1' later
+ A1' later
`MAX1(A1)' `REAL A1' `INT(MAX(X))' Fortran 77 and
- later
+ later
`AMAX1(A1)' `REAL(4) A1' `REAL(4)' Fortran 77 and
- later
+ later
`DMAX1(A1)' `REAL(8) A1' `REAL(8)' Fortran 77 and
- later
+ later
_See also_:
*note MAXLOC:: *note MAXVAL::, *note MIN::
@@ -11233,7 +11234,7 @@ _Arguments_:
rank of ARRAY, inclusive. It may not be an
optional dummy argument.
MASK Shall be an array of type `LOGICAL', and
- conformable with ARRAY.
+ conformable with ARRAY.
_Return value_:
If DIM is absent, the result is a rank-one array with a length
@@ -11279,7 +11280,7 @@ _Arguments_:
rank of ARRAY, inclusive. It may not be an
optional dummy argument.
MASK Shall be an array of type `LOGICAL', and
- conformable with ARRAY.
+ conformable with ARRAY.
_Return value_:
If DIM is absent, or if ARRAY has a rank of one, the result is a
@@ -11385,7 +11386,7 @@ _Syntax_:
`RESULT = MERGE(TSOURCE, FSOURCE, MASK)'
_Arguments_:
- TSOURCE May be of any type.
+ TSOURCE May be of any type.
FSOURCE Shall be of the same type and type parameters
as TSOURCE.
MASK Shall be of type `LOGICAL'.
@@ -11446,26 +11447,26 @@ _Syntax_:
_Arguments_:
A1 The type shall be `INTEGER' or `REAL'.
- A2, A3, An expression of the same type and kind as A1.
- ... (As a GNU extension, arguments of different
- kinds are permitted.)
+ A2, A3, An expression of the same type and kind as A1.
+ ... (As a GNU extension, arguments of different
+ kinds are permitted.)
_Return value_:
The return value corresponds to the maximum value among the
arguments, and has the same type and kind as the first argument.
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`MIN0(A1)' `INTEGER(4) `INTEGER(4)' Fortran 77 and
- A1' later
+ A1' later
`AMIN0(A1)' `INTEGER(4) `REAL(4)' Fortran 77 and
- A1' later
+ A1' later
`MIN1(A1)' `REAL A1' `INTEGER(4)' Fortran 77 and
- later
+ later
`AMIN1(A1)' `REAL(4) A1' `REAL(4)' Fortran 77 and
- later
+ later
`DMIN1(A1)' `REAL(8) A1' `REAL(8)' Fortran 77 and
- later
+ later
_See also_:
*note MAX::, *note MINLOC::, *note MINVAL::
@@ -11535,7 +11536,7 @@ _Arguments_:
rank of ARRAY, inclusive. It may not be an
optional dummy argument.
MASK Shall be an array of type `LOGICAL', and
- conformable with ARRAY.
+ conformable with ARRAY.
_Return value_:
If DIM is absent, the result is a rank-one array with a length
@@ -11582,7 +11583,7 @@ _Arguments_:
rank of ARRAY, inclusive. It may not be an
optional dummy argument.
MASK Shall be an array of type `LOGICAL', and
- conformable with ARRAY.
+ conformable with ARRAY.
_Return value_:
If DIM is absent, or if ARRAY has a rank of one, the result is a
@@ -11643,13 +11644,13 @@ _Example_:
end program test_mod
_Specific names_:
- Name Arguments Return type Standard
+ Name Arguments Return type Standard
`MOD(A,P)' `INTEGER `INTEGER' Fortran 95 and
- A,P' later
+ A,P' later
`AMOD(A,P)' `REAL(4) `REAL(4)' Fortran 95 and
- A,P' later
+ A,P' later
`DMOD(A,P)' `REAL(8) `REAL(8)' Fortran 95 and
- A,P' later
+ A,P' later
_See also_:
*note MODULO::
@@ -11675,8 +11676,8 @@ _Syntax_:
_Arguments_:
A Shall be a scalar of type `INTEGER' or `REAL'.
- P Shall be a scalar of the same type and kind as
- A. It shall not be zero.
+ P Shall be a scalar of the same type and kind as
+ A. It shall not be zero.
_Return value_:
The type and kind of the result are those of the arguments.
@@ -11726,9 +11727,9 @@ _Syntax_:
_Arguments_:
FROM `ALLOCATABLE', `INTENT(INOUT)', may be of any
- type and kind.
+ type and kind.
TO `ALLOCATABLE', `INTENT(OUT)', shall be of the
- same type, kind and rank as FROM.
+ same type, kind and rank as FROM.
_Return value_:
None
@@ -11834,7 +11835,7 @@ _Syntax_:
`RESULT = NEW_LINE(C)'
_Arguments_:
- C The argument shall be a scalar or array of the
+ C The argument shall be a scalar or array of the
type `CHARACTER'.
_Return value_:
@@ -11886,11 +11887,11 @@ _Example_:
end program test_nint
_Specific names_:
- Name Argument Return Type Standard
+ Name Argument Return Type Standard
`NINT(A)' `REAL(4) A' `INTEGER' Fortran 95 and
- later
+ later
`IDNINT(A)' `REAL(8) A' `INTEGER' Fortran 95 and
- later
+ later
_See also_:
*note CEILING::, *note FLOOR::
@@ -11918,8 +11919,8 @@ _Syntax_:
_Arguments_:
ARRAY Shall be an array of type `REAL'
DIM (Optional) shall be a scalar of type `INTEGER'
- with a value in the range from 1 to n, where n
- equals the rank of ARRAY.
+ with a value in the range from 1 to n, where n
+ equals the rank of ARRAY.
_Return value_:
The result is of the same type as ARRAY.
@@ -11976,7 +11977,7 @@ _Description_:
If MOLD is present, a disassociated pointer of the same type is
returned, otherwise the type is determined by context.
- In Fortran 95, MOLD is optional. Please note that Fortran 2003
+ In Fortran 95, MOLD is optional. Please note that Fortran 2003
includes cases where it is required.
_Standard_:
@@ -12064,7 +12065,7 @@ _Syntax_:
_Arguments_:
I The type shall be either a scalar `INTEGER'
type or a scalar `LOGICAL' type.
- J The type shall be the same as the type of J.
+ J The type shall be the same as the type of J.
_Return value_:
The return type is either a scalar `INTEGER' or a scalar
@@ -12108,9 +12109,9 @@ _Syntax_:
`RESULT = PACK(ARRAY, MASK[,VECTOR]'
_Arguments_:
- ARRAY Shall be an array of any type.
+ ARRAY Shall be an array of any type.
MASK Shall be an array of type `LOGICAL' and of the
- same size as ARRAY. Alternatively, it may be a
+ same size as ARRAY. Alternatively, it may be a
`LOGICAL' scalar.
VECTOR (Optional) shall be an array of the same type
as ARRAY and of rank one. If present, the
@@ -12166,8 +12167,8 @@ _Syntax_:
_Arguments_:
LOGICAL Shall be an array of type `LOGICAL'
DIM (Optional) shall be a scalar of type `INTEGER'
- with a value in the range from 1 to n, where n
- equals the rank of MASK.
+ with a value in the range from 1 to n, where n
+ equals the rank of MASK.
_Return value_:
The result is of the same type as MASK.
@@ -12386,8 +12387,8 @@ _Arguments_:
ARRAY Shall be an array of type `INTEGER', `REAL' or
`COMPLEX'.
DIM (Optional) shall be a scalar of type `INTEGER'
- with a value in the range from 1 to n, where n
- equals the rank of ARRAY.
+ with a value in the range from 1 to n, where n
+ equals the rank of ARRAY.
MASK (Optional) shall be of type `LOGICAL' and
either be a scalar or an array of the same
shape as ARRAY.
@@ -12396,7 +12397,7 @@ _Return value_:
The result is of the same type as ARRAY.
If DIM is absent, a scalar with the product of all elements in
- ARRAY is returned. Otherwise, an array of rank n-1, where n equals
+ ARRAY is returned. Otherwise, an array of rank n-1, where n equals
the rank of ARRAY, and a shape similar to that of ARRAY with
dimension DIM dropped is returned.
@@ -12473,7 +12474,7 @@ File: gfortran.info, Node: RAND, Next: RANDOM_NUMBER, Prev: RAN, Up: Intrins
_Description_:
`RAND(FLAG)' returns a pseudo-random number from a uniform
- distribution between 0 and 1. If FLAG is 0, the next number in the
+ distribution between 0 and 1. If FLAG is 0, the next number in the
current sequence is returned; if FLAG is 1, the generator is
restarted by `CALL SRAND(0)'; if FLAG has any other value, it is
used as a new seed with `SRAND'.
@@ -12519,7 +12520,7 @@ File: gfortran.info, Node: RANDOM_NUMBER, Next: RANDOM_SEED, Prev: RAND, Up:
_Description_:
Returns a single pseudorandom number or an array of pseudorandom
- numbers from the uniform distribution over the range 0 \leq x < 1.
+ numbers from the uniform distribution over the range 0 \leq x < 1.
The runtime-library implements George Marsaglia's KISS (Keep It
Simple Stupid) random number generator (RNG). This RNG combines:
@@ -12536,7 +12537,7 @@ _Description_:
directives, i.e., its state will be consistent while called from
multiple threads. However, the KISS generator does not create
random numbers in parallel from multiple sources, but in sequence
- from a single source. If an OpenMP-enabled application heavily
+ from a single source. If an OpenMP-enabled application heavily
relies on random numbers, one should consider employing a
dedicated parallel random number generator instead.
@@ -12573,9 +12574,9 @@ _Description_:
used by `RANDOM_NUMBER'.
If `RANDOM_SEED' is called without arguments, it is initialized to
- a default state. The example below shows how to initialize the
+ a default state. The example below shows how to initialize the
random seed with a varying seed in order to ensure a different
- random number sequence for each invocation of the program. Note
+ random number sequence for each invocation of the program. Note
that setting any of the seed values to zero should be avoided as
it can result in poor quality random numbers being generated.
@@ -12593,23 +12594,24 @@ _Arguments_:
default `INTEGER', with `INTENT(OUT)'. It
specifies the minimum size of the arrays used
with the PUT and GET arguments.
- PUT (Optional) Shall be an array of type default
+ PUT (Optional) Shall be an array of type default
`INTEGER' and rank one. It is `INTENT(IN)' and
- the size of the array must be larger than or
- equal to the number returned by the SIZE
- argument.
- GET (Optional) Shall be an array of type default
+ the size of the array must be larger than or
+ equal to the number returned by the SIZE
+ argument.
+ GET (Optional) Shall be an array of type default
`INTEGER' and rank one. It is `INTENT(OUT)'
and the size of the array must be larger than
or equal to the number returned by the SIZE
- argument.
+ argument.
_Example_:
subroutine init_random_seed()
+ use iso_fortran_env, only: int64
implicit none
integer, allocatable :: seed(:)
- integer :: i, n, un, istat, dt(8), pid, t(2), s
- integer(8) :: count, tms
+ integer :: i, n, un, istat, dt(8), pid
+ integer(int64) :: t
call random_seed(size = n)
allocate(seed(n))
@@ -12623,34 +12625,37 @@ _Example_:
! Fallback to XOR:ing the current time and pid. The PID is
! useful in case one launches multiple instances of the same
! program in parallel.
- call system_clock(count)
- if (count /= 0) then
- t = transfer(count, t)
- else
+ call system_clock(t)
+ if (t == 0) then
call date_and_time(values=dt)
- tms = (dt(1) - 1970) * 365_8 * 24 * 60 * 60 * 1000 &
- + dt(2) * 31_8 * 24 * 60 * 60 * 1000 &
- + dt(3) * 24 * 60 * 60 * 60 * 1000 &
+ t = (dt(1) - 1970) * 365_int64 * 24 * 60 * 60 * 1000 &
+ + dt(2) * 31_int64 * 24 * 60 * 60 * 1000 &
+ + dt(3) * 24_int64 * 60 * 60 * 1000 &
+ dt(5) * 60 * 60 * 1000 &
+ dt(6) * 60 * 1000 + dt(7) * 1000 &
+ dt(8)
- t = transfer(tms, t)
end if
- s = ieor(t(1), t(2))
- pid = getpid() + 1099279 ! Add a prime
- s = ieor(s, pid)
- if (n >= 3) then
- seed(1) = t(1) + 36269
- seed(2) = t(2) + 72551
- seed(3) = pid
- if (n > 3) then
- seed(4:) = s + 37 * (/ (i, i = 0, n - 4) /)
+ pid = getpid()
+ t = ieor(t, int(pid, kind(t)))
+ do i = 1, n
+ seed(i) = lcg(t)
+ end do
end if
+ call random_seed(put=seed)
+ contains
+ ! This simple PRNG might not be good enough for real work, but is
+ ! sufficient for seeding a better PRNG.
+ function lcg(s)
+ integer :: lcg
+ integer(int64) :: s
+ if (s == 0) then
+ s = 104729
else
- seed = s + 37 * (/ (i, i = 0, n - 1 ) /)
+ s = mod(s, 4294967296_int64)
end if
- end if
- call random_seed(put=seed)
+ s = mod(s * 279470273_int64, 4294967291_int64)
+ lcg = int(mod(s, int(huge(0), int64)), kind(0))
+ end function lcg
end subroutine init_random_seed
_See also_:
@@ -12708,11 +12713,11 @@ _Syntax_:
`RESULT = RANGE(A)'
_Arguments_:
- A can be of any type
+ A can be of any type
_Return value_:
The return value is of type `INTEGER' and of the default integer
- kind. For arrays, their rank is returned; for scalars zero is
+ kind. For arrays, their rank is returned; for scalars zero is
returned.
_Example_:
@@ -12755,15 +12760,15 @@ _Return value_:
These functions return a `REAL' variable or array under the
following rules:
- (A)
+ (A)
`REAL(A)' is converted to a default real type if A is an
integer or real variable.
- (B)
+ (B)
`REAL(A)' is converted to a real type with the kind type
parameter of A if A is a complex variable.
- (C)
+ (C)
`REAL(A, KIND)' is converted to a real type with kind type
parameter KIND if A is a complex, integer, or real variable.
@@ -12774,12 +12779,12 @@ _Example_:
end program test_real
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`FLOAT(A)' `INTEGER(4)' `REAL(4)' Fortran 77 and
- later
+ later
`DFLOAT(A)' `INTEGER(4)' `REAL(8)' GNU extension
`SNGL(A)' `INTEGER(8)' `REAL(4)' Fortran 77 and
- later
+ later
_See also_:
*note DBLE::
@@ -12792,7 +12797,7 @@ File: gfortran.info, Node: RENAME, Next: REPEAT, Prev: REAL, Up: Intrinsic P
===============================
_Description_:
- Renames a file from file PATH1 to PATH2. A null character
+ Renames a file from file PATH1 to PATH2. A null character
(`CHAR(0)') can be used to mark the end of the names in PATH1 and
PATH2; otherwise, trailing blanks in the file names are ignored.
If the STATUS argument is supplied, it contains 0 on success or a
@@ -12858,7 +12863,7 @@ File: gfortran.info, Node: RESHAPE, Next: RRSPACING, Prev: REPEAT, Up: Intri
===============================================
_Description_:
- Reshapes SOURCE to correspond to SHAPE. If necessary, the new
+ Reshapes SOURCE to correspond to SHAPE. If necessary, the new
array may be padded with elements from PAD or permuted as defined
by ORDER.
@@ -12872,13 +12877,13 @@ _Syntax_:
`RESULT = RESHAPE(SOURCE, SHAPE[, PAD, ORDER])'
_Arguments_:
- SOURCE Shall be an array of any type.
+ SOURCE Shall be an array of any type.
SHAPE Shall be of type `INTEGER' and an array of
rank one. Its values must be positive or zero.
PAD (Optional) shall be an array of the same type
as SOURCE.
ORDER (Optional) shall be of type `INTEGER' and an
- array of the same shape as SHAPE. Its values
+ array of the same shape as SHAPE. Its values
shall be a permutation of the numbers from 1
to n, where n is the size of SHAPE. If ORDER
is absent, the natural ordering shall be
@@ -12937,7 +12942,7 @@ _Description_:
`RSHIFT' returns a value corresponding to I with all of the bits
shifted right by SHIFT places. If the absolute value of SHIFT is
greater than `BIT_SIZE(I)', the value is undefined. Bits shifted
- out from the right end are lost. The fill is arithmetic: the bits
+ out from the right end are lost. The fill is arithmetic: the bits
shifted in from the left end are equal to the leftmost bit, which
in two's complement representation is the sign bit.
@@ -12984,13 +12989,13 @@ _Syntax_:
`RESULT = SAME_TYPE_AS(A, B)'
_Arguments_:
- A Shall be an object of extensible declared type
- or unlimited polymorphic.
- B Shall be an object of extensible declared type
- or unlimited polymorphic.
+ A Shall be an object of extensible declared type
+ or unlimited polymorphic.
+ B Shall be an object of extensible declared type
+ or unlimited polymorphic.
_Return value_:
- The return value is a scalar of type default logical. It is true
+ The return value is a scalar of type default logical. It is true
if and only if the dynamic type of A is the same as the dynamic
type of B.
@@ -13085,8 +13090,8 @@ File: gfortran.info, Node: SECNDS, Next: SECOND, Prev: SCAN, Up: Intrinsic P
_Description_:
`SECNDS(X)' gets the time in seconds from the real-time system
- clock. X is a reference time, also in seconds. If this is zero,
- the time in seconds from midnight is returned. This function is
+ clock. X is a reference time, also in seconds. If this is zero,
+ the time in seconds from midnight is returned. This function is
non-standard and its use is discouraged.
_Standard_:
@@ -13162,7 +13167,7 @@ File: gfortran.info, Node: SELECTED_CHAR_KIND, Next: SELECTED_INT_KIND, Prev:
_Description_:
`SELECTED_CHAR_KIND(NAME)' returns the kind value for the character
set named NAME, if a character set with such a name is supported,
- or -1 otherwise. Currently, supported character sets include
+ or -1 otherwise. Currently, supported character sets include
"ASCII" and "DEFAULT", which are equivalent, and "ISO_10646"
(Universal Character Set, UCS-4) which is commonly known as
Unicode.
@@ -13177,8 +13182,8 @@ _Syntax_:
`RESULT = SELECTED_CHAR_KIND(NAME)'
_Arguments_:
- NAME Shall be a scalar and of the default character
- type.
+ NAME Shall be a scalar and of the default character
+ type.
_Example_:
program character_kind
@@ -13210,7 +13215,7 @@ File: gfortran.info, Node: SELECTED_INT_KIND, Next: SELECTED_REAL_KIND, Prev:
_Description_:
`SELECTED_INT_KIND(R)' return the kind value of the smallest
integer type that can represent all values ranging from -10^R
- (exclusive) to 10^R (exclusive). If there is no integer kind that
+ (exclusive) to 10^R (exclusive). If there is no integer kind that
accommodates this range, `SELECTED_INT_KIND' returns -1.
_Standard_:
@@ -13260,11 +13265,11 @@ _Syntax_:
`RESULT = SELECTED_REAL_KIND([P, R, RADIX])'
_Arguments_:
- P (Optional) shall be a scalar and of type
+ P (Optional) shall be a scalar and of type
`INTEGER'.
- R (Optional) shall be a scalar and of type
+ R (Optional) shall be a scalar and of type
`INTEGER'.
- RADIX (Optional) shall be a scalar and of type
+ RADIX (Optional) shall be a scalar and of type
`INTEGER'.
Before Fortran 2008, at least one of the arguments R or P shall be
present; since Fortran 2008, they are assumed to be zero if absent.
@@ -13274,15 +13279,15 @@ _Return value_:
of a real data type with decimal precision of at least `P' digits,
a decimal exponent range of at least `R', and with the requested
`RADIX'. If the `RADIX' parameter is absent, real kinds with any
- radix can be returned. If more than one real data type meet the
+ radix can be returned. If more than one real data type meet the
criteria, the kind of the data type with the smallest decimal
- precision is returned. If no real data type matches the criteria,
+ precision is returned. If no real data type matches the criteria,
the result is
- -1 if the processor does not support a real data type with a
+ -1 if the processor does not support a real data type with a
precision greater than or equal to `P', but the `R' and
`RADIX' requirements can be fulfilled
- -2 if the processor does not support a real type with an exponent
+ -2 if the processor does not support a real type with an exponent
range greater than or equal to `R', but `P' and `RADIX' are
fulfillable
@@ -13366,18 +13371,18 @@ _Syntax_:
`RESULT = SHAPE(SOURCE [, KIND])'
_Arguments_:
- SOURCE Shall be an array or scalar of any type. If
- SOURCE is a pointer it must be associated and
- allocatable arrays must be allocated.
+ SOURCE Shall be an array or scalar of any type. If
+ SOURCE is a pointer it must be associated and
+ allocatable arrays must be allocated.
KIND (Optional) An `INTEGER' initialization
expression indicating the kind parameter of
the result.
_Return value_:
An `INTEGER' array of rank one with as many elements as SOURCE has
- dimensions. The elements of the resulting array correspond to the
- extend of SOURCE along the respective dimensions. If SOURCE is a
- scalar, the result is the rank one array of size zero. If KIND is
+ dimensions. The elements of the resulting array correspond to the
+ extend of SOURCE along the respective dimensions. If SOURCE is a
+ scalar, the result is the rank one array of size zero. If KIND is
absent, the return value has the default integer kind otherwise
the specified kind.
@@ -13401,7 +13406,7 @@ _Description_:
`SHIFTA' returns a value corresponding to I with all of the bits
shifted right by SHIFT places. If the absolute value of SHIFT is
greater than `BIT_SIZE(I)', the value is undefined. Bits shifted
- out from the right end are lost. The fill is arithmetic: the bits
+ out from the right end are lost. The fill is arithmetic: the bits
shifted in from the left end are equal to the leftmost bit, which
in two's complement representation is the sign bit.
@@ -13508,7 +13513,7 @@ _Syntax_:
_Arguments_:
A Shall be of type `INTEGER' or `REAL'
- B Shall be of the same type and kind as A
+ B Shall be of the same type and kind as A
_Return value_:
The kind of the return value is that of A and B. If B\ge 0 then
@@ -13526,13 +13531,13 @@ _Example_:
end program test_sign
_Specific names_:
- Name Arguments Return type Standard
+ Name Arguments Return type Standard
`SIGN(A,B)' `REAL(4) A, `REAL(4)' f77, gnu
- B'
+ B'
`ISIGN(A,B)' `INTEGER(4) `INTEGER(4)' f77, gnu
- A, B'
+ A, B'
`DSIGN(A,B)' `REAL(8) A, `REAL(8)' f77, gnu
- B'
+ B'

File: gfortran.info, Node: SIGNAL, Next: SIN, Prev: SIGN, Up: Intrinsic Procedures
@@ -13613,15 +13618,15 @@ _Example_:
end program test_sin
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`SIN(X)' `REAL(4) X' `REAL(4)' f77, gnu
`DSIN(X)' `REAL(8) X' `REAL(8)' f95, gnu
`CSIN(X)' `COMPLEX(4) `COMPLEX(4)' f95, gnu
- X'
+ X'
`ZSIN(X)' `COMPLEX(8) `COMPLEX(8)' f95, gnu
- X'
+ X'
`CDSIN(X)' `COMPLEX(8) `COMPLEX(8)' f95, gnu
- X'
+ X'
_See also_:
*note ASIN::
@@ -13657,11 +13662,11 @@ _Example_:
end program test_sinh
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`SINH(X)' `REAL(4) X' `REAL(4)' Fortran 95 and
- later
+ later
`DSINH(X)' `REAL(8) X' `REAL(8)' Fortran 95 and
- later
+ later
_See also_:
*note ASINH::
@@ -13686,9 +13691,9 @@ _Syntax_:
`RESULT = SIZE(ARRAY[, DIM [, KIND]])'
_Arguments_:
- ARRAY Shall be an array of any type. If ARRAY is a
- pointer it must be associated and allocatable
- arrays must be allocated.
+ ARRAY Shall be an array of any type. If ARRAY is a
+ pointer it must be associated and allocatable
+ arrays must be allocated.
DIM (Optional) shall be a scalar of type `INTEGER'
and its value shall be in the range from 1 to
n, where n equals the rank of ARRAY.
@@ -13728,19 +13733,19 @@ _Syntax_:
`N = SIZEOF(X)'
_Arguments_:
- X The argument shall be of any type, rank or
- shape.
+ X The argument shall be of any type, rank or
+ shape.
_Return value_:
The return value is of type integer and of the system-dependent
- kind C_SIZE_T (from the ISO_C_BINDING module). Its value is the
+ kind C_SIZE_T (from the ISO_C_BINDING module). Its value is the
number of bytes occupied by the argument. If the argument has the
`POINTER' attribute, the number of bytes of the storage area
pointed to is returned. If the argument is of a derived type with
`POINTER' or `ALLOCATABLE' components, the return value does not
account for the sizes of the data pointed to by these components.
If the argument is polymorphic, the size according to the declared
- type is returned. The argument may not be a procedure or procedure
+ type is returned. The argument may not be a procedure or procedure
pointer.
_Example_:
@@ -13893,17 +13898,17 @@ _Example_:
end program test_sqrt
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`SQRT(X)' `REAL(4) X' `REAL(4)' Fortran 95 and
- later
+ later
`DSQRT(X)' `REAL(8) X' `REAL(8)' Fortran 95 and
- later
+ later
`CSQRT(X)' `COMPLEX(4) `COMPLEX(4)' Fortran 95 and
- X' later
+ X' later
`ZSQRT(X)' `COMPLEX(8) `COMPLEX(8)' GNU extension
- X'
+ X'
`CDSQRT(X)' `COMPLEX(8) `COMPLEX(8)' GNU extension
- X'
+ X'

File: gfortran.info, Node: SRAND, Next: STAT, Prev: SQRT, Up: Intrinsic Procedures
@@ -13937,7 +13942,7 @@ _Example_:
_Notes_:
The Fortran 2003 standard specifies the intrinsic `RANDOM_SEED' to
initialize the pseudo-random numbers generator and `RANDOM_NUMBER'
- to generate pseudo-random numbers. Please note that in GNU
+ to generate pseudo-random numbers. Please note that in GNU
Fortran, these two sets of intrinsics (`RAND', `IRAND' and `SRAND'
on the one hand, `RANDOM_NUMBER' and `RANDOM_SEED' on the other
hand) access two independent pseudo-random number generators.
@@ -13953,7 +13958,7 @@ File: gfortran.info, Node: STAT, Next: STORAGE_SIZE, Prev: SRAND, Up: Intrin
===============================
_Description_:
- This function returns information about a file. No permissions are
+ This function returns information about a file. No permissions are
required on the file itself, but execute (search) permission is
required on all of the directories in path that lead to the file.
@@ -13992,7 +13997,7 @@ _Syntax_:
_Arguments_:
NAME The type shall be `CHARACTER', of the default
- kind and a valid path within the file system.
+ kind and a valid path within the file system.
VALUES The type shall be `INTEGER(4), DIMENSION(13)'.
STATUS (Optional) status flag of type `INTEGER(4)'.
Returns 0 on success and a system specific
@@ -14044,9 +14049,9 @@ _Syntax_:
`RESULT = STORAGE_SIZE(A [, KIND])'
_Arguments_:
- A Shall be a scalar or array of any type.
- KIND (Optional) shall be a scalar integer constant
- expression.
+ A Shall be a scalar or array of any type.
+ KIND (Optional) shall be a scalar integer constant
+ expression.
_Return Value_:
The result is a scalar integer with the kind type parameter
@@ -14081,8 +14086,8 @@ _Arguments_:
ARRAY Shall be an array of type `INTEGER', `REAL' or
`COMPLEX'.
DIM (Optional) shall be a scalar of type `INTEGER'
- with a value in the range from 1 to n, where n
- equals the rank of ARRAY.
+ with a value in the range from 1 to n, where n
+ equals the rank of ARRAY.
MASK (Optional) shall be of type `LOGICAL' and
either be a scalar or an array of the same
shape as ARRAY.
@@ -14112,7 +14117,7 @@ File: gfortran.info, Node: SYMLNK, Next: SYSTEM, Prev: SUM, Up: Intrinsic Pr
========================================
_Description_:
- Makes a symbolic link from file PATH1 to PATH2. A null character
+ Makes a symbolic link from file PATH1 to PATH2. A null character
(`CHAR(0)') can be used to mark the end of the names in PATH1 and
PATH2; otherwise, trailing blanks in the file names are ignored.
If the STATUS argument is supplied, it contains 0 on success or a
@@ -14195,9 +14200,9 @@ _Description_:
resolution realtime clock.
COUNT_RATE is system dependent and can vary depending on the kind
- of the arguments. For KIND=4 arguments, COUNT usually represents
+ of the arguments. For KIND=4 arguments, COUNT usually represents
milliseconds, while for KIND=8 arguments, COUNT typically
- represents micro- or nanoseconds. COUNT_MAX usually equals
+ represents micro- or nanoseconds. COUNT_MAX usually equals
`HUGE(COUNT_MAX)'.
If there is no clock, COUNT is set to `-HUGE(COUNT)', and
@@ -14267,11 +14272,11 @@ _Example_:
end program test_tan
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`TAN(X)' `REAL(4) X' `REAL(4)' Fortran 95 and
- later
+ later
`DTAN(X)' `REAL(8) X' `REAL(8)' Fortran 95 and
- later
+ later
_See also_:
*note ATAN::
@@ -14298,9 +14303,9 @@ _Arguments_:
X The type shall be `REAL' or `COMPLEX'.
_Return value_:
- The return value has same type and kind as X. If X is complex, the
+ The return value has same type and kind as X. If X is complex, the
imaginary part of the result is in radians. If X is `REAL', the
- return value lies in the range - 1 \leq tanh(x) \leq 1 .
+ return value lies in the range - 1 \leq tanh(x) \leq 1 .
_Example_:
program test_tanh
@@ -14309,11 +14314,11 @@ _Example_:
end program test_tanh
_Specific names_:
- Name Argument Return type Standard
+ Name Argument Return type Standard
`TANH(X)' `REAL(4) X' `REAL(4)' Fortran 95 and
- later
+ later
`DTANH(X)' `REAL(8) X' `REAL(8)' Fortran 95 and
- later
+ later
_See also_:
*note ATANH::
@@ -14340,16 +14345,16 @@ _Syntax_:
_Arguments_:
COARRAY Coarray of any type (optional; if DIM
present, required).
- DIM default integer scalar (optional). If present,
- DIM shall be between one and the corank of
- COARRAY.
+ DIM default integer scalar (optional). If present,
+ DIM shall be between one and the corank of
+ COARRAY.
_Return value_:
- Default integer. If COARRAY is not present, it is scalar and its
- value is the index of the invoking image. Otherwise, if DIM is not
+ Default integer. If COARRAY is not present, it is scalar and its
+ value is the index of the invoking image. Otherwise, if DIM is not
present, a rank-1 array with corank elements is returned,
containing the cosubscripts for COARRAY specifying the invoking
- image. If DIM is present, a scalar is returned, with the value of
+ image. If DIM is present, a scalar is returned, with the value of
the DIM element of `THIS_IMAGE(COARRAY)'.
_Example_:
@@ -14419,7 +14424,7 @@ _Description_:
values over that returned by `time(3)'. On a system with a 32-bit
`time(3)', `TIME8' will return a 32-bit value, even though it is
converted to a 64-bit `INTEGER(8)' value. That means overflows of
- the 32-bit value can still occur. Therefore, the values returned
+ the 32-bit value can still occur. Therefore, the values returned
by this intrinsic might be or become negative or numerically less
than previous values during a single run of the compiled program.
@@ -14525,8 +14530,8 @@ _Syntax_:
`RESULT = TRANSFER(SOURCE, MOLD[, SIZE])'
_Arguments_:
- SOURCE Shall be a scalar or an array of any type.
- MOLD Shall be a scalar or an array of any type.
+ SOURCE Shall be a scalar or an array of any type.
+ MOLD Shall be a scalar or an array of any type.
SIZE (Optional) shall be a scalar of type `INTEGER'.
_Return value_:
@@ -14535,7 +14540,7 @@ _Return value_:
one-dimensional array of length SIZE. If SIZE is absent but MOLD
is an array (of any size or shape), the result is a one-
dimensional array of the minimum length needed to contain the
- entirety of the bitwise representation of SOURCE. If SIZE is
+ entirety of the bitwise representation of SOURCE. If SIZE is
absent and MOLD is a scalar, the result is a scalar.
If the bitwise representation of the result is longer than that of
@@ -14562,7 +14567,7 @@ File: gfortran.info, Node: TRANSPOSE, Next: TRIM, Prev: TRANSFER, Up: Intrin
===================================================
_Description_:
- Transpose an array of rank two. Element (i, j) of the result has
+ Transpose an array of rank two. Element (i, j) of the result has
the value `MATRIX(j, i)', for all i, j.
_Standard_:
@@ -14623,7 +14628,7 @@ File: gfortran.info, Node: TTYNAM, Next: UBOUND, Prev: TRIM, Up: Intrinsic P
====================================================
_Description_:
- Get the name of a terminal device. For more information, see
+ Get the name of a terminal device. For more information, see
`ttyname(3)'.
This intrinsic is provided in both subroutine and function forms;
@@ -14674,7 +14679,7 @@ _Syntax_:
`RESULT = UBOUND(ARRAY [, DIM [, KIND]])'
_Arguments_:
- ARRAY Shall be an array, of any type.
+ ARRAY Shall be an array, of any type.
DIM (Optional) Shall be a scalar `INTEGER'.
KIND (Optional) An `INTEGER' initialization
expression indicating the kind parameter of
@@ -14714,7 +14719,7 @@ _Syntax_:
`RESULT = UCOBOUND(COARRAY [, DIM [, KIND]])'
_Arguments_:
- ARRAY Shall be an coarray, of any type.
+ ARRAY Shall be an coarray, of any type.
DIM (Optional) Shall be a scalar `INTEGER'.
KIND (Optional) An `INTEGER' initialization
expression indicating the kind parameter of
@@ -14737,8 +14742,8 @@ File: gfortran.info, Node: UMASK, Next: UNLINK, Prev: UCOBOUND, Up: Intrinsi
===========================================
_Description_:
- Sets the file creation mask to MASK. If called as a function, it
- returns the old value. If called as a subroutine and argument OLD
+ Sets the file creation mask to MASK. If called as a function, it
+ returns the old value. If called as a subroutine and argument OLD
if it is supplied, it is set to the old value. See `umask(2)'.
_Standard_:
@@ -14808,7 +14813,7 @@ _Syntax_:
`RESULT = UNPACK(VECTOR, MASK, FIELD)'
_Arguments_:
- VECTOR Shall be an array of any type and rank one. It
+ VECTOR Shall be an array of any type and rank one. It
shall have at least as many elements as MASK
has `TRUE' values.
MASK Shall be an array of type `LOGICAL'.
@@ -14906,7 +14911,7 @@ _Syntax_:
_Arguments_:
I The type shall be either a scalar `INTEGER'
type or a scalar `LOGICAL' type.
- J The type shall be the same as the type of I.
+ J The type shall be the same as the type of I.
_Return value_:
The return type is either a scalar `INTEGER' or a scalar
@@ -14953,12 +14958,12 @@ default-integer named constants:
`ATOMIC_INT_KIND':
Default-kind integer constant to be used as kind parameter when
- defining integer variables used in atomic operations. (Fortran
+ defining integer variables used in atomic operations. (Fortran
2008 or later.)
`ATOMIC_LOGICAL_KIND':
Default-kind integer constant to be used as kind parameter when
- defining logical variables used in atomic operations. (Fortran
+ defining logical variables used in atomic operations. (Fortran
2008 or later.)
`CHARACTER_KINDS':
@@ -15002,7 +15007,7 @@ default-integer named constants:
`IOSTAT_INQUIRE_INTERNAL_UNIT':
Scalar default-integer constant, used by `INQUIRE' for the
`IOSTAT=' specifier to denote an that a unit number identifies an
- internal unit. (Fortran 2008 or later.)
+ internal unit. (Fortran 2008 or later.)
`NUMERIC_STORAGE_SIZE':
The size in bits of the numeric storage unit.
@@ -15018,8 +15023,8 @@ default-integer named constants:
`REAL32', `REAL64', `REAL128':
Kind type parameters to specify a REAL type with a storage size of
- 32, 64, and 128 bits. It is negative if a target platform does not
- support the particular kind. (Fortran 2008 or later.)
+ 32, 64, and 128 bits. It is negative if a target platform does not
+ support the particular kind. (Fortran 2008 or later.)
`REAL_KINDS':
Default-kind integer constant array of rank one containing the
@@ -15029,18 +15034,18 @@ default-integer named constants:
`STAT_LOCKED':
Scalar default-integer constant used as STAT= return value by
`LOCK' to denote that the lock variable is locked by the executing
- image. (Fortran 2008 or later.)
+ image. (Fortran 2008 or later.)
`STAT_LOCKED_OTHER_IMAGE':
Scalar default-integer constant used as STAT= return value by
`UNLOCK' to denote that the lock variable is locked by another
- image. (Fortran 2008 or later.)
+ image. (Fortran 2008 or later.)
`STAT_STOPPED_IMAGE':
Positive, scalar default-integer constant used as STAT= return
value if the argument in the statement requires synchronisation
with an image, which has initiated the termination of the
- execution. (Fortran 2008 or later.)
+ execution. (Fortran 2008 or later.)
`STAT_UNLOCKED':
Scalar default-integer constant used as STAT= return value by
@@ -15094,13 +15099,13 @@ Furthermore, if `__float128' is supported in C, the named constants
`C_FLOAT128, C_FLOAT128_COMPLEX' are defined.
Fortran Named constant C type Extension
-Type
+Type
`INTEGER' `C_INT' `int'
`INTEGER' `C_SHORT' `short int'
`INTEGER' `C_LONG' `long int'
`INTEGER' `C_LONG_LONG' `long long int'
`INTEGER' `C_SIGNED_CHAR' `signed char'/`unsigned
- char'
+ char'
`INTEGER' `C_SIZE_T' `size_t'
`INTEGER' `C_INT8_T' `int8_t'
`INTEGER' `C_INT16_T' `int16_t'
@@ -15335,7 +15340,7 @@ _Bug hunting/squishing_
instead of isolating them. Going through the bugzilla database at
`http://gcc.gnu.org/bugzilla/' to reduce testcases posted there and
add more information (for example, for which version does the
- testcase work, for which versions does it fail?) is also very
+ testcase work, for which versions does it fail?) is also very
helpful.
@@ -15882,7 +15887,7 @@ TERMS AND CONDITIONS
by modifying or propagating a covered work, you indicate your
acceptance of this License to do so.
- 10. Automatic Licensing of Downstream Recipients.
+ 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
@@ -15910,7 +15915,7 @@ TERMS AND CONDITIONS
using, selling, offering for sale, or importing the Program or any
portion of it.
- 11. Patents.
+ 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.
@@ -15983,7 +15988,7 @@ TERMS AND CONDITIONS
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
- 12. No Surrender of Others' Freedom.
+ 12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order,
agreement or otherwise) that contradict the conditions of this
@@ -15997,7 +16002,7 @@ TERMS AND CONDITIONS
terms and this License would be to refrain entirely from conveying
the Program.
- 13. Use with the GNU Affero General Public License.
+ 13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
@@ -16008,7 +16013,7 @@ TERMS AND CONDITIONS
General Public License, section 13, concerning interaction through
a network will apply to the combination as such.
- 14. Revised Versions of this License.
+ 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new
versions of the GNU General Public License from time to time.
@@ -16035,19 +16040,19 @@ TERMS AND CONDITIONS
author or copyright holder as a result of your choosing to follow a
later version.
- 15. Disclaimer of Warranty.
+ 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
- APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
NECESSARY SERVICING, REPAIR OR CORRECTION.
- 16. Limitation of Liability.
+ 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
@@ -16060,7 +16065,7 @@ TERMS AND CONDITIONS
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
THE POSSIBILITY OF SUCH DAMAGES.
- 17. Interpretation of Sections 15 and 16.
+ 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
@@ -16533,7 +16538,7 @@ GNU Free Documentation License
not permanently reinstated, receipt of a copy of some or all of
the same material does not give you any rights to use it.
- 10. FUTURE REVISIONS OF THIS LICENSE
+ 10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of
the GNU Free Documentation License from time to time. Such new
@@ -16554,7 +16559,7 @@ GNU Free Documentation License
proxy's public statement of acceptance of a version permanently
authorizes you to choose that version for the Document.
- 11. RELICENSING
+ 11. RELICENSING
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
World Wide Web server that publishes copyrightable works and also
@@ -16601,7 +16606,7 @@ notices just after the title page:
Free Documentation License''.
If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
+Texts, replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with
the Front-Cover Texts being LIST, and with the Back-Cover Texts
@@ -16733,12 +16738,12 @@ look up both forms.
(line 54)
* fdump-fortran-optimized: Debugging Options. (line 15)
* fdump-fortran-original: Debugging Options. (line 10)
-* fdump-parse-tree: Debugging Options. (line 18)
+* fdump-parse-tree: Debugging Options. (line 19)
* fexternal-blas: Code Gen Options. (line 278)
* ff2c: Code Gen Options. (line 25)
* ffixed-line-length-N: Fortran Dialect Options.
(line 77)
-* ffpe-trap=LIST: Debugging Options. (line 24)
+* ffpe-trap=LIST: Debugging Options. (line 25)
* ffree-form: Fortran Dialect Options.
(line 11)
* ffree-line-length-N: Fortran Dialect Options.
@@ -16763,7 +16768,7 @@ look up both forms.
* fmodule-private: Fortran Dialect Options.
(line 72)
* fno-automatic: Code Gen Options. (line 15)
-* fno-backtrace: Debugging Options. (line 51)
+* fno-backtrace: Debugging Options. (line 52)
* fno-fixed-form: Fortran Dialect Options.
(line 11)
* fno-protect-parens: Code Gen Options. (line 346)
@@ -17039,7 +17044,7 @@ Keyword Index
(line 60)
* backtrace: BACKTRACE. (line 6)
* BACKTRACE: BACKTRACE. (line 6)
-* backtrace: Debugging Options. (line 51)
+* backtrace: Debugging Options. (line 52)
* base 10 logarithm function: LOG10. (line 6)
* BESJ0: BESSEL_J0. (line 6)
* BESJ1: BESSEL_J1. (line 6)
@@ -17925,7 +17930,7 @@ Keyword Index
* TIME8: TIME8. (line 6)
* TINY: TINY. (line 6)
* TR 15581: Fortran 2003 status. (line 93)
-* trace: Debugging Options. (line 51)
+* trace: Debugging Options. (line 52)
* TRAILZ: TRAILZ. (line 6)
* TRANSFER: TRANSFER. (line 6)
* transforming symbol names: Code Gen Options. (line 54)
@@ -18028,358 +18033,358 @@ Keyword Index

Tag Table:
-Node: Top1990
-Node: Introduction3377
-Node: About GNU Fortran4126
-Node: GNU Fortran and GCC8115
-Node: Preprocessing and conditional compilation10229
-Node: GNU Fortran and G7711873
-Node: Project Status12446
-Node: Standards14893
-Node: Varying Length Character Strings15906
-Node: Invoking GNU Fortran16657
-Node: Option Summary18380
-Node: Fortran Dialect Options21783
-Node: Preprocessing Options30279
-Node: Error and Warning Options38510
-Node: Debugging Options48571
-Node: Directory Options51554
-Node: Link Options52989
-Node: Runtime Options53613
-Node: Code Gen Options55518
-Node: Environment Variables72500
-Node: Runtime73105
-Node: TMPDIR74207
-Node: GFORTRAN_STDIN_UNIT74876
-Node: GFORTRAN_STDOUT_UNIT75258
-Node: GFORTRAN_STDERR_UNIT75659
-Node: GFORTRAN_UNBUFFERED_ALL76061
-Node: GFORTRAN_UNBUFFERED_PRECONNECTED76592
-Node: GFORTRAN_SHOW_LOCUS77236
-Node: GFORTRAN_OPTIONAL_PLUS77732
-Node: GFORTRAN_DEFAULT_RECL78208
-Node: GFORTRAN_LIST_SEPARATOR78697
-Node: GFORTRAN_CONVERT_UNIT79306
-Node: GFORTRAN_ERROR_BACKTRACE82169
-Node: Fortran 2003 and 2008 status82726
-Node: Fortran 2003 status82986
-Node: Fortran 2008 status87883
-Node: TS 29113 status92668
-Node: Compiler Characteristics93644
-Node: KIND Type Parameters94180
-Node: Internal representation of LOGICAL variables95430
-Node: Thread-safety of the runtime library96787
-Node: Data consistency and durability98214
-Node: Extensions101256
-Node: Extensions implemented in GNU Fortran101861
-Node: Old-style kind specifications103219
-Node: Old-style variable initialization104326
-Node: Extensions to namelist105638
-Node: X format descriptor without count field107635
-Node: Commas in FORMAT specifications108162
-Node: Missing period in FORMAT specifications108679
-Node: I/O item lists109241
-Node: `Q' exponent-letter109628
-Node: BOZ literal constants110228
-Node: Real array indices112807
-Node: Unary operators113106
-Node: Implicitly convert LOGICAL and INTEGER values113520
-Node: Hollerith constants support114480
-Node: Cray pointers116252
-Node: CONVERT specifier121699
-Node: OpenMP123697
-Node: Argument list functions125948
-Node: Extensions not implemented in GNU Fortran127554
-Node: STRUCTURE and RECORD128476
-Node: ENCODE and DECODE statements130912
-Node: Variable FORMAT expressions132272
-Node: Alternate complex function syntax133377
-Node: Mixed-Language Programming133897
-Node: Interoperability with C134437
-Node: Intrinsic Types135775
-Node: Derived Types and struct136290
-Node: Interoperable Global Variables137647
-Node: Interoperable Subroutines and Functions138923
-Node: Working with Pointers142719
-Node: Further Interoperability of Fortran with C147195
-Node: GNU Fortran Compiler Directives150545
-Node: Non-Fortran Main Program152737
-Node: _gfortran_set_args154879
-Node: _gfortran_set_options155814
-Node: _gfortran_set_convert158534
-Node: _gfortran_set_record_marker159398
-Node: _gfortran_set_fpe160206
-Node: _gfortran_set_max_subrecord_length161398
-Node: Intrinsic Procedures162318
-Node: Introduction to Intrinsics177804
-Node: ABORT180156
-Node: ABS180902
-Node: ACCESS182519
-Node: ACHAR184440
-Node: ACOS185641
-Node: ACOSH186878
-Node: ADJUSTL187866
-Node: ADJUSTR188807
-Node: AIMAG189754
-Node: AINT191135
-Node: ALARM192722
-Node: ALL194356
-Node: ALLOCATED196274
-Node: AND197411
-Node: ANINT198708
-Node: ANY200186
-Node: ASIN202116
-Node: ASINH203342
-Node: ASSOCIATED204340
-Node: ATAN207345
-Node: ATAN2208764
-Node: ATANH210536
-Node: ATOMIC_DEFINE211536
-Node: ATOMIC_REF212710
-Node: BACKTRACE214070
-Node: BESSEL_J0214649
-Node: BESSEL_J1215697
-Node: BESSEL_JN216749
-Node: BESSEL_Y0218631
-Node: BESSEL_Y1219631
-Node: BESSEL_YN220631
-Node: BGE222463
-Node: BGT223152
-Node: BIT_SIZE223799
-Node: BLE224620
-Node: BLT225299
-Node: BTEST225934
-Node: C_ASSOCIATED226817
-Node: C_F_POINTER228026
-Node: C_F_PROCPOINTER229450
-Node: C_FUNLOC230951
-Node: C_LOC232320
-Node: C_SIZEOF233597
-Node: CEILING235007
-Node: CHAR236012
-Node: CHDIR237216
-Node: CHMOD238384
-Node: CMPLX240247
-Node: COMMAND_ARGUMENT_COUNT241711
-Node: COMPILER_OPTIONS242634
-Node: COMPILER_VERSION243660
-Node: COMPLEX244624
-Node: CONJG245761
-Node: COS246832
-Node: COSH248278
-Node: COUNT249443
-Node: CPU_TIME251459
-Node: CSHIFT252813
-Node: CTIME254469
-Node: DATE_AND_TIME256122
-Node: DBLE258583
-Node: DCMPLX259376
-Node: DIGITS260570
-Node: DIM261536
-Node: DOT_PRODUCT262794
-Node: DPROD264450
-Node: DREAL265367
-Node: DSHIFTL266033
-Node: DSHIFTR267353
-Node: DTIME268674
-Node: EOSHIFT271477
-Node: EPSILON273550
-Node: ERF274276
-Node: ERFC275050
-Node: ERFC_SCALED275854
-Node: ETIME276546
-Node: EXECUTE_COMMAND_LINE278787
-Node: EXIT281367
-Node: EXP282241
-Node: EXPONENT283514
-Node: EXTENDS_TYPE_OF284274
-Node: FDATE285127
-Node: FGET286609
-Node: FGETC288427
-Node: FLOOR290226
-Node: FLUSH291210
-Node: FNUM293085
-Node: FPUT293807
-Node: FPUTC295432
-Node: FRACTION297203
-Node: FREE298104
-Node: FSEEK298939
-Node: FSTAT301233
-Node: FTELL302313
-Node: GAMMA303291
-Node: GERROR304332
-Node: GETARG305051
-Node: GET_COMMAND306815
-Node: GET_COMMAND_ARGUMENT308179
-Node: GETCWD310215
-Node: GETENV311189
-Node: GET_ENVIRONMENT_VARIABLE312614
-Node: GETGID314767
-Node: GETLOG315304
-Node: GETPID316164
-Node: GETUID316894
-Node: GMTIME317410
-Node: HOSTNM318899
-Node: HUGE319817
-Node: HYPOT320538
-Node: IACHAR321358
-Node: IALL322538
-Node: IAND324015
-Node: IANY324999
-Node: IARGC326485
-Node: IBCLR327506
-Node: IBITS328167
-Node: IBSET329082
-Node: ICHAR329738
-Node: IDATE331910
-Node: IEOR332937
-Node: IERRNO333813
-Node: IMAGE_INDEX334362
-Node: INDEX intrinsic335386
-Node: INT336927
-Node: INT2338629
-Node: INT8339394
-Node: IOR340106
-Node: IPARITY340958
-Node: IRAND342482
-Node: IS_IOSTAT_END343838
-Node: IS_IOSTAT_EOR344935
-Node: ISATTY346062
-Node: ISHFT346845
-Node: ISHFTC347825
-Node: ISNAN349041
-Node: ITIME349789
-Node: KILL350814
-Node: KIND351718
-Node: LBOUND352563
-Node: LCOBOUND353896
-Node: LEADZ355026
-Node: LEN355886
-Node: LEN_TRIM357167
-Node: LGE358149
-Node: LGT359651
-Node: LINK361118
-Node: LLE362153
-Node: LLT363647
-Node: LNBLNK365107
-Node: LOC365883
-Node: LOG366614
-Node: LOG10368017
-Node: LOG_GAMMA368991
-Node: LOGICAL370080
-Node: LONG370888
-Node: LSHIFT371644
-Node: LSTAT372729
-Node: LTIME373923
-Node: MALLOC375334
-Node: MASKL376793
-Node: MASKR377556
-Node: MATMUL378322
-Node: MAX379411
-Node: MAXEXPONENT380910
-Node: MAXLOC381726
-Node: MAXVAL383745
-Node: MCLOCK385378
-Node: MCLOCK8386402
-Node: MERGE387635
-Node: MERGE_BITS388384
-Node: MIN389245
-Node: MINEXPONENT390746
-Node: MINLOC391376
-Node: MINVAL393395
-Node: MOD395047
-Node: MODULO396792
-Node: MOVE_ALLOC398092
-Node: MVBITS399121
-Node: NEAREST400180
-Node: NEW_LINE401276
-Node: NINT402047
-Node: NORM2403450
-Node: NOT404588
-Node: NULL405172
-Node: NUM_IMAGES406077
-Node: OR406893
-Node: PACK408177
-Node: PARITY410169
-Node: PERROR411384
-Node: POPCNT412005
-Node: POPPAR412876
-Node: PRECISION413927
-Node: PRESENT414813
-Node: PRODUCT415919
-Node: RADIX417444
-Node: RAN418256
-Node: RAND418712
-Node: RANDOM_NUMBER420044
-Node: RANDOM_SEED421761
-Node: RANGE425439
-Node: RANK426135
-Node: REAL426916
-Node: RENAME428691
-Node: REPEAT429710
-Node: RESHAPE430436
-Node: RRSPACING431905
-Node: RSHIFT432598
-Node: SAME_TYPE_AS433736
-Node: SCALE434566
-Node: SCAN435346
-Node: SECNDS436896
-Node: SECOND437984
-Node: SELECTED_CHAR_KIND438860
-Node: SELECTED_INT_KIND440451
-Node: SELECTED_REAL_KIND441626
-Node: SET_EXPONENT444292
-Node: SHAPE445288
-Node: SHIFTA446703
-Node: SHIFTL447664
-Node: SHIFTR448499
-Node: SIGN449335
-Node: SIGNAL450619
-Node: SIN452116
-Node: SINH453214
-Node: SIZE454210
-Node: SIZEOF455518
-Node: SLEEP456993
-Node: SPACING457553
-Node: SPREAD458566
-Node: SQRT459711
-Node: SRAND461065
-Node: STAT462233
-Node: STORAGE_SIZE465400
-Node: SUM466279
-Node: SYMLNK467762
-Node: SYSTEM468894
-Node: SYSTEM_CLOCK470145
-Node: TAN472261
-Node: TANH473233
-Node: THIS_IMAGE474390
-Node: TIME475882
-Node: TIME8477007
-Node: TINY478157
-Node: TRAILZ478757
-Node: TRANSFER479574
-Node: TRANSPOSE481608
-Node: TRIM482295
-Node: TTYNAM483152
-Node: UBOUND484067
-Node: UCOBOUND485457
-Node: UMASK486589
-Node: UNLINK487267
-Node: UNPACK488244
-Node: VERIFY489532
-Node: XOR491253
-Node: Intrinsic Modules492625
-Node: ISO_FORTRAN_ENV492868
-Node: ISO_C_BINDING497020
-Node: OpenMP Modules OMP_LIB and OMP_LIB_KINDS501237
-Node: Contributing502523
-Node: Contributors503377
-Node: Projects505044
-Node: Proposed Extensions505848
-Node: Copying507859
-Node: GNU Free Documentation License545423
-Node: Funding570566
-Node: Option Index573091
-Node: Keyword Index588082
+Node: Top2004
+Node: Introduction3391
+Node: About GNU Fortran4140
+Node: GNU Fortran and GCC8129
+Node: Preprocessing and conditional compilation10243
+Node: GNU Fortran and G7711887
+Node: Project Status12460
+Node: Standards14907
+Node: Varying Length Character Strings15920
+Node: Invoking GNU Fortran16671
+Node: Option Summary18394
+Node: Fortran Dialect Options21797
+Node: Preprocessing Options30293
+Node: Error and Warning Options38524
+Node: Debugging Options48585
+Node: Directory Options51591
+Node: Link Options53026
+Node: Runtime Options53650
+Node: Code Gen Options55555
+Node: Environment Variables72537
+Node: Runtime73142
+Node: TMPDIR74244
+Node: GFORTRAN_STDIN_UNIT74913
+Node: GFORTRAN_STDOUT_UNIT75295
+Node: GFORTRAN_STDERR_UNIT75696
+Node: GFORTRAN_UNBUFFERED_ALL76098
+Node: GFORTRAN_UNBUFFERED_PRECONNECTED76629
+Node: GFORTRAN_SHOW_LOCUS77273
+Node: GFORTRAN_OPTIONAL_PLUS77769
+Node: GFORTRAN_DEFAULT_RECL78245
+Node: GFORTRAN_LIST_SEPARATOR78734
+Node: GFORTRAN_CONVERT_UNIT79343
+Node: GFORTRAN_ERROR_BACKTRACE82206
+Node: Fortran 2003 and 2008 status82763
+Node: Fortran 2003 status83023
+Node: Fortran 2008 status87920
+Node: TS 29113 status92705
+Node: Compiler Characteristics93681
+Node: KIND Type Parameters94217
+Node: Internal representation of LOGICAL variables95467
+Node: Thread-safety of the runtime library96824
+Node: Data consistency and durability98251
+Node: Extensions101293
+Node: Extensions implemented in GNU Fortran101898
+Node: Old-style kind specifications103256
+Node: Old-style variable initialization104363
+Node: Extensions to namelist105675
+Node: X format descriptor without count field107672
+Node: Commas in FORMAT specifications108199
+Node: Missing period in FORMAT specifications108716
+Node: I/O item lists109278
+Node: `Q' exponent-letter109665
+Node: BOZ literal constants110265
+Node: Real array indices112844
+Node: Unary operators113143
+Node: Implicitly convert LOGICAL and INTEGER values113557
+Node: Hollerith constants support114517
+Node: Cray pointers116289
+Node: CONVERT specifier121736
+Node: OpenMP123734
+Node: Argument list functions125985
+Node: Extensions not implemented in GNU Fortran127591
+Node: STRUCTURE and RECORD128513
+Node: ENCODE and DECODE statements130949
+Node: Variable FORMAT expressions132309
+Node: Alternate complex function syntax133414
+Node: Mixed-Language Programming133934
+Node: Interoperability with C134474
+Node: Intrinsic Types135812
+Node: Derived Types and struct136327
+Node: Interoperable Global Variables137684
+Node: Interoperable Subroutines and Functions138960
+Node: Working with Pointers142756
+Node: Further Interoperability of Fortran with C147232
+Node: GNU Fortran Compiler Directives150582
+Node: Non-Fortran Main Program152774
+Node: _gfortran_set_args154916
+Node: _gfortran_set_options155851
+Node: _gfortran_set_convert158571
+Node: _gfortran_set_record_marker159435
+Node: _gfortran_set_fpe160243
+Node: _gfortran_set_max_subrecord_length161435
+Node: Intrinsic Procedures162355
+Node: Introduction to Intrinsics177841
+Node: ABORT180193
+Node: ABS180939
+Node: ACCESS182556
+Node: ACHAR184477
+Node: ACOS185678
+Node: ACOSH186915
+Node: ADJUSTL187903
+Node: ADJUSTR188844
+Node: AIMAG189791
+Node: AINT191172
+Node: ALARM192759
+Node: ALL194393
+Node: ALLOCATED196311
+Node: AND197448
+Node: ANINT198745
+Node: ANY200223
+Node: ASIN202153
+Node: ASINH203379
+Node: ASSOCIATED204377
+Node: ATAN207382
+Node: ATAN2208801
+Node: ATANH210573
+Node: ATOMIC_DEFINE211573
+Node: ATOMIC_REF212747
+Node: BACKTRACE214107
+Node: BESSEL_J0214686
+Node: BESSEL_J1215734
+Node: BESSEL_JN216786
+Node: BESSEL_Y0218668
+Node: BESSEL_Y1219668
+Node: BESSEL_YN220668
+Node: BGE222500
+Node: BGT223189
+Node: BIT_SIZE223836
+Node: BLE224657
+Node: BLT225336
+Node: BTEST225971
+Node: C_ASSOCIATED226854
+Node: C_F_POINTER228063
+Node: C_F_PROCPOINTER229487
+Node: C_FUNLOC230988
+Node: C_LOC232357
+Node: C_SIZEOF233634
+Node: CEILING235044
+Node: CHAR236049
+Node: CHDIR237253
+Node: CHMOD238421
+Node: CMPLX240284
+Node: COMMAND_ARGUMENT_COUNT241748
+Node: COMPILER_OPTIONS242671
+Node: COMPILER_VERSION243697
+Node: COMPLEX244661
+Node: CONJG245798
+Node: COS246869
+Node: COSH248315
+Node: COUNT249480
+Node: CPU_TIME251496
+Node: CSHIFT252850
+Node: CTIME254506
+Node: DATE_AND_TIME256159
+Node: DBLE258620
+Node: DCMPLX259413
+Node: DIGITS260607
+Node: DIM261573
+Node: DOT_PRODUCT262831
+Node: DPROD264487
+Node: DREAL265404
+Node: DSHIFTL266070
+Node: DSHIFTR267390
+Node: DTIME268711
+Node: EOSHIFT271514
+Node: EPSILON273587
+Node: ERF274313
+Node: ERFC275087
+Node: ERFC_SCALED275891
+Node: ETIME276583
+Node: EXECUTE_COMMAND_LINE278824
+Node: EXIT281404
+Node: EXP282278
+Node: EXPONENT283551
+Node: EXTENDS_TYPE_OF284311
+Node: FDATE285164
+Node: FGET286646
+Node: FGETC288464
+Node: FLOOR290263
+Node: FLUSH291247
+Node: FNUM293122
+Node: FPUT293844
+Node: FPUTC295469
+Node: FRACTION297240
+Node: FREE298141
+Node: FSEEK298976
+Node: FSTAT301270
+Node: FTELL302350
+Node: GAMMA303328
+Node: GERROR304369
+Node: GETARG305088
+Node: GET_COMMAND306852
+Node: GET_COMMAND_ARGUMENT308216
+Node: GETCWD310252
+Node: GETENV311226
+Node: GET_ENVIRONMENT_VARIABLE312651
+Node: GETGID314804
+Node: GETLOG315341
+Node: GETPID316201
+Node: GETUID316931
+Node: GMTIME317447
+Node: HOSTNM318936
+Node: HUGE319854
+Node: HYPOT320575
+Node: IACHAR321395
+Node: IALL322575
+Node: IAND324052
+Node: IANY325036
+Node: IARGC326522
+Node: IBCLR327543
+Node: IBITS328204
+Node: IBSET329119
+Node: ICHAR329775
+Node: IDATE331947
+Node: IEOR332974
+Node: IERRNO333850
+Node: IMAGE_INDEX334399
+Node: INDEX intrinsic335423
+Node: INT336964
+Node: INT2338666
+Node: INT8339431
+Node: IOR340143
+Node: IPARITY340995
+Node: IRAND342519
+Node: IS_IOSTAT_END343875
+Node: IS_IOSTAT_EOR344972
+Node: ISATTY346099
+Node: ISHFT346882
+Node: ISHFTC347862
+Node: ISNAN349078
+Node: ITIME349826
+Node: KILL350851
+Node: KIND351755
+Node: LBOUND352600
+Node: LCOBOUND353933
+Node: LEADZ355063
+Node: LEN355923
+Node: LEN_TRIM357204
+Node: LGE358186
+Node: LGT359688
+Node: LINK361155
+Node: LLE362190
+Node: LLT363684
+Node: LNBLNK365144
+Node: LOC365920
+Node: LOG366651
+Node: LOG10368054
+Node: LOG_GAMMA369028
+Node: LOGICAL370117
+Node: LONG370925
+Node: LSHIFT371681
+Node: LSTAT372766
+Node: LTIME373960
+Node: MALLOC375371
+Node: MASKL376830
+Node: MASKR377593
+Node: MATMUL378359
+Node: MAX379448
+Node: MAXEXPONENT380947
+Node: MAXLOC381763
+Node: MAXVAL383782
+Node: MCLOCK385415
+Node: MCLOCK8386439
+Node: MERGE387672
+Node: MERGE_BITS388421
+Node: MIN389282
+Node: MINEXPONENT390783
+Node: MINLOC391413
+Node: MINVAL393432
+Node: MOD395084
+Node: MODULO396829
+Node: MOVE_ALLOC398129
+Node: MVBITS399158
+Node: NEAREST400217
+Node: NEW_LINE401313
+Node: NINT402084
+Node: NORM2403487
+Node: NOT404625
+Node: NULL405209
+Node: NUM_IMAGES406114
+Node: OR406930
+Node: PACK408214
+Node: PARITY410206
+Node: PERROR411421
+Node: POPCNT412042
+Node: POPPAR412913
+Node: PRECISION413964
+Node: PRESENT414850
+Node: PRODUCT415956
+Node: RADIX417481
+Node: RAN418293
+Node: RAND418749
+Node: RANDOM_NUMBER420081
+Node: RANDOM_SEED421798
+Node: RANGE425610
+Node: RANK426306
+Node: REAL427087
+Node: RENAME428862
+Node: REPEAT429881
+Node: RESHAPE430607
+Node: RRSPACING432076
+Node: RSHIFT432769
+Node: SAME_TYPE_AS433907
+Node: SCALE434737
+Node: SCAN435517
+Node: SECNDS437067
+Node: SECOND438155
+Node: SELECTED_CHAR_KIND439031
+Node: SELECTED_INT_KIND440622
+Node: SELECTED_REAL_KIND441797
+Node: SET_EXPONENT444463
+Node: SHAPE445459
+Node: SHIFTA446874
+Node: SHIFTL447835
+Node: SHIFTR448670
+Node: SIGN449506
+Node: SIGNAL450790
+Node: SIN452287
+Node: SINH453385
+Node: SIZE454381
+Node: SIZEOF455689
+Node: SLEEP457164
+Node: SPACING457724
+Node: SPREAD458737
+Node: SQRT459882
+Node: SRAND461236
+Node: STAT462404
+Node: STORAGE_SIZE465571
+Node: SUM466450
+Node: SYMLNK467933
+Node: SYSTEM469065
+Node: SYSTEM_CLOCK470316
+Node: TAN472432
+Node: TANH473404
+Node: THIS_IMAGE474561
+Node: TIME476053
+Node: TIME8477178
+Node: TINY478328
+Node: TRAILZ478928
+Node: TRANSFER479745
+Node: TRANSPOSE481779
+Node: TRIM482466
+Node: TTYNAM483323
+Node: UBOUND484238
+Node: UCOBOUND485628
+Node: UMASK486760
+Node: UNLINK487438
+Node: UNPACK488415
+Node: VERIFY489703
+Node: XOR491424
+Node: Intrinsic Modules492796
+Node: ISO_FORTRAN_ENV493039
+Node: ISO_C_BINDING497191
+Node: OpenMP Modules OMP_LIB and OMP_LIB_KINDS501408
+Node: Contributing502694
+Node: Contributors503548
+Node: Projects505215
+Node: Proposed Extensions506019
+Node: Copying508030
+Node: GNU Free Documentation License545594
+Node: Funding570737
+Node: Option Index573262
+Node: Keyword Index588253

End Tag Table
diff --git a/gcc-4.8/gcc/fortran/interface.c b/gcc-4.8/gcc/fortran/interface.c
index 895eee48c..725cd8a4b 100644
--- a/gcc-4.8/gcc/fortran/interface.c
+++ b/gcc-4.8/gcc/fortran/interface.c
@@ -1245,7 +1245,8 @@ check_result_characteristics (gfc_symbol *s1, gfc_symbol *s2,
return FAILURE;
}
- if (r1->ts.u.cl->length)
+ if (s1->ts.u.cl && s1->ts.u.cl->length
+ && s2->ts.u.cl && s2->ts.u.cl->length)
{
int compval = gfc_dep_compare_expr (r1->ts.u.cl->length,
r2->ts.u.cl->length);
@@ -1367,8 +1368,8 @@ gfc_compare_interfaces (gfc_symbol *s1, gfc_symbol *s2, const char *name2,
if (s1->attr.function && s2->attr.function)
{
/* If both are functions, check result characteristics. */
- if (check_result_characteristics (s1, s2, errmsg, err_len)
- == FAILURE)
+ if (check_result_characteristics (s1, s2, errmsg, err_len) == FAILURE
+ || check_result_characteristics (s2, s1, errmsg, err_len) == FAILURE)
return 0;
}
diff --git a/gcc-4.8/gcc/fortran/intrinsic.c b/gcc-4.8/gcc/fortran/intrinsic.c
index c571533ef..7d78419a7 100644
--- a/gcc-4.8/gcc/fortran/intrinsic.c
+++ b/gcc-4.8/gcc/fortran/intrinsic.c
@@ -4229,13 +4229,16 @@ gfc_intrinsic_sub_interface (gfc_code *c, int error_flag)
c->resolved_sym->attr.elemental = isym->elemental;
}
- if (gfc_pure (NULL) && !isym->pure)
+ if (!isym->pure && gfc_pure (NULL))
{
gfc_error ("Subroutine call to intrinsic '%s' at %L is not PURE", name,
&c->loc);
return MATCH_ERROR;
}
+ if (!isym->pure)
+ gfc_unset_implicit_pure (NULL);
+
c->resolved_sym->attr.noreturn = isym->noreturn;
return MATCH_YES;
diff --git a/gcc-4.8/gcc/fortran/intrinsic.texi b/gcc-4.8/gcc/fortran/intrinsic.texi
index 390750186..91adb400e 100644
--- a/gcc-4.8/gcc/fortran/intrinsic.texi
+++ b/gcc-4.8/gcc/fortran/intrinsic.texi
@@ -10207,10 +10207,11 @@ the @var{SIZE} argument.
@item @emph{Example}:
@smallexample
subroutine init_random_seed()
+ use iso_fortran_env, only: int64
implicit none
integer, allocatable :: seed(:)
- integer :: i, n, un, istat, dt(8), pid, t(2), s
- integer(8) :: count, tms
+ integer :: i, n, un, istat, dt(8), pid
+ integer(int64) :: t
call random_seed(size = n)
allocate(seed(n))
@@ -10224,34 +10225,37 @@ subroutine init_random_seed()
! Fallback to XOR:ing the current time and pid. The PID is
! useful in case one launches multiple instances of the same
! program in parallel.
- call system_clock(count)
- if (count /= 0) then
- t = transfer(count, t)
- else
+ call system_clock(t)
+ if (t == 0) then
call date_and_time(values=dt)
- tms = (dt(1) - 1970) * 365_8 * 24 * 60 * 60 * 1000 &
- + dt(2) * 31_8 * 24 * 60 * 60 * 1000 &
- + dt(3) * 24 * 60 * 60 * 60 * 1000 &
+ t = (dt(1) - 1970) * 365_int64 * 24 * 60 * 60 * 1000 &
+ + dt(2) * 31_int64 * 24 * 60 * 60 * 1000 &
+ + dt(3) * 24_int64 * 60 * 60 * 1000 &
+ dt(5) * 60 * 60 * 1000 &
+ dt(6) * 60 * 1000 + dt(7) * 1000 &
+ dt(8)
- t = transfer(tms, t)
end if
- s = ieor(t(1), t(2))
- pid = getpid() + 1099279 ! Add a prime
- s = ieor(s, pid)
- if (n >= 3) then
- seed(1) = t(1) + 36269
- seed(2) = t(2) + 72551
- seed(3) = pid
- if (n > 3) then
- seed(4:) = s + 37 * (/ (i, i = 0, n - 4) /)
+ pid = getpid()
+ t = ieor(t, int(pid, kind(t)))
+ do i = 1, n
+ seed(i) = lcg(t)
+ end do
end if
+ call random_seed(put=seed)
+contains
+ ! This simple PRNG might not be good enough for real work, but is
+ ! sufficient for seeding a better PRNG.
+ function lcg(s)
+ integer :: lcg
+ integer(int64) :: s
+ if (s == 0) then
+ s = 104729
else
- seed = s + 37 * (/ (i, i = 0, n - 1 ) /)
+ s = mod(s, 4294967296_int64)
end if
- end if
- call random_seed(put=seed)
+ s = mod(s * 279470273_int64, 4294967291_int64)
+ lcg = int(mod(s, int(huge(0), int64)), kind(0))
+ end function lcg
end subroutine init_random_seed
@end smallexample
diff --git a/gcc-4.8/gcc/fortran/invoke.texi b/gcc-4.8/gcc/fortran/invoke.texi
index db958f9b3..b0b43d847 100644
--- a/gcc-4.8/gcc/fortran/invoke.texi
+++ b/gcc-4.8/gcc/fortran/invoke.texi
@@ -982,11 +982,12 @@ Output the internal parse tree after translating the source program
into internal representation. Only really useful for debugging the
GNU Fortran compiler itself.
-@item -fdump-optimized-tree
+@item -fdump-fortran-optimized
@opindex @code{fdump-fortran-optimized}
Output the parse tree after front-end optimization. Only really
useful for debugging the GNU Fortran compiler itself.
+@item -fdump-parse-tree
@opindex @code{fdump-parse-tree}
Output the internal parse tree after translating the source program
into internal representation. Only really useful for debugging the
diff --git a/gcc-4.8/gcc/fortran/io.c b/gcc-4.8/gcc/fortran/io.c
index 748a4f2fb..1d464742f 100644
--- a/gcc-4.8/gcc/fortran/io.c
+++ b/gcc-4.8/gcc/fortran/io.c
@@ -1309,7 +1309,8 @@ match_vtag (const io_tag *tag, gfc_expr **v)
return MATCH_ERROR;
}
- if (gfc_pure (NULL) && gfc_impure_variable (result->symtree->n.sym))
+ bool impure = gfc_impure_variable (result->symtree->n.sym);
+ if (impure && gfc_pure (NULL))
{
gfc_error ("Variable %s cannot be assigned in PURE procedure at %C",
tag->name);
@@ -1317,8 +1318,8 @@ match_vtag (const io_tag *tag, gfc_expr **v)
return MATCH_ERROR;
}
- if (gfc_implicit_pure (NULL) && gfc_impure_variable (result->symtree->n.sym))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ if (impure)
+ gfc_unset_implicit_pure (NULL);
*v = result;
return MATCH_YES;
@@ -1838,8 +1839,7 @@ gfc_match_open (void)
goto cleanup;
}
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
warn = (open->err || open->iostat) ? true : false;
@@ -2251,8 +2251,7 @@ gfc_match_close (void)
goto cleanup;
}
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
warn = (close->iostat || close->err) ? true : false;
@@ -2419,8 +2418,7 @@ done:
goto cleanup;
}
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
new_st.op = op;
new_st.ext.filepos = fp;
@@ -3276,9 +3274,8 @@ if (condition) \
"an internal file in a PURE procedure",
io_kind_name (k));
- if (gfc_implicit_pure (NULL) && (k == M_READ || k == M_WRITE))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
-
+ if (k == M_READ || k == M_WRITE)
+ gfc_unset_implicit_pure (NULL);
}
if (k != M_READ)
@@ -3809,8 +3806,7 @@ gfc_match_print (void)
return MATCH_ERROR;
}
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
return MATCH_YES;
}
@@ -3969,8 +3965,7 @@ gfc_match_inquire (void)
return MATCH_ERROR;
}
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
new_st.block = gfc_get_code ();
new_st.block->op = EXEC_IOLENGTH;
@@ -4023,8 +4018,7 @@ gfc_match_inquire (void)
goto cleanup;
}
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
if (inquire->id != NULL && inquire->pending == NULL)
{
@@ -4212,8 +4206,7 @@ gfc_match_wait (void)
goto cleanup;
}
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
new_st.op = EXEC_WAIT;
new_st.ext.wait = wait;
diff --git a/gcc-4.8/gcc/fortran/match.c b/gcc-4.8/gcc/fortran/match.c
index a320248fe..9827b6c48 100644
--- a/gcc-4.8/gcc/fortran/match.c
+++ b/gcc-4.8/gcc/fortran/match.c
@@ -1753,8 +1753,7 @@ gfc_match_critical (void)
return MATCH_ERROR;
}
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
if (gfc_notify_std (GFC_STD_F2008, "CRITICAL statement at %C")
== FAILURE)
@@ -2683,8 +2682,7 @@ gfc_match_stopcode (gfc_statement st)
goto cleanup;
}
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
if (st == ST_STOP && gfc_find_state (COMP_CRITICAL) == SUCCESS)
{
@@ -2824,8 +2822,7 @@ lock_unlock_statement (gfc_statement st)
return MATCH_ERROR;
}
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
if (gfc_option.coarray == GFC_FCOARRAY_NONE)
{
@@ -3020,8 +3017,7 @@ sync_statement (gfc_statement st)
return MATCH_ERROR;
}
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
if (gfc_notify_std (GFC_STD_F2008, "SYNC statement at %C")
== FAILURE)
@@ -3500,15 +3496,15 @@ gfc_match_allocate (void)
if (gfc_check_do_variable (tail->expr->symtree))
goto cleanup;
- if (gfc_pure (NULL) && gfc_impure_variable (tail->expr->symtree->n.sym))
+ bool impure = gfc_impure_variable (tail->expr->symtree->n.sym);
+ if (impure && gfc_pure (NULL))
{
gfc_error ("Bad allocate-object at %C for a PURE procedure");
goto cleanup;
}
- if (gfc_implicit_pure (NULL)
- && gfc_impure_variable (tail->expr->symtree->n.sym))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ if (impure)
+ gfc_unset_implicit_pure (NULL);
if (tail->expr->ts.deferred)
{
@@ -3890,14 +3886,15 @@ gfc_match_deallocate (void)
sym = tail->expr->symtree->n.sym;
- if (gfc_pure (NULL) && gfc_impure_variable (sym))
+ bool impure = gfc_impure_variable (sym);
+ if (impure && gfc_pure (NULL))
{
gfc_error ("Illegal allocate-object at %C for a PURE procedure");
goto cleanup;
}
- if (gfc_implicit_pure (NULL) && gfc_impure_variable (sym))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ if (impure)
+ gfc_unset_implicit_pure (NULL);
if (gfc_is_coarray (tail->expr)
&& gfc_find_state (COMP_DO_CONCURRENT) == SUCCESS)
diff --git a/gcc-4.8/gcc/fortran/module.c b/gcc-4.8/gcc/fortran/module.c
index f0f8f971e..7eb205c8d 100644
--- a/gcc-4.8/gcc/fortran/module.c
+++ b/gcc-4.8/gcc/fortran/module.c
@@ -386,37 +386,6 @@ get_integer (int integer)
}
-/* Recursive function to find a pointer within a tree by brute force. */
-
-static pointer_info *
-fp2 (pointer_info *p, const void *target)
-{
- pointer_info *q;
-
- if (p == NULL)
- return NULL;
-
- if (p->u.pointer == target)
- return p;
-
- q = fp2 (p->left, target);
- if (q != NULL)
- return q;
-
- return fp2 (p->right, target);
-}
-
-
-/* During reading, find a pointer_info node from the pointer value.
- This amounts to a brute-force search. */
-
-static pointer_info *
-find_pointer2 (void *p)
-{
- return fp2 (pi_root, p);
-}
-
-
/* Resolve any fixups using a known pointer. */
static void
@@ -2522,45 +2491,13 @@ mio_pointer_ref (void *gp)
the namespace and is not loaded again. */
static void
-mio_component_ref (gfc_component **cp, gfc_symbol *sym)
+mio_component_ref (gfc_component **cp)
{
- char name[GFC_MAX_SYMBOL_LEN + 1];
- gfc_component *q;
pointer_info *p;
p = mio_pointer_ref (cp);
if (p->type == P_UNKNOWN)
p->type = P_COMPONENT;
-
- if (iomode == IO_OUTPUT)
- mio_pool_string (&(*cp)->name);
- else
- {
- mio_internal_string (name);
-
- if (sym && sym->attr.is_class)
- sym = sym->components->ts.u.derived;
-
- /* It can happen that a component reference can be read before the
- associated derived type symbol has been loaded. Return now and
- wait for a later iteration of load_needed. */
- if (sym == NULL)
- return;
-
- if (sym->components != NULL && p->u.pointer == NULL)
- {
- /* Symbol already loaded, so search by name. */
- q = gfc_find_component (sym, name, true, true);
-
- if (q)
- associate_integer_pointer (p, q);
- }
-
- /* Make sure this symbol will eventually be loaded. */
- p = find_pointer2 (sym);
- if (p->u.rsym.state == UNUSED)
- p->u.rsym.state = NEEDED;
- }
}
@@ -2917,7 +2854,7 @@ mio_ref (gfc_ref **rp)
case REF_COMPONENT:
mio_symbol_ref (&r->u.c.sym);
- mio_component_ref (&r->u.c.component, r->u.c.sym);
+ mio_component_ref (&r->u.c.component);
break;
case REF_SUBSTRING:
@@ -3772,7 +3709,9 @@ mio_full_f2k_derived (gfc_symbol *sym)
/* Unlike most other routines, the address of the symbol node is already
- fixed on input and the name/module has already been filled in. */
+ fixed on input and the name/module has already been filled in.
+ If you update the symbol format here, don't forget to update read_module
+ as well (look for "seek to the symbol's component list"). */
static void
mio_symbol (gfc_symbol *sym)
@@ -3782,6 +3721,7 @@ mio_symbol (gfc_symbol *sym)
mio_lparen ();
mio_symbol_attribute (&sym->attr);
+
mio_typespec (&sym->ts);
if (sym->ts.type == BT_CLASS)
sym->attr.class_ok = 1;
@@ -3812,7 +3752,6 @@ mio_symbol (gfc_symbol *sym)
/* Note that components are always saved, even if they are supposed
to be private. Component access is checked during searching. */
-
mio_component_list (&sym->components, sym->attr.vtype);
if (sym->components != NULL)
@@ -3914,14 +3853,17 @@ find_symbol (gfc_symtree *st, const char *name,
}
-/* Skip a list between balanced left and right parens. */
+/* Skip a list between balanced left and right parens.
+ By setting NEST_LEVEL one assumes that a number of NEST_LEVEL opening parens
+ have been already parsed by hand, and the remaining of the content is to be
+ skipped here. The default value is 0 (balanced parens). */
static void
-skip_list (void)
+skip_list (int nest_level = 0)
{
int level;
- level = 0;
+ level = nest_level;
do
{
switch (parse_atom ())
@@ -4555,7 +4497,6 @@ read_module (void)
info->u.rsym.ns = atom_int;
get_module_locus (&info->u.rsym.where);
- skip_list ();
/* See if the symbol has already been loaded by a previous module.
If so, we reference the existing symbol and prevent it from
@@ -4566,10 +4507,56 @@ read_module (void)
if (sym == NULL
|| (sym->attr.flavor == FL_VARIABLE && info->u.rsym.ns !=1))
+ {
+ skip_list ();
continue;
+ }
info->u.rsym.state = USED;
info->u.rsym.sym = sym;
+ /* The current symbol has already been loaded, so we can avoid loading
+ it again. However, if it is a derived type, some of its components
+ can be used in expressions in the module. To avoid the module loading
+ failing, we need to associate the module's component pointer indexes
+ with the existing symbol's component pointers. */
+ if (sym->attr.flavor == FL_DERIVED)
+ {
+ gfc_component *c;
+
+ /* First seek to the symbol's component list. */
+ mio_lparen (); /* symbol opening. */
+ skip_list (); /* skip symbol attribute. */
+ skip_list (); /* typespec. */
+ require_atom (ATOM_INTEGER); /* namespace ref. */
+ require_atom (ATOM_INTEGER); /* common ref. */
+ skip_list (); /* formal args. */
+ /* no value. */
+ skip_list (); /* array_spec. */
+ require_atom (ATOM_INTEGER); /* result. */
+ /* not a cray pointer. */
+
+ mio_lparen (); /* component list opening. */
+ for (c = sym->components; c; c = c->next)
+ {
+ pointer_info *p;
+ const char *comp_name;
+ int n;
+
+ mio_lparen (); /* component opening. */
+ mio_integer (&n);
+ p = get_integer (n);
+ if (p->u.pointer == NULL)
+ associate_integer_pointer (p, c);
+ mio_pool_string (&comp_name);
+ gcc_assert (comp_name == c->name);
+ skip_list (1); /* component end. */
+ }
+ mio_rparen (); /* component list closing. */
+
+ skip_list (1); /* symbol end. */
+ }
+ else
+ skip_list ();
/* Some symbols do not have a namespace (eg. formal arguments),
so the automatic "unique symtree" mechanism must be suppressed
diff --git a/gcc-4.8/gcc/fortran/parse.c b/gcc-4.8/gcc/fortran/parse.c
index 33d325d8d..f748fe326 100644
--- a/gcc-4.8/gcc/fortran/parse.c
+++ b/gcc-4.8/gcc/fortran/parse.c
@@ -550,8 +550,7 @@ decode_omp_directive (void)
return ST_NONE;
}
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
old_locus = gfc_current_locus;
diff --git a/gcc-4.8/gcc/fortran/primary.c b/gcc-4.8/gcc/fortran/primary.c
index d14922416..f44bf575e 100644
--- a/gcc-4.8/gcc/fortran/primary.c
+++ b/gcc-4.8/gcc/fortran/primary.c
@@ -2252,7 +2252,7 @@ gfc_expr_attr (gfc_expr *e)
case EXPR_FUNCTION:
gfc_clear_attr (&attr);
- if (e->value.function.esym != NULL)
+ if (e->value.function.esym && e->value.function.esym->result)
{
gfc_symbol *sym = e->value.function.esym->result;
attr = sym->attr;
@@ -2540,6 +2540,7 @@ gfc_convert_to_structure_constructor (gfc_expr *e, gfc_symbol *sym, gfc_expr **c
if (parent && !comp)
break;
+ if (actual)
actual = actual->next;
}
diff --git a/gcc-4.8/gcc/fortran/resolve.c b/gcc-4.8/gcc/fortran/resolve.c
index 486a22c2d..755ea90bd 100644
--- a/gcc-4.8/gcc/fortran/resolve.c
+++ b/gcc-4.8/gcc/fortran/resolve.c
@@ -1,5 +1,5 @@
/* Perform type resolution on the various structures.
- Copyright (C) 2001-2013 Free Software Foundation, Inc.
+ Copyright (C) 2001-2014 Free Software Foundation, Inc.
Contributed by Andy Vaught
This file is part of GCC.
@@ -1259,9 +1259,10 @@ resolve_structure_cons (gfc_expr *expr, int init)
}
/* F2003, C1272 (3). */
- if (gfc_pure (NULL) && cons->expr->expr_type == EXPR_VARIABLE
+ bool impure = cons->expr->expr_type == EXPR_VARIABLE
&& (gfc_impure_variable (cons->expr->symtree->n.sym)
- || gfc_is_coindexed (cons->expr)))
+ || gfc_is_coindexed (cons->expr));
+ if (impure && gfc_pure (NULL))
{
t = FAILURE;
gfc_error ("Invalid expression in the structure constructor for "
@@ -1269,12 +1270,8 @@ resolve_structure_cons (gfc_expr *expr, int init)
comp->name, &cons->expr->where);
}
- if (gfc_implicit_pure (NULL)
- && cons->expr->expr_type == EXPR_VARIABLE
- && (gfc_impure_variable (cons->expr->symtree->n.sym)
- || gfc_is_coindexed (cons->expr)))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
-
+ if (impure)
+ gfc_unset_implicit_pure (NULL);
}
return t;
@@ -3295,8 +3292,7 @@ resolve_function (gfc_expr *expr)
t = FAILURE;
}
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
}
/* Functions without the RECURSIVE attribution are not allowed to
@@ -3361,8 +3357,7 @@ pure_subroutine (gfc_code *c, gfc_symbol *sym)
gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name,
&c->loc);
- if (gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
}
@@ -8705,10 +8700,11 @@ resolve_transfer (gfc_code *code)
&& exp->value.op.op == INTRINSIC_PARENTHESES)
exp = exp->value.op.op1;
- if (exp && exp->expr_type == EXPR_NULL && exp->ts.type == BT_UNKNOWN)
+ if (exp && exp->expr_type == EXPR_NULL
+ && code->ext.dt)
{
- gfc_error ("NULL intrinsic at %L in data transfer statement requires "
- "MOLD=", &exp->where);
+ gfc_error ("Invalid context for NULL () intrinsic at %L",
+ &exp->where);
return;
}
@@ -9612,7 +9608,7 @@ resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
if (lhs->expr_type == EXPR_VARIABLE
&& lhs->symtree->n.sym != gfc_current_ns->proc_name
&& lhs->symtree->n.sym->ns != gfc_current_ns)
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
if (lhs->ts.type == BT_DERIVED
&& lhs->expr_type == EXPR_VARIABLE
@@ -9620,11 +9616,11 @@ resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
&& rhs->expr_type == EXPR_VARIABLE
&& (gfc_impure_variable (rhs->symtree->n.sym)
|| gfc_is_coindexed (rhs)))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
/* Fortran 2008, C1283. */
if (gfc_is_coindexed (lhs))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ gfc_unset_implicit_pure (NULL);
}
/* F03:7.4.1.2. */
@@ -11057,7 +11053,7 @@ build_default_init_expr (gfc_symbol *sym)
init_expr = NULL;
}
if (!init_expr && gfc_option.flag_init_character == GFC_INIT_CHARACTER_ON
- && sym->ts.u.cl->length)
+ && sym->ts.u.cl->length && gfc_option.flag_max_stack_var_size != 0)
{
gfc_actual_arglist *arg;
init_expr = gfc_get_expr ();
@@ -11877,6 +11873,7 @@ check_generic_tbp_ambiguity (gfc_tbp_generic* t1, gfc_tbp_generic* t2,
{
gfc_symbol *sym1, *sym2;
const char *pass1, *pass2;
+ gfc_formal_arglist *dummy_args;
gcc_assert (t1->specific && t2->specific);
gcc_assert (!t1->specific->is_generic);
@@ -11899,19 +11896,33 @@ check_generic_tbp_ambiguity (gfc_tbp_generic* t1, gfc_tbp_generic* t2,
return FAILURE;
}
- /* Compare the interfaces. */
+ /* Determine PASS arguments. */
if (t1->specific->nopass)
pass1 = NULL;
else if (t1->specific->pass_arg)
pass1 = t1->specific->pass_arg;
else
- pass1 = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym)->sym->name;
+ {
+ dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
+ if (dummy_args)
+ pass1 = dummy_args->sym->name;
+ else
+ pass1 = NULL;
+ }
if (t2->specific->nopass)
pass2 = NULL;
else if (t2->specific->pass_arg)
pass2 = t2->specific->pass_arg;
else
- pass2 = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym)->sym->name;
+ {
+ dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
+ if (dummy_args)
+ pass2 = dummy_args->sym->name;
+ else
+ pass2 = NULL;
+ }
+
+ /* Compare the interfaces. */
if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
NULL, 0, pass1, pass2))
{
@@ -12425,9 +12436,6 @@ resolve_typebound_procedures (gfc_symbol* derived)
resolve_bindings_derived = derived;
resolve_bindings_result = SUCCESS;
- /* Make sure the vtab has been generated. */
- gfc_find_derived_vtab (derived);
-
if (derived->f2k_derived->tb_sym_root)
gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
&resolve_typebound_procedure);
@@ -13256,7 +13264,8 @@ resolve_symbol (gfc_symbol *sym)
if (sym->attr.flavor == FL_UNKNOWN
|| (sym->attr.flavor == FL_PROCEDURE && !sym->attr.intrinsic
&& !sym->attr.generic && !sym->attr.external
- && sym->attr.if_source == IFSRC_UNKNOWN))
+ && sym->attr.if_source == IFSRC_UNKNOWN
+ && sym->ts.type == BT_UNKNOWN))
{
/* If we find that a flavorless symbol is an interface in one of the
@@ -14376,6 +14385,33 @@ gfc_implicit_pure (gfc_symbol *sym)
}
+void
+gfc_unset_implicit_pure (gfc_symbol *sym)
+{
+ gfc_namespace *ns;
+
+ if (sym == NULL)
+ {
+ /* Check if the current procedure is implicit_pure. Walk up
+ the procedure list until we find a procedure. */
+ for (ns = gfc_current_ns; ns; ns = ns->parent)
+ {
+ sym = ns->proc_name;
+ if (sym == NULL)
+ return;
+
+ if (sym->attr.flavor == FL_PROCEDURE)
+ break;
+ }
+ }
+
+ if (sym->attr.flavor == FL_PROCEDURE)
+ sym->attr.implicit_pure = 0;
+ else
+ sym->attr.pure = 0;
+}
+
+
/* Test whether the current procedure is elemental or not. */
int
diff --git a/gcc-4.8/gcc/fortran/simplify.c b/gcc-4.8/gcc/fortran/simplify.c
index b03096b65..7c21f226d 100644
--- a/gcc-4.8/gcc/fortran/simplify.c
+++ b/gcc-4.8/gcc/fortran/simplify.c
@@ -5528,7 +5528,7 @@ gfc_simplify_shape (gfc_expr *source, gfc_expr *kind)
if (e == &gfc_bad_expr || range_check (e, "SHAPE") == &gfc_bad_expr)
{
gfc_free_expr (result);
- if (t)
+ if (t == SUCCESS)
gfc_clear_shape (shape, source->rank);
return &gfc_bad_expr;
}
@@ -5536,7 +5536,7 @@ gfc_simplify_shape (gfc_expr *source, gfc_expr *kind)
gfc_constructor_append_expr (&result->value.constructor, e, NULL);
}
- if (t)
+ if (t == SUCCESS)
gfc_clear_shape (shape, source->rank);
return result;
diff --git a/gcc-4.8/gcc/fortran/symbol.c b/gcc-4.8/gcc/fortran/symbol.c
index ef4076df3..1b3702f82 100644
--- a/gcc-4.8/gcc/fortran/symbol.c
+++ b/gcc-4.8/gcc/fortran/symbol.c
@@ -1110,8 +1110,8 @@ gfc_add_save (symbol_attribute *attr, save_state s, const char *name,
return FAILURE;
}
- if (s == SAVE_EXPLICIT && gfc_implicit_pure (NULL))
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ if (s == SAVE_EXPLICIT)
+ gfc_unset_implicit_pure (NULL);
if (s == SAVE_EXPLICIT && attr->save == SAVE_EXPLICIT)
{
diff --git a/gcc-4.8/gcc/fortran/trans-array.c b/gcc-4.8/gcc/fortran/trans-array.c
index b34f6fb19..8da24a257 100644
--- a/gcc-4.8/gcc/fortran/trans-array.c
+++ b/gcc-4.8/gcc/fortran/trans-array.c
@@ -1,5 +1,5 @@
/* Array translation routines
- Copyright (C) 2002-2013 Free Software Foundation, Inc.
+ Copyright (C) 2002-2014 Free Software Foundation, Inc.
Contributed by Paul Brook <paul@nowt.org>
and Steven Bosscher <s.bosscher@student.tudelft.nl>
@@ -2487,6 +2487,11 @@ gfc_add_loop_ss_code (gfc_loopinfo * loop, gfc_ss * ss, bool subscript,
a reference to the value. */
gfc_conv_expr (&se, expr);
}
+
+ /* Ensure that a pointer to the string is stored. */
+ if (expr->ts.type == BT_CHARACTER)
+ gfc_conv_string_parameter (&se);
+
gfc_add_block_to_block (&outer_loop->pre, &se.pre);
gfc_add_block_to_block (&outer_loop->post, &se.post);
if (gfc_is_class_scalar_expr (expr))
@@ -7940,6 +7945,7 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo *loop,
tree size1;
tree size2;
tree array1;
+ tree cond_null;
tree cond;
tree tmp;
tree tmp2;
@@ -8015,9 +8021,9 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo *loop,
jump_label2 = gfc_build_label_decl (NULL_TREE);
/* Allocate if data is NULL. */
- cond = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
+ cond_null = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
array1, build_int_cst (TREE_TYPE (array1), 0));
- tmp = build3_v (COND_EXPR, cond,
+ tmp = build3_v (COND_EXPR, cond_null,
build1_v (GOTO_EXPR, jump_label1),
build_empty_stmt (input_location));
gfc_add_expr_to_block (&fblock, tmp);
@@ -8069,13 +8075,25 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo *loop,
tmp = build1_v (LABEL_EXPR, jump_label1);
gfc_add_expr_to_block (&fblock, tmp);
- size1 = gfc_conv_descriptor_size (desc, expr1->rank);
+ /* If the lhs has not been allocated, its bounds will not have been
+ initialized and so its size is set to zero. */
+ size1 = gfc_create_var (gfc_array_index_type, NULL);
+ gfc_init_block (&alloc_block);
+ gfc_add_modify (&alloc_block, size1, gfc_index_zero_node);
+ gfc_init_block (&realloc_block);
+ gfc_add_modify (&realloc_block, size1,
+ gfc_conv_descriptor_size (desc, expr1->rank));
+ tmp = build3_v (COND_EXPR, cond_null,
+ gfc_finish_block (&alloc_block),
+ gfc_finish_block (&realloc_block));
+ gfc_add_expr_to_block (&fblock, tmp);
- /* Get the rhs size. Fix both sizes. */
+ /* Get the rhs size and fix it. */
if (expr2)
desc2 = rss->info->data.array.descriptor;
else
desc2 = NULL_TREE;
+
size2 = gfc_index_one_node;
for (n = 0; n < expr2->rank; n++)
{
@@ -8089,8 +8107,6 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo *loop,
gfc_array_index_type,
tmp, size2);
}
-
- size1 = gfc_evaluate_now (size1, &fblock);
size2 = gfc_evaluate_now (size2, &fblock);
cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
diff --git a/gcc-4.8/gcc/fortran/trans-decl.c b/gcc-4.8/gcc/fortran/trans-decl.c
index 7806bbbd8..7d2356187 100644
--- a/gcc-4.8/gcc/fortran/trans-decl.c
+++ b/gcc-4.8/gcc/fortran/trans-decl.c
@@ -1013,6 +1013,10 @@ gfc_build_dummy_array_decl (gfc_symbol * sym, tree dummy)
TREE_STATIC (decl) = 0;
DECL_EXTERNAL (decl) = 0;
+ /* Avoid uninitialized warnings for optional dummy arguments. */
+ if (sym->attr.optional)
+ TREE_NO_WARNING (decl) = 1;
+
/* We should never get deferred shape arrays here. We used to because of
frontend bugs. */
gcc_assert (sym->as->type != AS_DEFERRED);
@@ -1358,9 +1362,10 @@ gfc_get_symbol_decl (gfc_symbol * sym)
if (sym->attr.flavor == FL_PROCEDURE)
{
- /* Catch function declarations. Only used for actual parameters,
+ /* Catch functions. Only used for actual parameters,
procedure pointers and procptr initialization targets. */
- if (sym->attr.external || sym->attr.use_assoc || sym->attr.intrinsic)
+ if (sym->attr.external || sym->attr.use_assoc || sym->attr.intrinsic
+ || sym->attr.if_source != IFSRC_DECL)
{
decl = gfc_get_extern_function_decl (sym);
gfc_set_decl_location (decl, &sym->declared_at);
diff --git a/gcc-4.8/gcc/fortran/trans-expr.c b/gcc-4.8/gcc/fortran/trans-expr.c
index 2c3ff1fc3..07d51ba10 100644
--- a/gcc-4.8/gcc/fortran/trans-expr.c
+++ b/gcc-4.8/gcc/fortran/trans-expr.c
@@ -355,7 +355,11 @@ gfc_conv_derived_to_class (gfc_se *parmse, gfc_expr *e,
gfc_conv_expr_descriptor (parmse, e);
if (e->rank != class_ts.u.derived->components->as->rank)
- class_array_data_assign (&block, ctree, parmse->expr, true);
+ {
+ gcc_assert (class_ts.u.derived->components->as->type
+ == AS_ASSUMED_RANK);
+ class_array_data_assign (&block, ctree, parmse->expr, false);
+ }
else
{
if (gfc_expr_attr (e).codimension)
@@ -670,7 +674,6 @@ gfc_conv_class_to_class (gfc_se *parmse, gfc_expr *e, gfc_typespec class_ts,
gfc_add_modify (&parmse->post, vptr,
fold_convert (TREE_TYPE (vptr), ctree));
- gcc_assert (!optional || (optional && !copyback));
if (optional)
{
tree tmp2;
@@ -6343,7 +6346,13 @@ gfc_conv_expr_reference (gfc_se * se, gfc_expr * expr)
/* Returns a reference to the scalar evaluated outside the loop
for this case. */
gfc_conv_expr (se, expr);
+
+ if (expr->ts.type == BT_CHARACTER
+ && expr->expr_type != EXPR_FUNCTION)
+ gfc_conv_string_parameter (se);
+ else
se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
+
return;
}
diff --git a/gcc-4.8/gcc/fortran/trans-intrinsic.c b/gcc-4.8/gcc/fortran/trans-intrinsic.c
index ddd9eaea5..273c86ff4 100644
--- a/gcc-4.8/gcc/fortran/trans-intrinsic.c
+++ b/gcc-4.8/gcc/fortran/trans-intrinsic.c
@@ -4684,9 +4684,11 @@ gfc_conv_intrinsic_index_scan_verify (gfc_se * se, gfc_expr * expr,
static void
gfc_conv_intrinsic_ichar (gfc_se * se, gfc_expr * expr)
{
- tree args[2], type, pchartype;
+ tree args[3], type, pchartype;
+ int nargs;
- gfc_conv_intrinsic_function_args (se, expr, args, 2);
+ nargs = gfc_intrinsic_argument_list_length (expr);
+ gfc_conv_intrinsic_function_args (se, expr, args, nargs);
gcc_assert (POINTER_TYPE_P (TREE_TYPE (args[1])));
pchartype = gfc_get_pchar_type (expr->value.function.actual->expr->ts.kind);
args[1] = fold_build1_loc (input_location, NOP_EXPR, pchartype, args[1]);
diff --git a/gcc-4.8/gcc/fortran/trans-io.c b/gcc-4.8/gcc/fortran/trans-io.c
index 9394810f0..afb0354d7 100644
--- a/gcc-4.8/gcc/fortran/trans-io.c
+++ b/gcc-4.8/gcc/fortran/trans-io.c
@@ -2158,6 +2158,12 @@ transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr, gfc_code * code)
expr = build_fold_indirect_ref_loc (input_location,
expr);
+ /* Make sure that the derived type has been built. An external
+ function, if only referenced in an io statement requires this
+ check (see PR58771). */
+ if (ts->u.derived->backend_decl == NULL_TREE)
+ tmp = gfc_typenode_for_spec (ts);
+
for (c = ts->u.derived->components; c; c = c->next)
{
field = c->backend_decl;
diff --git a/gcc-4.8/gcc/fortran/trans-stmt.c b/gcc-4.8/gcc/fortran/trans-stmt.c
index 430b10e37..1d8588d60 100644
--- a/gcc-4.8/gcc/fortran/trans-stmt.c
+++ b/gcc-4.8/gcc/fortran/trans-stmt.c
@@ -5104,10 +5104,49 @@ gfc_trans_allocate (gfc_code * code)
{
gfc_expr *lhs, *rhs;
gfc_se lse;
+ gfc_ref *ref, *class_ref, *tail;
+
+ /* Find the last class reference. */
+ class_ref = NULL;
+ for (ref = e->ref; ref; ref = ref->next)
+ {
+ if (ref->type == REF_COMPONENT
+ && ref->u.c.component->ts.type == BT_CLASS)
+ class_ref = ref;
+
+ if (ref->next == NULL)
+ break;
+ }
+
+ /* Remove and store all subsequent references after the
+ CLASS reference. */
+ if (class_ref)
+ {
+ tail = class_ref->next;
+ class_ref->next = NULL;
+ }
+ else
+ {
+ tail = e->ref;
+ e->ref = NULL;
+ }
lhs = gfc_expr_to_initialize (e);
gfc_add_vptr_component (lhs);
+ /* Remove the _vptr component and restore the original tail
+ references. */
+ if (class_ref)
+ {
+ gfc_free_ref_list (class_ref->next);
+ class_ref->next = tail;
+ }
+ else
+ {
+ gfc_free_ref_list (e->ref);
+ e->ref = tail;
+ }
+
if (class_expr != NULL_TREE)
{
/* Polymorphic SOURCE: VPTR must be determined at run time. */
diff --git a/gcc-4.8/gcc/function.c b/gcc-4.8/gcc/function.c
index e673f21a5..a67167ab6 100644
--- a/gcc-4.8/gcc/function.c
+++ b/gcc-4.8/gcc/function.c
@@ -2507,6 +2507,7 @@ assign_parm_find_entry_rtl (struct assign_parm_data_all *all,
}
locate_and_pad_parm (data->promoted_mode, data->passed_type, in_regs,
+ all->reg_parm_stack_space,
entry_parm ? data->partial : 0, current_function_decl,
&all->stack_args_size, &data->locate);
@@ -3485,11 +3486,7 @@ assign_parms (tree fndecl)
/* Adjust function incoming argument size for alignment and
minimum length. */
-#ifdef REG_PARM_STACK_SPACE
- crtl->args.size = MAX (crtl->args.size,
- REG_PARM_STACK_SPACE (fndecl));
-#endif
-
+ crtl->args.size = MAX (crtl->args.size, all.reg_parm_stack_space);
crtl->args.size = CEIL_ROUND (crtl->args.size,
PARM_BOUNDARY / BITS_PER_UNIT);
@@ -3693,6 +3690,9 @@ gimplify_parameters (void)
IN_REGS is nonzero if the argument will be passed in registers. It will
never be set if REG_PARM_STACK_SPACE is not defined.
+ REG_PARM_STACK_SPACE is the number of bytes of stack space reserved
+ for arguments which are passed in registers.
+
FNDECL is the function in which the argument was defined.
There are two types of rounding that are done. The first, controlled by
@@ -3713,19 +3713,16 @@ gimplify_parameters (void)
void
locate_and_pad_parm (enum machine_mode passed_mode, tree type, int in_regs,
- int partial, tree fndecl ATTRIBUTE_UNUSED,
+ int reg_parm_stack_space, int partial,
+ tree fndecl ATTRIBUTE_UNUSED,
struct args_size *initial_offset_ptr,
struct locate_and_pad_arg_data *locate)
{
tree sizetree;
enum direction where_pad;
unsigned int boundary, round_boundary;
- int reg_parm_stack_space = 0;
int part_size_in_regs;
-#ifdef REG_PARM_STACK_SPACE
- reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
-
/* If we have found a stack parm before we reach the end of the
area reserved for registers, skip that area. */
if (! in_regs)
@@ -3743,7 +3740,6 @@ locate_and_pad_parm (enum machine_mode passed_mode, tree type, int in_regs,
initial_offset_ptr->constant = reg_parm_stack_space;
}
}
-#endif /* REG_PARM_STACK_SPACE */
part_size_in_regs = (reg_parm_stack_space == 0 ? partial : 0);
@@ -3806,11 +3802,7 @@ locate_and_pad_parm (enum machine_mode passed_mode, tree type, int in_regs,
locate->slot_offset.constant += part_size_in_regs;
- if (!in_regs
-#ifdef REG_PARM_STACK_SPACE
- || REG_PARM_STACK_SPACE (fndecl) > 0
-#endif
- )
+ if (!in_regs || reg_parm_stack_space > 0)
pad_to_arg_alignment (&locate->slot_offset, boundary,
&locate->alignment_pad);
@@ -3830,11 +3822,7 @@ locate_and_pad_parm (enum machine_mode passed_mode, tree type, int in_regs,
pad_below (&locate->offset, passed_mode, sizetree);
#else /* !ARGS_GROW_DOWNWARD */
- if (!in_regs
-#ifdef REG_PARM_STACK_SPACE
- || REG_PARM_STACK_SPACE (fndecl) > 0
-#endif
- )
+ if (!in_regs || reg_parm_stack_space > 0)
pad_to_arg_alignment (initial_offset_ptr, boundary,
&locate->alignment_pad);
locate->slot_offset = *initial_offset_ptr;
@@ -5093,6 +5081,7 @@ expand_function_end (void)
amount. BLKmode results are handled using the group load/store
machinery. */
if (TYPE_MODE (TREE_TYPE (decl_result)) != BLKmode
+ && REG_P (real_decl_rtl)
&& targetm.calls.return_in_msb (TREE_TYPE (decl_result)))
{
emit_move_insn (gen_rtx_REG (GET_MODE (decl_rtl),
@@ -5509,9 +5498,12 @@ move_insn_for_shrink_wrap (basic_block bb, rtx insn,
except for any part that overlaps SRC (next loop). */
bb_uses = &DF_LR_BB_INFO (bb)->use;
bb_defs = &DF_LR_BB_INFO (bb)->def;
+ if (df_live)
+ {
for (i = dregno; i < end_dregno; i++)
{
- if (REGNO_REG_SET_P (bb_uses, i) || REGNO_REG_SET_P (bb_defs, i))
+ if (REGNO_REG_SET_P (bb_uses, i) || REGNO_REG_SET_P (bb_defs, i)
+ || REGNO_REG_SET_P (&DF_LIVE_BB_INFO (bb)->gen, i))
next_block = NULL;
CLEAR_REGNO_REG_SET (live_out, i);
CLEAR_REGNO_REG_SET (live_in, i);
@@ -5521,11 +5513,31 @@ move_insn_for_shrink_wrap (basic_block bb, rtx insn,
Either way, SRC is now live on entry. */
for (i = sregno; i < end_sregno; i++)
{
- if (REGNO_REG_SET_P (bb_defs, i))
+ if (REGNO_REG_SET_P (bb_defs, i)
+ || REGNO_REG_SET_P (&DF_LIVE_BB_INFO (bb)->gen, i))
next_block = NULL;
SET_REGNO_REG_SET (live_out, i);
SET_REGNO_REG_SET (live_in, i);
}
+ }
+ else
+ {
+ /* DF_LR_BB_INFO (bb)->def does not comprise the DF_REF_PARTIAL and
+ DF_REF_CONDITIONAL defs. So if DF_LIVE doesn't exist, i.e.
+ at -O1, just give up searching NEXT_BLOCK. */
+ next_block = NULL;
+ for (i = dregno; i < end_dregno; i++)
+ {
+ CLEAR_REGNO_REG_SET (live_out, i);
+ CLEAR_REGNO_REG_SET (live_in, i);
+ }
+
+ for (i = sregno; i < end_sregno; i++)
+ {
+ SET_REGNO_REG_SET (live_out, i);
+ SET_REGNO_REG_SET (live_in, i);
+ }
+ }
/* If we don't need to add the move to BB, look for a single
successor block. */
diff --git a/gcc-4.8/gcc/gcc.c b/gcc-4.8/gcc/gcc.c
index e16f72ec5..ac5032a98 100644
--- a/gcc-4.8/gcc/gcc.c
+++ b/gcc-4.8/gcc/gcc.c
@@ -5441,7 +5441,7 @@ eval_spec_function (const char *func, const char *args)
const char *save_suffix_subst;
int save_growing_size;
- void *save_growing_value;
+ void *save_growing_value = NULL;
sf = lookup_spec_function (func);
if (sf == NULL)
diff --git a/gcc-4.8/gcc/gengtype-lex.c b/gcc-4.8/gcc/gengtype-lex.c
index 36da3a32d..7ad0b2500 100644
--- a/gcc-4.8/gcc/gengtype-lex.c
+++ b/gcc-4.8/gcc/gengtype-lex.c
@@ -1173,7 +1173,7 @@ int yy_flex_debug = 0;
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
-#line 1 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 1 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
/* -*- indented-text -*- */
/* Process source files and output type information.
Copyright (C) 2002-2013 Free Software Foundation, Inc.
@@ -1194,7 +1194,7 @@ You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
#define YY_NO_INPUT 1
-#line 24 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 24 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
#ifdef GENERATOR_FILE
#include "bconfig.h"
#else
@@ -1313,7 +1313,7 @@ static int input (void );
/* This used to be an fputs(), but since the string might contain NUL's,
* we now use fwrite().
*/
-#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
#endif
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
@@ -1324,7 +1324,7 @@ static int input (void );
if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
{ \
int c = '*'; \
- unsigned n; \
+ int n; \
for ( n = 0; n < max_size && \
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \
@@ -1409,7 +1409,7 @@ YY_DECL
register char *yy_cp, *yy_bp;
register int yy_act;
-#line 65 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 65 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
/* Do this on entry to yylex(): */
*yylval = 0;
@@ -1506,7 +1506,7 @@ case 1:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 76 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 76 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
return TYPEDEF;
@@ -1518,7 +1518,7 @@ case 2:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 80 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 80 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
return STRUCT;
@@ -1530,7 +1530,7 @@ case 3:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 84 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 84 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
return UNION;
@@ -1542,7 +1542,7 @@ case 4:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 88 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 88 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
return STRUCT;
@@ -1554,7 +1554,7 @@ case 5:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 92 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 92 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
return EXTERN;
@@ -1566,7 +1566,7 @@ case 6:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 96 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 96 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
return STATIC;
@@ -1577,25 +1577,25 @@ YY_RULE_SETUP
case 7:
YY_RULE_SETUP
-#line 104 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 104 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ BEGIN(in_struct_comment); }
YY_BREAK
case 8:
/* rule 8 can match eol */
YY_RULE_SETUP
-#line 105 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 105 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ lexer_line.line++; }
YY_BREAK
case 9:
/* rule 9 can match eol */
YY_RULE_SETUP
-#line 107 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 107 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ update_lineno (yytext, yyleng); }
YY_BREAK
case 10:
/* rule 10 can match eol */
YY_RULE_SETUP
-#line 108 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 108 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ lexer_line.line++; }
YY_BREAK
case 11:
@@ -1604,7 +1604,7 @@ case 11:
(yy_c_buf_p) = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 110 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 110 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
/* don't care */
YY_BREAK
case 12:
@@ -1612,14 +1612,14 @@ case 12:
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
-#line 112 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 112 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
case 13:
/* rule 13 can match eol */
-#line 113 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 113 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
case 14:
/* rule 14 can match eol */
YY_RULE_SETUP
-#line 113 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 113 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
*yylval = XDUPVAR (const char, yytext, yyleng, yyleng + 1);
return IGNORABLE_CXX_KEYWORD;
@@ -1631,7 +1631,7 @@ case 15:
(yy_c_buf_p) = yy_cp = yy_bp + 3;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 117 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 117 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ return GTY_TOKEN; }
YY_BREAK
case 16:
@@ -1640,7 +1640,7 @@ case 16:
(yy_c_buf_p) = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 118 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 118 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ return UNION; }
YY_BREAK
case 17:
@@ -1649,7 +1649,7 @@ case 17:
(yy_c_buf_p) = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 119 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 119 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ return STRUCT; }
YY_BREAK
case 18:
@@ -1658,7 +1658,7 @@ case 18:
(yy_c_buf_p) = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 120 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 120 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ return STRUCT; }
YY_BREAK
case 19:
@@ -1667,7 +1667,7 @@ case 19:
(yy_c_buf_p) = yy_cp = yy_bp + 7;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 121 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 121 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ return TYPEDEF; }
YY_BREAK
case 20:
@@ -1676,7 +1676,7 @@ case 20:
(yy_c_buf_p) = yy_cp = yy_bp + 4;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 122 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 122 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ return ENUM; }
YY_BREAK
case 21:
@@ -1685,7 +1685,7 @@ case 21:
(yy_c_buf_p) = yy_cp = yy_bp + 9;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 123 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 123 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ return PTR_ALIAS; }
YY_BREAK
case 22:
@@ -1694,7 +1694,7 @@ case 22:
(yy_c_buf_p) = yy_cp = yy_bp + 10;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 124 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 124 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ return NESTED_PTR; }
YY_BREAK
case 23:
@@ -1703,12 +1703,12 @@ case 23:
(yy_c_buf_p) = yy_cp = yy_bp + 4;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 125 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 125 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ return USER_GTY; }
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 126 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 126 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ return NUM; }
YY_BREAK
case 25:
@@ -1717,7 +1717,7 @@ case 25:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 127 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 127 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
*yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
return PARAM_IS;
@@ -1728,11 +1728,11 @@ case 26:
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
-#line 133 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 133 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
case 27:
/* rule 27 can match eol */
YY_RULE_SETUP
-#line 133 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 133 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
size_t len;
@@ -1750,7 +1750,7 @@ case 28:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 144 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 144 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
*yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
return ID;
@@ -1759,7 +1759,7 @@ YY_RULE_SETUP
case 29:
/* rule 29 can match eol */
YY_RULE_SETUP
-#line 149 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 149 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
*yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
return STRING;
@@ -1769,7 +1769,7 @@ YY_RULE_SETUP
case 30:
/* rule 30 can match eol */
YY_RULE_SETUP
-#line 154 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 154 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
*yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
return ARRAY;
@@ -1778,7 +1778,7 @@ YY_RULE_SETUP
case 31:
/* rule 31 can match eol */
YY_RULE_SETUP
-#line 158 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 158 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
*yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng);
return CHAR;
@@ -1786,24 +1786,24 @@ YY_RULE_SETUP
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 163 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 163 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ return ELLIPSIS; }
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 164 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 164 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ return yytext[0]; }
YY_BREAK
/* ignore pp-directives */
case 34:
/* rule 34 can match eol */
YY_RULE_SETUP
-#line 167 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 167 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{lexer_line.line++;}
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 169 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 169 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
error_at_line (&lexer_line, "unexpected character `%s'", yytext);
}
@@ -1811,36 +1811,36 @@ YY_RULE_SETUP
case 36:
YY_RULE_SETUP
-#line 174 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 174 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ BEGIN(in_comment); }
YY_BREAK
case 37:
/* rule 37 can match eol */
YY_RULE_SETUP
-#line 175 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 175 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ lexer_line.line++; }
YY_BREAK
case 38:
/* rule 38 can match eol */
YY_RULE_SETUP
-#line 176 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 176 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ lexer_line.line++; }
YY_BREAK
case 39:
-#line 178 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 178 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
case 40:
/* rule 40 can match eol */
-#line 179 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 179 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
case 41:
/* rule 41 can match eol */
YY_RULE_SETUP
-#line 179 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 179 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 42:
/* rule 42 can match eol */
YY_RULE_SETUP
-#line 180 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 180 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ update_lineno (yytext, yyleng); }
YY_BREAK
case 43:
@@ -1849,21 +1849,21 @@ case 43:
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 181 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 181 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 44:
/* rule 44 can match eol */
YY_RULE_SETUP
-#line 184 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 184 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ lexer_line.line++; }
YY_BREAK
case 45:
-#line 186 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 186 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
case 46:
YY_RULE_SETUP
-#line 186 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 186 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 47:
@@ -1872,25 +1872,25 @@ case 47:
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 187 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 187 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 190 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 190 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ BEGIN(INITIAL); }
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 191 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 191 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{ BEGIN(in_struct); }
YY_BREAK
case 50:
-#line 194 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 194 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
case 51:
YY_RULE_SETUP
-#line 194 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 194 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
{
error_at_line (&lexer_line,
"unterminated comment or string; unexpected EOF");
@@ -1899,12 +1899,12 @@ YY_RULE_SETUP
case 52:
/* rule 52 can match eol */
YY_RULE_SETUP
-#line 199 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 199 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 201 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 201 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
#line 1910 "gengtype-lex.c"
@@ -2238,7 +2238,7 @@ static int yy_get_next_buffer (void)
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
yy_is_jam = (yy_current_state == 557);
- return yy_is_jam ? 0 : yy_current_state;
+ return yy_is_jam ? 0 : yy_current_state;
}
#ifndef YY_NO_INPUT
@@ -2871,7 +2871,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 201 "/d/gcc-4.8.1/gcc-4.8.1/gcc/gengtype-lex.l"
+#line 201 "/space/rguenther/gcc-4.8.3/gcc-4.8.3/gcc/gengtype-lex.l"
diff --git a/gcc-4.8/gcc/gimple-fold.c b/gcc-4.8/gcc/gimple-fold.c
index b9211a9ad..5d08169b8 100644
--- a/gcc-4.8/gcc/gimple-fold.c
+++ b/gcc-4.8/gcc/gimple-fold.c
@@ -178,7 +178,7 @@ canonicalize_constructor_val (tree cval, tree from_decl)
/* Make sure we create a cgraph node for functions we'll reference.
They can be non-existent if the reference comes from an entry
of an external vtable for example. */
- cgraph_get_create_node (base);
+ cgraph_get_create_real_symbol_node (base);
}
/* Fixup types in global initializers. */
if (TREE_TYPE (TREE_TYPE (cval)) != TREE_TYPE (TREE_OPERAND (cval, 0)))
@@ -866,6 +866,7 @@ gimple_fold_builtin (gimple stmt)
break;
case BUILT_IN_STRCPY:
case BUILT_IN_STRNCPY:
+ case BUILT_IN_STRCAT:
arg_idx = 1;
type = 0;
break;
@@ -941,6 +942,13 @@ gimple_fold_builtin (gimple stmt)
val[1]);
break;
+ case BUILT_IN_STRCAT:
+ if (val[1] && is_gimple_val (val[1]) && nargs == 2)
+ result = fold_builtin_strcat (loc, gimple_call_arg (stmt, 0),
+ gimple_call_arg (stmt, 1),
+ val[1]);
+ break;
+
case BUILT_IN_FPUTS:
if (nargs == 2)
result = fold_builtin_fputs (loc, gimple_call_arg (stmt, 0),
diff --git a/gcc-4.8/gcc/gimple-low.c b/gcc-4.8/gcc/gimple-low.c
index b06d194da..9ac0d60e5 100644
--- a/gcc-4.8/gcc/gimple-low.c
+++ b/gcc-4.8/gcc/gimple-low.c
@@ -238,6 +238,7 @@ gimple_check_call_args (gimple stmt, tree fndecl)
break;
arg = gimple_call_arg (stmt, i);
if (p == error_mark_node
+ || DECL_ARG_TYPE (p) == error_mark_node
|| arg == error_mark_node
|| (!types_compatible_p (DECL_ARG_TYPE (p), TREE_TYPE (arg))
&& !fold_convertible_p (DECL_ARG_TYPE (p), arg)))
diff --git a/gcc-4.8/gcc/gimple-ssa-strength-reduction.c b/gcc-4.8/gcc/gimple-ssa-strength-reduction.c
index 5cda3873e..a1d1a11f0 100644
--- a/gcc-4.8/gcc/gimple-ssa-strength-reduction.c
+++ b/gcc-4.8/gcc/gimple-ssa-strength-reduction.c
@@ -735,16 +735,19 @@ create_mul_imm_cand (gimple gs, tree base_in, tree stride_in, bool speed)
X = Y * c
============================
X = (B + i') * (S * c) */
- base = base_cand->base_expr;
- index = base_cand->index;
temp = tree_to_double_int (base_cand->stride)
* tree_to_double_int (stride_in);
+ if (double_int_fits_to_tree_p (TREE_TYPE (stride_in), temp))
+ {
+ base = base_cand->base_expr;
+ index = base_cand->index;
stride = double_int_to_tree (TREE_TYPE (stride_in), temp);
ctype = base_cand->cand_type;
if (has_single_use (base_in))
savings = (base_cand->dead_savings
+ stmt_cost (base_cand->cand_stmt, speed));
}
+ }
else if (base_cand->kind == CAND_ADD
&& operand_equal_p (base_cand->stride, integer_one_node, 0))
{
diff --git a/gcc-4.8/gcc/gimple.c b/gcc-4.8/gcc/gimple.c
index 97a37e32d..9b5de4a25 100644
--- a/gcc-4.8/gcc/gimple.c
+++ b/gcc-4.8/gcc/gimple.c
@@ -3841,42 +3841,46 @@ get_base_loadstore (tree op)
/* For the statement STMT call the callbacks VISIT_LOAD, VISIT_STORE and
VISIT_ADDR if non-NULL on loads, store and address-taken operands
- passing the STMT, the base of the operand and DATA to it. The base
- will be either a decl, an indirect reference (including TARGET_MEM_REF)
- or the argument of an address expression.
+ passing the STMT, the base of the operand, the operand itself containing
+ the base and DATA to it. The base will be either a decl, an indirect
+ reference (including TARGET_MEM_REF) or the argument of an address
+ expression.
Returns the results of these callbacks or'ed. */
bool
walk_stmt_load_store_addr_ops (gimple stmt, void *data,
- bool (*visit_load)(gimple, tree, void *),
- bool (*visit_store)(gimple, tree, void *),
- bool (*visit_addr)(gimple, tree, void *))
+ walk_stmt_load_store_addr_fn visit_load,
+ walk_stmt_load_store_addr_fn visit_store,
+ walk_stmt_load_store_addr_fn visit_addr)
{
bool ret = false;
unsigned i;
if (gimple_assign_single_p (stmt))
{
- tree lhs, rhs;
+ tree lhs, rhs, arg;
if (visit_store)
{
- lhs = get_base_loadstore (gimple_assign_lhs (stmt));
+ arg = gimple_assign_lhs (stmt);
+ lhs = get_base_loadstore (arg);
if (lhs)
- ret |= visit_store (stmt, lhs, data);
+ ret |= visit_store (stmt, lhs, arg, data);
}
- rhs = gimple_assign_rhs1 (stmt);
+ arg = gimple_assign_rhs1 (stmt);
+ rhs = arg;
while (handled_component_p (rhs))
rhs = TREE_OPERAND (rhs, 0);
if (visit_addr)
{
if (TREE_CODE (rhs) == ADDR_EXPR)
- ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), data);
+ ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), arg, data);
else if (TREE_CODE (rhs) == TARGET_MEM_REF
&& TREE_CODE (TMR_BASE (rhs)) == ADDR_EXPR)
- ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (rhs), 0), data);
+ ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (rhs), 0), arg,
+ data);
else if (TREE_CODE (rhs) == OBJ_TYPE_REF
&& TREE_CODE (OBJ_TYPE_REF_OBJECT (rhs)) == ADDR_EXPR)
ret |= visit_addr (stmt, TREE_OPERAND (OBJ_TYPE_REF_OBJECT (rhs),
- 0), data);
+ 0), arg, data);
else if (TREE_CODE (rhs) == CONSTRUCTOR)
{
unsigned int ix;
@@ -3884,23 +3888,23 @@ walk_stmt_load_store_addr_ops (gimple stmt, void *data,
FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (rhs), ix, val)
if (TREE_CODE (val) == ADDR_EXPR)
- ret |= visit_addr (stmt, TREE_OPERAND (val, 0), data);
+ ret |= visit_addr (stmt, TREE_OPERAND (val, 0), arg, data);
else if (TREE_CODE (val) == OBJ_TYPE_REF
&& TREE_CODE (OBJ_TYPE_REF_OBJECT (val)) == ADDR_EXPR)
ret |= visit_addr (stmt,
TREE_OPERAND (OBJ_TYPE_REF_OBJECT (val),
- 0), data);
+ 0), arg, data);
}
lhs = gimple_assign_lhs (stmt);
if (TREE_CODE (lhs) == TARGET_MEM_REF
&& TREE_CODE (TMR_BASE (lhs)) == ADDR_EXPR)
- ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (lhs), 0), data);
+ ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (lhs), 0), lhs, data);
}
if (visit_load)
{
rhs = get_base_loadstore (rhs);
if (rhs)
- ret |= visit_load (stmt, rhs, data);
+ ret |= visit_load (stmt, rhs, arg, data);
}
}
else if (visit_addr
@@ -3913,17 +3917,17 @@ walk_stmt_load_store_addr_ops (gimple stmt, void *data,
if (op == NULL_TREE)
;
else if (TREE_CODE (op) == ADDR_EXPR)
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
/* COND_EXPR and VCOND_EXPR rhs1 argument is a comparison
tree with two operands. */
else if (i == 1 && COMPARISON_CLASS_P (op))
{
if (TREE_CODE (TREE_OPERAND (op, 0)) == ADDR_EXPR)
ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 0),
- 0), data);
+ 0), op, data);
if (TREE_CODE (TREE_OPERAND (op, 1)) == ADDR_EXPR)
ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 1),
- 0), data);
+ 0), op, data);
}
}
}
@@ -3931,38 +3935,39 @@ walk_stmt_load_store_addr_ops (gimple stmt, void *data,
{
if (visit_store)
{
- tree lhs = gimple_call_lhs (stmt);
- if (lhs)
+ tree arg = gimple_call_lhs (stmt);
+ if (arg)
{
- lhs = get_base_loadstore (lhs);
+ tree lhs = get_base_loadstore (arg);
if (lhs)
- ret |= visit_store (stmt, lhs, data);
+ ret |= visit_store (stmt, lhs, arg, data);
}
}
if (visit_load || visit_addr)
for (i = 0; i < gimple_call_num_args (stmt); ++i)
{
- tree rhs = gimple_call_arg (stmt, i);
+ tree arg = gimple_call_arg (stmt, i);
if (visit_addr
- && TREE_CODE (rhs) == ADDR_EXPR)
- ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), data);
+ && TREE_CODE (arg) == ADDR_EXPR)
+ ret |= visit_addr (stmt, TREE_OPERAND (arg, 0), arg, data);
else if (visit_load)
{
- rhs = get_base_loadstore (rhs);
+ tree rhs = get_base_loadstore (arg);
if (rhs)
- ret |= visit_load (stmt, rhs, data);
+ ret |= visit_load (stmt, rhs, arg, data);
}
}
if (visit_addr
&& gimple_call_chain (stmt)
&& TREE_CODE (gimple_call_chain (stmt)) == ADDR_EXPR)
ret |= visit_addr (stmt, TREE_OPERAND (gimple_call_chain (stmt), 0),
- data);
+ gimple_call_chain (stmt), data);
if (visit_addr
&& gimple_call_return_slot_opt_p (stmt)
&& gimple_call_lhs (stmt) != NULL_TREE
&& TREE_ADDRESSABLE (TREE_TYPE (gimple_call_lhs (stmt))))
- ret |= visit_addr (stmt, gimple_call_lhs (stmt), data);
+ ret |= visit_addr (stmt, gimple_call_lhs (stmt),
+ gimple_call_lhs (stmt), data);
}
else if (gimple_code (stmt) == GIMPLE_ASM)
{
@@ -3978,7 +3983,7 @@ walk_stmt_load_store_addr_ops (gimple stmt, void *data,
tree link = gimple_asm_output_op (stmt, i);
tree op = get_base_loadstore (TREE_VALUE (link));
if (op && visit_store)
- ret |= visit_store (stmt, op, data);
+ ret |= visit_store (stmt, op, TREE_VALUE (link), data);
if (visit_addr)
{
constraint = TREE_STRING_POINTER
@@ -3987,7 +3992,7 @@ walk_stmt_load_store_addr_ops (gimple stmt, void *data,
parse_output_constraint (&constraint, i, 0, 0, &allows_mem,
&allows_reg, &is_inout);
if (op && !allows_reg && allows_mem)
- ret |= visit_addr (stmt, op, data);
+ ret |= visit_addr (stmt, op, TREE_VALUE (link), data);
}
}
if (visit_load || visit_addr)
@@ -3997,14 +4002,14 @@ walk_stmt_load_store_addr_ops (gimple stmt, void *data,
tree op = TREE_VALUE (link);
if (visit_addr
&& TREE_CODE (op) == ADDR_EXPR)
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
else if (visit_load || visit_addr)
{
op = get_base_loadstore (op);
if (op)
{
if (visit_load)
- ret |= visit_load (stmt, op, data);
+ ret |= visit_load (stmt, op, TREE_VALUE (link), data);
if (visit_addr)
{
constraint = TREE_STRING_POINTER
@@ -4013,7 +4018,8 @@ walk_stmt_load_store_addr_ops (gimple stmt, void *data,
0, oconstraints,
&allows_mem, &allows_reg);
if (!allows_reg && allows_mem)
- ret |= visit_addr (stmt, op, data);
+ ret |= visit_addr (stmt, op, TREE_VALUE (link),
+ data);
}
}
}
@@ -4026,12 +4032,12 @@ walk_stmt_load_store_addr_ops (gimple stmt, void *data,
{
if (visit_addr
&& TREE_CODE (op) == ADDR_EXPR)
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
else if (visit_load)
{
- op = get_base_loadstore (op);
- if (op)
- ret |= visit_load (stmt, op, data);
+ tree base = get_base_loadstore (op);
+ if (base)
+ ret |= visit_load (stmt, base, op, data);
}
}
}
@@ -4042,7 +4048,7 @@ walk_stmt_load_store_addr_ops (gimple stmt, void *data,
{
tree op = PHI_ARG_DEF (stmt, i);
if (TREE_CODE (op) == ADDR_EXPR)
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
}
}
else if (visit_addr
@@ -4050,7 +4056,7 @@ walk_stmt_load_store_addr_ops (gimple stmt, void *data,
{
tree op = gimple_goto_dest (stmt);
if (TREE_CODE (op) == ADDR_EXPR)
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
}
return ret;
@@ -4061,8 +4067,8 @@ walk_stmt_load_store_addr_ops (gimple stmt, void *data,
bool
walk_stmt_load_store_ops (gimple stmt, void *data,
- bool (*visit_load)(gimple, tree, void *),
- bool (*visit_store)(gimple, tree, void *))
+ walk_stmt_load_store_addr_fn visit_load,
+ walk_stmt_load_store_addr_fn visit_store)
{
return walk_stmt_load_store_addr_ops (stmt, data,
visit_load, visit_store, NULL);
@@ -4071,8 +4077,7 @@ walk_stmt_load_store_ops (gimple stmt, void *data,
/* Helper for gimple_ior_addresses_taken_1. */
static bool
-gimple_ior_addresses_taken_1 (gimple stmt ATTRIBUTE_UNUSED,
- tree addr, void *data)
+gimple_ior_addresses_taken_1 (gimple, tree addr, tree, void *data)
{
bitmap addresses_taken = (bitmap)data;
addr = get_base_address (addr);
diff --git a/gcc-4.8/gcc/gimple.h b/gcc-4.8/gcc/gimple.h
index 1bbd7d76a..4985446cc 100644
--- a/gcc-4.8/gcc/gimple.h
+++ b/gcc-4.8/gcc/gimple.h
@@ -176,6 +176,9 @@ struct GTY((chain_next ("%h.next"))) gimple_statement_base {
/* Nonzero if this statement contains volatile operands. */
unsigned has_volatile_ops : 1;
+ /* Padding to get subcode to 16 bit alignment. */
+ unsigned pad : 1;
+
/* The SUBCODE field can be used for tuple-specific flags for tuples
that do not require subcodes. Note that SUBCODE should be at
least as wide as tree codes, as several tuples store tree codes
@@ -888,13 +891,14 @@ extern tree gimple_signed_type (tree);
extern alias_set_type gimple_get_alias_set (tree);
extern void count_uses_and_derefs (tree, gimple, unsigned *, unsigned *,
unsigned *);
+typedef bool (*walk_stmt_load_store_addr_fn) (gimple, tree, tree, void *);
extern bool walk_stmt_load_store_addr_ops (gimple, void *,
- bool (*)(gimple, tree, void *),
- bool (*)(gimple, tree, void *),
- bool (*)(gimple, tree, void *));
+ walk_stmt_load_store_addr_fn,
+ walk_stmt_load_store_addr_fn,
+ walk_stmt_load_store_addr_fn);
extern bool walk_stmt_load_store_ops (gimple, void *,
- bool (*)(gimple, tree, void *),
- bool (*)(gimple, tree, void *));
+ walk_stmt_load_store_addr_fn,
+ walk_stmt_load_store_addr_fn);
extern bool gimple_ior_addresses_taken (bitmap, gimple);
extern bool gimple_call_builtin_p (gimple, enum built_in_class);
extern bool gimple_call_builtin_p (gimple, enum built_in_function);
diff --git a/gcc-4.8/gcc/gimplify.c b/gcc-4.8/gcc/gimplify.c
index 9416963c4..f69739527 100644
--- a/gcc-4.8/gcc/gimplify.c
+++ b/gcc-4.8/gcc/gimplify.c
@@ -2060,6 +2060,9 @@ gimplify_conversion (tree *expr_p)
/* Nonlocal VLAs seen in the current function. */
static struct pointer_set_t *nonlocal_vlas;
+/* The VAR_DECLs created for nonlocal VLAs for debug info purposes. */
+static tree nonlocal_vla_vars;
+
/* Gimplify a VAR_DECL or PARM_DECL. Return GS_OK if we expanded a
DECL_VALUE_EXPR, and it's worth re-examining things. */
@@ -2106,14 +2109,13 @@ gimplify_var_or_parm_decl (tree *expr_p)
ctx = ctx->outer_context;
if (!ctx && !pointer_set_insert (nonlocal_vlas, decl))
{
- tree copy = copy_node (decl), block;
+ tree copy = copy_node (decl);
lang_hooks.dup_lang_specific_decl (copy);
SET_DECL_RTL (copy, 0);
TREE_USED (copy) = 1;
- block = DECL_INITIAL (current_function_decl);
- DECL_CHAIN (copy) = BLOCK_VARS (block);
- BLOCK_VARS (block) = copy;
+ DECL_CHAIN (copy) = nonlocal_vla_vars;
+ nonlocal_vla_vars = copy;
SET_DECL_VALUE_EXPR (copy, unshare_expr (value_expr));
DECL_HAS_VALUE_EXPR_P (copy) = 1;
}
@@ -4378,7 +4380,7 @@ gimple_fold_indirect_ref (tree t)
unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
tree index = bitsize_int (indexi);
if (offset / part_widthi
- <= TYPE_VECTOR_SUBPARTS (TREE_TYPE (addrtype)))
+ < TYPE_VECTOR_SUBPARTS (TREE_TYPE (addrtype)))
return fold_build3 (BIT_FIELD_REF, type, TREE_OPERAND (addr, 0),
part_width, index);
}
@@ -6140,7 +6142,7 @@ omp_is_private (struct gimplify_omp_ctx *ctx, tree decl)
region's REDUCTION clause. */
static bool
-omp_check_private (struct gimplify_omp_ctx *ctx, tree decl)
+omp_check_private (struct gimplify_omp_ctx *ctx, tree decl, bool copyprivate)
{
splay_tree_node n;
@@ -6149,8 +6151,11 @@ omp_check_private (struct gimplify_omp_ctx *ctx, tree decl)
ctx = ctx->outer_context;
if (ctx == NULL)
return !(is_global_var (decl)
- /* References might be private, but might be shared too. */
- || lang_hooks.decls.omp_privatize_by_reference (decl));
+ /* References might be private, but might be shared too,
+ when checking for copyprivate, assume they might be
+ private, otherwise assume they might be shared. */
+ || (!copyprivate
+ && lang_hooks.decls.omp_privatize_by_reference (decl)));
n = splay_tree_lookup (ctx->variables, (splay_tree_key) decl);
if (n != NULL)
@@ -6276,12 +6281,36 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
remove = true;
break;
}
+ if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_COPYPRIVATE
+ && !remove
+ && !omp_check_private (ctx, decl, true))
+ {
+ remove = true;
+ if (is_global_var (decl))
+ {
+ if (DECL_THREAD_LOCAL_P (decl))
+ remove = false;
+ else if (DECL_HAS_VALUE_EXPR_P (decl))
+ {
+ tree value = get_base_address (DECL_VALUE_EXPR (decl));
+
+ if (value
+ && DECL_P (value)
+ && DECL_THREAD_LOCAL_P (value))
+ remove = false;
+ }
+ }
+ if (remove)
+ error_at (OMP_CLAUSE_LOCATION (c),
+ "copyprivate variable %qE is not threadprivate"
+ " or private in outer context", DECL_NAME (decl));
+ }
do_notice:
if (outer_ctx)
omp_notice_variable (outer_ctx, decl, true);
if (check_non_private
&& region_type == ORT_WORKSHARE
- && omp_check_private (ctx, decl))
+ && omp_check_private (ctx, decl, false))
{
error ("%s variable %qE is private in outer context",
check_non_private, DECL_NAME (decl));
@@ -8270,6 +8299,21 @@ gimplify_body (tree fndecl, bool do_parms)
if (nonlocal_vlas)
{
+ if (nonlocal_vla_vars)
+ {
+ /* tree-nested.c may later on call declare_vars (..., true);
+ which relies on BLOCK_VARS chain to be the tail of the
+ gimple_bind_vars chain. Ensure we don't violate that
+ assumption. */
+ if (gimple_bind_block (outer_bind)
+ == DECL_INITIAL (current_function_decl))
+ declare_vars (nonlocal_vla_vars, outer_bind, true);
+ else
+ BLOCK_VARS (DECL_INITIAL (current_function_decl))
+ = chainon (BLOCK_VARS (DECL_INITIAL (current_function_decl)),
+ nonlocal_vla_vars);
+ nonlocal_vla_vars = NULL_TREE;
+ }
pointer_set_destroy (nonlocal_vlas);
nonlocal_vlas = NULL;
}
@@ -8597,6 +8641,8 @@ gimple_regimplify_operands (gimple stmt, gimple_stmt_iterator *gsi_p)
gsi_insert_after (gsi_p, post_stmt, GSI_NEW_STMT);
pop_gimplify_context (NULL);
+
+ update_stmt (stmt);
}
/* Expand EXPR to list of gimple statements STMTS. GIMPLE_TEST_F specifies
diff --git a/gcc-4.8/gcc/go/ChangeLog b/gcc-4.8/gcc/go/ChangeLog
index 6c1504db5..e5860d7ff 100644
--- a/gcc-4.8/gcc/go/ChangeLog
+++ b/gcc-4.8/gcc/go/ChangeLog
@@ -1,3 +1,26 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2013-12-11 Ian Lance Taylor <iant@google.com>
+
+ * go-lang.c (go_langhook_post_options): Disable sibling calls by
+ default.
+
+2013-10-16 Ian Lance Taylor <iant@google.com>
+
+ Bring in from mainline:
+
+ 2013-10-11 Chris Manghane <cmang@google.com>
+ * go-gcc.cc (Gcc_backend::function_code_expression): New
+ function.
+
+ 2013-10-10 Chris Manghane <cmang@google.com>
+ * go-gcc.cc (Backend::error_function): New function.
+ (Backend::function): New function.
+ (Backend::make_function): New function.
+ (function_to_tree): New function.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/gcc/go/go-gcc.cc b/gcc-4.8/gcc/go/go-gcc.cc
index fcfd41b34..81e9ad186 100644
--- a/gcc-4.8/gcc/go/go-gcc.cc
+++ b/gcc-4.8/gcc/go/go-gcc.cc
@@ -232,6 +232,9 @@ class Gcc_backend : public Backend
Bexpression*
convert_expression(Btype* type, Bexpression* expr, Location);
+ Bexpression*
+ function_code_expression(Bfunction*, Location);
+
// Statements.
Bstatement*
@@ -334,6 +337,17 @@ class Gcc_backend : public Backend
Bexpression*
label_address(Blabel*, Location);
+ // Functions.
+
+ Bfunction*
+ error_function()
+ { return this->make_function(error_mark_node); }
+
+ Bfunction*
+ function(Btype* fntype, const std::string& name, const std::string& asm_name,
+ bool is_visible, bool is_declaration, bool is_inlinable,
+ bool disable_split_stack, bool in_unique_section, Location);
+
private:
// Make a Bexpression from a tree.
Bexpression*
@@ -350,6 +364,10 @@ class Gcc_backend : public Backend
make_type(tree t)
{ return new Btype(t); }
+ Bfunction*
+ make_function(tree t)
+ { return new Bfunction(t); }
+
Btype*
fill_in_struct(Btype*, const std::vector<Btyped_identifier>&);
@@ -966,6 +984,19 @@ Gcc_backend::convert_expression(Btype* type, Bexpression* expr, Location)
return tree_to_expr(ret);
}
+// Get the address of a function.
+
+Bexpression*
+Gcc_backend::function_code_expression(Bfunction* bfunc, Location location)
+{
+ tree func = bfunc->get_tree();
+ if (func == error_mark_node)
+ return this->error_expression();
+
+ tree ret = build_fold_addr_expr_loc(location.gcc_location(), func);
+ return this->make_expression(ret);
+}
+
// An expression as a statement.
Bstatement*
@@ -1724,6 +1755,56 @@ Gcc_backend::label_address(Blabel* label, Location location)
return this->make_expression(ret);
}
+// Declare or define a new function.
+
+Bfunction*
+Gcc_backend::function(Btype* fntype, const std::string& name,
+ const std::string& asm_name, bool is_visible,
+ bool is_declaration, bool is_inlinable,
+ bool disable_split_stack, bool in_unique_section,
+ Location location)
+{
+ tree functype = fntype->get_tree();
+ if (functype != error_mark_node)
+ {
+ gcc_assert(FUNCTION_POINTER_TYPE_P(functype));
+ functype = TREE_TYPE(functype);
+ }
+ tree id = get_identifier_from_string(name);
+ if (functype == error_mark_node || id == error_mark_node)
+ return this->error_function();
+
+ tree decl = build_decl(location.gcc_location(), FUNCTION_DECL, id, functype);
+ if (!asm_name.empty())
+ SET_DECL_ASSEMBLER_NAME(decl, get_identifier_from_string(asm_name));
+ if (is_visible)
+ TREE_PUBLIC(decl) = 1;
+ if (is_declaration)
+ DECL_EXTERNAL(decl) = 1;
+ else
+ {
+ tree restype = TREE_TYPE(functype);
+ tree resdecl =
+ build_decl(location.gcc_location(), RESULT_DECL, NULL_TREE, restype);
+ DECL_ARTIFICIAL(resdecl) = 1;
+ DECL_IGNORED_P(resdecl) = 1;
+ DECL_CONTEXT(resdecl) = decl;
+ DECL_RESULT(decl) = resdecl;
+ }
+ if (!is_inlinable)
+ DECL_UNINLINABLE(decl) = 1;
+ if (disable_split_stack)
+ {
+ tree attr = get_identifier("__no_split_stack__");
+ DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
+ }
+ if (in_unique_section)
+ resolve_unique_section(decl, 0, 1);
+
+ go_preserve_from_gc(decl);
+ return new Bfunction(decl);
+}
+
// The single backend.
static Gcc_backend gcc_backend;
@@ -1799,3 +1880,9 @@ var_to_tree(Bvariable* bv)
{
return bv->get_tree();
}
+
+tree
+function_to_tree(Bfunction* bf)
+{
+ return bf->get_tree();
+}
diff --git a/gcc-4.8/gcc/go/go-lang.c b/gcc-4.8/gcc/go/go-lang.c
index 659cd8ef7..7e92deb92 100644
--- a/gcc-4.8/gcc/go/go-lang.c
+++ b/gcc-4.8/gcc/go/go-lang.c
@@ -269,6 +269,10 @@ go_langhook_post_options (const char **pfilename ATTRIBUTE_UNUSED)
if (flag_excess_precision_cmdline == EXCESS_PRECISION_DEFAULT)
flag_excess_precision_cmdline = EXCESS_PRECISION_STANDARD;
+ /* Tail call optimizations can confuse uses of runtime.Callers. */
+ if (!global_options_set.x_flag_optimize_sibling_calls)
+ global_options.x_flag_optimize_sibling_calls = 0;
+
/* Returning false means that the backend should be used. */
return false;
}
diff --git a/gcc-4.8/gcc/go/gofrontend/backend.h b/gcc-4.8/gcc/go/gofrontend/backend.h
index fa3e3cc68..ca997f08a 100644
--- a/gcc-4.8/gcc/go/gofrontend/backend.h
+++ b/gcc-4.8/gcc/go/gofrontend/backend.h
@@ -23,7 +23,7 @@ class Bexpression;
// The backend representation of a statement.
class Bstatement;
-// The backend representation of a function definition.
+// The backend representation of a function definition or declaration.
class Bfunction;
// The backend representation of a block.
@@ -266,6 +266,11 @@ class Backend
virtual Bexpression*
convert_expression(Btype* type, Bexpression* expr, Location) = 0;
+ // Create an expression for the address of a function. This is used to
+ // get the address of the code for a function.
+ virtual Bexpression*
+ function_code_expression(Bfunction*, Location) = 0;
+
// Statements.
// Create an error statement. This is used for cases which should
@@ -498,6 +503,32 @@ class Backend
// recover.
virtual Bexpression*
label_address(Blabel*, Location) = 0;
+
+ // Functions.
+
+ // Create an error function. This is used for cases which should
+ // not occur in a correct program, in order to keep the compilation
+ // going without crashing.
+ virtual Bfunction*
+ error_function() = 0;
+
+ // Declare or define a function of FNTYPE.
+ // NAME is the Go name of the function. ASM_NAME, if not the empty string, is
+ // the name that should be used in the symbol table; this will be non-empty if
+ // a magic extern comment is used.
+ // IS_VISIBLE is true if this function should be visible outside of the
+ // current compilation unit. IS_DECLARATION is true if this is a function
+ // declaration rather than a definition; the function definition will be in
+ // another compilation unit.
+ // IS_INLINABLE is true if the function can be inlined.
+ // DISABLE_SPLIT_STACK is true if this function may not split the stack; this
+ // is used for the implementation of recover.
+ // IN_UNIQUE_SECTION is true if this function should be put into a unique
+ // location if possible; this is used for field tracking.
+ virtual Bfunction*
+ function(Btype* fntype, const std::string& name, const std::string& asm_name,
+ bool is_visible, bool is_declaration, bool is_inlinable,
+ bool disable_split_stack, bool in_unique_section, Location) = 0;
};
// The backend interface has to define this function.
@@ -517,5 +548,6 @@ extern tree expr_to_tree(Bexpression*);
extern tree stat_to_tree(Bstatement*);
extern tree block_to_tree(Bblock*);
extern tree var_to_tree(Bvariable*);
+extern tree function_to_tree(Bfunction*);
#endif // !defined(GO_BACKEND_H)
diff --git a/gcc-4.8/gcc/go/gofrontend/expressions.cc b/gcc-4.8/gcc/go/gofrontend/expressions.cc
index d5e3a6762..3e54084ff 100644
--- a/gcc-4.8/gcc/go/gofrontend/expressions.cc
+++ b/gcc-4.8/gcc/go/gofrontend/expressions.cc
@@ -1219,7 +1219,7 @@ Func_expression::do_type()
// Get the tree for the code of a function expression.
-tree
+Bexpression*
Func_expression::get_code_pointer(Gogo* gogo, Named_object* no, Location loc)
{
Function_type* fntype;
@@ -1237,25 +1237,18 @@ Func_expression::get_code_pointer(Gogo* gogo, Named_object* no, Location loc)
error_at(loc,
"invalid use of special builtin function %qs; must be called",
no->message_name().c_str());
- return error_mark_node;
+ return gogo->backend()->error_expression();
}
- tree id = no->get_id(gogo);
- if (id == error_mark_node)
- return error_mark_node;
-
- tree fndecl;
+ Bfunction* fndecl;
if (no->is_function())
- fndecl = no->func_value()->get_or_make_decl(gogo, no, id);
+ fndecl = no->func_value()->get_or_make_decl(gogo, no);
else if (no->is_function_declaration())
- fndecl = no->func_declaration_value()->get_or_make_decl(gogo, no, id);
+ fndecl = no->func_declaration_value()->get_or_make_decl(gogo, no);
else
go_unreachable();
- if (fndecl == error_mark_node)
- return error_mark_node;
-
- return build_fold_addr_expr_loc(loc.gcc_location(), fndecl);
+ return gogo->backend()->function_code_expression(fndecl, loc);
}
// Get the tree for a function expression. This is used when we take
@@ -1492,8 +1485,10 @@ class Func_code_reference_expression : public Expression
tree
Func_code_reference_expression::do_get_tree(Translate_context* context)
{
- return Func_expression::get_code_pointer(context->gogo(), this->function_,
+ Bexpression* ret =
+ Func_expression::get_code_pointer(context->gogo(), this->function_,
this->location());
+ return expr_to_tree(ret);
}
// Make a reference to the code of a function.
@@ -3055,8 +3050,7 @@ class Type_conversion_expression : public Expression
do_lower(Gogo*, Named_object*, Statement_inserter*, int);
bool
- do_is_constant() const
- { return this->expr_->is_constant(); }
+ do_is_constant() const;
bool
do_numeric_constant_value(Numeric_constant*) const;
@@ -3198,6 +3192,27 @@ Type_conversion_expression::do_lower(Gogo*, Named_object*,
return this;
}
+// Return whether a type conversion is a constant.
+
+bool
+Type_conversion_expression::do_is_constant() const
+{
+ if (!this->expr_->is_constant())
+ return false;
+
+ // A conversion to a type that may not be used as a constant is not
+ // a constant. For example, []byte(nil).
+ Type* type = this->type_;
+ if (type->integer_type() == NULL
+ && type->float_type() == NULL
+ && type->complex_type() == NULL
+ && !type->is_boolean_type()
+ && !type->is_string_type())
+ return false;
+
+ return true;
+}
+
// Return the constant numeric value if there is one.
bool
@@ -5586,6 +5601,15 @@ Binary_expression::do_determine_type(const Type_context* context)
subcontext.type = NULL;
}
+ if (this->op_ == OPERATOR_ANDAND || this->op_ == OPERATOR_OROR)
+ {
+ // For a logical operation, the context does not determine the
+ // types of the operands. The operands must be some boolean
+ // type but if the context has a boolean type they do not
+ // inherit it. See http://golang.org/issue/3924.
+ subcontext.type = NULL;
+ }
+
// Set the context for the left hand operand.
if (is_shift_op)
{
@@ -5967,6 +5991,43 @@ Binary_expression::do_get_tree(Translate_context* context)
right);
}
+ // For complex division Go wants slightly different results than the
+ // GCC library provides, so we have our own runtime routine.
+ if (this->op_ == OPERATOR_DIV && this->left_->type()->complex_type() != NULL)
+ {
+ const char *name;
+ tree *pdecl;
+ Type* ctype;
+ static tree complex64_div_decl;
+ static tree complex128_div_decl;
+ switch (this->left_->type()->complex_type()->bits())
+ {
+ case 64:
+ name = "__go_complex64_div";
+ pdecl = &complex64_div_decl;
+ ctype = Type::lookup_complex_type("complex64");
+ break;
+ case 128:
+ name = "__go_complex128_div";
+ pdecl = &complex128_div_decl;
+ ctype = Type::lookup_complex_type("complex128");
+ break;
+ default:
+ go_unreachable();
+ }
+ Btype* cbtype = ctype->get_backend(gogo);
+ tree ctype_tree = type_to_tree(cbtype);
+ return Gogo::call_builtin(pdecl,
+ this->location(),
+ name,
+ 2,
+ ctype_tree,
+ ctype_tree,
+ fold_convert_loc(gccloc, ctype_tree, left),
+ type,
+ fold_convert_loc(gccloc, ctype_tree, right));
+ }
+
tree compute_type = excess_precision_type(type);
if (compute_type != NULL_TREE)
{
@@ -7191,6 +7252,15 @@ Builtin_call_expression::do_lower(Gogo* gogo, Named_object* function,
if (this->code_ == BUILTIN_OFFSETOF)
{
Expression* arg = this->one_arg();
+
+ if (arg->bound_method_expression() != NULL
+ || arg->interface_field_reference_expression() != NULL)
+ {
+ this->report_error(_("invalid use of method value as argument "
+ "of Offsetof"));
+ return this;
+ }
+
Field_reference_expression* farg = arg->field_reference_expression();
while (farg != NULL)
{
@@ -7200,7 +7270,8 @@ Builtin_call_expression::do_lower(Gogo* gogo, Named_object* function,
// it must not be reached through pointer indirections.
if (farg->expr()->deref() != farg->expr())
{
- this->report_error(_("argument of Offsetof implies indirection of an embedded field"));
+ this->report_error(_("argument of Offsetof implies "
+ "indirection of an embedded field"));
return this;
}
// Go up until we reach the original base.
@@ -7476,7 +7547,7 @@ Builtin_call_expression::check_int_value(Expression* e, bool is_length)
switch (nc.to_unsigned_long(&v))
{
case Numeric_constant::NC_UL_VALID:
- return true;
+ break;
case Numeric_constant::NC_UL_NOTINT:
error_at(e->location(), "non-integer %s argument to make",
is_length ? "len" : "cap");
@@ -7488,8 +7559,23 @@ Builtin_call_expression::check_int_value(Expression* e, bool is_length)
case Numeric_constant::NC_UL_BIG:
// We don't want to give a compile-time error for a 64-bit
// value on a 32-bit target.
- return true;
+ break;
}
+
+ mpz_t val;
+ if (!nc.to_int(&val))
+ go_unreachable();
+ int bits = mpz_sizeinbase(val, 2);
+ mpz_clear(val);
+ Type* int_type = Type::lookup_integer_type("int");
+ if (bits >= int_type->integer_type()->bits())
+ {
+ error_at(e->location(), "%s argument too large for make",
+ is_length ? "len" : "cap");
+ return false;
+ }
+
+ return true;
}
if (e->type()->integer_type() != NULL)
@@ -7595,6 +7681,8 @@ Find_call_expression::expression(Expression** pexpr)
bool
Builtin_call_expression::do_is_constant() const
{
+ if (this->is_error_expression())
+ return true;
switch (this->code_)
{
case BUILTIN_LEN:
@@ -9744,14 +9832,8 @@ Call_expression::do_get_tree(Translate_context* context)
}
tree fntype_tree = type_to_tree(fntype->get_backend(gogo));
- if (fntype_tree == error_mark_node)
- return error_mark_node;
- go_assert(POINTER_TYPE_P(fntype_tree));
- if (TREE_TYPE(fntype_tree) == error_mark_node)
- return error_mark_node;
- go_assert(TREE_CODE(TREE_TYPE(fntype_tree)) == RECORD_TYPE);
- tree fnfield_type = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(fntype_tree)));
- if (fnfield_type == error_mark_node)
+ tree fnfield_type = type_to_tree(fntype->get_backend_fntype(gogo));
+ if (fntype_tree == error_mark_node || fnfield_type == error_mark_node)
return error_mark_node;
go_assert(FUNCTION_POINTER_TYPE_P(fnfield_type));
tree rettype = TREE_TYPE(TREE_TYPE(fnfield_type));
@@ -9763,7 +9845,7 @@ Call_expression::do_get_tree(Translate_context* context)
if (func != NULL)
{
Named_object* no = func->named_object();
- fn = Func_expression::get_code_pointer(gogo, no, location);
+ fn = expr_to_tree(Func_expression::get_code_pointer(gogo, no, location));
if (!has_closure)
closure_tree = NULL_TREE;
else
@@ -10817,11 +10899,20 @@ String_index_expression::do_determine_type(const Type_context*)
void
String_index_expression::do_check_types(Gogo*)
{
- if (this->start_->type()->integer_type() == NULL)
+ Numeric_constant nc;
+ unsigned long v;
+ if (this->start_->type()->integer_type() == NULL
+ && !this->start_->type()->is_error()
+ && (!this->start_->numeric_constant_value(&nc)
+ || nc.to_unsigned_long(&v) == Numeric_constant::NC_UL_NOTINT))
this->report_error(_("index must be integer"));
if (this->end_ != NULL
&& this->end_->type()->integer_type() == NULL
- && !this->end_->is_nil_expression())
+ && !this->end_->type()->is_error()
+ && !this->end_->is_nil_expression()
+ && !this->end_->is_error_expression()
+ && (!this->end_->numeric_constant_value(&nc)
+ || nc.to_unsigned_long(&v) == Numeric_constant::NC_UL_NOTINT))
this->report_error(_("slice end must be integer"));
std::string sval;
diff --git a/gcc-4.8/gcc/go/gofrontend/expressions.h b/gcc-4.8/gcc/go/gofrontend/expressions.h
index bc7a25f76..35bfcfe8e 100644
--- a/gcc-4.8/gcc/go/gofrontend/expressions.h
+++ b/gcc-4.8/gcc/go/gofrontend/expressions.h
@@ -1514,8 +1514,8 @@ class Func_expression : public Expression
closure()
{ return this->closure_; }
- // Return a tree for the code for a function.
- static tree
+ // Return a backend expression for the code of a function.
+ static Bexpression*
get_code_pointer(Gogo*, Named_object* function, Location loc);
protected:
diff --git a/gcc-4.8/gcc/go/gofrontend/gogo-tree.cc b/gcc-4.8/gcc/go/gofrontend/gogo-tree.cc
index a95f29015..ef6c842c0 100644
--- a/gcc-4.8/gcc/go/gofrontend/gogo-tree.cc
+++ b/gcc-4.8/gcc/go/gofrontend/gogo-tree.cc
@@ -985,74 +985,6 @@ Gogo::write_globals()
delete[] vec;
}
-// Get a tree for the identifier for a named object.
-
-tree
-Named_object::get_id(Gogo* gogo)
-{
- go_assert(!this->is_variable() && !this->is_result_variable());
- std::string decl_name;
- if (this->is_function_declaration()
- && !this->func_declaration_value()->asm_name().empty())
- decl_name = this->func_declaration_value()->asm_name();
- else if (this->is_type()
- && Linemap::is_predeclared_location(this->type_value()->location()))
- {
- // We don't need the package name for builtin types.
- decl_name = Gogo::unpack_hidden_name(this->name_);
- }
- else
- {
- std::string package_name;
- if (this->package_ == NULL)
- package_name = gogo->package_name();
- else
- package_name = this->package_->package_name();
-
- // Note that this will be misleading if this is an unexported
- // method generated for an embedded imported type. In that case
- // the unexported method should have the package name of the
- // package from which it is imported, but we are going to give
- // it our package name. Fixing this would require knowing the
- // package name, but we only know the package path. It might be
- // better to use package paths here anyhow. This doesn't affect
- // the assembler code, because we always set that name in
- // Function::get_or_make_decl anyhow. FIXME.
-
- decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
-
- Function_type* fntype;
- if (this->is_function())
- fntype = this->func_value()->type();
- else if (this->is_function_declaration())
- fntype = this->func_declaration_value()->type();
- else
- fntype = NULL;
- if (fntype != NULL && fntype->is_method())
- {
- decl_name.push_back('.');
- decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
- }
- }
- if (this->is_type())
- {
- unsigned int index;
- const Named_object* in_function = this->type_value()->in_function(&index);
- if (in_function != NULL)
- {
- decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
- if (index > 0)
- {
- char buf[30];
- snprintf(buf, sizeof buf, "%u", index);
- decl_name += '$';
- decl_name += buf;
- }
- }
- }
- return get_identifier_from_string(decl_name);
-}
-
// Get a tree for a named object.
tree
@@ -1067,11 +999,6 @@ Named_object::get_tree(Gogo* gogo, Named_object* function)
return error_mark_node;
}
- tree name;
- if (this->classification_ == NAMED_OBJECT_TYPE)
- name = NULL_TREE;
- else
- name = this->get_id(gogo);
tree decl;
switch (this->classification_)
{
@@ -1099,6 +1026,7 @@ Named_object::get_tree(Gogo* gogo, Named_object* function)
decl = error_mark_node;
else if (INTEGRAL_TYPE_P(TREE_TYPE(expr_tree)))
{
+ tree name = get_identifier_from_string(this->get_id(gogo));
decl = build_decl(named_constant->location().gcc_location(),
CONST_DECL, name, TREE_TYPE(expr_tree));
DECL_INITIAL(decl) = expr_tree;
@@ -1161,7 +1089,7 @@ Named_object::get_tree(Gogo* gogo, Named_object* function)
case NAMED_OBJECT_FUNC:
{
Function* func = this->u_.func_value;
- decl = func->get_or_make_decl(gogo, this, name);
+ decl = function_to_tree(func->get_or_make_decl(gogo, this));
if (decl != error_mark_node)
{
if (func->block() != NULL)
@@ -1286,123 +1214,12 @@ Variable::get_init_block(Gogo* gogo, Named_object* function, tree var_decl)
return block_tree;
}
-// Get a tree for a function decl.
+// Get the backend representation.
-tree
-Function::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
+Bfunction*
+Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no)
{
- if (this->fndecl_ == NULL_TREE)
- {
- tree functype = type_to_tree(this->type_->get_backend(gogo));
-
- if (functype != error_mark_node)
- {
- // The type of a function comes back as a pointer to a
- // struct whose first field is the function, but we want the
- // real function type for a function declaration.
- go_assert(POINTER_TYPE_P(functype)
- && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
- functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
- go_assert(FUNCTION_POINTER_TYPE_P(functype));
- functype = TREE_TYPE(functype);
- }
-
- if (functype == error_mark_node)
- this->fndecl_ = error_mark_node;
- else
- {
- tree decl = build_decl(this->location().gcc_location(), FUNCTION_DECL,
- id, functype);
-
- this->fndecl_ = decl;
-
- if (no->package() != NULL)
- ;
- else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
- ;
- else if (Gogo::unpack_hidden_name(no->name()) == "init"
- && !this->type_->is_method())
- ;
- else if (Gogo::unpack_hidden_name(no->name()) == "main"
- && gogo->is_main_package())
- TREE_PUBLIC(decl) = 1;
- // Methods have to be public even if they are hidden because
- // they can be pulled into type descriptors when using
- // anonymous fields.
- else if (!Gogo::is_hidden_name(no->name())
- || this->type_->is_method())
- {
- TREE_PUBLIC(decl) = 1;
- std::string pkgpath = gogo->pkgpath_symbol();
- if (this->type_->is_method()
- && Gogo::is_hidden_name(no->name())
- && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())
- {
- // This is a method we created for an unexported
- // method of an imported embedded type. We need to
- // use the pkgpath of the imported package to avoid
- // a possible name collision. See bug478 for a test
- // case.
- pkgpath = Gogo::hidden_name_pkgpath(no->name());
- pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
- }
-
- std::string asm_name = pkgpath;
- asm_name.append(1, '.');
- asm_name.append(Gogo::unpack_hidden_name(no->name()));
- if (this->type_->is_method())
- {
- asm_name.append(1, '.');
- Type* rtype = this->type_->receiver()->type();
- asm_name.append(rtype->mangled_name(gogo));
- }
- SET_DECL_ASSEMBLER_NAME(decl,
- get_identifier_from_string(asm_name));
- }
-
- // Why do we have to do this in the frontend?
- tree restype = TREE_TYPE(functype);
- tree resdecl =
- build_decl(this->location().gcc_location(), RESULT_DECL, NULL_TREE,
- restype);
- DECL_ARTIFICIAL(resdecl) = 1;
- DECL_IGNORED_P(resdecl) = 1;
- DECL_CONTEXT(resdecl) = decl;
- DECL_RESULT(decl) = resdecl;
-
- // If a function calls the predeclared recover function, we
- // can't inline it, because recover behaves differently in a
- // function passed directly to defer. If this is a recover
- // thunk that we built to test whether a function can be
- // recovered, we can't inline it, because that will mess up
- // our return address comparison.
- if (this->calls_recover_ || this->is_recover_thunk_)
- DECL_UNINLINABLE(decl) = 1;
-
- // If this is a thunk created to call a function which calls
- // the predeclared recover function, we need to disable
- // stack splitting for the thunk.
- if (this->is_recover_thunk_)
- {
- tree attr = get_identifier("__no_split_stack__");
- DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
- }
-
- if (this->in_unique_section_)
- resolve_unique_section (decl, 0, 1);
-
- go_preserve_from_gc(decl);
- }
- }
- return this->fndecl_;
-}
-
-// Get a tree for a function declaration.
-
-tree
-Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
-{
- if (this->fndecl_ == NULL_TREE)
+ if (this->fndecl_ == NULL)
{
// Let Go code use an asm declaration to pick up a builtin
// function.
@@ -1412,38 +1229,15 @@ Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
builtin_functions.find(this->asm_name_);
if (p != builtin_functions.end())
{
- this->fndecl_ = p->second;
+ this->fndecl_ = tree_to_function(p->second);
return this->fndecl_;
}
}
- tree functype = type_to_tree(this->fntype_->get_backend(gogo));
-
- if (functype != error_mark_node)
- {
- // The type of a function comes back as a pointer to a
- // struct whose first field is the function, but we want the
- // real function type for a function declaration.
- go_assert(POINTER_TYPE_P(functype)
- && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
- functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
- go_assert(FUNCTION_POINTER_TYPE_P(functype));
- functype = TREE_TYPE(functype);
- }
-
- tree decl;
- if (functype == error_mark_node)
- decl = error_mark_node;
- else
- {
- decl = build_decl(this->location().gcc_location(), FUNCTION_DECL, id,
- functype);
- TREE_PUBLIC(decl) = 1;
- DECL_EXTERNAL(decl) = 1;
-
+ std::string asm_name;
if (this->asm_name_.empty())
{
- std::string asm_name = (no->package() == NULL
+ asm_name = (no->package() == NULL
? gogo->pkgpath_symbol()
: no->package()->pkgpath_symbol());
asm_name.append(1, '.');
@@ -1454,16 +1248,27 @@ Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
Type* rtype = this->fntype_->receiver()->type();
asm_name.append(rtype->mangled_name(gogo));
}
- SET_DECL_ASSEMBLER_NAME(decl,
- get_identifier_from_string(asm_name));
}
+
+ Btype* functype = this->fntype_->get_backend_fntype(gogo);
+ this->fndecl_ =
+ gogo->backend()->function(functype, no->get_id(gogo), asm_name,
+ true, true, true, false, false,
+ this->location());
}
- this->fndecl_ = decl;
- go_preserve_from_gc(decl);
- }
+
return this->fndecl_;
}
+// Return the function's decl after it has been built.
+
+tree
+Function::get_decl() const
+{
+ go_assert(this->fndecl_ != NULL);
+ return function_to_tree(this->fndecl_);
+}
+
// We always pass the receiver to a method as a pointer. If the
// receiver is actually declared as a non-pointer type, then we copy
// the value into a local variable, so that it has the right type. In
@@ -1558,7 +1363,7 @@ Function::copy_parm_to_heap(Gogo* gogo, Named_object* no, tree var_decl)
void
Function::build_tree(Gogo* gogo, Named_object* named_function)
{
- tree fndecl = this->fndecl_;
+ tree fndecl = this->get_decl();
go_assert(fndecl != NULL_TREE);
tree params = NULL_TREE;
@@ -1796,7 +1601,7 @@ Function::build_defer_wrapper(Gogo* gogo, Named_object* named_function,
set = NULL_TREE;
else
set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
- DECL_RESULT(this->fndecl_), retval);
+ DECL_RESULT(this->get_decl()), retval);
tree ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
void_type_node, set);
append_to_statement_list(ret_stmt, &stmt_list);
@@ -1851,7 +1656,7 @@ Function::build_defer_wrapper(Gogo* gogo, Named_object* named_function,
retval = this->return_value(gogo, named_function, end_loc,
&stmt_list);
set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
- DECL_RESULT(this->fndecl_), retval);
+ DECL_RESULT(this->get_decl()), retval);
ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
void_type_node, set);
@@ -1869,7 +1674,7 @@ Function::build_defer_wrapper(Gogo* gogo, Named_object* named_function,
*fini = stmt_list;
}
-// Return the value to assign to DECL_RESULT(this->fndecl_). This may
+// Return the value to assign to DECL_RESULT(this->get_decl()). This may
// also add statements to STMT_LIST, which need to be executed before
// the assignment. This is used for a return statement with no
// explicit values.
@@ -1902,7 +1707,7 @@ Function::return_value(Gogo* gogo, Named_object* named_function,
}
else
{
- tree rettype = TREE_TYPE(DECL_RESULT(this->fndecl_));
+ tree rettype = TREE_TYPE(DECL_RESULT(this->get_decl()));
retval = create_tmp_var(rettype, "RESULT");
tree field = TYPE_FIELDS(rettype);
int index = 0;
@@ -2323,18 +2128,14 @@ Gogo::interface_method_table_for_type(const Interface_type* interface,
go_assert(m != NULL);
Named_object* no = m->named_object();
-
- tree fnid = no->get_id(this);
-
- tree fndecl;
+ Bfunction* bf;
if (no->is_function())
- fndecl = no->func_value()->get_or_make_decl(this, no, fnid);
+ bf = no->func_value()->get_or_make_decl(this, no);
else if (no->is_function_declaration())
- fndecl = no->func_declaration_value()->get_or_make_decl(this, no,
- fnid);
+ bf = no->func_declaration_value()->get_or_make_decl(this, no);
else
go_unreachable();
- fndecl = build_fold_addr_expr(fndecl);
+ tree fndecl = build_fold_addr_expr(function_to_tree(bf));
elt = pointers->quick_push(empty);
elt->index = size_int(i);
@@ -2353,10 +2154,11 @@ Gogo::interface_method_table_for_type(const Interface_type* interface,
TREE_CONSTANT(decl) = 1;
DECL_INITIAL(decl) = constructor;
- // If the interface type has hidden methods, then this is the only
- // definition of the table. Otherwise it is a comdat table which
- // may be defined in multiple packages.
- if (has_hidden_methods)
+ // If the interface type has hidden methods, and the table is for a
+ // named type, then this is the only definition of the table.
+ // Otherwise it is a comdat table which may be defined in multiple
+ // packages.
+ if (has_hidden_methods && type->named_type() != NULL)
TREE_PUBLIC(decl) = 1;
else
{
diff --git a/gcc-4.8/gcc/go/gofrontend/gogo.cc b/gcc-4.8/gcc/go/gofrontend/gogo.cc
index 9f918cb81..e16b0d3a5 100644
--- a/gcc-4.8/gcc/go/gofrontend/gogo.cc
+++ b/gcc-4.8/gcc/go/gofrontend/gogo.cc
@@ -2822,7 +2822,10 @@ Build_recover_thunks::function(Named_object* orig_no)
if (orig_fntype->is_varargs())
new_fntype->set_is_varargs();
- std::string name = orig_no->name() + "$recover";
+ std::string name = orig_no->name();
+ if (orig_fntype->is_method())
+ name += "$" + orig_fntype->receiver()->type()->mangled_name(gogo);
+ name += "$recover";
Named_object *new_no = gogo->start_function(name, new_fntype, false,
location);
Function *new_func = new_no->func_value();
@@ -2916,7 +2919,25 @@ Build_recover_thunks::function(Named_object* orig_no)
&& !orig_rec_no->var_value()->is_receiver());
orig_rec_no->var_value()->set_is_receiver();
- const std::string& new_receiver_name(orig_fntype->receiver()->name());
+ std::string new_receiver_name(orig_fntype->receiver()->name());
+ if (new_receiver_name.empty())
+ {
+ // Find the receiver. It was named "r.NNN" in
+ // Gogo::start_function.
+ for (Bindings::const_definitions_iterator p =
+ new_bindings->begin_definitions();
+ p != new_bindings->end_definitions();
+ ++p)
+ {
+ const std::string& pname((*p)->name());
+ if (pname[0] == 'r' && pname[1] == '.')
+ {
+ new_receiver_name = pname;
+ break;
+ }
+ }
+ go_assert(!new_receiver_name.empty());
+ }
Named_object* new_rec_no = new_bindings->lookup_local(new_receiver_name);
if (new_rec_no == NULL)
go_assert(saw_errors());
@@ -3320,7 +3341,8 @@ Function::Function(Function_type* type, Function* enclosing, Block* block,
closure_var_(NULL), block_(block), location_(location), labels_(),
local_type_count_(0), descriptor_(NULL), fndecl_(NULL), defer_stack_(NULL),
is_sink_(false), results_are_named_(false), nointerface_(false),
- calls_recover_(false), is_recover_thunk_(false), has_recover_thunk_(false),
+ is_unnamed_type_stub_method_(false), calls_recover_(false),
+ is_recover_thunk_(false), has_recover_thunk_(false),
in_unique_section_(false)
{
}
@@ -3819,6 +3841,81 @@ Function::import_func(Import* imp, std::string* pname,
*presults = results;
}
+// Get the backend representation.
+
+Bfunction*
+Function::get_or_make_decl(Gogo* gogo, Named_object* no)
+{
+ if (this->fndecl_ == NULL)
+ {
+ std::string asm_name;
+ bool is_visible = false;
+ if (no->package() != NULL)
+ ;
+ else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
+ ;
+ else if (Gogo::unpack_hidden_name(no->name()) == "init"
+ && !this->type_->is_method())
+ ;
+ else if (Gogo::unpack_hidden_name(no->name()) == "main"
+ && gogo->is_main_package())
+ is_visible = true;
+ // Methods have to be public even if they are hidden because
+ // they can be pulled into type descriptors when using
+ // anonymous fields.
+ else if (!Gogo::is_hidden_name(no->name())
+ || this->type_->is_method())
+ {
+ if (!this->is_unnamed_type_stub_method_)
+ is_visible = true;
+ std::string pkgpath = gogo->pkgpath_symbol();
+ if (this->type_->is_method()
+ && Gogo::is_hidden_name(no->name())
+ && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())
+ {
+ // This is a method we created for an unexported
+ // method of an imported embedded type. We need to
+ // use the pkgpath of the imported package to avoid
+ // a possible name collision. See bug478 for a test
+ // case.
+ pkgpath = Gogo::hidden_name_pkgpath(no->name());
+ pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
+ }
+
+ asm_name = pkgpath;
+ asm_name.append(1, '.');
+ asm_name.append(Gogo::unpack_hidden_name(no->name()));
+ if (this->type_->is_method())
+ {
+ asm_name.append(1, '.');
+ Type* rtype = this->type_->receiver()->type();
+ asm_name.append(rtype->mangled_name(gogo));
+ }
+ }
+
+ // If a function calls the predeclared recover function, we
+ // can't inline it, because recover behaves differently in a
+ // function passed directly to defer. If this is a recover
+ // thunk that we built to test whether a function can be
+ // recovered, we can't inline it, because that will mess up
+ // our return address comparison.
+ bool is_inlinable = !(this->calls_recover_ || this->is_recover_thunk_);
+
+ // If this is a thunk created to call a function which calls
+ // the predeclared recover function, we need to disable
+ // stack splitting for the thunk.
+ bool disable_split_stack = this->is_recover_thunk_;
+
+ Btype* functype = this->type_->get_backend_fntype(gogo);
+ this->fndecl_ =
+ gogo->backend()->function(functype, no->get_id(gogo), asm_name,
+ is_visible, false, is_inlinable,
+ disable_split_stack,
+ this->in_unique_section_, this->location());
+ }
+ return this->fndecl_;
+}
+
// Class Block.
Block::Block(Block* enclosing, Location location)
@@ -5110,6 +5207,75 @@ Named_object::get_backend_variable(Gogo* gogo, Named_object* function)
go_unreachable();
}
+
+// Return the external identifier for this object.
+
+std::string
+Named_object::get_id(Gogo* gogo)
+{
+ go_assert(!this->is_variable() && !this->is_result_variable());
+ std::string decl_name;
+ if (this->is_function_declaration()
+ && !this->func_declaration_value()->asm_name().empty())
+ decl_name = this->func_declaration_value()->asm_name();
+ else if (this->is_type()
+ && Linemap::is_predeclared_location(this->type_value()->location()))
+ {
+ // We don't need the package name for builtin types.
+ decl_name = Gogo::unpack_hidden_name(this->name_);
+ }
+ else
+ {
+ std::string package_name;
+ if (this->package_ == NULL)
+ package_name = gogo->package_name();
+ else
+ package_name = this->package_->package_name();
+
+ // Note that this will be misleading if this is an unexported
+ // method generated for an embedded imported type. In that case
+ // the unexported method should have the package name of the
+ // package from which it is imported, but we are going to give
+ // it our package name. Fixing this would require knowing the
+ // package name, but we only know the package path. It might be
+ // better to use package paths here anyhow. This doesn't affect
+ // the assembler code, because we always set that name in
+ // Function::get_or_make_decl anyhow. FIXME.
+
+ decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
+
+ Function_type* fntype;
+ if (this->is_function())
+ fntype = this->func_value()->type();
+ else if (this->is_function_declaration())
+ fntype = this->func_declaration_value()->type();
+ else
+ fntype = NULL;
+ if (fntype != NULL && fntype->is_method())
+ {
+ decl_name.push_back('.');
+ decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
+ }
+ }
+ if (this->is_type())
+ {
+ unsigned int index;
+ const Named_object* in_function = this->type_value()->in_function(&index);
+ if (in_function != NULL)
+ {
+ decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
+ if (index > 0)
+ {
+ char buf[30];
+ snprintf(buf, sizeof buf, "%u", index);
+ decl_name += '$';
+ decl_name += buf;
+ }
+ }
+ }
+ return decl_name;
+}
+
// Class Bindings.
Bindings::Bindings(Bindings* enclosing)
diff --git a/gcc-4.8/gcc/go/gofrontend/gogo.h b/gcc-4.8/gcc/go/gofrontend/gogo.h
index 23968d4a1..31b258d62 100644
--- a/gcc-4.8/gcc/go/gofrontend/gogo.h
+++ b/gcc-4.8/gcc/go/gofrontend/gogo.h
@@ -48,6 +48,7 @@ class Bstatement;
class Bblock;
class Bvariable;
class Blabel;
+class Bfunction;
// This file declares the basic classes used to hold the internal
// representation of Go which is built by the parser.
@@ -952,6 +953,15 @@ class Function
this->nointerface_ = true;
}
+ // Record that this function is a stub method created for an unnamed
+ // type.
+ void
+ set_is_unnamed_type_stub_method()
+ {
+ go_assert(this->is_method());
+ this->is_unnamed_type_stub_method_ = true;
+ }
+
// Add a new field to the closure variable.
void
add_closure_field(Named_object* var, Location loc)
@@ -1089,17 +1099,13 @@ class Function
this->descriptor_ = descriptor;
}
- // Return the function's decl given an identifier.
- tree
- get_or_make_decl(Gogo*, Named_object*, tree id);
+ // Return the backend representation.
+ Bfunction*
+ get_or_make_decl(Gogo*, Named_object*);
// Return the function's decl after it has been built.
tree
- get_decl() const
- {
- go_assert(this->fndecl_ != NULL);
- return this->fndecl_;
- }
+ get_decl() const;
// Set the function decl to hold a tree of the function code.
void
@@ -1170,7 +1176,7 @@ class Function
// The function descriptor, if any.
Expression* descriptor_;
// The function decl.
- tree fndecl_;
+ Bfunction* fndecl_;
// The defer stack variable. A pointer to this variable is used to
// distinguish the defer stack for one function from another. This
// is NULL unless we actually need a defer stack.
@@ -1181,6 +1187,9 @@ class Function
bool results_are_named_ : 1;
// True if this method should not be included in the type descriptor.
bool nointerface_ : 1;
+ // True if this function is a stub method created for an unnamed
+ // type.
+ bool is_unnamed_type_stub_method_ : 1;
// True if this function calls the predeclared recover function.
bool calls_recover_ : 1;
// True if this a thunk built for a function which calls recover.
@@ -1265,9 +1274,9 @@ class Function_declaration
has_descriptor() const
{ return this->descriptor_ != NULL; }
- // Return a decl for the function given an identifier.
- tree
- get_or_make_decl(Gogo*, Named_object*, tree id);
+ // Return a backend representation.
+ Bfunction*
+ get_or_make_decl(Gogo*, Named_object*);
// If there is a descriptor, build it into the backend
// representation.
@@ -1290,7 +1299,7 @@ class Function_declaration
// The function descriptor, if any.
Expression* descriptor_;
// The function decl if needed.
- tree fndecl_;
+ Bfunction* fndecl_;
};
// A variable.
@@ -2181,8 +2190,8 @@ class Named_object
Bvariable*
get_backend_variable(Gogo*, Named_object* function);
- // Return a tree for the external identifier for this object.
- tree
+ // Return the external identifier for this object.
+ std::string
get_id(Gogo*);
// Return a tree representing this object.
diff --git a/gcc-4.8/gcc/go/gofrontend/import.h b/gcc-4.8/gcc/go/gofrontend/import.h
index c6844cda8..9917937e4 100644
--- a/gcc-4.8/gcc/go/gofrontend/import.h
+++ b/gcc-4.8/gcc/go/gofrontend/import.h
@@ -149,6 +149,11 @@ class Import
location() const
{ return this->location_; }
+ // Return the package we are importing.
+ Package*
+ package() const
+ { return this->package_; }
+
// Return the next character.
int
peek_char()
diff --git a/gcc-4.8/gcc/go/gofrontend/lex.cc b/gcc-4.8/gcc/go/gofrontend/lex.cc
index 22a1f6e2a..d03c4bde2 100644
--- a/gcc-4.8/gcc/go/gofrontend/lex.cc
+++ b/gcc-4.8/gcc/go/gofrontend/lex.cc
@@ -873,7 +873,28 @@ Lex::gather_identifier()
&& (cc < 'a' || cc > 'z')
&& cc != '_'
&& (cc < '0' || cc > '9'))
+ {
+ // Check for an invalid character here, as we get better
+ // error behaviour if we swallow them as part of the
+ // identifier we are building.
+ if ((cc >= ' ' && cc < 0x7f)
+ || cc == '\t'
+ || cc == '\r'
+ || cc == '\n')
break;
+
+ this->lineoff_ = p - this->linebuf_;
+ error_at(this->location(),
+ "invalid character 0x%x in identifier",
+ cc);
+ if (!has_non_ascii_char)
+ {
+ buf.assign(pstart, p - pstart);
+ has_non_ascii_char = true;
+ }
+ if (!Lex::is_invalid_identifier(buf))
+ buf.append("$INVALID$");
+ }
++p;
if (is_first)
{
diff --git a/gcc-4.8/gcc/go/gofrontend/parse.cc b/gcc-4.8/gcc/go/gofrontend/parse.cc
index 498125bb2..9c7d8277e 100644
--- a/gcc-4.8/gcc/go/gofrontend/parse.cc
+++ b/gcc-4.8/gcc/go/gofrontend/parse.cc
@@ -744,6 +744,8 @@ Parse::signature(Typed_identifier* receiver, Location location)
return NULL;
Parse::Names names;
+ if (receiver != NULL)
+ names[receiver->name()] = receiver;
if (params != NULL)
this->check_signature_names(params, &names);
if (results != NULL)
diff --git a/gcc-4.8/gcc/go/gofrontend/runtime.cc b/gcc-4.8/gcc/go/gofrontend/runtime.cc
index ecc508d0d..3b0f18807 100644
--- a/gcc-4.8/gcc/go/gofrontend/runtime.cc
+++ b/gcc-4.8/gcc/go/gofrontend/runtime.cc
@@ -42,6 +42,8 @@ enum Runtime_function_type
RFT_RUNE,
// Go type float64, C type double.
RFT_FLOAT64,
+ // Go type complex64, C type __complex float.
+ RFT_COMPLEX64,
// Go type complex128, C type __complex double.
RFT_COMPLEX128,
// Go type string, C type struct __go_string.
@@ -126,6 +128,10 @@ runtime_function_type(Runtime_function_type bft)
t = Type::lookup_float_type("float64");
break;
+ case RFT_COMPLEX64:
+ t = Type::lookup_complex_type("complex64");
+ break;
+
case RFT_COMPLEX128:
t = Type::lookup_complex_type("complex128");
break;
@@ -216,6 +222,7 @@ convert_to_runtime_function_type(Runtime_function_type bft, Expression* e,
case RFT_UINTPTR:
case RFT_RUNE:
case RFT_FLOAT64:
+ case RFT_COMPLEX64:
case RFT_COMPLEX128:
case RFT_STRING:
case RFT_POINTER:
diff --git a/gcc-4.8/gcc/go/gofrontend/runtime.def b/gcc-4.8/gcc/go/gofrontend/runtime.def
index 0d3fd3c43..a303a5041 100644
--- a/gcc-4.8/gcc/go/gofrontend/runtime.def
+++ b/gcc-4.8/gcc/go/gofrontend/runtime.def
@@ -68,6 +68,12 @@ DEF_GO_RUNTIME(STRING_TO_INT_ARRAY, "__go_string_to_int_array",
P1(STRING), R1(SLICE))
+// Complex division.
+DEF_GO_RUNTIME(COMPLEX64_DIV, "__go_complex64_div",
+ P2(COMPLEX64, COMPLEX64), R1(COMPLEX64))
+DEF_GO_RUNTIME(COMPLEX128_DIV, "__go_complex128_div",
+ P2(COMPLEX128, COMPLEX128), R1(COMPLEX128))
+
// Make a slice.
DEF_GO_RUNTIME(MAKESLICE1, "__go_make_slice1", P2(TYPE, UINTPTR), R1(SLICE))
DEF_GO_RUNTIME(MAKESLICE2, "__go_make_slice2", P3(TYPE, UINTPTR, UINTPTR),
diff --git a/gcc-4.8/gcc/go/gofrontend/types.cc b/gcc-4.8/gcc/go/gofrontend/types.cc
index e1d68e743..9bc356a73 100644
--- a/gcc-4.8/gcc/go/gofrontend/types.cc
+++ b/gcc-4.8/gcc/go/gofrontend/types.cc
@@ -1834,7 +1834,9 @@ Type::write_specific_type_functions(Gogo* gogo, Named_type* name,
bloc);
gogo->start_block(bloc);
- if (this->struct_type() != NULL)
+ if (name != NULL && name->real_type()->named_type() != NULL)
+ this->write_named_hash(gogo, name, hash_fntype, equal_fntype);
+ else if (this->struct_type() != NULL)
this->struct_type()->write_hash_function(gogo, name, hash_fntype,
equal_fntype);
else if (this->array_type() != NULL)
@@ -1852,7 +1854,9 @@ Type::write_specific_type_functions(Gogo* gogo, Named_type* name,
false, bloc);
gogo->start_block(bloc);
- if (this->struct_type() != NULL)
+ if (name != NULL && name->real_type()->named_type() != NULL)
+ this->write_named_equal(gogo, name);
+ else if (this->struct_type() != NULL)
this->struct_type()->write_equal_function(gogo, name);
else if (this->array_type() != NULL)
this->array_type()->write_equal_function(gogo, name);
@@ -1865,6 +1869,100 @@ Type::write_specific_type_functions(Gogo* gogo, Named_type* name,
gogo->finish_function(bloc);
}
+// Write a hash function that simply calls the hash function for a
+// named type. This is used when one named type is defined as
+// another. This ensures that this case works when the other named
+// type is defined in another package and relies on calling hash
+// functions defined only in that package.
+
+void
+Type::write_named_hash(Gogo* gogo, Named_type* name,
+ Function_type* hash_fntype, Function_type* equal_fntype)
+{
+ Location bloc = Linemap::predeclared_location();
+
+ Named_type* base_type = name->real_type()->named_type();
+ go_assert(base_type != NULL);
+
+ // The pointer to the type we are going to hash. This is an
+ // unsafe.Pointer.
+ Named_object* key_arg = gogo->lookup("key", NULL);
+ go_assert(key_arg != NULL);
+
+ // The size of the type we are going to hash.
+ Named_object* keysz_arg = gogo->lookup("key_size", NULL);
+ go_assert(keysz_arg != NULL);
+
+ Named_object* hash_fn;
+ Named_object* equal_fn;
+ name->real_type()->type_functions(gogo, base_type, hash_fntype, equal_fntype,
+ &hash_fn, &equal_fn);
+
+ // Call the hash function for the base type.
+ Expression* key_ref = Expression::make_var_reference(key_arg, bloc);
+ Expression* keysz_ref = Expression::make_var_reference(keysz_arg, bloc);
+ Expression_list* args = new Expression_list();
+ args->push_back(key_ref);
+ args->push_back(keysz_ref);
+ Expression* func = Expression::make_func_reference(hash_fn, NULL, bloc);
+ Expression* call = Expression::make_call(func, args, false, bloc);
+
+ // Return the hash of the base type.
+ Expression_list* vals = new Expression_list();
+ vals->push_back(call);
+ Statement* s = Statement::make_return_statement(vals, bloc);
+ gogo->add_statement(s);
+}
+
+// Write an equality function that simply calls the equality function
+// for a named type. This is used when one named type is defined as
+// another. This ensures that this case works when the other named
+// type is defined in another package and relies on calling equality
+// functions defined only in that package.
+
+void
+Type::write_named_equal(Gogo* gogo, Named_type* name)
+{
+ Location bloc = Linemap::predeclared_location();
+
+ // The pointers to the types we are going to compare. These have
+ // type unsafe.Pointer.
+ Named_object* key1_arg = gogo->lookup("key1", NULL);
+ Named_object* key2_arg = gogo->lookup("key2", NULL);
+ go_assert(key1_arg != NULL && key2_arg != NULL);
+
+ Named_type* base_type = name->real_type()->named_type();
+ go_assert(base_type != NULL);
+
+ // Build temporaries with the base type.
+ Type* pt = Type::make_pointer_type(base_type);
+
+ Expression* ref = Expression::make_var_reference(key1_arg, bloc);
+ ref = Expression::make_cast(pt, ref, bloc);
+ Temporary_statement* p1 = Statement::make_temporary(pt, ref, bloc);
+ gogo->add_statement(p1);
+
+ ref = Expression::make_var_reference(key2_arg, bloc);
+ ref = Expression::make_cast(pt, ref, bloc);
+ Temporary_statement* p2 = Statement::make_temporary(pt, ref, bloc);
+ gogo->add_statement(p2);
+
+ // Compare the values for equality.
+ Expression* t1 = Expression::make_temporary_reference(p1, bloc);
+ t1 = Expression::make_unary(OPERATOR_MULT, t1, bloc);
+
+ Expression* t2 = Expression::make_temporary_reference(p2, bloc);
+ t2 = Expression::make_unary(OPERATOR_MULT, t2, bloc);
+
+ Expression* cond = Expression::make_binary(OPERATOR_EQEQ, t1, t2, bloc);
+
+ // Return the equality comparison.
+ Expression_list* vals = new Expression_list();
+ vals->push_back(cond);
+ Statement* s = Statement::make_return_statement(vals, bloc);
+ gogo->add_statement(s);
+}
+
// Return a composite literal for the type descriptor for a plain type
// of kind RUNTIME_TYPE_KIND named NAME.
@@ -2164,26 +2262,9 @@ Type::method_constructor(Gogo*, Type* method_type,
++p;
go_assert(p->is_field_name("typ"));
- if (!only_value_methods && m->is_value_method())
- {
- // This is a value method on a pointer type. Change the type of
- // the method to use a pointer receiver. The implementation
- // always uses a pointer receiver anyhow.
- Type* rtype = mtype->receiver()->type();
- Type* prtype = Type::make_pointer_type(rtype);
- Typed_identifier* receiver =
- new Typed_identifier(mtype->receiver()->name(), prtype,
- mtype->receiver()->location());
- mtype = Type::make_function_type(receiver,
- (mtype->parameters() == NULL
- ? NULL
- : mtype->parameters()->copy()),
- (mtype->results() == NULL
- ? NULL
- : mtype->results()->copy()),
- mtype->location());
- }
- vals->push_back(Expression::make_type_descriptor(mtype, bloc));
+ bool want_pointer_receiver = !only_value_methods && m->is_value_method();
+ nonmethod_type = mtype->copy_with_receiver_as_param(want_pointer_receiver);
+ vals->push_back(Expression::make_type_descriptor(nonmethod_type, bloc));
++p;
go_assert(p->is_field_name("tfn"));
@@ -3383,18 +3464,10 @@ Function_type::do_hash_for_method(Gogo* gogo) const
// Get the backend representation for a function type.
Btype*
-Function_type::do_get_backend(Gogo* gogo)
+Function_type::get_backend_fntype(Gogo* gogo)
{
- // When we do anything with a function value other than call it, it
- // is represented as a pointer to a struct whose first field is the
- // actual function. So that is what we return as the type of a Go
- // function.
-
- Location loc = this->location();
- Btype* struct_type =
- gogo->backend()->placeholder_struct_type("__go_descriptor", loc);
- Btype* ptr_struct_type = gogo->backend()->pointer_type(struct_type);
-
+ if (this->fnbtype_ == NULL)
+ {
Backend::Btyped_identifier breceiver;
if (this->receiver_ != NULL)
{
@@ -3414,8 +3487,8 @@ Function_type::do_get_backend(Gogo* gogo)
{
bparameters.resize(this->parameters_->size());
size_t i = 0;
- for (Typed_identifier_list::const_iterator p = this->parameters_->begin();
- p != this->parameters_->end();
+ for (Typed_identifier_list::const_iterator p =
+ this->parameters_->begin(); p != this->parameters_->end();
++p, ++i)
{
bparameters[i].name = Gogo::unpack_hidden_name(p->name());
@@ -3430,8 +3503,8 @@ Function_type::do_get_backend(Gogo* gogo)
{
bresults.resize(this->results_->size());
size_t i = 0;
- for (Typed_identifier_list::const_iterator p = this->results_->begin();
- p != this->results_->end();
+ for (Typed_identifier_list::const_iterator p =
+ this->results_->begin(); p != this->results_->end();
++p, ++i)
{
bresults[i].name = Gogo::unpack_hidden_name(p->name());
@@ -3441,11 +3514,33 @@ Function_type::do_get_backend(Gogo* gogo)
go_assert(i == bresults.size());
}
- Btype* fntype = gogo->backend()->function_type(breceiver, bparameters,
- bresults, loc);
+ this->fnbtype_ = gogo->backend()->function_type(breceiver, bparameters,
+ bresults,
+ this->location());
+
+ }
+
+ return this->fnbtype_;
+}
+
+// Get the backend representation for a Go function type.
+
+Btype*
+Function_type::do_get_backend(Gogo* gogo)
+{
+ // When we do anything with a function value other than call it, it
+ // is represented as a pointer to a struct whose first field is the
+ // actual function. So that is what we return as the type of a Go
+ // function.
+
+ Location loc = this->location();
+ Btype* struct_type =
+ gogo->backend()->placeholder_struct_type("__go_descriptor", loc);
+ Btype* ptr_struct_type = gogo->backend()->pointer_type(struct_type);
+
std::vector<Backend::Btyped_identifier> fields(1);
fields[0].name = "code";
- fields[0].btype = fntype;
+ fields[0].btype = this->get_backend_fntype(gogo);
fields[0].location = loc;
if (!gogo->backend()->set_placeholder_struct_type(struct_type, fields))
return gogo->backend()->error_type();
@@ -3821,6 +3916,32 @@ Function_type::copy_with_receiver(Type* receiver_type) const
return ret;
}
+// Make a copy of a function type with the receiver as the first
+// parameter.
+
+Function_type*
+Function_type::copy_with_receiver_as_param(bool want_pointer_receiver) const
+{
+ go_assert(this->is_method());
+ Typed_identifier_list* new_params = new Typed_identifier_list();
+ Type* rtype = this->receiver_->type();
+ if (want_pointer_receiver)
+ rtype = Type::make_pointer_type(rtype);
+ Typed_identifier receiver(this->receiver_->name(), rtype,
+ this->receiver_->location());
+ new_params->push_back(receiver);
+ const Typed_identifier_list* orig_params = this->parameters_;
+ if (orig_params != NULL && !orig_params->empty())
+ {
+ for (Typed_identifier_list::const_iterator p = orig_params->begin();
+ p != orig_params->end();
+ ++p)
+ new_params->push_back(*p);
+ }
+ return Type::make_function_type(NULL, new_params, this->results_,
+ this->location_);
+}
+
// Make a copy of a function type ignoring any receiver and adding a
// closure parameter.
@@ -4195,7 +4316,8 @@ Struct_field::is_field_name(const std::string& name) const
// This is a horrible hack caused by the fact that we don't pack
// the names of builtin types. FIXME.
- if (nt != NULL
+ if (!this->is_imported_
+ && nt != NULL
&& nt->is_builtin()
&& nt->name() == Gogo::unpack_hidden_name(name))
return true;
@@ -4204,6 +4326,36 @@ Struct_field::is_field_name(const std::string& name) const
}
}
+// Return whether this field is an unexported field named NAME.
+
+bool
+Struct_field::is_unexported_field_name(Gogo* gogo,
+ const std::string& name) const
+{
+ const std::string& field_name(this->field_name());
+ if (Gogo::is_hidden_name(field_name)
+ && name == Gogo::unpack_hidden_name(field_name)
+ && gogo->pack_hidden_name(name, false) != field_name)
+ return true;
+
+ // Check for the name of a builtin type. This is like the test in
+ // is_field_name, only there we return false if this->is_imported_,
+ // and here we return true.
+ if (this->is_imported_ && this->is_anonymous())
+ {
+ Type* t = this->typed_identifier_.type();
+ if (t->points_to() != NULL)
+ t = t->points_to();
+ Named_type* nt = t->named_type();
+ if (nt != NULL
+ && nt->is_builtin()
+ && nt->name() == Gogo::unpack_hidden_name(name))
+ return true;
+ }
+
+ return false;
+}
+
// Return whether this field is an embedded built-in type.
bool
@@ -4264,12 +4416,7 @@ Struct_type::do_verify()
++p)
{
Type* t = p->type();
- if (t->is_undefined())
- {
- error_at(p->location(), "struct field type is incomplete");
- p->set_type(Type::make_error_type());
- }
- else if (p->is_anonymous())
+ if (p->is_anonymous())
{
if (t->named_type() != NULL && t->points_to() != NULL)
{
@@ -4641,14 +4788,9 @@ Struct_type::is_unexported_local_field(Gogo* gogo,
for (Struct_field_list::const_iterator pf = fields->begin();
pf != fields->end();
++pf)
- {
- const std::string& field_name(pf->field_name());
- if (Gogo::is_hidden_name(field_name)
- && name == Gogo::unpack_hidden_name(field_name)
- && gogo->pack_hidden_name(name, false) != field_name)
+ if (pf->is_unexported_field_name(gogo, name))
return true;
}
- }
return false;
}
@@ -5250,6 +5392,7 @@ Struct_type::do_import(Import* imp)
Type* ftype = imp->read_type();
Struct_field sf(Typed_identifier(name, ftype, imp->location()));
+ sf.set_is_imported();
if (imp->peek_char() == ' ')
{
@@ -9022,6 +9165,8 @@ Type::build_stub_methods(Gogo* gogo, const Type* type, const Methods* methods,
fntype->is_varargs(), location);
gogo->finish_function(fntype->location());
+ if (type->named_type() == NULL && stub->is_function())
+ stub->func_value()->set_is_unnamed_type_stub_method();
if (m->nointerface() && stub->is_function())
stub->func_value()->set_nointerface();
}
@@ -9289,7 +9434,9 @@ Type::bind_field_or_method(Gogo* gogo, const Type* type, Expression* expr,
else
{
bool is_unexported;
- if (!Gogo::is_hidden_name(name))
+ // The test for 'a' and 'z' is to handle builtin names,
+ // which are not hidden.
+ if (!Gogo::is_hidden_name(name) && (name[0] < 'a' || name[0] > 'z'))
is_unexported = false;
else
{
diff --git a/gcc-4.8/gcc/go/gofrontend/types.h b/gcc-4.8/gcc/go/gofrontend/types.h
index d8a3080f5..0c712aaf5 100644
--- a/gcc-4.8/gcc/go/gofrontend/types.h
+++ b/gcc-4.8/gcc/go/gofrontend/types.h
@@ -1138,6 +1138,13 @@ class Type
Function_type* equal_fntype, Named_object** hash_fn,
Named_object** equal_fn);
+ void
+ write_named_hash(Gogo*, Named_type*, Function_type* hash_fntype,
+ Function_type* equal_fntype);
+
+ void
+ write_named_equal(Gogo*, Named_type*);
+
// Build a composite literal for the uncommon type information.
Expression*
uncommon_type_constructor(Gogo*, Type* uncommon_type,
@@ -1717,7 +1724,8 @@ class Function_type : public Type
Typed_identifier_list* results, Location location)
: Type(TYPE_FUNCTION),
receiver_(receiver), parameters_(parameters), results_(results),
- location_(location), is_varargs_(false), is_builtin_(false)
+ location_(location), is_varargs_(false), is_builtin_(false),
+ fnbtype_(NULL)
{ }
// Get the receiver.
@@ -1789,6 +1797,12 @@ class Function_type : public Type
Function_type*
copy_with_receiver(Type*) const;
+ // Return a copy of this type with the receiver treated as the first
+ // parameter. If WANT_POINTER_RECEIVER is true, the receiver is
+ // forced to be a pointer.
+ Function_type*
+ copy_with_receiver_as_param(bool want_pointer_receiver) const;
+
// Return a copy of this type ignoring any receiver and using dummy
// names for all parameters. This is used for thunks for method
// values.
@@ -1798,6 +1812,11 @@ class Function_type : public Type
static Type*
make_function_type_descriptor_type();
+ // Return the backend representation of this function type. This is used
+ // as the real type of a backend function declaration or defintion.
+ Btype*
+ get_backend_fntype(Gogo*);
+
protected:
int
do_traverse(Traverse*);
@@ -1851,6 +1870,9 @@ class Function_type : public Type
// Whether this is a special builtin function which can not simply
// be called. This is used for len, cap, etc.
bool is_builtin_;
+ // The backend representation of this type for backend function
+ // declarations and definitions.
+ Btype* fnbtype_;
};
// The type of a pointer.
@@ -1915,7 +1937,7 @@ class Struct_field
{
public:
explicit Struct_field(const Typed_identifier& typed_identifier)
- : typed_identifier_(typed_identifier), tag_(NULL)
+ : typed_identifier_(typed_identifier), tag_(NULL), is_imported_(false)
{ }
// The field name.
@@ -1926,6 +1948,10 @@ class Struct_field
bool
is_field_name(const std::string& name) const;
+ // Return whether this struct field is an unexported field named NAME.
+ bool
+ is_unexported_field_name(Gogo*, const std::string& name) const;
+
// Return whether this struct field is an embedded built-in type.
bool
is_embedded_builtin(Gogo*) const;
@@ -1963,6 +1989,11 @@ class Struct_field
set_tag(const std::string& tag)
{ this->tag_ = new std::string(tag); }
+ // Record that this field is defined in an imported struct.
+ void
+ set_is_imported()
+ { this->is_imported_ = true; }
+
// Set the type. This is only used in error cases.
void
set_type(Type* type)
@@ -1973,6 +2004,8 @@ class Struct_field
Typed_identifier typed_identifier_;
// The field tag. This is NULL if the field has no tag.
std::string* tag_;
+ // Whether this field is defined in an imported struct.
+ bool is_imported_;
};
// A list of struct fields.
diff --git a/gcc-4.8/gcc/graphite-scop-detection.c b/gcc-4.8/gcc/graphite-scop-detection.c
index ab2897d5c..2cc7dd46c 100644
--- a/gcc-4.8/gcc/graphite-scop-detection.c
+++ b/gcc-4.8/gcc/graphite-scop-detection.c
@@ -203,7 +203,14 @@ graphite_can_represent_scev (tree scev)
switch (TREE_CODE (scev))
{
+ case NEGATE_EXPR:
+ case BIT_NOT_EXPR:
+ CASE_CONVERT:
+ case NON_LVALUE_EXPR:
+ return graphite_can_represent_scev (TREE_OPERAND (scev, 0));
+
case PLUS_EXPR:
+ case POINTER_PLUS_EXPR:
case MINUS_EXPR:
return graphite_can_represent_scev (TREE_OPERAND (scev, 0))
&& graphite_can_represent_scev (TREE_OPERAND (scev, 1));
@@ -225,13 +232,15 @@ graphite_can_represent_scev (tree scev)
if (!evolution_function_right_is_integer_cst (scev)
|| !graphite_can_represent_init (scev))
return false;
+ return graphite_can_represent_scev (CHREC_LEFT (scev));
default:
break;
}
/* Only affine functions can be represented. */
- if (!scev_is_linear_expression (scev))
+ if (tree_contains_chrecs (scev, NULL)
+ || !scev_is_linear_expression (scev))
return false;
return true;
@@ -330,13 +339,10 @@ stmt_simple_for_scop_p (basic_block scop_entry, loop_p outermost_loop,
case GIMPLE_COND:
{
- tree op;
- ssa_op_iter op_iter;
- enum tree_code code = gimple_cond_code (stmt);
-
/* We can handle all binary comparisons. Inequalities are
also supported as they can be represented with union of
polyhedra. */
+ enum tree_code code = gimple_cond_code (stmt);
if (!(code == LT_EXPR
|| code == GT_EXPR
|| code == LE_EXPR
@@ -345,11 +351,14 @@ stmt_simple_for_scop_p (basic_block scop_entry, loop_p outermost_loop,
|| code == NE_EXPR))
return false;
- FOR_EACH_SSA_TREE_OPERAND (op, stmt, op_iter, SSA_OP_ALL_USES)
+ for (unsigned i = 0; i < 2; ++i)
+ {
+ tree op = gimple_op (stmt, i);
if (!graphite_can_represent_expr (scop_entry, loop, op)
/* We can not handle REAL_TYPE. Failed for pr39260. */
|| TREE_CODE (TREE_TYPE (op)) == REAL_TYPE)
return false;
+ }
return true;
}
diff --git a/gcc-4.8/gcc/ifcvt.c b/gcc-4.8/gcc/ifcvt.c
index 88967a6c2..e3353a5f2 100644
--- a/gcc-4.8/gcc/ifcvt.c
+++ b/gcc-4.8/gcc/ifcvt.c
@@ -115,7 +115,11 @@ count_bb_insns (const_basic_block bb)
while (1)
{
- if (CALL_P (insn) || NONJUMP_INSN_P (insn))
+ if ((CALL_P (insn) || NONJUMP_INSN_P (insn))
+ /* Don't count USE/CLOBBER insns, flow_find_cross_jump etc.
+ don't count them either and we need consistency. */
+ && GET_CODE (PATTERN (insn)) != USE
+ && GET_CODE (PATTERN (insn)) != CLOBBER)
count++;
if (insn == BB_END (bb))
@@ -505,7 +509,10 @@ cond_exec_process_if_block (ce_if_block_t * ce_info,
n_insns -= 2 * n_matching;
}
- if (then_start && else_start)
+ if (then_start
+ && else_start
+ && then_n_insns > n_matching
+ && else_n_insns > n_matching)
{
int longest_match = MIN (then_n_insns - n_matching,
else_n_insns - n_matching);
diff --git a/gcc-4.8/gcc/ipa-cp.c b/gcc-4.8/gcc/ipa-cp.c
index 7ea66f8cb..23d3e4d93 100644
--- a/gcc-4.8/gcc/ipa-cp.c
+++ b/gcc-4.8/gcc/ipa-cp.c
@@ -444,6 +444,9 @@ determine_versionability (struct cgraph_node *node)
reason = "not a tree_versionable_function";
else if (cgraph_function_body_availability (node) <= AVAIL_OVERWRITABLE)
reason = "insufficient body availability";
+ else if (!opt_for_fn (node->symbol.decl, optimize)
+ || !opt_for_fn (node->symbol.decl, flag_ipa_cp))
+ reason = "non-optimized function";
if (reason && dump_file && !node->alias && !node->thunk.thunk_p)
fprintf (dump_file, "Function %s/%i is not versionable, reason: %s.\n",
@@ -1455,22 +1458,21 @@ propagate_constants_accross_call (struct cgraph_edge *cs)
args_count = ipa_get_cs_argument_count (args);
parms_count = ipa_get_param_count (callee_info);
- /* If this call goes through a thunk we must not propagate to the first (0th)
- parameter. However, we might need to uncover a thunk from below a series
- of aliases first. */
+ /* If this call goes through a thunk we should not propagate because we
+ cannot redirect edges to thunks. However, we might need to uncover a
+ thunk from below a series of aliases first. */
alias_or_thunk = cs->callee;
while (alias_or_thunk->alias)
alias_or_thunk = cgraph_alias_aliased_node (alias_or_thunk);
if (alias_or_thunk->thunk.thunk_p)
{
+ for (i = 0; i < parms_count; i++)
ret |= set_all_contains_variable (ipa_get_parm_lattices (callee_info,
- 0));
- i = 1;
+ i));
+ return ret;
}
- else
- i = 0;
- for (; (i < args_count) && (i < parms_count); i++)
+ for (i = 0; (i < args_count) && (i < parms_count); i++)
{
struct ipa_jump_func *jump_func = ipa_get_ith_jump_func (args, i);
struct ipcp_param_lattices *dest_plats;
@@ -3119,6 +3121,7 @@ cgraph_edge_brings_all_agg_vals_for_node (struct cgraph_edge *cs,
struct cgraph_node *node)
{
struct ipa_node_params *orig_caller_info = IPA_NODE_REF (cs->caller);
+ struct ipa_node_params *orig_node_info;
struct ipa_agg_replacement_value *aggval;
int i, ec, count;
@@ -3133,6 +3136,7 @@ cgraph_edge_brings_all_agg_vals_for_node (struct cgraph_edge *cs,
if (aggval->index >= ec)
return false;
+ orig_node_info = IPA_NODE_REF (IPA_NODE_REF (node)->ipcp_orig_node);
if (orig_caller_info->ipcp_orig_node)
orig_caller_info = IPA_NODE_REF (orig_caller_info->ipcp_orig_node);
@@ -3150,7 +3154,7 @@ cgraph_edge_brings_all_agg_vals_for_node (struct cgraph_edge *cs,
if (!interesting)
continue;
- plats = ipa_get_parm_lattices (orig_caller_info, aggval->index);
+ plats = ipa_get_parm_lattices (orig_node_info, aggval->index);
if (plats->aggs_bottom)
return false;
diff --git a/gcc-4.8/gcc/ipa-prop.c b/gcc-4.8/gcc/ipa-prop.c
index c62dc68a2..41aec2feb 100644
--- a/gcc-4.8/gcc/ipa-prop.c
+++ b/gcc-4.8/gcc/ipa-prop.c
@@ -623,16 +623,22 @@ parm_preserved_before_stmt_p (struct param_analysis_info *parm_ainfo,
if (parm_ainfo && parm_ainfo->parm_modified)
return false;
+ if (optimize)
+ {
gcc_checking_assert (gimple_vuse (stmt) != NULL_TREE);
ao_ref_init (&refd, parm_load);
- /* We can cache visited statements only when parm_ainfo is available and when
- we are looking at a naked load of the whole parameter. */
+ /* We can cache visited statements only when parm_ainfo is available and
+ when we are looking at a naked load of the whole parameter. */
if (!parm_ainfo || TREE_CODE (parm_load) != PARM_DECL)
visited_stmts = NULL;
else
visited_stmts = &parm_ainfo->parm_visited_statements;
walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified,
visited_stmts);
+ }
+ else
+ modified = true;
+
if (parm_ainfo && modified)
parm_ainfo->parm_modified = true;
return !modified;
@@ -740,7 +746,7 @@ static bool
ipa_load_from_parm_agg_1 (vec<ipa_param_descriptor_t> descriptors,
struct param_analysis_info *parms_ainfo, gimple stmt,
tree op, int *index_p, HOST_WIDE_INT *offset_p,
- bool *by_ref_p)
+ HOST_WIDE_INT *size_p, bool *by_ref_p)
{
int index;
HOST_WIDE_INT size, max_size;
@@ -758,6 +764,8 @@ ipa_load_from_parm_agg_1 (vec<ipa_param_descriptor_t> descriptors,
{
*index_p = index;
*by_ref_p = false;
+ if (size_p)
+ *size_p = size;
return true;
}
return false;
@@ -800,6 +808,8 @@ ipa_load_from_parm_agg_1 (vec<ipa_param_descriptor_t> descriptors,
{
*index_p = index;
*by_ref_p = true;
+ if (size_p)
+ *size_p = size;
return true;
}
return false;
@@ -814,7 +824,7 @@ ipa_load_from_parm_agg (struct ipa_node_params *info, gimple stmt,
bool *by_ref_p)
{
return ipa_load_from_parm_agg_1 (info->descriptors, NULL, stmt, op, index_p,
- offset_p, by_ref_p);
+ offset_p, NULL, by_ref_p);
}
/* Given that an actual argument is an SSA_NAME (given in NAME) and is a result
@@ -1051,7 +1061,8 @@ compute_complex_ancestor_jump_func (struct ipa_node_params *info,
return;
parm = TREE_OPERAND (expr, 0);
index = ipa_get_param_decl_index (info, SSA_NAME_VAR (parm));
- gcc_assert (index >= 0);
+ if (index < 0)
+ return;
cond_bb = single_pred (assign_bb);
cond = last_stmt (cond_bb);
@@ -1462,6 +1473,9 @@ ipa_compute_jump_functions (struct cgraph_node *node,
{
struct cgraph_edge *cs;
+ if (!optimize)
+ return;
+
for (cs = node->callees; cs; cs = cs->next_callee)
{
struct cgraph_node *callee = cgraph_function_or_thunk_node (cs->callee,
@@ -1646,7 +1660,7 @@ ipa_analyze_indirect_call_uses (struct cgraph_node *node,
if (gimple_assign_single_p (def)
&& ipa_load_from_parm_agg_1 (info->descriptors, parms_ainfo, def,
gimple_assign_rhs1 (def), &index, &offset,
- &by_ref))
+ NULL, &by_ref))
{
struct cgraph_edge *cs = ipa_note_param_call (node, index, call);
cs->indirect_info->offset = offset;
@@ -1847,8 +1861,7 @@ ipa_analyze_stmt_uses (struct cgraph_node *node, struct ipa_node_params *info,
passed in DATA. */
static bool
-visit_ref_for_mod_analysis (gimple stmt ATTRIBUTE_UNUSED,
- tree op, void *data)
+visit_ref_for_mod_analysis (gimple, tree op, tree, void *data)
{
struct ipa_node_params *info = (struct ipa_node_params *) data;
@@ -2126,7 +2139,6 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target)
we may create the first reference to the object in the unit. */
if (!callee || callee->global.inlined_to)
{
- struct cgraph_node *first_clone = callee;
/* We are better to ensure we can refer to it.
In the case of static functions we are out of luck, since we already
@@ -2142,31 +2154,7 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target)
xstrdup (cgraph_node_name (ie->callee)), ie->callee->uid);
return NULL;
}
-
- /* Create symbol table node. Even if inline clone exists, we can not take
- it as a target of non-inlined call. */
- callee = cgraph_create_node (target);
-
- /* OK, we previously inlined the function, then removed the offline copy and
- now we want it back for external call. This can happen when devirtualizing
- while inlining function called once that happens after extern inlined and
- virtuals are already removed. In this case introduce the external node
- and make it available for call. */
- if (first_clone)
- {
- first_clone->clone_of = callee;
- callee->clones = first_clone;
- symtab_prevail_in_asm_name_hash ((symtab_node)callee);
- symtab_insert_node_to_hashtable ((symtab_node)callee);
- if (dump_file)
- fprintf (dump_file, "ipa-prop: Introduced new external node "
- "(%s/%i) and turned into root of the clone tree.\n",
- xstrdup (cgraph_node_name (callee)), callee->uid);
- }
- else if (dump_file)
- fprintf (dump_file, "ipa-prop: Introduced new external node "
- "(%s/%i).\n",
- xstrdup (cgraph_node_name (callee)), callee->uid);
+ callee = cgraph_get_create_real_symbol_node (target);
}
ipa_check_create_node_params ();
@@ -3902,7 +3890,7 @@ ipcp_transform_function (struct cgraph_node *node)
struct ipa_agg_replacement_value *v;
gimple stmt = gsi_stmt (gsi);
tree rhs, val, t;
- HOST_WIDE_INT offset;
+ HOST_WIDE_INT offset, size;
int index;
bool by_ref, vce;
@@ -3929,13 +3917,15 @@ ipcp_transform_function (struct cgraph_node *node)
continue;
if (!ipa_load_from_parm_agg_1 (descriptors, parms_ainfo, stmt,
- rhs, &index, &offset, &by_ref))
+ rhs, &index, &offset, &size, &by_ref))
continue;
for (v = aggval; v; v = v->next)
if (v->index == index
&& v->offset == offset)
break;
- if (!v || v->by_ref != by_ref)
+ if (!v
+ || v->by_ref != by_ref
+ || tree_low_cst (TYPE_SIZE (TREE_TYPE (v->value)), 0) != size)
continue;
gcc_checking_assert (is_gimple_ip_invariant (v->value));
diff --git a/gcc-4.8/gcc/ipa-pure-const.c b/gcc-4.8/gcc/ipa-pure-const.c
index 94c7315c1..bedc28a8c 100644
--- a/gcc-4.8/gcc/ipa-pure-const.c
+++ b/gcc-4.8/gcc/ipa-pure-const.c
@@ -588,7 +588,7 @@ check_call (funct_state local, gimple call, bool ipa)
/* Wrapper around check_decl for loads in local more. */
static bool
-check_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
+check_load (gimple, tree op, tree, void *data)
{
if (DECL_P (op))
check_decl ((funct_state)data, op, false, false);
@@ -600,7 +600,7 @@ check_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
/* Wrapper around check_decl for stores in local more. */
static bool
-check_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
+check_store (gimple, tree op, tree, void *data)
{
if (DECL_P (op))
check_decl ((funct_state)data, op, true, false);
@@ -612,7 +612,7 @@ check_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
/* Wrapper around check_decl for loads in ipa mode. */
static bool
-check_ipa_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
+check_ipa_load (gimple, tree op, tree, void *data)
{
if (DECL_P (op))
check_decl ((funct_state)data, op, false, true);
@@ -624,7 +624,7 @@ check_ipa_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
/* Wrapper around check_decl for stores in ipa mode. */
static bool
-check_ipa_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
+check_ipa_store (gimple, tree op, tree, void *data)
{
if (DECL_P (op))
check_decl ((funct_state)data, op, true, true);
diff --git a/gcc-4.8/gcc/ipa-split.c b/gcc-4.8/gcc/ipa-split.c
index e7d469d74..f18ce82fe 100644
--- a/gcc-4.8/gcc/ipa-split.c
+++ b/gcc-4.8/gcc/ipa-split.c
@@ -136,7 +136,7 @@ static tree find_retval (basic_block return_bb);
variable, check it if it is present in bitmap passed via DATA. */
static bool
-test_nonssa_use (gimple stmt ATTRIBUTE_UNUSED, tree t, void *data)
+test_nonssa_use (gimple, tree t, tree, void *data)
{
t = get_base_address (t);
@@ -229,7 +229,7 @@ verify_non_ssa_vars (struct split_point *current, bitmap non_ssa_vars,
}
if (gimple_code (stmt) == GIMPLE_LABEL
&& test_nonssa_use (stmt, gimple_label_label (stmt),
- non_ssa_vars))
+ NULL_TREE, non_ssa_vars))
{
ok = false;
goto done;
@@ -258,7 +258,7 @@ verify_non_ssa_vars (struct split_point *current, bitmap non_ssa_vars,
if (virtual_operand_p (gimple_phi_result (stmt)))
continue;
if (TREE_CODE (op) != SSA_NAME
- && test_nonssa_use (stmt, op, non_ssa_vars))
+ && test_nonssa_use (stmt, op, op, non_ssa_vars))
{
ok = false;
goto done;
@@ -670,7 +670,7 @@ find_retval (basic_block return_bb)
Return true when access to T prevents splitting the function. */
static bool
-mark_nonssa_use (gimple stmt ATTRIBUTE_UNUSED, tree t, void *data)
+mark_nonssa_use (gimple, tree t, tree, void *data)
{
t = get_base_address (t);
@@ -830,7 +830,7 @@ visit_bb (basic_block bb, basic_block return_bb,
if (TREE_CODE (op) == SSA_NAME)
bitmap_set_bit (used_ssa_names, SSA_NAME_VERSION (op));
else
- can_split &= !mark_nonssa_use (stmt, op, non_ssa_vars);
+ can_split &= !mark_nonssa_use (stmt, op, op, non_ssa_vars);
}
}
return can_split;
diff --git a/gcc-4.8/gcc/ipa.c b/gcc-4.8/gcc/ipa.c
index a9b8fb419..d73d105a0 100644
--- a/gcc-4.8/gcc/ipa.c
+++ b/gcc-4.8/gcc/ipa.c
@@ -359,6 +359,8 @@ symtab_remove_unreachable_nodes (bool before_inlining_p, FILE *file)
{
if (file)
fprintf (file, " %s", cgraph_node_name (node));
+ node->alias = false;
+ node->thunk.thunk_p = false;
cgraph_node_remove_callees (node);
ipa_remove_all_references (&node->symbol.ref_list);
changed = true;
diff --git a/gcc-4.8/gcc/ira.c b/gcc-4.8/gcc/ira.c
index 9e16465e4..87e72f067 100644
--- a/gcc-4.8/gcc/ira.c
+++ b/gcc-4.8/gcc/ira.c
@@ -4742,6 +4742,18 @@ do_reload (void)
if (need_dce && optimize)
run_fast_dce ();
+ /* Diagnose uses of the hard frame pointer when it is used as a global
+ register. Often we can get away with letting the user appropriate
+ the frame pointer, but we should let them know when code generation
+ makes that impossible. */
+ if (global_regs[HARD_FRAME_POINTER_REGNUM] && frame_pointer_needed)
+ {
+ tree decl = global_regs_decl[HARD_FRAME_POINTER_REGNUM];
+ error_at (DECL_SOURCE_LOCATION (current_function_decl),
+ "frame pointer required, but reserved");
+ inform (DECL_SOURCE_LOCATION (decl), "for %qD", decl);
+ }
+
timevar_pop (TV_IRA);
}
diff --git a/gcc-4.8/gcc/java/ChangeLog b/gcc-4.8/gcc/java/ChangeLog
index d16146f85..aa2b556f1 100644
--- a/gcc-4.8/gcc/java/ChangeLog
+++ b/gcc-4.8/gcc/java/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/gcc/loop-iv.c b/gcc-4.8/gcc/loop-iv.c
index be2e0f412..4c34007b4 100644
--- a/gcc-4.8/gcc/loop-iv.c
+++ b/gcc-4.8/gcc/loop-iv.c
@@ -425,7 +425,9 @@ iv_subreg (struct rtx_iv *iv, enum machine_mode mode)
&& !iv->first_special)
{
rtx val = get_iv_value (iv, const0_rtx);
- val = lowpart_subreg (mode, val, iv->extend_mode);
+ val = lowpart_subreg (mode, val,
+ iv->extend == IV_UNKNOWN_EXTEND
+ ? iv->mode : iv->extend_mode);
iv->base = val;
iv->extend = IV_UNKNOWN_EXTEND;
@@ -465,8 +467,14 @@ iv_extend (struct rtx_iv *iv, enum iv_extend_code extend, enum machine_mode mode
&& !iv->first_special)
{
rtx val = get_iv_value (iv, const0_rtx);
+ if (iv->extend_mode != iv->mode
+ && iv->extend != IV_UNKNOWN_EXTEND
+ && iv->extend != extend)
+ val = lowpart_subreg (iv->mode, val, iv->extend_mode);
val = simplify_gen_unary (iv_extend_to_rtx_code (extend), mode,
- val, iv->extend_mode);
+ val,
+ iv->extend == extend
+ ? iv->extend_mode : iv->mode);
iv->base = val;
iv->extend = IV_UNKNOWN_EXTEND;
iv->mode = iv->extend_mode = mode;
diff --git a/gcc-4.8/gcc/loop-unswitch.c b/gcc-4.8/gcc/loop-unswitch.c
index 6a12952cc..d3b16b898 100644
--- a/gcc-4.8/gcc/loop-unswitch.c
+++ b/gcc-4.8/gcc/loop-unswitch.c
@@ -191,6 +191,7 @@ may_unswitch_on (basic_block bb, struct loop *loop, rtx *cinsn)
if (!test)
return NULL_RTX;
+ mode = VOIDmode;
for (i = 0; i < 2; i++)
{
op[i] = XEXP (test, i);
@@ -205,11 +206,15 @@ may_unswitch_on (basic_block bb, struct loop *loop, rtx *cinsn)
return NULL_RTX;
op[i] = get_iv_value (&iv, const0_rtx);
+ if (iv.extend != IV_UNKNOWN_EXTEND
+ && iv.mode != iv.extend_mode)
+ op[i] = lowpart_subreg (iv.mode, op[i], iv.extend_mode);
+ if (mode == VOIDmode)
+ mode = iv.mode;
+ else
+ gcc_assert (mode == iv.mode);
}
- mode = GET_MODE (op[0]);
- if (mode == VOIDmode)
- mode = GET_MODE (op[1]);
if (GET_MODE_CLASS (mode) == MODE_CC)
{
if (at != BB_END (bb))
diff --git a/gcc-4.8/gcc/lra-coalesce.c b/gcc-4.8/gcc/lra-coalesce.c
index 859e02f0d..01748c08e 100644
--- a/gcc-4.8/gcc/lra-coalesce.c
+++ b/gcc-4.8/gcc/lra-coalesce.c
@@ -221,9 +221,12 @@ lra_coalesce (void)
basic_block bb;
rtx mv, set, insn, next, *sorted_moves;
int i, mv_num, sregno, dregno;
+ unsigned int regno;
int coalesced_moves;
int max_regno = max_reg_num ();
bitmap_head involved_insns_bitmap;
+ bitmap_head result_pseudo_vals_bitmap;
+ bitmap_iterator bi;
timevar_push (TV_LRA_COALESCE);
@@ -318,6 +321,34 @@ lra_coalesce (void)
}
}
}
+ /* If we have situation after inheritance pass:
+
+ r1 <- ... insn originally setting p1
+ i1 <- r1 setting inheritance i1 from reload r1
+ ...
+ ... <- ... p2 ... dead p2
+ ..
+ p1 <- i1
+ r2 <- i1
+ ...<- ... r2 ...
+
+ And we are coalescing p1 and p2 using p1. In this case i1 and p1
+ should have different values, otherwise they can get the same
+ hard reg and this is wrong for insn using p2 before coalescing.
+ So invalidate such inheritance pseudo values. */
+ bitmap_initialize (&result_pseudo_vals_bitmap, &reg_obstack);
+ EXECUTE_IF_SET_IN_BITMAP (&coalesced_pseudos_bitmap, 0, regno, bi)
+ bitmap_set_bit (&result_pseudo_vals_bitmap,
+ lra_reg_info[first_coalesced_pseudo[regno]].val);
+ EXECUTE_IF_SET_IN_BITMAP (&lra_inheritance_pseudos, 0, regno, bi)
+ if (bitmap_bit_p (&result_pseudo_vals_bitmap, lra_reg_info[regno].val))
+ {
+ lra_set_regno_unique_value (regno);
+ if (lra_dump_file != NULL)
+ fprintf (lra_dump_file,
+ " Make unique value for inheritance r%d\n", regno);
+ }
+ bitmap_clear (&result_pseudo_vals_bitmap);
bitmap_clear (&used_pseudos_bitmap);
bitmap_clear (&involved_insns_bitmap);
bitmap_clear (&coalesced_pseudos_bitmap);
diff --git a/gcc-4.8/gcc/lra-constraints.c b/gcc-4.8/gcc/lra-constraints.c
index 32e8c45f2..e75305278 100644
--- a/gcc-4.8/gcc/lra-constraints.c
+++ b/gcc-4.8/gcc/lra-constraints.c
@@ -1156,6 +1156,8 @@ simplify_operand_subreg (int nop, enum machine_mode reg_mode)
enum machine_mode mode;
rtx reg, new_reg;
rtx operand = *curr_id->operand_loc[nop];
+ enum reg_class regclass;
+ enum op_type type;
before = after = NULL_RTX;
@@ -1164,6 +1166,7 @@ simplify_operand_subreg (int nop, enum machine_mode reg_mode)
mode = GET_MODE (operand);
reg = SUBREG_REG (operand);
+ type = curr_static_id->operand[nop].type;
/* If we change address for paradoxical subreg of memory, the
address might violate the necessary alignment or the access might
be slow. So take this into consideration. We should not worry
@@ -1236,6 +1239,55 @@ simplify_operand_subreg (int nop, enum machine_mode reg_mode)
"Inserting subreg reload");
return true;
}
+ /* Force a reload for a paradoxical subreg. For paradoxical subreg,
+ IRA allocates hardreg to the inner pseudo reg according to its mode
+ instead of the outermode, so the size of the hardreg may not be enough
+ to contain the outermode operand, in that case we may need to insert
+ reload for the reg. For the following two types of paradoxical subreg,
+ we need to insert reload:
+ 1. If the op_type is OP_IN, and the hardreg could not be paired with
+ other hardreg to contain the outermode operand
+ (checked by in_hard_reg_set_p), we need to insert the reload.
+ 2. If the op_type is OP_OUT or OP_INOUT. */
+ else if (REG_P (reg)
+ && REGNO (reg) >= FIRST_PSEUDO_REGISTER
+ && (hard_regno = lra_get_regno_hard_regno (REGNO (reg))) >= 0
+ && (hard_regno_nregs[hard_regno][GET_MODE (reg)]
+ < hard_regno_nregs[hard_regno][mode])
+ && (regclass = lra_get_allocno_class (REGNO (reg)))
+ && (type != OP_IN
+ || !in_hard_reg_set_p (reg_class_contents[regclass],
+ mode, hard_regno)))
+ {
+ /* The class will be defined later in curr_insn_transform. */
+ enum reg_class rclass
+ = (enum reg_class) targetm.preferred_reload_class (reg, ALL_REGS);
+ rtx subreg;
+
+ new_reg = lra_create_new_reg_with_unique_value (mode, reg, rclass,
+ "paradoxical subreg");
+ PUT_MODE (new_reg, mode);
+ subreg = simplify_gen_subreg (GET_MODE (reg), new_reg, mode, 0);
+ if (type != OP_OUT)
+ {
+ push_to_sequence (before);
+ lra_emit_move (subreg, reg);
+ before = get_insns ();
+ end_sequence ();
+ }
+ if (type != OP_IN)
+ {
+ start_sequence ();
+ lra_emit_move (reg, subreg);
+ emit_insn (after);
+ after = get_insns ();
+ end_sequence ();
+ }
+ SUBREG_REG (operand) = new_reg;
+ lra_process_new_insns (curr_insn, before, after,
+ "Inserting paradoxical subreg reload");
+ return true;
+ }
return false;
}
diff --git a/gcc-4.8/gcc/lto/ChangeLog b/gcc-4.8/gcc/lto/ChangeLog
index e179310f1..c5d55780e 100644
--- a/gcc-4.8/gcc/lto/ChangeLog
+++ b/gcc-4.8/gcc/lto/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/gcc/mode-switching.c b/gcc-4.8/gcc/mode-switching.c
index 2bcb154d2..5dd9627c3 100644
--- a/gcc-4.8/gcc/mode-switching.c
+++ b/gcc-4.8/gcc/mode-switching.c
@@ -568,12 +568,15 @@ optimize_mode_switching (void)
info[bb->index].computing = last_mode;
/* Check for blocks without ANY mode requirements.
- N.B. because of MODE_AFTER, last_mode might still be different
- from no_mode. */
+ N.B. because of MODE_AFTER, last_mode might still
+ be different from no_mode, in which case we need to
+ mark the block as nontransparent. */
if (!any_set_required)
{
ptr = new_seginfo (no_mode, BB_END (bb), bb->index, live_now);
add_seginfo (info + bb->index, ptr);
+ if (last_mode != no_mode)
+ bitmap_clear_bit (transp[bb->index], j);
}
}
#if defined (MODE_ENTRY) && defined (MODE_EXIT)
diff --git a/gcc-4.8/gcc/objc/ChangeLog b/gcc-4.8/gcc/objc/ChangeLog
index 508874cec..c30ff7479 100644
--- a/gcc-4.8/gcc/objc/ChangeLog
+++ b/gcc-4.8/gcc/objc/ChangeLog
@@ -1,3 +1,18 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-07 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ Backport from mainline
+ 2013-09-14 Iain Sandoe <iains@gcc.gnu.org>
+
+ PR target/48094
+ * objc-next-runtime-abi-01.c (generate_objc_image_info): Remove.
+ (objc_generate_v1_next_metadata): Remove generation of ImageInfo.
+ * objc-next-runtime-abi-02.c (generate_v2_objc_image_info): Remove.
+ (objc_generate_v2_next_metadata): Remove generation of ImageInfo.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/gcc/objc/objc-next-runtime-abi-01.c b/gcc-4.8/gcc/objc/objc-next-runtime-abi-01.c
index a9845cfc0..63af0e413 100644
--- a/gcc-4.8/gcc/objc/objc-next-runtime-abi-01.c
+++ b/gcc-4.8/gcc/objc/objc-next-runtime-abi-01.c
@@ -2332,36 +2332,6 @@ generate_classref_translation_entry (tree chain)
return;
}
-
-/* The Fix-and-Continue functionality available in Mac OS X 10.3 and
- later requires that ObjC translation units participating in F&C be
- specially marked. The following routine accomplishes this. */
-
-/* static int _OBJC_IMAGE_INFO[2] = { 0, 1 }; */
-
-static void
-generate_objc_image_info (void)
-{
- tree decl;
- int flags
- = ((flag_replace_objc_classes && imp_count ? 1 : 0)
- | (flag_objc_gc ? 2 : 0));
- vec<constructor_elt, va_gc> *v = NULL;
- tree array_type;
-
- array_type = build_sized_array_type (integer_type_node, 2);
-
- decl = start_var_decl (array_type, "_OBJC_ImageInfo");
-
- CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, integer_zero_node);
- CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (integer_type_node, flags));
- /* The runtime wants this and refers to it in a manner hidden from the compiler.
- So we must force the output. */
- DECL_PRESERVE_P (decl) = 1;
- OBJCMETA (decl, objc_meta, meta_info);
- finish_var_decl (decl, objc_build_constructor (TREE_TYPE (decl), v));
-}
-
static void
objc_generate_v1_next_metadata (void)
{
@@ -2412,9 +2382,6 @@ objc_generate_v1_next_metadata (void)
attr = build_tree_list (objc_meta, meta_modules);
build_module_descriptor (vers, attr);
- /* This conveys information on GC usage and zero-link. */
- generate_objc_image_info ();
-
/* Dump the class references. This forces the appropriate classes
to be linked into the executable image, preserving unix archive
semantics. */
diff --git a/gcc-4.8/gcc/objc/objc-next-runtime-abi-02.c b/gcc-4.8/gcc/objc/objc-next-runtime-abi-02.c
index 8ce0c22d3..97d1b295e 100644
--- a/gcc-4.8/gcc/objc/objc-next-runtime-abi-02.c
+++ b/gcc-4.8/gcc/objc/objc-next-runtime-abi-02.c
@@ -3329,31 +3329,6 @@ build_v2_ivar_offset_ref_table (void)
finish_var_decl (ref->decl, ref->offset);
}
-/* static int _OBJC_IMAGE_INFO[2] = { 0, 16 | flags }; */
-
-static void
-generate_v2_objc_image_info (void)
-{
- tree decl, array_type;
- vec<constructor_elt, va_gc> *v = NULL;
- int flags =
- ((flag_replace_objc_classes && imp_count ? 1 : 0)
- | (flag_objc_gc ? 2 : 0));
-
- flags |= 16;
-
- array_type = build_sized_array_type (integer_type_node, 2);
-
- decl = start_var_decl (array_type, "_OBJC_ImageInfo");
-
- CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, integer_zero_node);
- CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (integer_type_node, flags));
- /* The Runtime wants this. */
- DECL_PRESERVE_P (decl) = 1;
- OBJCMETA (decl, objc_meta, meta_info);
- finish_var_decl (decl, objc_build_constructor (TREE_TYPE (decl), v));
-}
-
static void
objc_generate_v2_next_metadata (void)
{
@@ -3405,9 +3380,6 @@ objc_generate_v2_next_metadata (void)
build_v2_address_table (nonlazy_category_list, "_OBJC_NonLazyCategoryList$",
meta_label_nonlazy_categorylist);
- /* This conveys information on GC usage and zero-link. */
- generate_v2_objc_image_info ();
-
/* Generate catch objects for eh, if any are needed. */
build_v2_eh_catch_objects ();
diff --git a/gcc-4.8/gcc/objcp/ChangeLog b/gcc-4.8/gcc/objcp/ChangeLog
index 51c37e4a4..bc73f6131 100644
--- a/gcc-4.8/gcc/objcp/ChangeLog
+++ b/gcc-4.8/gcc/objcp/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/gcc/optabs.c b/gcc-4.8/gcc/optabs.c
index a3051ad9d..dbf83076f 100644
--- a/gcc-4.8/gcc/optabs.c
+++ b/gcc-4.8/gcc/optabs.c
@@ -3376,7 +3376,8 @@ expand_abs_nojump (enum machine_mode mode, rtx op0, rtx target,
{
rtx temp;
- if (! flag_trapv)
+ if (GET_MODE_CLASS (mode) != MODE_INT
+ || ! flag_trapv)
result_unsignedp = 1;
/* First try to do it with a special abs instruction. */
@@ -3399,7 +3400,8 @@ expand_abs_nojump (enum machine_mode mode, rtx op0, rtx target,
{
rtx last = get_last_insn ();
- temp = expand_unop (mode, neg_optab, op0, NULL_RTX, 0);
+ temp = expand_unop (mode, result_unsignedp ? neg_optab : negv_optab,
+ op0, NULL_RTX, 0);
if (temp != 0)
temp = expand_binop (mode, smax_optab, op0, temp, target, 0,
OPTAB_WIDEN);
@@ -3441,7 +3443,8 @@ expand_abs (enum machine_mode mode, rtx op0, rtx target,
{
rtx temp, op1;
- if (! flag_trapv)
+ if (GET_MODE_CLASS (mode) != MODE_INT
+ || ! flag_trapv)
result_unsignedp = 1;
temp = expand_abs_nojump (mode, op0, target, result_unsignedp);
@@ -4558,8 +4561,11 @@ emit_conditional_move (rtx target, enum rtx_code code, rtx op0, rtx op1,
if (!COMPARISON_P (comparison))
return NULL_RTX;
- do_pending_stack_adjust ();
+ /* State variables we need to save and restore if cmove can't be used. */
+ int save_pending_stack_adjust = pending_stack_adjust;
+ int save_stack_pointer_delta = stack_pointer_delta;
last = get_last_insn ();
+ do_pending_stack_adjust ();
prepare_cmp_insn (XEXP (comparison, 0), XEXP (comparison, 1),
GET_CODE (comparison), NULL_RTX, unsignedp, OPTAB_WIDEN,
&comparison, &cmode);
@@ -4579,6 +4585,8 @@ emit_conditional_move (rtx target, enum rtx_code code, rtx op0, rtx op1,
}
}
delete_insns_since (last);
+ pending_stack_adjust = save_pending_stack_adjust;
+ stack_pointer_delta = save_stack_pointer_delta;
return NULL_RTX;
}
@@ -6233,7 +6241,7 @@ init_tree_optimization_optabs (tree optnode)
/* If the optabs changed, record it. */
if (memcmp (tmp_optabs, this_target_optabs, sizeof (struct target_optabs)))
- TREE_OPTIMIZATION_OPTABS (optnode) = (unsigned char *) tmp_optabs;
+ TREE_OPTIMIZATION_OPTABS (optnode) = tmp_optabs;
else
{
TREE_OPTIMIZATION_OPTABS (optnode) = NULL;
@@ -7035,8 +7043,7 @@ maybe_emit_atomic_exchange (rtx target, rtx mem, rtx val, enum memmodel model)
create_output_operand (&ops[0], target, mode);
create_fixed_operand (&ops[1], mem);
- /* VAL may have been promoted to a wider mode. Shrink it if so. */
- create_convert_operand_to (&ops[2], val, mode, true);
+ create_input_operand (&ops[2], val, mode);
create_integer_operand (&ops[3], model);
if (maybe_expand_insn (icode, 4, ops))
return ops[0].value;
@@ -7075,8 +7082,7 @@ maybe_emit_sync_lock_test_and_set (rtx target, rtx mem, rtx val,
struct expand_operand ops[3];
create_output_operand (&ops[0], target, mode);
create_fixed_operand (&ops[1], mem);
- /* VAL may have been promoted to a wider mode. Shrink it if so. */
- create_convert_operand_to (&ops[2], val, mode, true);
+ create_input_operand (&ops[2], val, mode);
if (maybe_expand_insn (icode, 3, ops))
return ops[0].value;
}
@@ -7118,8 +7124,6 @@ maybe_emit_compare_and_swap_exchange_loop (rtx target, rtx mem, rtx val)
{
if (!target || !register_operand (target, mode))
target = gen_reg_rtx (mode);
- if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode)
- val = convert_modes (mode, GET_MODE (val), val, 1);
if (expand_compare_and_swap_loop (mem, target, val, NULL_RTX))
return target;
}
@@ -7331,8 +7335,8 @@ expand_atomic_compare_and_swap (rtx *ptarget_bool, rtx *ptarget_oval,
create_output_operand (&ops[0], target_bool, bool_mode);
create_output_operand (&ops[1], target_oval, mode);
create_fixed_operand (&ops[2], mem);
- create_convert_operand_to (&ops[3], expected, mode, true);
- create_convert_operand_to (&ops[4], desired, mode, true);
+ create_input_operand (&ops[3], expected, mode);
+ create_input_operand (&ops[4], desired, mode);
create_integer_operand (&ops[5], is_weak);
create_integer_operand (&ops[6], succ_model);
create_integer_operand (&ops[7], fail_model);
@@ -7353,8 +7357,8 @@ expand_atomic_compare_and_swap (rtx *ptarget_bool, rtx *ptarget_oval,
create_output_operand (&ops[0], target_oval, mode);
create_fixed_operand (&ops[1], mem);
- create_convert_operand_to (&ops[2], expected, mode, true);
- create_convert_operand_to (&ops[3], desired, mode, true);
+ create_input_operand (&ops[2], expected, mode);
+ create_input_operand (&ops[3], desired, mode);
if (!maybe_expand_insn (icode, 4, ops))
return false;
diff --git a/gcc-4.8/gcc/opts.c b/gcc-4.8/gcc/opts.c
index 7d95cc102..8fe2366cd 100644
--- a/gcc-4.8/gcc/opts.c
+++ b/gcc-4.8/gcc/opts.c
@@ -426,8 +426,8 @@ static const struct default_options default_options_table[] =
{ OPT_LEVELS_1_PLUS, OPT_fguess_branch_probability, NULL, 1 },
{ OPT_LEVELS_1_PLUS, OPT_fcprop_registers, NULL, 1 },
{ OPT_LEVELS_1_PLUS, OPT_fforward_propagate, NULL, 1 },
- { OPT_LEVELS_1_PLUS, OPT_fif_conversion, NULL, 1 },
- { OPT_LEVELS_1_PLUS, OPT_fif_conversion2, NULL, 1 },
+ { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fif_conversion, NULL, 1 },
+ { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fif_conversion2, NULL, 1 },
{ OPT_LEVELS_1_PLUS, OPT_fipa_pure_const, NULL, 1 },
{ OPT_LEVELS_1_PLUS, OPT_fipa_reference, NULL, 1 },
{ OPT_LEVELS_1_PLUS, OPT_fipa_profile, NULL, 1 },
diff --git a/gcc-4.8/gcc/params.def b/gcc-4.8/gcc/params.def
index cb25def32..e51b847a7 100644
--- a/gcc-4.8/gcc/params.def
+++ b/gcc-4.8/gcc/params.def
@@ -1014,6 +1014,12 @@ DEFPARAM (PARAM_MAX_SLSR_CANDIDATE_SCAN,
"strength reduction",
50, 1, 999999)
+DEFPARAM (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS,
+ "uninit-control-dep-attempts",
+ "Maximum number of nested calls to search for control dependencies "
+ "during uninitialized variable analysis",
+ 1000, 1, 0)
+
/*
Local variables:
mode:c
diff --git a/gcc-4.8/gcc/passes.c b/gcc-4.8/gcc/passes.c
index 4a7f8d2ae..844214dd0 100644
--- a/gcc-4.8/gcc/passes.c
+++ b/gcc-4.8/gcc/passes.c
@@ -1398,6 +1398,7 @@ init_optimization_passes (void)
/* After CCP we rewrite no longer addressed locals into SSA
form if possible. */
NEXT_PASS (pass_forwprop);
+ NEXT_PASS (pass_object_sizes);
/* pass_build_alias is a dummy pass that ensures that we
execute TODO_rebuild_alias at this point. */
NEXT_PASS (pass_build_alias);
@@ -1435,7 +1436,6 @@ init_optimization_passes (void)
NEXT_PASS (pass_dce);
NEXT_PASS (pass_forwprop);
NEXT_PASS (pass_phiopt);
- NEXT_PASS (pass_object_sizes);
NEXT_PASS (pass_strlen);
NEXT_PASS (pass_ccp);
/* After CCP we rewrite no longer addressed locals into SSA
diff --git a/gcc-4.8/gcc/po/ChangeLog b/gcc-4.8/gcc/po/ChangeLog
index a01b6cbdc..951c15d2f 100644
--- a/gcc-4.8/gcc/po/ChangeLog
+++ b/gcc-4.8/gcc/po/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/gcc/print-rtl.c b/gcc-4.8/gcc/print-rtl.c
index 3793109aa..31e6fb5af 100644
--- a/gcc-4.8/gcc/print-rtl.c
+++ b/gcc-4.8/gcc/print-rtl.c
@@ -582,6 +582,8 @@ print_rtx (const_rtx in_rtx)
if (MEM_EXPR (in_rtx))
print_mem_expr (outfile, MEM_EXPR (in_rtx));
+ else
+ fputc (' ', outfile);
if (MEM_OFFSET_KNOWN_P (in_rtx))
fprintf (outfile, "+" HOST_WIDE_INT_PRINT_DEC, MEM_OFFSET (in_rtx));
diff --git a/gcc-4.8/gcc/recog.c b/gcc-4.8/gcc/recog.c
index f00859cf0..ad096301c 100644
--- a/gcc-4.8/gcc/recog.c
+++ b/gcc-4.8/gcc/recog.c
@@ -3061,6 +3061,9 @@ peep2_reg_dead_p (int ofs, rtx reg)
return 1;
}
+/* Regno offset to be used in the register search. */
+static int search_ofs;
+
/* Try to find a hard register of mode MODE, matching the register class in
CLASS_STR, which is available at the beginning of insn CURRENT_INSN and
remains available until the end of LAST_INSN. LAST_INSN may be NULL_RTX,
@@ -3076,7 +3079,6 @@ rtx
peep2_find_free_register (int from, int to, const char *class_str,
enum machine_mode mode, HARD_REG_SET *reg_set)
{
- static int search_ofs;
enum reg_class cl;
HARD_REG_SET live;
df_ref *def_rec;
@@ -3541,6 +3543,7 @@ peephole2_optimize (void)
/* Initialize the regsets we're going to use. */
for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i)
peep2_insn_data[i].live_before = BITMAP_ALLOC (&reg_obstack);
+ search_ofs = 0;
live = BITMAP_ALLOC (&reg_obstack);
FOR_EACH_BB_REVERSE (bb)
diff --git a/gcc-4.8/gcc/regcprop.c b/gcc-4.8/gcc/regcprop.c
index 896902f30..8bfb64e40 100644
--- a/gcc-4.8/gcc/regcprop.c
+++ b/gcc-4.8/gcc/regcprop.c
@@ -747,6 +747,7 @@ copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd)
int n_ops, i, alt, predicated;
bool is_asm, any_replacements;
rtx set;
+ rtx link;
bool replaced[MAX_RECOG_OPERANDS];
bool changed = false;
struct kill_set_value_data ksvd;
@@ -815,6 +816,23 @@ copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd)
if (recog_op_alt[i][alt].earlyclobber)
kill_value (recog_data.operand[i], vd);
+ /* If we have dead sets in the insn, then we need to note these as we
+ would clobbers. */
+ for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
+ {
+ if (REG_NOTE_KIND (link) == REG_UNUSED)
+ {
+ kill_value (XEXP (link, 0), vd);
+ /* Furthermore, if the insn looked like a single-set,
+ but the dead store kills the source value of that
+ set, then we can no-longer use the plain move
+ special case below. */
+ if (set
+ && reg_overlap_mentioned_p (XEXP (link, 0), SET_SRC (set)))
+ set = NULL;
+ }
+ }
+
/* Special-case plain move instructions, since we may well
be able to do the move from a different register class. */
if (set && REG_P (SET_SRC (set)))
diff --git a/gcc-4.8/gcc/reginfo.c b/gcc-4.8/gcc/reginfo.c
index 0153cd9d8..3d08a9a70 100644
--- a/gcc-4.8/gcc/reginfo.c
+++ b/gcc-4.8/gcc/reginfo.c
@@ -85,7 +85,7 @@ static const char initial_call_really_used_regs[] = CALL_REALLY_USED_REGISTERS;
char global_regs[FIRST_PSEUDO_REGISTER];
/* Declaration for the global register. */
-static tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
+tree global_regs_decl[FIRST_PSEUDO_REGISTER];
/* Same information as REGS_INVALIDATED_BY_CALL but in regset form to be used
in dataflow more conveniently. */
@@ -620,40 +620,35 @@ choose_hard_reg_mode (unsigned int regno ATTRIBUTE_UNUSED,
mode = GET_MODE_WIDER_MODE (mode))
if ((unsigned) hard_regno_nregs[regno][mode] == nregs
&& HARD_REGNO_MODE_OK (regno, mode)
- && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
+ && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
+ && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
found_mode = mode;
- if (found_mode != VOIDmode)
- return found_mode;
-
for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
if ((unsigned) hard_regno_nregs[regno][mode] == nregs
&& HARD_REGNO_MODE_OK (regno, mode)
- && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
+ && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
+ && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
found_mode = mode;
- if (found_mode != VOIDmode)
- return found_mode;
-
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
if ((unsigned) hard_regno_nregs[regno][mode] == nregs
&& HARD_REGNO_MODE_OK (regno, mode)
- && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
+ && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
+ && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
found_mode = mode;
- if (found_mode != VOIDmode)
- return found_mode;
-
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
if ((unsigned) hard_regno_nregs[regno][mode] == nregs
&& HARD_REGNO_MODE_OK (regno, mode)
- && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
+ && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
+ && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
found_mode = mode;
if (found_mode != VOIDmode)
diff --git a/gcc-4.8/gcc/reorg.c b/gcc-4.8/gcc/reorg.c
index c19fb4c42..e7cb112b4 100644
--- a/gcc-4.8/gcc/reorg.c
+++ b/gcc-4.8/gcc/reorg.c
@@ -1105,6 +1105,7 @@ steal_delay_list_from_target (rtx insn, rtx condition, rtx seq,
int used_annul = 0;
int i;
struct resources cc_set;
+ bool *redundant;
/* We can't do anything if there are more delay slots in SEQ than we
can handle, or if we don't know that it will be a taken branch.
@@ -1145,6 +1146,7 @@ steal_delay_list_from_target (rtx insn, rtx condition, rtx seq,
return delay_list;
#endif
+ redundant = XALLOCAVEC (bool, XVECLEN (seq, 0));
for (i = 1; i < XVECLEN (seq, 0); i++)
{
rtx trial = XVECEXP (seq, 0, i);
@@ -1166,7 +1168,8 @@ steal_delay_list_from_target (rtx insn, rtx condition, rtx seq,
/* If this insn was already done (usually in a previous delay slot),
pretend we put it in our delay slot. */
- if (redundant_insn (trial, insn, new_delay_list))
+ redundant[i] = redundant_insn (trial, insn, new_delay_list);
+ if (redundant[i])
continue;
/* We will end up re-vectoring this branch, so compute flags
@@ -1199,6 +1202,12 @@ steal_delay_list_from_target (rtx insn, rtx condition, rtx seq,
return delay_list;
}
+ /* Record the effect of the instructions that were redundant and which
+ we therefore decided not to copy. */
+ for (i = 1; i < XVECLEN (seq, 0); i++)
+ if (redundant[i])
+ update_block (XVECEXP (seq, 0, i), insn);
+
/* Show the place to which we will be branching. */
*pnew_thread = first_active_target_insn (JUMP_LABEL (XVECEXP (seq, 0, 0)));
@@ -1262,6 +1271,7 @@ steal_delay_list_from_fallthrough (rtx insn, rtx condition, rtx seq,
/* If this insn was already done, we don't need it. */
if (redundant_insn (trial, insn, delay_list))
{
+ update_block (trial, insn);
delete_from_delay_slot (trial);
continue;
}
@@ -3266,6 +3276,7 @@ relax_delay_slots (rtx first)
to reprocess this insn. */
if (redundant_insn (XVECEXP (pat, 0, 1), delay_insn, 0))
{
+ update_block (XVECEXP (pat, 0, 1), insn);
delete_from_delay_slot (XVECEXP (pat, 0, 1));
next = prev_active_insn (next);
continue;
@@ -3385,6 +3396,7 @@ relax_delay_slots (rtx first)
&& redirect_with_delay_slots_safe_p (delay_insn, target_label,
insn))
{
+ update_block (XVECEXP (PATTERN (trial), 0, 1), insn);
reorg_redirect_jump (delay_insn, target_label);
next = insn;
continue;
diff --git a/gcc-4.8/gcc/rtl.h b/gcc-4.8/gcc/rtl.h
index 93a64f4d8..91f3387c7 100644
--- a/gcc-4.8/gcc/rtl.h
+++ b/gcc-4.8/gcc/rtl.h
@@ -2705,6 +2705,8 @@ extern int canon_true_dependence (const_rtx, enum machine_mode, rtx,
const_rtx, rtx);
extern int read_dependence (const_rtx, const_rtx);
extern int anti_dependence (const_rtx, const_rtx);
+extern int canon_anti_dependence (const_rtx, bool,
+ const_rtx, enum machine_mode, rtx);
extern int output_dependence (const_rtx, const_rtx);
extern int may_alias_p (const_rtx, const_rtx);
extern void init_alias_target (void);
@@ -2789,6 +2791,8 @@ extern void _fatal_insn (const char *, const_rtx, const char *, int, const char
#define fatal_insn_not_found(insn) \
_fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__)
+/* reginfo.c */
+extern tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
#endif /* ! GCC_RTL_H */
diff --git a/gcc-4.8/gcc/rtlanal.c b/gcc-4.8/gcc/rtlanal.c
index b19868579..89455d361 100644
--- a/gcc-4.8/gcc/rtlanal.c
+++ b/gcc-4.8/gcc/rtlanal.c
@@ -224,10 +224,10 @@ rtx_varies_p (const_rtx x, bool for_alias)
return 0;
}
-/* Return nonzero if the use of X as an address in a MEM can cause a trap.
- MODE is the mode of the MEM (not that of X) and UNALIGNED_MEMS controls
- whether nonzero is returned for unaligned memory accesses on strict
- alignment machines. */
+/* Return nonzero if the use of X+OFFSET as an address in a MEM with SIZE
+ bytes can cause a trap. MODE is the mode of the MEM (not that of X) and
+ UNALIGNED_MEMS controls whether nonzero is returned for unaligned memory
+ references on strict alignment machines. */
static int
rtx_addr_can_trap_p_1 (const_rtx x, HOST_WIDE_INT offset, HOST_WIDE_INT size,
@@ -235,11 +235,12 @@ rtx_addr_can_trap_p_1 (const_rtx x, HOST_WIDE_INT offset, HOST_WIDE_INT size,
{
enum rtx_code code = GET_CODE (x);
- if (STRICT_ALIGNMENT
- && unaligned_mems
- && GET_MODE_SIZE (mode) != 0)
+ /* The offset must be a multiple of the mode size if we are considering
+ unaligned memory references on strict alignment machines. */
+ if (STRICT_ALIGNMENT && unaligned_mems && GET_MODE_SIZE (mode) != 0)
{
HOST_WIDE_INT actual_offset = offset;
+
#ifdef SPARC_STACK_BOUNDARY_HACK
/* ??? The SPARC port may claim a STACK_BOUNDARY higher than
the real alignment of %sp. However, when it does this, the
@@ -298,8 +299,27 @@ rtx_addr_can_trap_p_1 (const_rtx x, HOST_WIDE_INT offset, HOST_WIDE_INT size,
return 0;
case REG:
- /* As in rtx_varies_p, we have to use the actual rtx, not reg number. */
- if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
+ /* Stack references are assumed not to trap, but we need to deal with
+ nonsensical offsets. */
+ if (x == frame_pointer_rtx)
+ {
+ HOST_WIDE_INT adj_offset = offset - STARTING_FRAME_OFFSET;
+ if (size == 0)
+ size = GET_MODE_SIZE (mode);
+ if (FRAME_GROWS_DOWNWARD)
+ {
+ if (adj_offset < frame_offset || adj_offset + size - 1 >= 0)
+ return 1;
+ }
+ else
+ {
+ if (adj_offset < 0 || adj_offset + size - 1 >= frame_offset)
+ return 1;
+ }
+ return 0;
+ }
+ /* ??? Need to add a similar guard for nonsensical offsets. */
+ if (x == hard_frame_pointer_rtx
|| x == stack_pointer_rtx
/* The arg pointer varies if it is not a fixed register. */
|| (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM]))
@@ -320,9 +340,7 @@ rtx_addr_can_trap_p_1 (const_rtx x, HOST_WIDE_INT offset, HOST_WIDE_INT size,
if (XEXP (x, 0) == pic_offset_table_rtx && CONSTANT_P (XEXP (x, 1)))
return 0;
- /* - or it is an address that can't trap plus a constant integer,
- with the proper remainder modulo the mode size if we are
- considering unaligned memory references. */
+ /* - or it is an address that can't trap plus a constant integer. */
if (CONST_INT_P (XEXP (x, 1))
&& !rtx_addr_can_trap_p_1 (XEXP (x, 0), offset + INTVAL (XEXP (x, 1)),
size, mode, unaligned_mems))
diff --git a/gcc-4.8/gcc/sdbout.c b/gcc-4.8/gcc/sdbout.c
index 13c11c296..44bdf3ef0 100644
--- a/gcc-4.8/gcc/sdbout.c
+++ b/gcc-4.8/gcc/sdbout.c
@@ -1226,7 +1226,10 @@ static void
sdbout_parms (tree parms)
{
for (; parms; parms = TREE_CHAIN (parms))
- if (DECL_NAME (parms))
+ if (DECL_NAME (parms)
+ && TREE_TYPE (parms) != error_mark_node
+ && DECL_RTL_SET_P (parms)
+ && DECL_INCOMING_RTL (parms))
{
int current_sym_value = 0;
const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
@@ -1358,7 +1361,10 @@ static void
sdbout_reg_parms (tree parms)
{
for (; parms; parms = TREE_CHAIN (parms))
- if (DECL_NAME (parms))
+ if (DECL_NAME (parms)
+ && TREE_TYPE (parms) != error_mark_node
+ && DECL_RTL_SET_P (parms)
+ && DECL_INCOMING_RTL (parms))
{
const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
diff --git a/gcc-4.8/gcc/sel-sched.c b/gcc-4.8/gcc/sel-sched.c
index 11bf2e62c..71a01146c 100644
--- a/gcc-4.8/gcc/sel-sched.c
+++ b/gcc-4.8/gcc/sel-sched.c
@@ -1253,7 +1253,7 @@ mark_unavailable_hard_regs (def_t def, struct reg_rename *reg_rename_p,
if (!HARD_FRAME_POINTER_IS_FRAME_POINTER)
add_to_hard_reg_set (&reg_rename_p->unavailable_hard_regs,
- Pmode, HARD_FRAME_POINTER_IS_FRAME_POINTER);
+ Pmode, HARD_FRAME_POINTER_REGNUM);
}
#ifdef STACK_REGS
diff --git a/gcc-4.8/gcc/simplify-rtx.c b/gcc-4.8/gcc/simplify-rtx.c
index 43e794ebd..d6b872b9f 100644
--- a/gcc-4.8/gcc/simplify-rtx.c
+++ b/gcc-4.8/gcc/simplify-rtx.c
@@ -639,11 +639,16 @@ simplify_truncation (enum machine_mode mode, rtx op,
XEXP (op, 0), origmode);
}
- /* Simplify (truncate:SI (op:DI (x:DI) (y:DI)))
- to (op:SI (truncate:SI (x:DI)) (truncate:SI (x:DI))). */
- if (GET_CODE (op) == PLUS
+ /* If the machine can perform operations in the truncated mode, distribute
+ the truncation, i.e. simplify (truncate:QI (op:SI (x:SI) (y:SI))) into
+ (op:QI (truncate:QI (x:SI)) (truncate:QI (y:SI))). */
+ if (1
+#ifdef WORD_REGISTER_OPERATIONS
+ && precision >= BITS_PER_WORD
+#endif
+ && (GET_CODE (op) == PLUS
|| GET_CODE (op) == MINUS
- || GET_CODE (op) == MULT)
+ || GET_CODE (op) == MULT))
{
rtx op0 = simplify_gen_unary (TRUNCATE, mode, XEXP (op, 0), op_mode);
if (op0)
diff --git a/gcc-4.8/gcc/stmt.c b/gcc-4.8/gcc/stmt.c
index 7bdc9329b..ce90206f8 100644
--- a/gcc-4.8/gcc/stmt.c
+++ b/gcc-4.8/gcc/stmt.c
@@ -1602,19 +1602,28 @@ expand_nl_goto_receiver (void)
#ifdef HAVE_nonlocal_goto
if (! HAVE_nonlocal_goto)
#endif
+ {
/* First adjust our frame pointer to its actual value. It was
previously set to the start of the virtual area corresponding to
the stacked variables when we branched here and now needs to be
adjusted to the actual hardware fp value.
- Assignments are to virtual registers are converted by
+ Assignments to virtual registers are converted by
instantiate_virtual_regs into the corresponding assignment
to the underlying register (fp in this case) that makes
the original assignment true.
- So the following insn will actually be
- decrementing fp by STARTING_FRAME_OFFSET. */
+ So the following insn will actually be decrementing fp by
+ STARTING_FRAME_OFFSET. */
emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);
+ /* Restoring the frame pointer also modifies the hard frame pointer.
+ Mark it used (so that the previous assignment remains live once
+ the frame pointer is eliminated) and clobbered (to represent the
+ implicit update from the assignment). */
+ emit_use (hard_frame_pointer_rtx);
+ emit_clobber (hard_frame_pointer_rtx);
+ }
+
#if !HARD_FRAME_POINTER_IS_ARG_POINTER
if (fixed_regs[ARG_POINTER_REGNUM])
{
diff --git a/gcc-4.8/gcc/testsuite/ChangeLog b/gcc-4.8/gcc/testsuite/ChangeLog
index 5a0b168ba..190837dc0 100644
--- a/gcc-4.8/gcc/testsuite/ChangeLog
+++ b/gcc-4.8/gcc/testsuite/ChangeLog
@@ -1,3 +1,1865 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-05-14 Matthias Klose <doko@ubuntu.com>
+
+ PR driver/61106
+ * gcc-dg/unused-8a.c: Remove.
+
+2014-05-13 Peter Bergner <bergner@vnet.ibm.com>
+
+ * lib/target-support.exp (check_dfp_hw_available): New function.
+ (is-effective-target): Check $arg for dfp_hw.
+ (is-effective-target-keyword): Likewise.
+ * gcc.target/powerpc/pack03.c: (dg-require-effective-target):
+ Change target to dfp_hw.
+
+2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
+
+ Backport from mainline
+ 2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
+
+ PR target/60991
+ * gcc.target/avr/pr60991.c: New testcase.
+
+2014-05-09 Georg-Johann Lay <avr@gjlay.de>
+
+ Backport from 2014-05-09 trunk r210267
+
+ PR target/61055
+ * gcc.target/avr/torture/pr61055.c: New test.
+
+2014-05-08 Matthias Klose <doko@ubuntu.com>
+
+ PR driver/61106
+ * gcc-dg/unused-8a.c: New.
+ * gcc-dg/unused-8b.c: Likewise.
+
+2014-05-07 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/57864
+ * gcc.dg/torture/pr57864.c: New testcase.
+
+2014-05-06 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-04-14 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/55022
+ * gcc.dg/graphite/pr55022.c: New testcase.
+
+2014-05-06 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-04-17 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/60849
+ * g++.dg/opt/pr60849.C: New testcase.
+
+ 2014-04-07 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60766
+ * gcc.dg/torture/pr60766.c: New testcase.
+
+ 2014-04-23 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60903
+ * gcc.dg/torture/pr60903.c: New testcase.
+
+2014-05-05 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-04-23 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/60895
+ * g++.dg/torture/pr60895.C: New testcase.
+
+ 2014-04-07 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/60750
+ * g++.dg/torture/pr60750.C: New testcase.
+ * gcc.dg/tree-ssa/20040517-1.c: Adjust.
+
+ 2014-04-14 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59817
+ PR tree-optimization/60453
+ * gfortran.dg/graphite/pr59817.f: New testcase.
+ * gcc.dg/graphite/pr59817-1.c: Likewise.
+ * gcc.dg/graphite/pr59817-2.c: Likewise.
+
+ 2014-04-17 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60836
+ * g++.dg/vect/pr60836.cc: New testcase.
+
+2014-05-05 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2014-04-25 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/60960
+ * gcc.c-torture/execute/pr60960.c: New test.
+
+2014-05-04 Peter Bergner <bergner@vnet.ibm.com>
+
+ * gcc.target/powerpc/pack02.c (dg-options): Add -mhard-float.
+ (dg-require-effective-target): Change target to powerpc_fprs.
+ * gcc.target/powerpc/pack03.c (dg-options): Add -mhard-dfp.
+ (dg-require-effective-target): Change target to dfprt.
+
+2014-05-02 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR tree-optimization/60930
+ * gcc.dg/torture/pr60930.c: New test.
+
+2014-04-30 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ Back port from mainline
+ 2014-04-24 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/pack01.c: New test to test the new pack and
+ unpack builtin functionss for 128-bit types.
+ * gcc.target/powerpc/pack02.c: Likewise.
+ * gcc.target/powerpc/pack03.c: Likewise.
+ * gcc.target/powerpc/extend-divide-1.c: New test to test extended
+ divide builtin functionss.
+ * gcc.target/powerpc/extend-divide-2.c: Likewise.
+ * gcc.target/powerpc/bcd-1.c: New test for the new BCD builtin
+ functions.
+ * gcc.target/powerpc/bcd-2.c: Likewise.
+ * gcc.target/powerpc/bcd-3.c: Likewise.
+ * gcc.target/powerpc/dfp-builtin-1.c: New test for the new DFP
+ builtin functionss.
+ * gcc.target/powerpc/dfp-builtin-2.c: Likewise.
+
+2014-04-29 Pat Haugen <pthaugen@us.ibm.com>
+
+ Backport from mainline
+ 2014-04-17 Pat Haugen <pthaugen@us.ibm.com>
+
+ * gcc.target/powerpc/ti_math1.c: New.
+ * gcc.target/powerpc/ti_math2.c: New.
+
+2014-04-25 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.c-torture/execute/20140425-1.c: New test.
+
+2014-04-23 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ Back port from main line:
+ 2014-03-27 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/p8vector-vbpermq.c: New test to test the
+ vbpermq builtin.
+
+2014-04-23 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2014-04-21 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/60909
+ * gcc.target/i386/pr60909-1.c: New test.
+ * gcc.target/i386/pr60909-2.c: Ditto.
+
+2014-04-23 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-04-02 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/60729
+ * g++.dg/vect/pr60729.cc: New testcase.
+
+ 2014-04-03 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60740
+ * gcc.dg/graphite/pr60740.c: New testcase.
+
+2014-04-23 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/60635
+ * gfortran.dg/lto/pr60635_0.f90: New testcase.
+ * gfortran.dg/lto/pr60635_1.c: Likewise.
+
+2014-04-21 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ Back port from the trunk, subversion id 209546.
+
+ 2014-04-21 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/60735
+ * gcc.target/powerpc/pr60735.c: New test. Insure _Decimal64 does
+ not cause errors if -mspe.
+
+2014-04-17 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/merge-vsx.c: Add V4SI and V4SF tests.
+ * gcc.dg/vmx/merge-vsx-be-order.c: Likewise.
+
+2014-04-12 Jerry DeLisle <jvdelisle@gcc.gnu>
+
+ Backport from mainline
+ PR libfortran/60810
+ * gfortran.dg/arrayio_13.f90: New test.
+
+2014-04-11 Hans-Peter Nilsson <hp@axis.com>
+
+ * gfortran.dg/fmt_en.f90: Gate test on effective_target
+ fd_truncate.
+
+2014-04-11 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * gcc.target/s390/htm-nofloat-1.c: Rename to ...
+ * gcc.target/s390/htm-nofloat-compile-1.c: ... this one.
+ * gcc.target/s390/htm-nofloat-2.c: Add check for htm target and
+ rename to ...
+ * gcc.target/s390/htm-nofloat-1.c: ... this one.
+ * gcc.target/s390/s390.exp: Make sure the assembler supports htm
+ instructions as well.
+
+2014-04-11 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * gcc.target/s390/htm-builtins-compile-1.c: Replace long long with
+ long.
+
+2014-04-11 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * gcc.target/s390/htm-builtins-compile-1.c: Remove htm check.
+ * gcc.target/s390/htm-builtins-compile-2.c: Remove htm check.
+
+2014-04-10 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR rtl-optimization/60769
+ * g++.dg/pr60769.C: New.
+
+2014-04-10 Jakub Jelinek <jakub@redhat.com>
+
+ Backport from mainline
+ 2014-03-12 Jakub Jelinek <jakub@redhat.com>
+ Marc Glisse <marc.glisse@inria.fr>
+
+ PR tree-optimization/60502
+ * gcc.c-torture/compile/pr60502.c: New test.
+
+ 2014-03-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/60693
+ * gcc.target/i386/pr60693.c: New test.
+
+ PR c++/60689
+ * c-c++-common/pr60689.c: New test.
+
+ 2014-03-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/60603
+ * gcc.dg/debug/dwarf2/dwarf2-macro2.c: New test.
+
+ 2014-03-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/60516
+ * gcc.target/i386/pr60516.c: New test.
+
+ 2014-03-13 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/36282
+ * c-c++-common/pr36282-1.c: New test.
+ * c-c++-common/pr36282-2.c: New test.
+ * c-c++-common/pr36282-3.c: New test.
+ * c-c++-common/pr36282-4.c: New test.
+
+ 2014-03-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/58595
+ * gcc.dg/tls/pr58595.c: New test.
+
+2014-04-07 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/60640
+ * g++.dg/ipa/pr60640-1.C: New test.
+ * g++.dg/ipa/pr60640-2.C: Likewise.
+ * g++.dg/ipa/pr60640-3.C: Likewise.
+
+2014-04-06 Dominique d'Humieres <dominiq@lps.ens.fr>
+ Iain Sandoe <iain@codesourcery.com>
+
+ PR target/54083
+ * gcc.dg/attr-weakref-1.c: Allow the test on darwin with
+ the additional options -Wl,-undefined,dynamic_lookup and
+ -Wl,-flat_namespace
+ * gcc.dg/torture/pr53922.c: Additional option
+ -Wl,-flat_namespace for darwin[89].
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-04-05 David Edelsohn <dje.gcc@gmail.com>
+
+ * gcc.target/powerpc/sd-vsx.c: Skip on AIX.
+ * gcc.target/powerpc/sd-pwr6.c: Same.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Back port from trunk
+ 2014-03-12 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/p8vector-int128-1.c: New test to test ISA
+ 2.07 128-bit arithmetic.
+ * gcc.target/powerpc/p8vector-int128-2.c: Likewise.
+
+ * gcc.target/powerpc/timode_off.c: Restrict cpu type to power5,
+ due to when TImode is allowed in VSX registers, the allowable
+ address modes for TImode is just a single indirect address in
+ order for the value to be loaded and store in either GPR or VSX
+ registers. This affects the generated code, and it would cause
+ this test to fail, when such an option is used.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline r207699.
+ 2014-02-11 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/60137
+ * gcc.target/powerpc/pr60137.c: New file.
+
+ Backport from mainline r207808.
+ 2014-02-15 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/60203
+ * gcc.target/powerpc/pr60203.c: New testsuite.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Little Endian Vector API Support
+ Backport from mainline r206590
+ 2014-01-13 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/insert.c: New.
+ * gcc.dg/vmx/insert-be-order.c: New.
+ * gcc.dg/vmx/extract.c: New.
+ * gcc.dg/vmx/extract-be-order.c: New.
+
+ Backport from mainline r206641
+ 2014-01-15 Bill Schmidt <wschmidt@vnet.linux.ibm.com>
+
+ * gcc.dg/vmx/mult-even-odd.c: New.
+ * gcc.dg/vmx/mult-even-odd-be-order.c: New.
+
+ Backport from mainline r206926
+ 2014-01-22 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/insert-vsx-be-order.c: New.
+ * gcc.dg/vmx/extract-vsx.c: New.
+ * gcc.dg/vmx/extract-vsx-be-order.c: New.
+ * gcc.dg/vmx/insert-vsx.c: New.
+
+ Backport from mainline r207262
+ 2014-01-29 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/merge-be-order.c: New.
+ * gcc.dg/vmx/merge.c: New.
+ * gcc.dg/vmx/merge-vsx-be-order.c: New.
+ * gcc.dg/vmx/merge-vsx.c: New.
+
+ Backport from mainline r207318
+ 2014-01-30 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/splat.c: New.
+ * gcc.dg/vmx/splat-vsx.c: New.
+ * gcc.dg/vmx/splat-be-order.c: New.
+ * gcc.dg/vmx/splat-vsx-be-order.c: New.
+ * gcc.dg/vmx/eg-5.c: Remove special casing for little endian.
+ * gcc.dg/vmx/sn7153.c: Add special casing for little endian.
+
+ Backport from mainline r207414
+ 2014-02-02 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/vsums.c: New.
+ * gcc.dg/vmx/vsums-be-order.c: New.
+
+ Backport from mainline r207415
+ 2014-02-02 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/3b-15.c: Remove special handling for little endian.
+ * gcc.dg/vmx/perm.c: New.
+ * gcc.dg/vmx/perm-be-order.c: New.
+
+ Backport from mainline r207520
+ 2014-02-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/pack.c: New.
+ * gcc.dg/vmx/pack-be-order.c: New.
+ * gcc.dg/vmx/unpack.c: New.
+ * gcc.dg/vmx/unpack-be-order.c: New.
+
+ Backport from mainline r207521
+ 2014-02-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/sum2s.c: New.
+ * gcc.dg/vmx/sum2s-be-order.c: New.
+
+ Backport from mainline 208019
+ 2014-02-21 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/ld.c: New test.
+ * gcc.dg/vmx/ld-be-order.c: New test.
+ * gcc.dg/vmx/ld-vsx.c: New test.
+ * gcc.dg/vmx/ld-vsx-be-order.c: New test.
+ * gcc.dg/vmx/ldl.c: New test.
+ * gcc.dg/vmx/ldl-be-order.c: New test.
+ * gcc.dg/vmx/ldl-vsx.c: New test.
+ * gcc.dg/vmx/ldl-vsx-be-order.c: New test.
+ * gcc.dg/vmx/st.c: New test.
+ * gcc.dg/vmx/st-be-order.c: New test.
+ * gcc.dg/vmx/st-vsx.c: New test.
+ * gcc.dg/vmx/st-vsx-be-order.c: New test.
+ * gcc.dg/vmx/stl.c: New test.
+ * gcc.dg/vmx/stl-be-order.c: New test.
+ * gcc.dg/vmx/stl-vsx.c: New test.
+ * gcc.dg/vmx/stl-vsx-be-order.c: New test.
+
+ Backport from mainline 208021
+ 2014-02-21 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/vsums.c: Check entire result vector.
+ * gcc.dg/vmx/vsums-be-order.c: Likewise.
+
+ Backport from mainline 208049
+ 2014-02-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/lde.c: New test.
+ * gcc.dg/vmx/lde-be-order.c: New test.
+ * gcc.dg/vmx/ste.c: New test.
+ * gcc.dg/vmx/ste-be-order.c: New test.
+
+ Backport from mainline 208120
+ 2014-02-25 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/ld-vsx.c: Don't use vec_all_eq.
+ * gcc.dg/vmx/ld-vsx-be-order.c: Likewise.
+ * gcc.dg/vmx/ldl-vsx.c: Likewise.
+ * gcc.dg/vmx/ldl-vsx-be-order.c: Likewise.
+ * gcc.dg/vmx/merge-vsx.c: Likewise.
+ * gcc.dg/vmx/merge-vsx-be-order.c: Likewise.
+
+ Backport from mainline 208321
+ 2014-03-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/extract-vsx.c: Replace "vector long" with "vector
+ long long" throughout.
+ * gcc.dg/vmx/extract-vsx-be-order.c: Likewise.
+ * gcc.dg/vmx/insert-vsx.c: Likewise.
+ * gcc.dg/vmx/insert-vsx-be-order.c: Likewise.
+ * gcc.dg/vmx/ld-vsx.c: Likewise.
+ * gcc.dg/vmx/ld-vsx-be-order.c: Likewise.
+ * gcc.dg/vmx/ldl-vsx.c: Likewise.
+ * gcc.dg/vmx/ldl-vsx-be-order.c: Likewise.
+ * gcc.dg/vmx/merge-vsx.c: Likewise.
+ * gcc.dg/vmx/merge-vsx-be-order.c: Likewise.
+ * gcc.dg/vmx/st-vsx.c: Likewise.
+ * gcc.dg/vmx/st-vsx-be-order.c: Likewise.
+ * gcc.dg/vmx/stl-vsx.c: Likewise.
+ * gcc.dg/vmx/stl-vsx-be-order.c: Likewise.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Back port from mainline
+ 2014-01-23 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/59909
+ * gcc.target/powerpc/quad-atomic.c: New file to test power8 quad
+ word atomic functions at runtime.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-10-23 Pat Haugen <pthaugen@us.ibm.com>
+
+ * gcc.target/powerpc/direct-move.h: Fix header for executable tests.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-04-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR target/56843
+ * gcc.target/powerpc/recip-1.c: Modify expected output.
+ * gcc.target/powerpc/recip-3.c: Likewise.
+ * gcc.target/powerpc/recip-4.c: Likewise.
+ * gcc.target/powerpc/recip-5.c: Add expected output for iterations.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-08-19 Peter Bergner <bergner@vnet.ibm.com>
+
+ * gcc.target/powerpc/dfp-dd-2.c: New test.
+ * gcc.target/powerpc/dfp-td-2.c: Likewise.
+ * gcc.target/powerpc/dfp-td-3.c: Likewise.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ ELFv2 ABI Support
+ Backport from mainline r204808:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * gcc.target/powerpc/ppc64-abi-1.c (stack_frame_t): Remove
+ compiler and linker field if _CALL_ELF == 2.
+ * gcc.target/powerpc/ppc64-abi-2.c (stack_frame_t): Likewise.
+ * gcc.target/powerpc/ppc64-abi-dfp-1.c (stack_frame_t): Likewise.
+ * gcc.dg/stack-usage-1.c (SIZE): Update value for _CALL_ELF == 2.
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * gcc.target/powerpc/ppc64-abi-dfp-1.c (FUNC_START): New macro.
+ (WRAPPER): Use it.
+ * gcc.target/powerpc/no-r11-1.c: Skip on powerpc_elfv2.
+ * gcc.target/powerpc/no-r11-2.c: Skip on powerpc_elfv2.
+ * gcc.target/powerpc/no-r11-3.c: Skip on powerpc_elfv2.
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * lib/target-supports.exp (check_effective_target_powerpc_elfv2):
+ New function.
+ * gcc.target/powerpc/pr57949-1.c: Disable for powerpc_elfv2.
+ * gcc.target/powerpc/pr57949-2.c: Likewise.
+
+ Backport from mainline r204799:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * g++.dg/eh/ppc64-sighandle-cr.C: New test.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline r201750.
+ Note: Default setting of -mcompat-align-parm inverted!
+
+ 2013-08-14 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR target/57949
+ * gcc.target/powerpc/pr57949-1.c: New.
+ * gcc.target/powerpc/pr57949-2.c: New.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Little Endian Vector Support
+ Backport from mainline r205638
+ 2013-12-03 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vect/costmodel/ppc/costmodel-slp-34.c: Skip for little
+ endian.
+
+ Backport from mainline r205146
+ 2013-11-20 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/pr48258-1.c: Skip for little endian.
+
+ Backport from mainline r204862
+ 2013-11-15 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/3b-15.c: Revise for little endian.
+
+ Backport from mainline r204321
+ 2013-11-02 Bill Schmidt <wschmidt@vnet.linux.ibm.com>
+
+ * gcc.dg/vmx/vec-set.c: New.
+
+ Backport from mainline r204138
+ 2013-10-28 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.dg/vmx/gcc-bug-i.c: Add little endian variant.
+ * gcc.dg/vmx/eg-5.c: Likewise.
+
+ Backport from mainline r203930
+ 2013-10-22 Bill Schmidt <wschmidt@vnet.ibm.com>
+
+ * gcc.target/powerpc/altivec-perm-1.c: Move the two vector pack
+ tests into...
+ * gcc.target/powerpc/altivec-perm-3.c: ...this new test, which is
+ restricted to big-endian targets.
+
+ Backport from mainline r203246
+ 2013-10-07 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/pr43154.c: Skip for ppc64 little endian.
+ * gcc.target/powerpc/fusion.c: Likewise.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-27 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gfortran.dg/nan_7.f90: Disable for little endian PowerPC.
+
+ Backport from mainline r205106:
+
+ 2013-11-20 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * gcc.target/powerpc/darwin-longlong.c (msw): Make endian-safe.
+
+ Backport from mainline r205046:
+
+ 2013-11-19 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * gcc.target/powerpc/ppc64-abi-2.c (MAKE_SLOT): New macro to
+ construct parameter slot value in endian-independent way.
+ (fcevv, fciievv, fcvevv): Use it.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Power8 HTM Support
+ Backport from mainline
+ * lib/target-supports.exp (check_effective_target_powerpc_htm_ok): New
+ function to test if HTM is available.
+ * gcc.target/powerpc/htm-xl-intrin-1.c: New test.
+ * gcc.target/powerpc/htm-builtin-1.c: New test.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Power8 Base Support
+ Backport from mainline
+ 2013-11-22 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/59054
+ * gcc.target/powerpc/direct-move.h (VSX_REG_ATTR): Allow test to
+ specify an appropriate register class for VSX operations.
+ (load_vsx): Use it.
+ (load_gpr_to_vsx): Likewise.
+ (load_vsx_to_gpr): Likewise.
+ * gcc.target/powerpc/direct-move-vint1.c: Use an appropriate
+ register class for VSX registers that the type can handle. Remove
+ checks for explicit number of instructions generated, just check
+ if the instruction is generated.
+ * gcc.target/powerpc/direct-move-vint2.c: Likewise.
+ * gcc.target/powerpc/direct-move-float1.c: Likewise.
+ * gcc.target/powerpc/direct-move-float2.c: Likewise.
+ * gcc.target/powerpc/direct-move-double1.c: Likewise.
+ * gcc.target/powerpc/direct-move-double2.c: Likewise.
+ * gcc.target/powerpc/direct-move-long1.c: Likewise.
+ * gcc.target/powerpc/direct-move-long2.c: Likewise.
+
+ * gcc.target/powerpc/bool3-av.c: Limit to 64-bit mode for now.
+ * gcc.target/powerpc/bool3-p7.c: Likewise.
+ * gcc.target/powerpc/bool3-p8.c: Likewise.
+
+ * gcc.target/powerpc/p8vector-ldst.c: Just check that the
+ appropriate instructions are generated, don't check the count.
+
+ 2013-11-12 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/59054
+ * gcc.target/powerpc/pr59054.c: New test.
+
+ 2013-08-22 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/pr57744.c: Declare abort.
+
+ 2013-07-18 Pat Haugen <pthaugen@us.ibm.com>
+
+ * gcc.target/powerpc/pr57744.c: Fix typo.
+
+ Back port from mainline
+ 2013-10-03 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/p8vector-fp.c: New test for floating point
+ scalar operations when using -mupper-regs-sf and -mupper-regs-df.
+ * gcc.target/powerpc/ppc-target-1.c: Update tests to allow either
+ VSX scalar operations or the traditional floating point form of
+ the instruction.
+ * gcc.target/powerpc/ppc-target-2.c: Likewise.
+ * gcc.target/powerpc/recip-3.c: Likewise.
+ * gcc.target/powerpc/recip-5.c: Likewise.
+ * gcc.target/powerpc/pr72747.c: Likewise.
+ * gcc.target/powerpc/vsx-builtin-3.c: Likewise.
+
+ Back port from mainline
+ 2013-09-27 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/p8vector-ldst.c: New test for -mupper-regs-sf
+ and -mupper-regs-df.
+
+ Back port from mainline
+ 2013-10-17 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/58673
+ * gcc.target/powerpc/pr58673-1.c: New file to test whether
+ -mquad-word + -mno-vsx-timode causes errors.
+ * gcc.target/powerpc/pr58673-2.c: Likewise.
+
+
+ Backport from trunk.
+ 2013-07-23 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/bool2.h: New file, test the code generation
+ of logical operations for power5, altivec, power7, and power8 systems.
+ * gcc.target/powerpc/bool2-p5.c: Likewise.
+ * gcc.target/powerpc/bool2-av.c: Likewise.
+ * gcc.target/powerpc/bool2-p7.c: Likewise.
+ * gcc.target/powerpc/bool2-p8.c: Likewise.
+ * gcc.target/powerpc/bool3.h: Likewise.
+ * gcc.target/powerpc/bool3-av.c: Likewise.
+ * gcc.target/powerpc/bool2-p7.c: Likewise.
+ * gcc.target/powerpc/bool2-p8.c: Likewise.
+
+ Backport from trunk.
+ 2013-07-31 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/fusion.c: New file, test power8 fusion support.
+
+ Back port from the trunk
+ 2013-06-28 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/57744
+ * gcc.target/powerpc/pr57744.c: New test to make sure lqarx and
+ stqcx. get even registers.
+
+ Back port from the trunk
+
+ 2013-06-12 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Pat Haugen <pthaugen@us.ibm.com>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * gcc.target/powerpc/atomic-p7.c: New file, add tests for atomic
+ load/store instructions on power7, power8.
+ * gcc.target/powerpc/atomic-p8.c: Likewise.
+
+ Back port from the trunk
+
+ 2013-06-10 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Pat Haugen <pthaugen@us.ibm.com>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * gcc.target/powerpc/direct-move-vint1.c: New tests for power8
+ direct move instructions.
+ * gcc.target/powerpc/direct-move-vint2.c: Likewise.
+ * gcc.target/powerpc/direct-move.h: Likewise.
+ * gcc.target/powerpc/direct-move-float1.c: Likewise.
+ * gcc.target/powerpc/direct-move-float2.c: Likewise.
+ * gcc.target/powerpc/direct-move-double1.c: Likewise.
+ * gcc.target/powerpc/direct-move-double2.c: Likewise.
+ * gcc.target/powerpc/direct-move-long1.c: Likewise.
+ * gcc.target/powerpc/direct-move-long2.c: Likewise.
+
+ Backport from the trunk
+
+ 2013-06-06 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Pat Haugen <pthaugen@us.ibm.com>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * gcc.target/powerpc/p8vector-builtin-1.c: New test to test
+ power8 builtin functions.
+ * gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c: Likewise.
+ * gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c: Likewise.
+ * gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c: Likewise.
+ * gcc/testsuite/gcc.target/powerpc/p8vector-builtin-5.c: Likewise.
+ * gcc/testsuite/gcc.target/powerpc/p8vector-builtin-6.c: Likewise.
+ * gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c: Likewise.
+ * gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-1.c: New
+ tests to test power8 auto-vectorization.
+ * gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-2.c: Likewise.
+ * gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-3.c: Likewise.
+ * gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-4.c: Likewise.
+ * gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-5.c: Likewise.
+
+ * gcc.target/powerpc/crypto-builtin-1.c: Use effective target
+ powerpc_p8vector_ok instead of powerpc_vsx_ok.
+
+ * gcc.target/powerpc/bool.c: New file, add eqv, nand, nor tests.
+
+ * lib/target-supports.exp (check_p8vector_hw_available) Add power8
+ support.
+ (check_effective_target_powerpc_p8vector_ok): Likewise.
+ (is-effective-target): Likewise.
+ (check_vect_support_and_set_flags): Likewise.
+
+ Backport from trunk
+
+ 2013-05-22 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Pat Haugen <pthaugen@us.ibm.com>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * gcc.target/powerpc/crypto-builtin-1.c: New file, test for power8
+ crypto builtins.
+
+ Backport from mainline
+ 2013-03-20 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/mmfpgpr.c: New test.
+ * gcc.target/powerpc/sd-vsx.c: Likewise.
+ * gcc.target/powerpc/sd-pwr6.c: Likewise.
+ * gcc.target/powerpc/vsx-float0.c: Likewise.
+
+2014-04-01 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ PR libfortran/60128
+ * gfortran.dg/fmt_en.f90: Skip unsupported rounding tests.
+ XFAIL for i?86-*-solaris2.9* and hppa*-*-hpux*.
+
+2014-03-31 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline
+ 2014-03-31 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR rtl-optimization/60700
+ * gcc.target/i386/pr60700.c: New test.
+
+2014-03-28 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR rtl-optimization/60700
+ Backport from mainline
+ 2013-07-30 Zhenqiang Chen <zhenqiang.chen@linaro.org>
+
+ * gcc.target/arm/pr57637.c: New testcase.
+
+2014-04-28 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/60522
+ * gfortran.dg/where_4.f90: New test case.
+
+2014-03-26 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/60419
+ * g++.dg/ipa/pr60419.C: New test.
+
+2014-03-26 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.c-torture/execute/20140326-1.c: New test.
+
+2014-03-20 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/60543
+ PR fortran/60283
+ * gfortran.dg/implicit_pure_4.f90: New.
+
+2014-03-17 Mikael Pettersson <mikpelinux@gmail.com>
+ Committed by Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline:
+
+ 2013-06-16 Joern Rennecke <joern.rennecke@embecosm.com>
+
+ PR rtl-optimization/57425
+ PR rtl-optimization/57569
+ * gcc.dg/torture/pr57425-1.c, gcc.dg/torture/pr57425-2.c: New files.
+ * gcc.dg/torture/pr57425-3.c, gcc.dg/torture/pr57569.c: Likewise.
+
+2014-03-17 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-03-11 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60429
+ PR tree-optimization/60485
+ * gcc.dg/pr60485-1.c: New testcase.
+ * gcc.dg/pr60485-2.c: Likewise.
+
+2014-03-15 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ Backport from mainline
+ PR libfortran/60128
+ * gfortran.dg/fmt_en.f90: New test.
+
+2014-03-15 Jerry DeLisle <jvdelisle@gcc.gnu>
+
+ Backport from mainline
+ PR libfortran/58324
+ * gfortran.dg/list_read_12.f90: New test.
+
+2014-03-13 Joey Ye <joey.ye@arm.com>
+
+ Backport from mainline
+ 2014-03-12 Thomas Preud'homme <thomas.preudhomme@arm.com>
+
+ PR tree-optimization/60454
+ * gcc.c-torture/execute/pr60454.c: New test.
+
+2014-03-08 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/60450
+ * gfortran.dg/shape_8.f90: New.
+
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
+
+ Backport from mainline
+ 2014-02-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/37743
+ * g++.dg/ext/builtin-bswap1.C: New test.
+ * c-c++-common/pr37743.c: New test.
+
+ PR preprocessor/58844
+ * c-c++-common/cpp/pr58844-1.c: New test.
+ * c-c++-common/cpp/pr58844-2.c: New test.
+
+ 2014-02-13 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/43546
+ * gcc.target/i386/pr43546.c: New test.
+
+ 2014-02-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/60101
+ * c-c++-common/pr60101.c: New test.
+
+ 2014-02-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/52370
+ * gfortran.dg/pr52370.f90: New test.
+
+ PR debug/59776
+ * gcc.dg/guality/pr59776.c: New test.
+
+ 2014-02-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR preprocessor/56824
+ * gcc.dg/pr56824.c: New test.
+
+ 2014-02-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/60062
+ * gcc.c-torture/execute/pr60062.c: New test.
+ * gcc.c-torture/execute/pr60072.c: New test.
+
+ 2014-02-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR ipa/60026
+ * c-c++-common/torture/pr60026.c: New test.
+
+ 2014-02-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/57499
+ * g++.dg/torture/pr57499.C: New test.
+
+ 2014-03-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR preprocessor/60400
+ * c-c++-common/cpp/pr60400.c: New test.
+ * c-c++-common/cpp/pr60400-1.h: New file.
+ * c-c++-common/cpp/pr60400-2.h: New file.
+
+2014-03-04 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60382
+ * gcc.dg/vect/pr60382.c: New testcase.
+
+2014-03-02 Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/60341
+ * gfortran.dg/str_comp_optimize_1.f90: New test.
+
+2014-02-25 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-02-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60276
+ * gcc.dg/vect/pr60276.c: New testcase.
+
+2014-02-25 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-02-14 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60183
+ * gcc.dg/torture/pr60183.c: New testcase.
+
+2014-02-24 Fabien Chêne <fabien@gcc.gnu.org>
+
+ PR c++/37140
+ * g++.dg/template/using27.C: New.
+ * g++.dg/template/using28.C: New.
+ * g++.dg/template/using29.C: New.
+
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
+
+ * gcc/testsuite/gcc.target/microblaze/others/mem_reload.c: New test.
+
+2014-02-22 Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/59599
+ * gfortran.dg/ichar_3.f90: New test.
+
+2014-02-21 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ Backport from mainline
+ PR fortran/59700
+ * gfortran.dg/pr59700.f90: New test.
+
+2014-02-21 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/55260
+ * gcc.dg/ipa/pr55260.c: New test.
+
+2014-02-19 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/49397
+ * gfortran.dg/proc_ptr_45.f90: New.
+ * gfortran.dg/proc_ptr_46.f90: New.
+
+2014-02-19 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2014-02-19 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/59794
+ * gcc.target/i386/pr39162.c: Add dg-prune-output.
+ (dg-options): Remove -Wno-psabi.
+ * gcc.target/i386/pr59794-2.c: Ditto.
+ * gcc.target/i386/sse-5.c: Ditto.
+
+2014-02-19 Janus Weil <janus@gcc.gnu.org>
+
+ Backports from mainline:
+ 2014-02-17 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/55907
+ * gfortran.dg/init_flag_12.f90: New.
+
+ 2014-02-18 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/60231
+ * gfortran.dg/typebound_generic_15.f90: New.
+
+2014-02-18 Kai Tietz <ktietz@redhat.com>
+
+ PR target/60193
+ * gcc.target/i386/nest-1.c: New testcase.
+
+2014-02-18 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/opt32.adb: New test.
+
+2014-02-15 Jerry DeLisle <jvdelisle@gcc.gnu>
+ Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ Backport from mainline
+ PR libfortran/59771
+ PR libfortran/59774
+ PR libfortran/59836
+ * gfortran.dg/fmt_g_1.f90: New test.
+ * gfortran.dg/round_3.f08: New cases added.
+
+2014-02-13 Dominik Vogt <vogt@linux.vnet.ibm.com>
+
+ * gcc.target/s390/hotpatch-compile-8.c: New test.
+
+2014-02-12 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.c-torture/execute/20140212-1.c: New test.
+
+2014-02-10 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2014-01-30 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59903
+ * gcc.dg/torture/pr59903.c: New testcase.
+
+ 2014-02-10 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/60115
+ * gcc.dg/torture/pr60115.c: New testcase.
+
+2014-02-09 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-10-21 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/58803
+ PR fortran/59395
+ * gfortran.dg/proc_ptr_comp_38.f90: New.
+
+2014-02-08 Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/57033
+ * gfortran.dg/default_initialization_7.f90: New test.
+
+2014-02-07 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/59906
+ * gfortran.dg/elemental_subroutine_9.f90 : New test
+
+2014-02-04 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2014-02-02 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/60017
+ * gcc.c-torture/execute/pr60017.c: New test.
+
+2014-02-01 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/59414
+ * gfortran.dg/allocate_class_3.f90 : New test
+
+2014-01-30 David Holsgrove <david.holsgrove@xilinx.com>
+
+ Backport from mainline.
+ * gcc.target/microblaze/isa/fcmp4.c: New.
+
+2014-01-26 Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/58007
+ * gfortran.dg/unresolved_fixup_1.f90: New test.
+ * gfortran.dg/unresolved_fixup_2.f90: New test.
+
+2014-01-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline.
+ 2014-01-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/59929
+ * gcc.target/i386/pr59929.c: New test.
+
+2014-01-24 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/57524
+ * g++.dg/ext/timevar2.C: New.
+
+2014-01-23 David Holsgrove <david.holsgrove@xilinx.com>
+
+ Backport from mainline.
+ * gcc.target/microblaze/others/builtin-trap.c: New test.
+
+2014-01-23 Marek Polacek <polacek@redhat.com>
+
+ Backport from mainline
+ 2013-10-21 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/58809
+ * gcc.dg/gomp/pr58809.c: New test.
+
+2014-01-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/58809
+ * c-c++-common/gomp/pr58809.c: New test.
+
+2014-01-22 Marek Polacek <polacek@redhat.com>
+
+ Backport from mainline
+ 2014-01-22 Marek Polacek <polacek@redhat.com>
+
+ PR c/59891
+ * gcc.dg/torture/pr59891.c: New test.
+
+2014-01-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/59860
+ * gcc.dg/strlenopt-4.c: Expect the same counts on s390*-* as on all
+ other targets.
+
+2014-01-20 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/59860
+ * gcc.dg/pr59860.c: New testcase.
+
+2014-01-20 Marek Polacek <polacek@redhat.com>
+
+ Backported from mainline
+ 2014-01-17 Marek Polacek <polacek@redhat.com>
+
+ PR c++/59838
+ * g++.dg/diagnostic/pr59838.C: New test.
+
+2014-01-19 Paul Thomas <pault@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-12-01 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/34547
+ * gfortran.dg/null_5.f90 : Include new error.
+ * gfortran.dg/null_6.f90 : Include new error.
+
+2014-01-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline
+ 2014-01-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/59794
+ * c-c++-common/convert-vec-1.c: Also prune ABI change for
+ Linux/x86.
+ * g++.dg/cpp0x/constexpr-53094-2.C: Likewise.
+ * g++.dg/ext/attribute-test-1.C: Likewise.
+ * g++.dg/ext/attribute-test-2.C: Likewise.
+ * g++.dg/ext/attribute-test-3.C: Likewise.
+ * g++.dg/ext/attribute-test-4.C: Likewise.
+ * g++.dg/torture/pr38565.C: Likewise.
+ * gcc.dg/pr53060.c: Likewise.
+ * c-c++-common/scal-to-vec2.c: Add -msse2 for x86.
+ * c-c++-common/vector-compare-2.c: Likewise.
+ * gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c: Likewise.
+ * g++.dg/conversion/simd1.C: Add -msse2 for x86. Adjust
+ dg-message line number.
+
+2014-01-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline
+ 2014-01-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/59794
+ * gcc.target/i386/pr39162.c (y): New __m256i variable.
+ (bar): Change return type to void. Set y to x.
+ * gcc.target/i386/pr59794-1.c: New testcase.
+ * gcc.target/i386/pr59794-2.c: Likewise.
+ * gcc.target/i386/pr59794-3.c: Likewise.
+ * gcc.target/i386/pr59794-4.c: Likewise.
+ * gcc.target/i386/pr59794-5.c: Likewise.
+ * gcc.target/i386/pr59794-6.c: Likewise.
+ * gcc.target/i386/pr59794-7.c: Likewise.
+
+2014-01-17 Matthias Klose <doko@ubuntu.com>
+
+ Backport from the trunk:
+ 2014-01-09 Uros Bizjak <ubizjak@gmail.com>
+ * go.test/go-test.exp (go-gc-tests): Don't run peano.go on systems
+ which don't support -fsplit-stack. Skip rotate[0123].go tests.
+
+2014-01-15 Kugan Vivekanandarajah <kuganv@linaro.org>
+
+ Backport from mainline
+ 2014-01-15 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
+ Kugan Vivekanandarajah <kuganv@linaro.org>
+
+ PR target/59695
+ * g++.dg/pr59695.C: New testcase.
+
+2014-01-17 Terry Guo <terry.guo@arm.com>
+
+ * gcc.target/arm/pr59826.c: New test.
+
+2014-01-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/59839
+ * gcc.target/i386/pr59839.c: New test.
+
+ PR debug/54694
+ * gcc.target/i386/pr9771-1.c (main): Rename to...
+ (real_main): ... this. Add __asm name "main".
+ (ASMNAME, ASMNAME2, STRING): Define.
+
+2014-01-16 Marek Polacek <polacek@redhat.com>
+
+ Backported from mainline
+ 2014-01-16 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/59827
+ * gcc.dg/pr59827.c: New test.
+
+2014-01-15 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ PR target/59803
+ * gcc.c-torture/compile/pr59803.c: New testcase.
+
+2014-01-10 Yufeng Zhang <yufeng.zhang@arm.com>
+
+ * gcc.target/arm/neon/vst1Q_laneu64-1.c: New test.
+
+2014-01-10 Hans-Peter Nilsson <hp@axis.com>
+
+ * gcc.dg/pr46309.c: Disable for cris*-*-*.
+
+2014-01-10 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/56060
+ PR c++/59730
+ * g++.dg/cpp0x/variadic144.C: New.
+ * g++.dg/cpp0x/variadic145.C: Likewise.
+
+2014-01-10 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59715
+ * gcc.dg/torture/pr59715.c: New testcase.
+
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * gcc.target/mips/bswap-1.c, gcc.target/mips/bswap-2.c,
+ gcc.target/mips/bswap-3.c, gcc.target/mips/bswap-4.c,
+ gcc.target/mips/bswap-5.c, gcc.target/mips/bswap-6.c: New tests.
+
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
+
+ PR rtl-optimization/59137
+ * gcc.target/mips/pr59137.c: New test.
+
+2014-01-09 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2013-11-18 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59125
+ PR tree-optimization/54570
+ * gcc.dg/builtin-object-size-8.c: Un-xfail.
+ * gcc.dg/builtin-object-size-14.c: New testcase.
+ * gcc.dg/strlenopt-14gf.c: Adjust.
+ * gcc.dg/strlenopt-1f.c: Likewise.
+ * gcc.dg/strlenopt-4gf.c: Likewise.
+
+ 2013-12-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/59362
+ * gcc.c-torture/compile/pr59362.c: New test.
+
+2014-01-09 Richard Earnshaw <rearnsha@arm.com>
+
+ PR rtl-optimization/54300
+ * gcc.target/arm/pr54300.C: New test.
+
+2014-01-08 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/59610
+ * gcc.dg/ipa/pr59610.c: New test.
+
+2014-01-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/58668
+ * gcc.dg/pr58668.c: New test.
+
+ Backported from mainline
+ 2013-12-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/58956
+ PR middle-end/59470
+ * gcc.target/i386/pr59470.c: New test.
+
+2014-01-04 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2014-01-02 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/59654
+ * gfortran.dg/dynamic_dispatch_12.f90: New.
+
+2014-01-03 Joseph Myers <joseph@codesourcery.com>
+
+ * gcc.target/powerpc/rs6000-ldouble-3.c: New test.
+
+2014-01-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/59625
+ * gcc.target/i386/pr59625.c: New test.
+
+2014-01-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/59647
+ * g++.dg/opt/pr59647.C: New test.
+
+2013-12-31 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-12-30 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/58998
+ * gfortran.dg/generic_28.f90: New.
+
+2013-12-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/59255
+ * g++.dg/tree-prof/pr59255.C: New test.
+
+2013-12-19 James Greenhalgh <james.greenhalgh@arm.com>
+
+ Backport from Mainline
+ 2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * gcc.target/aarch64/scalar_intrinsics.c (force_simd): New.
+ (test_vceqd_s64): Force arguments to SIMD registers.
+ (test_vceqzd_s64): Likewise.
+ (test_vcged_s64): Likewise.
+ (test_vcled_s64): Likewise.
+ (test_vcgezd_s64): Likewise.
+ (test_vcged_u64): Likewise.
+ (test_vcgtd_s64): Likewise.
+ (test_vcltd_s64): Likewise.
+ (test_vcgtzd_s64): Likewise.
+ (test_vcgtd_u64): Likewise.
+ (test_vclezd_s64): Likewise.
+ (test_vcltzd_s64): Likewise.
+ (test_vtst_s64): Likewise.
+ (test_vtst_u64): Likewise.
+
+2013-12-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
+ Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ Backport from mainline
+ 2013-12-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
+ * gcc/testsuite/gcc.target/s390/hotpatch-1.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-2.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-3.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-4.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-5.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-6.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-7.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-8.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-9.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-10.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-11.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-12.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c: New test
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c: New test
+
+2013-12-18 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-12-15 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/59493
+ * gfortran.dg/unlimited_polymorphic_15.f90: New.
+
+2013-12-15 Uros Bizjak <ubizjak@gmail.com>
+
+ PR testsuite/58630
+ * gcc.target/i386/pr43662.c (dg-options):
+ Add -maccumulate-outgoing-args.
+ * gcc.target/i386/pr43869.c (dg-options): Ditto.
+ * gcc.target/i386/pr57003.c (dg-options): Ditto.
+ * gcc.target/i386/avx-vzeroupper-16.c (dg-options):
+ Remove -mtune=generic and add -maccumulate-outgoing-args instead.
+ * gcc.target/i386/avx-vzeroupper-17.c (dg-options): Ditto.
+ * gcc.target/i386/avx-vzeroupper-18.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/func-1.c (dg-options):
+ Add -maccumulate-outgoing-args.
+ * gcc.target/x86_64/abi/callabi/func-2a.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/func-2b.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/func-indirect.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/func-indirect-2a.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/func-indirect-2b.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/leaf-1.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/leaf-2.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/pr38891.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/vaarg-1.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/vaarg-2.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/vaarg-3.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/vaarg-4a.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/vaarg-4b.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/vaarg-5a.c (dg-options): Ditto.
+ * gcc.target/x86_64/abi/callabi/vaarg-5b.c (dg-options): Ditto.
+
+2013-12-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/59470
+ * g++.dg/opt/pr59470.C: New test.
+
+ PR libgomp/59467
+ * gfortran.dg/gomp/pr59467.f90: New test.
+ * c-c++-common/gomp/pr59467.c: New test.
+
+2013-12-12 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2013-12-12 Ryan Mansfield <rmansfield@qnx.com>
+
+ PR testsuite/59442
+ * gcc.target/i386/sse2-movapd-1.c: Fix alignment attributes.
+ * gcc.target/i386/sse2-movapd-2.c: Likewise.
+ * gcc.target/i386/avx-vmovapd-256-1.c: Likewise.
+ * gcc.target/i386/avx-vmovapd-256-2.c: Likewise.
+
+2013-12-08 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2013-12-06 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/59405
+ * gcc.target/i386/pr59405.c: New test.
+
+2013-12-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/59388
+ * gcc.c-torture/execute/pr59388.c: New test.
+
+2013-12-06 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2013-11-28 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59330
+ * gcc.dg/torture/pr59330.c: New testcase.
+
+2013-12-06 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2013-11-27 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59288
+ * gcc.dg/torture/pr59288.c: New testcase.
+
+ 2013-11-19 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59164
+ * gcc.dg/torture/pr59164.c: New testcase.
+
+ 2013-09-05 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/58137
+ * gcc.target/i386/pr58137.c: New testcase.
+
+2013-12-06 Oleg Endo <olegendo@gcc.gnu.org>
+
+ PR target/51244
+ PR target/59343
+ * gcc.target/sh/pr51244-19.c: Adjust test case.
+
+2013-12-05 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2013-11-19 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/58956
+ * gcc.dg/torture/pr58956.c: New testcase.
+
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/59268
+ * g++.dg/cpp0x/constexpr-template6.C: New test.
+
+ PR rtl-optimization/58726
+ * gcc.c-torture/execute/pr58726.c: New test.
+
+ PR target/59163
+ * g++.dg/torture/pr59163.C: New test.
+
+2013-12-03 Marek Polacek <polacek@redhat.com>
+
+ Backport from mainline
+ 2013-12-03 Marek Polacek <polacek@redhat.com>
+
+ PR c/59351
+ * gcc.dg/pr59351.c: New test.
+
+2013-12-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/59011
+ * gcc.dg/pr59011.c: New test.
+
+ PR target/58864
+ * g++.dg/opt/pr58864.C: New test.
+
+2013-12-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/59358
+ * gcc.c-torture/execute/pr59358.c: New test.
+
+2013-12-02 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59139
+ * gcc.dg/torture/pr59139.c: New testcase.
+
+2013-11-27 Tom de Vries <tom@codesourcery.com>
+ Marc Glisse <marc.glisse@inria.fr>
+
+ PR c++/59032
+ * c-c++-common/pr59032.c: New testcase.
+
+2013-11-27 Tom de Vries <tom@codesourcery.com>
+ Marc Glisse <marc.glisse@inria.fr>
+
+ PR middle-end/59037
+ * c-c++-common/pr59037.c: New testcase.
+
+2013-11-30 Paul Thomas <pault@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-11-04 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/57445
+ * gfortran.dg/optional_class_1.f90 : New test
+
+2013-11-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/59280
+ * c-c++-common/pr59280.c: New test.
+
+2013-11-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/59297
+ * g++.dg/gomp/pr59297.C: New test.
+
+2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ Backport from mainline
+ 2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * gcc.target/arm/vrinta-ce.c: New testcase.
+
+2013-11-28 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2013-11-23 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/56788
+ * config/i386/i386.c (bdesc_multi_arg) <IX86_BUILTIN_VFRCZSS>:
+ Declare as MULTI_ARG_1_SF instruction.
+ <IX86_BUILTIN_VFRCZSD>: Decleare as MULTI_ARG_1_DF instruction.
+ * config/i386/sse.md (*xop_vmfrcz<mode>2): Rename
+ from *xop_vmfrcz_<mode>.
+ * config/i386/xopintrin.h (_mm_frcz_ss): Use __builtin_ia32_movss
+ to merge scalar result with __A.
+ (_mm_frcz_sd): Use __builtin_ia32_movsd to merge scalar
+ result with __A.
+
+2013-11-28 Terry Guo <terry.guo@arm.com>
+
+ Backport mainline r205391
+ 2013-11-26 Terry Guo <terry.guo@arm.com>
+
+ * gcc.target/arm/thumb1-pic-high-reg.c: New case.
+ * gcc.target/arm/thumb1-pic-single-base.c: New case.
+
+2013-11-27 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2013-11-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/59014
+ * gcc.c-torture/execute/pr59014-2.c: New test.
+
+ 2013-11-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/59014
+ * gcc.c-torture/execute/pr59014.c: New test.
+
+2013-11-27 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.c-torture/execute/20131127-1.c: New test.
+
+2013-11-25 Vidya Praveen <vidyapraveen@arm.com>
+
+ Backport from mainline
+ 2013-10-21 Vidya Praveen <vidyapraveen@arm.com>
+
+ * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort().
+ * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort() and exit().
+
+2013-11-20 Dominik Vogt <vogt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ * gcc.target/s390/htm-1.c: Rename to ...
+ * gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c: ... this
+ one.
+ * gcc.target/s390/htm-xl-intrin-1.c: Rename to ...
+ * gcc.target/s390/htm-builtins-compile-3.c: ... this one.
+ * gcc.target/s390/htm-builtins-compile-2.c: New testcase.
+ * gcc.target/s390/htm-builtins-1.c: New testcase.
+ * gcc.target/s390/htm-builtins-2.c: New testcase.
+ * gcc.target/s390/s390.exp: Add check for htm machine.
+
+2013-11-19 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/57517
+ * gfortran.fortran-torture/compile/pr57517.f90: New testcase.
+ * gcc.dg/torture/pr57517.c: Likewise.
+
+2013-11-19 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2013-11-05 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/58941
+ * gcc.dg/torture/pr58941.c: New testcase.
+
+2013-11-18 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2013-10-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/58794
+ * c-c++-common/torture/pr58794-1.c: New testcase.
+ * c-c++-common/torture/pr58794-2.c: Likewise.
+
+ 2013-10-21 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/58742
+ * c-c++-common/fold-divmul-1.c: New testcase.
+
+ 2013-11-06 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/58653
+ * gcc.dg/tree-ssa/predcom-6.c: New testcase.
+ * gcc.dg/tree-ssa/predcom-7.c: Likewise.
+
+ PR tree-optimization/59047
+ * gcc.dg/torture/pr59047.c: New testcase.
+
+ 2013-10-15 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/58143
+ * gcc.dg/torture/pr58143-1.c: New testcase.
+ * gcc.dg/torture/pr58143-2.c: Likewise.
+ * gcc.dg/torture/pr58143-3.c: Likewise.
+
+2013-11-17 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-11-07 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/58471
+ * gfortran.dg/constructor_9.f90: New.
+
+2013-11-16 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-09-20 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/58099
+ * gfortran.dg/proc_ptr_43.f90: New.
+
+2013-11-16 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/58771
+ * gfortran.dg/derived_external_function_1.f90 : New test
+
+2013-11-14 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2013-11-06 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/59021
+ * gcc.target/i386/pr59021.c: New test.
+
+2013-11-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/59101
+ * gcc.c-torture/execute/pr59101.c: New test.
+
+2013-11-11 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2013-11-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/58970
+ * gcc.c-torture/compile/pr58970-1.c: New test.
+ * gcc.c-torture/compile/pr58970-2.c: New test.
+
+ 2013-11-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/58997
+ * gcc.c-torture/compile/pr58997.c: New test.
+
+2013-11-10 Wei Mi <wmi@google.com>
+
+ * gcc.dg/pr57518.c: Backport regex fix from r200720.
+
+2013-11-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline
+ 2013-11-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/59034
+ * gcc.target/i386/pr59034-1.c: New test.
+ * gcc.target/i386/pr59034-2.c: Likewise.
+
+2013-11-06 Wei Mi <wmi@google.com>
+
+ PR regression/58985
+ * gcc.dg/pr57518.c: Add subreg in regexp pattern.
+
+2013-11-05 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/58989
+ * gfortran.dg/reshape_6.f90: New test.
+
+2013-11-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/58984
+ * gcc.c-torture/execute/pr58984.c: New test.
+
+2013-11-04 Marek Polacek <polacek@redhat.com>
+
+ Backport from mainline
+ 2013-11-04 Marek Polacek <polacek@redhat.com>
+
+ PR c++/58979
+ * g++.dg/diagnostic/pr58979.C: New test.
+
+2013-11-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline
+ 2013-10-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/58690
+ * gcc.target/i386/pr58690.c: New test
+
+2013-11-02 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from mainline
+ 2013-09-23 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/58355
+ * gfortran.dg/extends_15.f90: New.
+
+2013-10-29 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2013-08-08 Richard Sandiford <rdsandiford@googlemail.com>
+
+ PR rtl-optimization/58079
+ * gcc.dg/torture/pr58079.c: New test.
+
+2013-10-28 Tom de Vries <tom@codesourcery.com>
+
+ * gcc.target/arm/require-pic-register-loc.c: New test.
+
+2013-10-26 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2013-10-22 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/58779
+ * gcc.target/i386/pr30315.c: Remove MINUSCC, DECCC, MINUSCCONLY
+ and MINUSCCZEXT defines. Update scan-assembler dg directive.
+ * gcc.dg/torture/pr58779.c: New test.
+
+2013-10-25 Richard Henderson <rth@redhat.com>
+
+ PR rtl/58542
+ * gcc.dg/atomic-store-6.c: New.
+
+2013-10-25 Tom de Vries <tom@codesourcery.com>
+
+ PR c++/58282
+ * g++.dg/tm/noexcept-6.C: New test.
+
+2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.c-torture/execute/pr58831.c: New test.
+
+2013-10-23 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/58805
+ * gcc.dg/pr58805.c: New test.
+
+2013-10-23 Richard Biener <rguenther@suse.de>
+
+ * gcc.dg/torture/pr58830.c: New testcase.
+
+ Backport from mainline
+ 2013-06-24 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/57488
+ * gcc.dg/torture/pr57488.c: New testcase.
+
+2013-10-19 Oleg Endo <olegendo@gcc.gnu.org>
+
+ * gcc.target/sh/pr54089-3.c: Fix test for load of constant 31.
+
+2013-10-17 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/58596
+ * g++.dg/cpp0x/lambda/lambda-nsdmi5.C: New
+
+2013-10-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/58633
+ * g++.dg/cpp0x/decltype57.C: New.
+ * g++.dg/cpp0x/enum18.C: Revert r174385 changes.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
@@ -494,7 +2356,7 @@
2013-06-19 Wei Mi <wmi@google.com>
PR rtl-optimization/57518
- * testsuite/gcc.dg/pr57518.c: New test.
+ * gcc.dg/pr57518.c: New test.
2013-06-11 Tobias Burnus <burnus@net-b.de>
@@ -1102,7 +2964,7 @@
2013-03-29 Tobias Burnus <burnus@net-b.de>
PR fortran/56737
- * testsuite/gfortran.dg/fmt_cache_3.f90: New.
+ * gfortran.dg/fmt_cache_3.f90: New.
2013-04-02 Richard Biener <rguenther@suse.de>
@@ -1636,7 +3498,7 @@
2013-02-20 Jan Hubicka <jh@suse.cz>
PR tree-optimization/56265
- * testsuite/g++.dg/ipa/devirt-11.C: New testcase.
+ * g++.dg/ipa/devirt-11.C: New testcase.
2013-02-20 Richard Biener <rguenther@suse.de>
@@ -1823,11 +3685,9 @@
Avoid instrumenting duplicated memory access in the same basic block
* c-c++-common/asan/no-redundant-instrumentation-1.c: New test.
- * testsuite/c-c++-common/asan/no-redundant-instrumentation-2.c:
- Likewise.
- * testsuite/c-c++-common/asan/no-redundant-instrumentation-3.c:
- Likewise.
- * testsuite/c-c++-common/asan/inc.c: Likewise.
+ * c-c++-common/asan/no-redundant-instrumentation-2.c: Likewise.
+ * c-c++-common/asan/no-redundant-instrumentation-3.c: Likewise.
+ * c-c++-common/asan/inc.c: Likewise.
2013-02-12 Vladimir Makarov <vmakarov@redhat.com>
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr58844-1.c b/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr58844-1.c
new file mode 100644
index 000000000..3abf8a768
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr58844-1.c
@@ -0,0 +1,8 @@
+/* PR preprocessor/58844 */
+/* { dg-do compile } */
+/* { dg-options "-ftrack-macro-expansion=0" } */
+
+#define A x######x
+int A = 1;
+#define A x######x /* { dg-message "previous definition" } */
+#define A x##x /* { dg-warning "redefined" } */
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr58844-2.c b/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr58844-2.c
new file mode 100644
index 000000000..1e219152f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr58844-2.c
@@ -0,0 +1,8 @@
+/* PR preprocessor/58844 */
+/* { dg-do compile } */
+/* { dg-options "-ftrack-macro-expansion=2" } */
+
+#define A x######x
+int A = 1;
+#define A x######x /* { dg-message "previous definition" } */
+#define A x##x /* { dg-warning "redefined" } */
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr60400-1.h b/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr60400-1.h
new file mode 100644
index 000000000..3e32175fe
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr60400-1.h
@@ -0,0 +1,3 @@
+??=ifndef PR60400_1_H
+??=define PR60400_1_H
+??=endif
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr60400-2.h b/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr60400-2.h
new file mode 100644
index 000000000..d9a590636
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr60400-2.h
@@ -0,0 +1,4 @@
+??=ifndef PR60400_2_H
+??=define PR60400_2_H
+??=include "pr60400-1.h"
+??=endif
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr60400.c b/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr60400.c
new file mode 100644
index 000000000..fc3e0d9f4
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/cpp/pr60400.c
@@ -0,0 +1,13 @@
+/* PR preprocessor/60400 */
+/* { dg-do compile } */
+/* { dg-options "-trigraphs -Wtrigraphs" } */
+
+??=include "pr60400-1.h"
+??=include "pr60400-2.h"
+
+/* { dg-warning "trigraph" "" { target *-*-* } 1 } */
+/* { dg-warning "trigraph" "" { target *-*-* } 2 } */
+/* { dg-warning "trigraph" "" { target *-*-* } 3 } */
+/* { dg-warning "trigraph" "" { target *-*-* } 4 } */
+/* { dg-warning "trigraph" "" { target *-*-* } 5 } */
+/* { dg-warning "trigraph" "" { target *-*-* } 6 } */
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/fold-divmul-1.c b/gcc-4.8/gcc/testsuite/c-c++-common/fold-divmul-1.c
new file mode 100644
index 000000000..5c867923d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/fold-divmul-1.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-fdump-tree-original" } */
+
+int *
+fx (int *b, int *e)
+{
+ return b + (e - b);
+}
+
+/* { dg-final { scan-tree-dump-not "/\\\[ex\\\]" "original" } } */
+/* { dg-final { cleanup-tree-dump "original" } } */
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/gomp/pr58809.c b/gcc-4.8/gcc/testsuite/c-c++-common/gomp/pr58809.c
new file mode 100644
index 000000000..d1ea51b99
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/gomp/pr58809.c
@@ -0,0 +1,31 @@
+/* PR middle-end/58809 */
+/* { dg-do compile } */
+/* { dg-options "-fopenmp" } */
+
+_Complex int j;
+_Complex double d;
+
+void
+foo (void)
+{
+ #pragma omp parallel reduction (&:j) /* { dg-error "has invalid type for" } */
+ ;
+ #pragma omp parallel reduction (|:j) /* { dg-error "has invalid type for" } */
+ ;
+ #pragma omp parallel reduction (^:j) /* { dg-error "has invalid type for" } */
+ ;
+ #pragma omp parallel reduction (min:j) /* { dg-error "has invalid type for" } */
+ ;
+ #pragma omp parallel reduction (max:j) /* { dg-error "has invalid type for" } */
+ ;
+ #pragma omp parallel reduction (&:d) /* { dg-error "has invalid type for" } */
+ ;
+ #pragma omp parallel reduction (|:d) /* { dg-error "has invalid type for" } */
+ ;
+ #pragma omp parallel reduction (^:d) /* { dg-error "has invalid type for" } */
+ ;
+ #pragma omp parallel reduction (min:d) /* { dg-error "has invalid type for" } */
+ ;
+ #pragma omp parallel reduction (max:d) /* { dg-error "has invalid type for" } */
+ ;
+}
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/gomp/pr59467.c b/gcc-4.8/gcc/testsuite/c-c++-common/gomp/pr59467.c
new file mode 100644
index 000000000..475182a62
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/gomp/pr59467.c
@@ -0,0 +1,68 @@
+/* PR libgomp/59467 */
+
+int v;
+
+void
+foo (void)
+{
+ int x = 0, y = 0;
+ #pragma omp parallel
+ {
+ int z;
+ #pragma omp single copyprivate (x) /* { dg-error "is not threadprivate or private in outer context" } */
+ {
+ #pragma omp atomic write
+ x = 6;
+ }
+ #pragma omp atomic read
+ z = x;
+ #pragma omp atomic
+ y += z;
+ }
+ #pragma omp parallel
+ {
+ int z;
+ #pragma omp single copyprivate (v) /* { dg-error "is not threadprivate or private in outer context" } */
+ {
+ #pragma omp atomic write
+ v = 6;
+ }
+ #pragma omp atomic read
+ z = v;
+ #pragma omp atomic
+ y += z;
+ }
+ #pragma omp parallel private (x)
+ {
+ int z;
+ #pragma omp single copyprivate (x)
+ {
+ #pragma omp atomic write
+ x = 6;
+ }
+ #pragma omp atomic read
+ z = x;
+ #pragma omp atomic
+ y += z;
+ }
+ x = 0;
+ #pragma omp parallel reduction (+:x)
+ {
+ #pragma omp single copyprivate (x)
+ {
+ #pragma omp atomic write
+ x = 6;
+ }
+ #pragma omp atomic
+ y += x;
+ }
+ #pragma omp single copyprivate (x)
+ {
+ x = 7;
+ }
+ #pragma omp single copyprivate (v) /* { dg-error "is not threadprivate or private in outer context" } */
+ {
+ #pragma omp atomic write
+ v = 6;
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/pr36282-1.c b/gcc-4.8/gcc/testsuite/c-c++-common/pr36282-1.c
new file mode 100644
index 000000000..abe11e7ec
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/pr36282-1.c
@@ -0,0 +1,12 @@
+/* PR middle-end/36282 */
+/* { dg-do compile } */
+
+#pragma weak bar
+
+extern void *baz (void *dest, const void *src, __SIZE_TYPE__ n);
+extern __typeof (baz) baz __asm("bazfn"); /* { dg-bogus "asm declaration ignored due to conflict with previous rename" } */
+
+void
+foo (void)
+{
+}
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/pr36282-2.c b/gcc-4.8/gcc/testsuite/c-c++-common/pr36282-2.c
new file mode 100644
index 000000000..86d3ad657
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/pr36282-2.c
@@ -0,0 +1,10 @@
+/* PR middle-end/36282 */
+/* { dg-do compile } */
+
+extern void *baz (void *dest, const void *src, __SIZE_TYPE__ n);
+extern __typeof (baz) baz __asm("bazfn"); /* { dg-bogus "asm declaration ignored due to conflict with previous rename" } */
+
+void
+foo (void)
+{
+}
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/pr36282-3.c b/gcc-4.8/gcc/testsuite/c-c++-common/pr36282-3.c
new file mode 100644
index 000000000..8982470c0
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/pr36282-3.c
@@ -0,0 +1,13 @@
+/* PR middle-end/36282 */
+/* { dg-do compile } */
+
+void bar (void);
+#pragma weak bar
+
+extern void *baz (void *dest, const void *src, __SIZE_TYPE__ n);
+extern __typeof (baz) baz __asm("bazfn"); /* { dg-bogus "asm declaration ignored due to conflict with previous rename" } */
+
+void
+foo (void)
+{
+}
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/pr36282-4.c b/gcc-4.8/gcc/testsuite/c-c++-common/pr36282-4.c
new file mode 100644
index 000000000..f6f40f8e4
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/pr36282-4.c
@@ -0,0 +1,13 @@
+/* PR middle-end/36282 */
+/* { dg-do compile } */
+
+#pragma weak bar
+void bar (void);
+
+extern void *baz (void *dest, const void *src, __SIZE_TYPE__ n);
+extern __typeof (baz) baz __asm("bazfn"); /* { dg-bogus "asm declaration ignored due to conflict with previous rename" } */
+
+void
+foo (void)
+{
+}
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/pr37743.c b/gcc-4.8/gcc/testsuite/c-c++-common/pr37743.c
new file mode 100644
index 000000000..2ea678e09
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/pr37743.c
@@ -0,0 +1,13 @@
+/* PR c/37743 */
+/* This needs to be run only on targets where __UINT32_TYPE__ is defined
+ to unsigned int. */
+/* { dg-do compile { target *-*-linux-gnu* } } */
+/* { dg-options "-Wformat" } */
+
+int foo (const char *, ...) __attribute__ ((format (printf, 1, 2)));
+
+void
+bar (unsigned int x)
+{
+ foo ("%x", __builtin_bswap32 (x));
+}
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/pr59032.c b/gcc-4.8/gcc/testsuite/c-c++-common/pr59032.c
new file mode 100644
index 000000000..327f5aeb6
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/pr59032.c
@@ -0,0 +1,30 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+void
+foo()
+{
+ float v __attribute__((vector_size(8)));
+ v++;
+}
+
+void
+foo2 ()
+{
+ float v __attribute__((vector_size(8)));
+ ++v;
+}
+
+void
+foo3 ()
+{
+ float v __attribute__((vector_size(8)));
+ v--;
+}
+
+void
+foo4 ()
+{
+ float v __attribute__((vector_size(8)));
+ --v;
+}
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/pr59037.c b/gcc-4.8/gcc/testsuite/c-c++-common/pr59037.c
new file mode 100644
index 000000000..fae13c2fa
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/pr59037.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+typedef int v4si __attribute__ ((vector_size (16)));
+
+int
+main (int argc, char** argv)
+{
+ v4si x = {0,1,2,3};
+ x = (v4si) {(x)[3], (x)[2], (x)[1], (x)[0]};
+ return x[4];
+}
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/pr59280.c b/gcc-4.8/gcc/testsuite/c-c++-common/pr59280.c
new file mode 100644
index 000000000..779f0fb85
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/pr59280.c
@@ -0,0 +1,4 @@
+/* PR c/59280 */
+/* { dg-do compile } */
+
+void bar (char *) __attribute__((constructor(foo))); /* { dg-error "constructor priorities must be integers|was not declared|constructor priorities are not supported" } */
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/pr60101.c b/gcc-4.8/gcc/testsuite/c-c++-common/pr60101.c
new file mode 100644
index 000000000..b1634c49f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/pr60101.c
@@ -0,0 +1,112 @@
+/* PR c/60101 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wall" } */
+
+extern int *a, b, *c, *d;
+
+void
+foo (double _Complex *x, double _Complex *y, double _Complex *z, unsigned int l, int w)
+{
+ unsigned int e = (unsigned int) a[3];
+ double _Complex (*v)[l][4][e][l][4] = (double _Complex (*)[l][4][e][l][4]) z;
+ double _Complex (*f)[l][b][l] = (double _Complex (*)[l][b][l]) y;
+ unsigned int g = c[0] * c[1] * c[2];
+ unsigned int h = d[0] + c[0] * (d[1] + c[1] * d[2]);
+ unsigned int i;
+
+ for (i = 0; i < e; i++)
+ {
+ int j = e * d[3] + i;
+
+ unsigned int n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11;
+ float _Complex s = 0.;
+ unsigned int t = 0;
+
+ for (n0 = 0; n0 < l; n0++)
+ for (n1 = 0; n1 < l; n1++)
+ for (n2 = 0; n2 < l; n2++)
+ for (n3 = 0; n3 < l; n3++)
+ for (n4 = 0; n4 < l; n4++)
+ for (n5 = 0; n5 < l; n5++)
+ for (n6 = 0; n6 < l; n6++)
+ for (n7 = 0; n7 < l; n7++)
+ for (n8 = 0; n8 < l; n8++)
+ for (n9 = 0; n9 < l; n9++)
+ for (n10 = 0; n10 < l; n10++)
+ for (n11 = 0; n11 < l; n11++)
+ {
+ if (t % g == h)
+ s
+ += f[n0][n4][j][n8] * f[n1][n5][j][n9] * ~(f[n2][n6][w][n10]) * ~(f[n3][n7][w][n11])
+ * (+0.25 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
+ + 0.25 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
+ - 0.5 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
+ + 0.25 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
+ * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
+ - 0.5 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
+ + 0.25 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
+ + 0.25 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
+ * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
+ - 0.5 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
+ + 0.25 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
+ + 0.25 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
+ * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
+ + 0.25 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
+ - 0.5 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
+ + 0.25 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
+ * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
+ * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
+ * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
+ + 0.25 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
+ + 1. * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
+ * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
+ + 0.25 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
+ * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
+ + 0.25 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
+ * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
+ + 1. * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
+ + 0.5 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
+ * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0] * v[0][n10][0][i][n8][0]
+ - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
+ * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0] * v[0][n10][0][i][n8][0]
+ - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n0][0] * v[0][n10][0][i][n1][0]
+ + 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n10][0][i][n0][0]
+ + 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n0][0] * v[0][n10][0][i][n1][0]
+ - 0.5 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n10][0][i][n0][0]
+ - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1]
+ * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0] * v[0][n3][0][i][n8][0]
+ - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1]
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n0][0] * v[0][n3][0][i][n1][0]);
+ t++;
+ }
+ int u = (j - w + b) % b;
+ int q = (j >= w ? +1 : -1);
+ int r = q;
+ x[u] += r * s;
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/pr60689.c b/gcc-4.8/gcc/testsuite/c-c++-common/pr60689.c
new file mode 100644
index 000000000..9475bd835
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/pr60689.c
@@ -0,0 +1,10 @@
+/* PR c++/60689 */
+/* { dg-do compile } */
+
+struct S { char x[9]; };
+
+void
+foo (struct S *x, struct S *y, struct S *z)
+{
+ __atomic_exchange (x, y, z, __ATOMIC_SEQ_CST);
+}
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/torture/pr58794-1.c b/gcc-4.8/gcc/testsuite/c-c++-common/torture/pr58794-1.c
new file mode 100644
index 000000000..175629fec
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/torture/pr58794-1.c
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+
+struct S0
+{
+ int f;
+};
+
+struct S1
+{
+ struct S0 f1;
+ volatile int f2;
+};
+
+struct S2
+{
+ struct S1 g;
+} a, b;
+
+static int *c[1][2] = {{0, (int *)&a.g.f2}};
+static int d;
+
+int
+main ()
+{
+ for (d = 0; d < 1; d++)
+ for (b.g.f1.f = 0; b.g.f1.f < 1; b.g.f1.f++)
+ *c[b.g.f1.f][d + 1] = 0;
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/torture/pr58794-2.c b/gcc-4.8/gcc/testsuite/c-c++-common/torture/pr58794-2.c
new file mode 100644
index 000000000..767798806
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/torture/pr58794-2.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+
+struct S
+{
+ volatile int f;
+} a;
+
+unsigned int b;
+
+static int *c[1][2] = {{0, (int *)&a.f}};
+static unsigned int d;
+
+int
+main ()
+{
+ for (; d < 1; d++)
+ for (; b < 1; b++)
+ *c[b][d + 1] = 0;
+
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/torture/pr60026.c b/gcc-4.8/gcc/testsuite/c-c++-common/torture/pr60026.c
new file mode 100644
index 000000000..1cc5f55a4
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/c-c++-common/torture/pr60026.c
@@ -0,0 +1,28 @@
+/* PR ipa/60026 */
+/* { dg-do compile } */
+
+struct S { int f; } a;
+
+__attribute__((optimize (0)))
+struct S foo (int x, struct S y)
+{
+ int b = y.f;
+ return a;
+}
+
+void
+bar ()
+{
+ while (a.f)
+ {
+ struct S c = {0};
+ foo (0, c);
+ }
+}
+
+int
+main ()
+{
+ bar ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/access02.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/access02.C
new file mode 100644
index 000000000..74960a66a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/access02.C
@@ -0,0 +1,39 @@
+// PR c++/58954
+// { dg-require-effective-target c++11 }
+
+template<class T>
+T&& declval();
+
+template<class T>
+struct foo_argument
+{
+ template<class Ret, class C, class Arg>
+ static Arg test(Ret (C::*)(Arg));
+
+ typedef decltype(test(&T::template foo<>)) type;
+};
+
+template<class T, class>
+struct dependent { typedef T type; };
+
+template<class T>
+struct base
+{
+ template<class Ignore = void>
+ auto foo(int i) -> decltype(declval<
+ typename dependent<T&, Ignore>::type
+ >().foo_impl(i));
+};
+
+struct derived : base<derived>
+{
+ friend struct base<derived>;
+private:
+ int foo_impl(int i);
+};
+
+int main()
+{
+ foo_argument<derived>::type var = 0;
+ return var;
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C
new file mode 100644
index 000000000..c444217b0
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C
@@ -0,0 +1,18 @@
+// PR c++/60182
+// { dg-require-effective-target c++11 }
+
+class B {};
+template <typename> using __allocator_base = B;
+template <typename> class F : __allocator_base<int> {};
+class C {};
+template <typename, typename = F<int> > class G : C {};
+template <typename> class D;
+class A {
+ using Container = G<D<char>>;
+ A();
+ A(D<char> const &);
+ Container m_elements;
+};
+template <template <class, class> class C, class A = F<D<int>>>
+void doSomething(C<D<char>, A> &);
+A::A(D<char> const &) : A() { doSomething(m_elements); }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/auto42.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/auto42.C
new file mode 100644
index 000000000..fea4c28d8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/auto42.C
@@ -0,0 +1,9 @@
+// PR c++/60628
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+void foo(int i)
+{
+ auto x[1] = { 0 }; // { dg-error "array of .auto" }
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C
new file mode 100644
index 000000000..eac6004ae
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C
@@ -0,0 +1,20 @@
+// PR c++/59268
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+
+template <typename>
+struct A
+{
+ constexpr A (int) {}
+ virtual void foo ()
+ {
+ constexpr A<void> a (0);
+ }
+};
+
+void
+bar ()
+{
+ A<int> a (3);
+ a.foo ();
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype57.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype57.C
new file mode 100644
index 000000000..353cc72c3
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype57.C
@@ -0,0 +1,8 @@
+// PR c++/58633
+// { dg-do compile { target c++11 } }
+
+void foo(int i)
+{
+ typedef int I;
+ decltype(i.I::~I())* p;
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/defaulted48.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/defaulted48.C
new file mode 100644
index 000000000..727afc5ca
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/defaulted48.C
@@ -0,0 +1,17 @@
+// PR c++/60108
+// { dg-require-effective-target c++11 }
+
+template<int> struct A
+{
+ virtual ~A();
+};
+
+template<typename> struct B : A<0>, A<1>
+{
+ ~B() = default;
+};
+
+struct C : B<bool>
+{
+ C() {}
+};
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/deleted3.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/deleted3.C
new file mode 100644
index 000000000..67836773a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/deleted3.C
@@ -0,0 +1,11 @@
+// PR c++/60216
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+ template<typename T> A(T) = delete;
+};
+
+template<> A::A<int>(int) {}
+
+A a(0);
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/enum_base2.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/enum_base2.C
new file mode 100644
index 000000000..8c6a9011d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/enum_base2.C
@@ -0,0 +1,9 @@
+// PR c++/60187
+// { dg-require-effective-target c++11 }
+
+template<typename... T> struct A
+{
+ enum E : T {}; // { dg-error "parameter pack" }
+};
+
+A<int> a;
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist76.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist76.C
new file mode 100644
index 000000000..ac419dde8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist76.C
@@ -0,0 +1,5 @@
+// PR c++/58812
+// { dg-require-effective-target c++11 }
+
+int i;
+int&& j{{ i }}; // { dg-error "too many braces" }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist78.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist78.C
new file mode 100644
index 000000000..648ec5307
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist78.C
@@ -0,0 +1,12 @@
+// PR c++/58639
+// { dg-require-effective-target c++11 }
+
+struct node {
+ node &parent;
+};
+
+struct vector {
+ node n;
+};
+
+vector v({}); // { dg-error "" }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist79.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist79.C
new file mode 100644
index 000000000..5a1914dda
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist79.C
@@ -0,0 +1,8 @@
+// PR c++/59646
+// { dg-require-effective-target c++11 }
+
+#include <initializer_list>
+
+struct A {};
+
+std::initializer_list<volatile A> x = {{}};
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist81.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist81.C
new file mode 100644
index 000000000..5978c6388
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist81.C
@@ -0,0 +1,25 @@
+// PR c++/60713
+// { dg-options "-O" }
+// { dg-do compile { target c++11 } }
+
+template < class x0, class x1, class x2, class x3, class x4 >
+int *x5 (x0 *, x2 (x1::*)(x3, x4));
+
+class x6
+{
+ void x7 ();
+ struct x8
+ {
+ int *x9;
+ };
+ void x10 (x8);
+ void x11 (int *, int *);
+};
+
+void
+x6::x7 ()
+{
+ x10 ({
+ x5 (this, &x6::x11)
+ });
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist82.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist82.C
new file mode 100644
index 000000000..3b9ccad66
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist82.C
@@ -0,0 +1,20 @@
+// PR c++/60708
+// { dg-do compile { target c++11 } }
+
+template <class T, class U> struct mypair {
+ mypair(T, U) {}
+};
+
+template<typename T> struct S {
+ mypair<T *, int> get_pair() noexcept {
+ return mypair<T*,int>(nullptr, 0);
+ }
+};
+
+static void foo(const mypair<char *, int> (&a)[2]) noexcept { }
+
+int main()
+{
+ S<char> s;
+ foo({s.get_pair(), s.get_pair()});
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C
new file mode 100644
index 000000000..1d2778fb5
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C
@@ -0,0 +1,7 @@
+// PR c++/58596
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i = [] { return decltype(i)(); }();
+};
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/noexcept22.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/noexcept22.C
new file mode 100644
index 000000000..7aab0f43c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/noexcept22.C
@@ -0,0 +1,21 @@
+// PR c++/60046
+// { dg-require-effective-target c++11 }
+
+constexpr bool foo () { return noexcept (true); }
+template <typename T>
+struct V
+{
+ void bar (V &) noexcept (foo ()) {}
+};
+template <typename T>
+struct W : public V <int>
+{
+ void bar (W &x) { V <int>::bar (x); }
+};
+
+int
+main ()
+{
+ W <int> a, b;
+ a.bar (b);
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C
new file mode 100644
index 000000000..35f6509df
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C
@@ -0,0 +1,10 @@
+// PR c++/58965
+// { dg-require-effective-target c++11 }
+
+void foo()
+{
+ static union
+ {
+ int i = i;
+ };
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C
new file mode 100644
index 000000000..febe0ecac
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C
@@ -0,0 +1,13 @@
+// PR c++/58162
+// { dg-require-effective-target c++11 }
+
+struct A {
+ A();
+ A(A&&);
+};
+
+struct B {
+ A const a = A();
+};
+
+B b;
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/static_assert9.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/static_assert9.C
new file mode 100644
index 000000000..fccaa449c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/static_assert9.C
@@ -0,0 +1,7 @@
+// PR c++/58837
+// { dg-require-effective-target c++11 }
+
+void f();
+static_assert(f, "");
+struct A {};
+static_assert(A::~A, ""); // { dg-error "non-static member function" }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic144.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic144.C
new file mode 100644
index 000000000..5d05d3d52
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic144.C
@@ -0,0 +1,15 @@
+// PR c++/56060
+// { dg-do compile { target c++11 } }
+
+template<typename T> struct baz { };
+template<typename T> T bar();
+
+template<typename T, typename ... U>
+baz<decltype(bar<T>()(bar<U> ...))> // { dg-error "cannot be used" }
+foo();
+
+int main()
+{
+ foo<int>(); // { dg-error "no matching" }
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic145.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic145.C
new file mode 100644
index 000000000..65edda59f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic145.C
@@ -0,0 +1,13 @@
+// PR c++/59730
+// { dg-do compile { target c++11 } }
+
+template <typename> void declval();
+template <typename> void forward();
+template <typename> class D;
+template <typename _Functor, typename... _Bound_args>
+class D <_Functor(_Bound_args...)> {
+ template <typename... _Args, decltype(declval<_Functor>)>
+ void operator()(...) {
+ 0(forward<_Args>...);
+ }
+};
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic147.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic147.C
new file mode 100644
index 000000000..7f606d84a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic147.C
@@ -0,0 +1,10 @@
+// PR c++/58466
+// { dg-require-effective-target c++11 }
+
+template<char, char...> struct A;
+
+template<typename> struct B;
+
+template<char... C> struct B<A<C...>> {};
+
+B<A<'X'>> b;
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic148.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic148.C
new file mode 100644
index 000000000..a4ee63533
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic148.C
@@ -0,0 +1,6 @@
+// PR c++/59989
+// { dg-require-effective-target c++11 }
+
+template<typename T> struct X {};
+template<template<typename...> class D, typename ...U> int test(D<U...>*);
+int n = test<X, int>(0); // { dg-error "no match" }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic149.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic149.C
new file mode 100644
index 000000000..a250e7c29
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic149.C
@@ -0,0 +1,11 @@
+// PR c++/60248
+// { dg-options "-std=c++11 -g -fabi-version=2" }
+
+template<int...> struct A {};
+
+template<> struct A<0>
+{
+ typedef enum { e } B;
+};
+
+A<0> a;
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic150.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic150.C
new file mode 100644
index 000000000..6a30efed9
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic150.C
@@ -0,0 +1,9 @@
+// PR c++/60219
+// { dg-require-effective-target c++11 }
+
+template<typename..., int> void foo();
+
+void bar()
+{
+ foo<0>; // { dg-error "" }
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/diagnostic/pedantic.C b/gcc-4.8/gcc/testsuite/g++.dg/diagnostic/pedantic.C
new file mode 100644
index 000000000..450a0fac6
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/diagnostic/pedantic.C
@@ -0,0 +1,11 @@
+// { dg-do compile }
+// { dg-options "-pedantic" }
+typedef void F(void);
+
+void foo()
+{
+ void* p = 0;
+ F* f1 = reinterpret_cast<F*>(p); // { dg-warning "ISO" }
+#pragma GCC diagnostic ignored "-pedantic"
+ F* f2 = reinterpret_cast<F*>(p);
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/diagnostic/pr58979.C b/gcc-4.8/gcc/testsuite/g++.dg/diagnostic/pr58979.C
new file mode 100644
index 000000000..6be3f1436
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/diagnostic/pr58979.C
@@ -0,0 +1,4 @@
+// PR c++/58979
+// { dg-do compile }
+
+int i = 0->*0; // { dg-error "invalid type argument of" }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/diagnostic/pr59838.C b/gcc-4.8/gcc/testsuite/g++.dg/diagnostic/pr59838.C
new file mode 100644
index 000000000..d1cf2c7fa
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/diagnostic/pr59838.C
@@ -0,0 +1,4 @@
+// PR c++/59838
+// { dg-do compile }
+
+enum E { a, b = (E) a }; // { dg-error "conversion to incomplete type" }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/eh/ppc64-sighandle-cr.C b/gcc-4.8/gcc/testsuite/g++.dg/eh/ppc64-sighandle-cr.C
new file mode 100644
index 000000000..325617360
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/eh/ppc64-sighandle-cr.C
@@ -0,0 +1,54 @@
+// { dg-do run { target { powerpc64*-*-linux* } } }
+// { dg-options "-fexceptions -fnon-call-exceptions" }
+
+#include <signal.h>
+#include <stdlib.h>
+#include <fenv.h>
+
+#define SET_CR(R,V) __asm__ __volatile__ ("mtcrf %0,%1" : : "n" (1<<(7-R)), "r" (V<<(4*(7-R))) : "cr" #R)
+#define GET_CR(R) ({ int tmp; __asm__ __volatile__ ("mfcr %0" : "=r" (tmp)); (tmp >> 4*(7-R)) & 15; })
+
+void sighandler (int signo, siginfo_t * si, void * uc)
+{
+ SET_CR(2, 3);
+ SET_CR(3, 2);
+ SET_CR(4, 1);
+
+ throw 0;
+}
+
+float test (float a, float b) __attribute__ ((__noinline__));
+float test (float a, float b)
+{
+ float x;
+ asm ("mtcrf %1,%2" : "=f" (x) : "n" (1 << (7-3)), "r" (0), "0" (b) : "cr3");
+ return a / x;
+}
+
+int main ()
+{
+ struct sigaction sa;
+ int status;
+
+ sa.sa_sigaction = sighandler;
+ sa.sa_flags = SA_SIGINFO;
+
+ status = sigaction (SIGFPE, & sa, NULL);
+
+ feenableexcept (FE_DIVBYZERO);
+
+ SET_CR(2, 6);
+ SET_CR(3, 9);
+ SET_CR(4, 12);
+
+ try {
+ test (1, 0);
+ }
+ catch (...) {
+ return GET_CR(2) != 6 || GET_CR(3) != 9 || GET_CR(4) != 12;
+ }
+
+ return 1;
+}
+
+
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/eh/uncaught1.C b/gcc-4.8/gcc/testsuite/g++.dg/eh/uncaught1.C
index afbf5af4d..e96af334a 100644
--- a/gcc-4.8/gcc/testsuite/g++.dg/eh/uncaught1.C
+++ b/gcc-4.8/gcc/testsuite/g++.dg/eh/uncaught1.C
@@ -13,7 +13,7 @@ struct Check {
static Check const data[] = {
{ 0, 0, false }, // construct [0]
- { 1, 0, true }, // [1] = [0]
+ { 1, 0, false }, // [1] = [0]
{ 0, 0, true }, // destruct [0]
{ 2, 1, true }, // [2] = [1]
{ 2, 2, true }, // destruct [2]
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/eh/uncaught4.C b/gcc-4.8/gcc/testsuite/g++.dg/eh/uncaught4.C
new file mode 100644
index 000000000..227d11b33
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/eh/uncaught4.C
@@ -0,0 +1,29 @@
+// PR c++/41174
+// { dg-do run }
+
+#include <exception>
+
+#define assert(E) if (!(E)) __builtin_abort();
+
+struct e {
+ e()
+ {
+ assert( !std::uncaught_exception() );
+ try {
+ throw 1;
+ } catch (int i) {
+ assert( !std::uncaught_exception() );
+ throw;
+ }
+ }
+};
+
+int main()
+{
+ try {
+ throw e();
+ } catch (int i) {
+ assert( !std::uncaught_exception() );
+ }
+ assert( !std::uncaught_exception() );
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ext/attrib48.C b/gcc-4.8/gcc/testsuite/g++.dg/ext/attrib48.C
new file mode 100644
index 000000000..19a995910
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/ext/attrib48.C
@@ -0,0 +1,6 @@
+// PR c++/54652
+
+typedef unsigned L __attribute__ ((aligned));
+typedef unsigned L __attribute__ ((aligned));
+
+L l;
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ext/builtin-bswap1.C b/gcc-4.8/gcc/testsuite/g++.dg/ext/builtin-bswap1.C
new file mode 100644
index 000000000..787ecba43
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/ext/builtin-bswap1.C
@@ -0,0 +1,22 @@
+// PR c/37743
+// { dg-do compile }
+
+#if defined(__UINT32_TYPE__) && defined(__INT32_TYPE__)
+
+void foo (__UINT32_TYPE__);
+void foo (__INT32_TYPE__);
+
+void
+bar (__UINT32_TYPE__ x)
+{
+ foo (__builtin_bswap32 (x));
+}
+
+#else
+
+void
+bar ()
+{
+}
+
+#endif
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ext/stmtexpr15.C b/gcc-4.8/gcc/testsuite/g++.dg/ext/stmtexpr15.C
new file mode 100644
index 000000000..83a831cdd
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/ext/stmtexpr15.C
@@ -0,0 +1,7 @@
+// PR c++/59097
+// { dg-options "" }
+
+void foo()
+{
+ int x[({ return; })]; // { dg-error "non-integral" }
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ext/timevar2.C b/gcc-4.8/gcc/testsuite/g++.dg/ext/timevar2.C
new file mode 100644
index 000000000..74c4fc8cf
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/ext/timevar2.C
@@ -0,0 +1,14 @@
+// PR c++/57524
+// { dg-options "-ftime-report" }
+// { dg-prune-output "wall" }
+// { dg-prune-output "times" }
+// { dg-prune-output "TOTAL" }
+// { dg-prune-output "checks" }
+
+namespace detail {
+namespace indirect_traits {}
+using namespace indirect_traits;
+void fn1() {
+using namespace detail;
+}
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ext/traits1.C b/gcc-4.8/gcc/testsuite/g++.dg/ext/traits1.C
new file mode 100644
index 000000000..24099e53c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/ext/traits1.C
@@ -0,0 +1,4 @@
+// PR c++/58504
+
+template<bool = __has_nothrow_assign(void)> struct A {};
+A<> a;
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ext/vector25.C b/gcc-4.8/gcc/testsuite/g++.dg/ext/vector25.C
new file mode 100644
index 000000000..6c1f5d098
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/ext/vector25.C
@@ -0,0 +1,6 @@
+volatile int i __attribute__((vector_size(8)));
+
+void foo()
+{
+ i += i;
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ext/vector27.C b/gcc-4.8/gcc/testsuite/g++.dg/ext/vector27.C
new file mode 100644
index 000000000..288e13c55
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/ext/vector27.C
@@ -0,0 +1,7 @@
+// PR c++/58845
+
+void foo()
+{
+ int v __attribute__((vector_size(8)));
+ v = v || v; // { dg-bogus "" "" { xfail *-*-* } }
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/gomp/for-20.C b/gcc-4.8/gcc/testsuite/g++.dg/gomp/for-20.C
new file mode 100644
index 000000000..7b57b16b8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/gomp/for-20.C
@@ -0,0 +1,16 @@
+// PR c++/60146
+// { dg-do compile }
+// { dg-options -fopenmp }
+
+int foo() { return 0; }
+
+template<typename T> void bar()
+{
+#pragma omp parallel for
+ for (T i = foo(); i < 8; ++i) {}
+}
+
+void baz()
+{
+ bar<int>();
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/gomp/pr59297.C b/gcc-4.8/gcc/testsuite/g++.dg/gomp/pr59297.C
new file mode 100644
index 000000000..330ed2e00
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/gomp/pr59297.C
@@ -0,0 +1,25 @@
+// PR c++/59297
+// { dg-do compile }
+// { dg-options "-fopenmp" }
+
+template <typename T>
+struct A
+{
+ ~A ();
+ const T &operator[] (int) const;
+};
+
+struct B
+{
+ int &operator () (A <int>);
+};
+
+void
+foo (B &x, int &z)
+{
+ A<A<int> > y;
+ #pragma omp atomic
+ x (y[0]) += 1;
+ #pragma omp atomic
+ z += x(y[1]);
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/inherit/virtual11.C b/gcc-4.8/gcc/testsuite/g++.dg/inherit/virtual11.C
new file mode 100644
index 000000000..04c241293
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/inherit/virtual11.C
@@ -0,0 +1,17 @@
+// PR c++/59031
+// { dg-do compile }
+// { dg-options "-fdump-tree-gimple " }
+class B {
+ public:
+ virtual int add (int a, int b) {return a+ b;}
+};
+
+class D : public B {
+};
+
+int foo (int a, int b) {
+ D d;
+ return d.add(a, b);
+}
+// { dg-final { scan-tree-dump-not "OBJ_TYPE_REF" "gimple" } }
+// { dg-final { cleanup-tree-dump "gimple" } }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60419.C b/gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60419.C
new file mode 100644
index 000000000..84461f3ac
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60419.C
@@ -0,0 +1,80 @@
+// PR middle-end/60419
+// { dg-do compile }
+// { dg-options "-O2" }
+
+struct C
+{
+};
+
+struct I : C
+{
+ I ();
+};
+
+struct J
+{
+ void foo ();
+ J ();
+ virtual void foo (int &, int);
+};
+
+template <class>
+struct D
+{
+ virtual void foo (I &) const;
+ void bar ()
+ {
+ I p;
+ foo (p);
+ }
+};
+
+struct K : J, public D<int>
+{
+};
+
+struct F
+{
+ K *operator->();
+};
+
+struct N : public K
+{
+ void foo (int &, int);
+ I n;
+ void foo (I &) const {}
+};
+
+struct L : J
+{
+ F l;
+};
+
+struct M : F
+{
+ L *operator->();
+};
+
+struct G
+{
+ G ();
+};
+
+M h;
+
+G::G ()
+try
+{
+ N f;
+ f.bar ();
+ throw;
+}
+catch (int)
+{
+}
+
+void
+baz ()
+{
+ h->l->bar ();
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60640-1.C b/gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60640-1.C
new file mode 100644
index 000000000..7a0b91893
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60640-1.C
@@ -0,0 +1,50 @@
+// { dg-do compile }
+// { dg-options "-O3" }
+
+class ASN1Object
+{
+public:
+ virtual ~ASN1Object ();
+};
+class A
+{
+ virtual unsigned m_fn1 () const;
+};
+class B
+{
+public:
+ ASN1Object Element;
+ virtual unsigned m_fn1 (bool) const;
+};
+template <class BASE> class C : public BASE
+{
+};
+
+class D : ASN1Object, public B
+{
+};
+class G : public D
+{
+ unsigned m_fn1 (bool) const {}
+};
+class F : A
+{
+public:
+ F (A);
+ unsigned m_fn1 () const
+ {
+ int a;
+ a = m_fn2 ().m_fn1 (0);
+ return a;
+ }
+ const B &m_fn2 () const { return m_groupParameters; }
+ C<G> m_groupParameters;
+};
+template <class D> void BenchMarkKeyAgreement (int *, int *, int)
+{
+ A f;
+ D d (f);
+}
+
+void BenchmarkAll2 () { BenchMarkKeyAgreement<F>(0, 0, 0); }
+
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60640-2.C b/gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60640-2.C
new file mode 100644
index 000000000..c6e614cc0
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60640-2.C
@@ -0,0 +1,15 @@
+// { dg-do compile }
+// { dg-options "-O3" }
+
+struct B { virtual unsigned f () const; };
+struct C { virtual void f (); };
+struct F { virtual unsigned f (bool) const; ~F (); };
+struct J : C, F {};
+struct G : J { unsigned f (bool) const { return 0; } };
+struct H : B
+{
+ H (int);
+ unsigned f () const { return ((const F &) h).f (0); }
+ G h;
+};
+H h (0);
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60640-3.C b/gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60640-3.C
new file mode 100644
index 000000000..21b1f58a0
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/ipa/pr60640-3.C
@@ -0,0 +1,81 @@
+// { dg-do run }
+// { dg-options "-O3" }
+
+struct Distraction
+{
+ char fc[8];
+ virtual Distraction * return_self ()
+ { return this; }
+};
+
+namespace {
+
+struct A;
+static A * __attribute__ ((noinline, noclone)) get_an_A ();
+
+static int go;
+
+struct A
+{
+ int fi;
+
+ A () : fi(777) {}
+ A (int pi) : fi (pi) {}
+ virtual A * foo (int p) = 0;
+};
+
+struct B;
+static B * __attribute__ ((noinline, noclone)) get_a_B ();
+
+struct B : public Distraction, A
+{
+ B () : Distraction(), A() { }
+ B (int pi) : Distraction (), A (pi) {}
+ virtual B * foo (int p)
+ {
+ int o = fi;
+ for (int i = 0; i < p; i++)
+ o += i + i * i;
+ go = o;
+
+ return get_a_B ();
+ }
+};
+
+
+struct B gb1 (1111), gb2 (2);
+static B * __attribute__ ((noinline, noclone))
+get_a_B ()
+{
+ return &gb1;
+}
+
+static A * __attribute__ ((noinline, noclone))
+get_an_A ()
+{
+ return &gb2;
+}
+
+}
+
+static int __attribute__ ((noinline, noclone))
+get_a_number ()
+{
+ return 5;
+}
+
+extern "C" void abort (void);
+
+int main (int argc, char *argv[])
+{
+ for (int i = 0; i < get_a_number (); i++)
+ {
+ struct A *p = get_an_A ();
+ struct A *r = p->foo (4);
+ if (r->fi != 1111)
+ abort ();
+ if (go != 22)
+ abort ();
+ }
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/opt/pr58864.C b/gcc-4.8/gcc/testsuite/g++.dg/opt/pr58864.C
new file mode 100644
index 000000000..b8587f298
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/opt/pr58864.C
@@ -0,0 +1,21 @@
+// PR target/58864
+// { dg-do compile }
+// { dg-options "-Os" }
+// { dg-additional-options "-march=i686" { target { { i?86-*-* x86_64-*-* } && ia32 } } }
+
+struct A { A (); ~A (); };
+struct B { B (); };
+
+float d, e;
+
+void
+foo ()
+{
+ A a;
+ float c = d;
+ while (1)
+ {
+ B b;
+ e = c ? -c : 0;
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/opt/pr59470.C b/gcc-4.8/gcc/testsuite/g++.dg/opt/pr59470.C
new file mode 100644
index 000000000..4698ab717
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/opt/pr59470.C
@@ -0,0 +1,188 @@
+// PR middle-end/59470
+// { dg-do run }
+// { dg-options "-O2 -fstack-protector" }
+// { dg-additional-options "-fPIC" { target fpic } }
+// { dg-require-effective-target fstack_protector }
+
+struct A
+{
+ int a1;
+ A () throw () : a1 (0) {}
+};
+
+struct B
+{
+ unsigned int b1 () throw ();
+};
+
+__attribute__((noinline, noclone)) unsigned int
+B::b1 () throw ()
+{
+ asm volatile ("" : : : "memory");
+ return 0;
+}
+
+struct C
+{
+ const A **c1;
+ void c2 (const A *, unsigned int);
+};
+
+__attribute__((noinline, noclone)) void
+C::c2 (const A *, unsigned int)
+{
+ asm volatile ("" : : : "memory");
+}
+
+struct D
+{
+ C *d1;
+};
+
+struct E
+{
+ int e1;
+ int e2;
+ D e3;
+};
+
+struct F
+{
+ virtual int f1 (const char * s, int n);
+};
+
+struct G
+{
+ F *g1;
+ bool g2;
+ G & g3 (const char * ws, int len)
+ {
+ if (__builtin_expect (!g2, true)
+ && __builtin_expect (this->g1->f1 (ws, len) != len, false))
+ g2 = true;
+ return *this;
+ }
+};
+
+struct H : public A
+{
+ const char *h1;
+ unsigned int h2;
+ bool h3;
+ const char *h4;
+ char h5;
+ char h6;
+ char h7[31];
+ bool h8;
+ H () : h1 (0), h2 (0), h4 (0), h5 (0), h6 (0), h8 (false) {}
+ void h9 (const D &) __attribute__((noinline, noclone));
+};
+
+void
+H::h9 (const D &)
+{
+ h3 = true;
+ __builtin_memset (h7, 0, sizeof (h7));
+ asm volatile ("" : : : "memory");
+};
+
+B b;
+
+inline const H *
+foo (const D &x)
+{
+ const unsigned int i = b.b1 ();
+ const A **j = x.d1->c1;
+ if (!j[i])
+ {
+ H *k = 0;
+ try
+ {
+ k = new H;
+ k->h9 (x);
+ }
+ catch (...)
+ {
+ }
+ x.d1->c2 (k, i);
+ }
+ return static_cast <const H *>(j[i]);
+}
+
+__attribute__((noinline, noclone)) int
+bar (char *x, unsigned long v, const char *y, int z, bool w)
+{
+ asm volatile ("" : : "r" (x), "r" (v), "r" (y) : "memory");
+ asm volatile ("" : : "r" (z), "r" (w) : "memory");
+ return 8;
+}
+
+__attribute__((noinline, noclone)) void
+baz (void *z, const char *g, unsigned int h, char s, E &e, char *n, char *c, int &l)
+{
+ asm volatile ("" : : "r" (z), "r" (g), "r" (h) : "memory");
+ asm volatile ("" : : "r" (s), "r" (&e), "r" (n) : "memory");
+ asm volatile ("" : : "r" (c), "r" (&l) : "memory");
+ if (n == c)
+ __builtin_abort ();
+ int i = 0;
+ asm ("" : "+r" (i));
+ if (i == 0)
+ __builtin_exit (0);
+}
+
+__attribute__((noinline, noclone)) G
+test (void *z, G s, E &x, char, long v)
+{
+ const D &d = x.e3;
+ const H *h = foo (d);
+ const char *q = h->h7;
+ const int f = x.e2;
+ const int i = 5 * sizeof (long);
+ char *c = static_cast <char *>(__builtin_alloca (i));
+ const int b = f & 74;
+ const bool e = (b != 64 && b != 8);
+ const unsigned long u = ((v > 0 || !e) ? (unsigned long) v : -(unsigned long) v);
+ int l = bar (c + i, u, q, f, e);
+ c += i - l;
+ if (h->h3)
+ {
+ char *c2 = static_cast <char *>(__builtin_alloca ((l + 1) * 2));
+ baz (z, h->h1, h->h2, h->h6, x, c2 + 2, c, l);
+ c = c2 + 2;
+ }
+ if (__builtin_expect (e, true))
+ {
+ }
+ else if ((f & 4096) && v)
+ {
+ {
+ const bool m = f & 176;
+ *--c = q[m];
+ *--c = q[1];
+ }
+ }
+ const int w = x.e1;
+ if (w > l)
+ {
+ char * c3 = static_cast <char *>(__builtin_alloca (w));
+ c = c3;
+ }
+ return s.g3 (c, l);
+}
+
+int
+main ()
+{
+ H h;
+ const A *j[1];
+ C c;
+ G g;
+ E e;
+ h.h9 (e.e3);
+ j[0] = &h;
+ c.c1 = j;
+ e.e3.d1 = &c;
+ test (0, g, e, 0, 0);
+ __builtin_abort ();
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/opt/pr59647.C b/gcc-4.8/gcc/testsuite/g++.dg/opt/pr59647.C
new file mode 100644
index 000000000..1fc5067d8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/opt/pr59647.C
@@ -0,0 +1,32 @@
+// PR rtl-optimization/59647
+// { dg-do compile }
+// { dg-options "-O2 -fno-tree-vrp" }
+// { dg-additional-options "-msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ia32 } } }
+
+void f1 (int);
+void f2 ();
+double f3 (int);
+
+struct A
+{
+ int f4 () const
+ {
+ if (a == 0)
+ return 1;
+ return 0;
+ }
+ unsigned f5 ()
+ {
+ if (!f4 ())
+ f2 ();
+ return a;
+ }
+ int a;
+};
+
+void
+f6 (A *x)
+{
+ unsigned b = x->f5 ();
+ f1 (b - 1 - f3 (x->f5 () - 1U));
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/opt/pr60849.C b/gcc-4.8/gcc/testsuite/g++.dg/opt/pr60849.C
new file mode 100644
index 000000000..52d8826b0
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/opt/pr60849.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// { dg-options "-O2" }
+
+int g;
+
+extern "C" int isnan ();
+
+void foo(float a) {
+ int (*xx)(...);
+ xx = isnan;
+ if (xx(a))
+ g++;
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/overload/defarg8.C b/gcc-4.8/gcc/testsuite/g++.dg/overload/defarg8.C
new file mode 100644
index 000000000..b3ddfbb76
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/overload/defarg8.C
@@ -0,0 +1,22 @@
+// PR c++/60367
+// { dg-do run { target c++11 } }
+
+extern "C" int printf (const char *, ...);
+extern "C" void abort();
+
+void *p;
+struct foo {
+ foo() { p = this; }
+ foo (const foo &) { abort(); }
+ ~foo() { if (p != this) abort(); }
+};
+
+void do_something( foo f = {} )
+{
+ if (&f != p) abort();
+}
+
+int main()
+{
+ do_something();
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/pr60769.C b/gcc-4.8/gcc/testsuite/g++.dg/pr60769.C
new file mode 100644
index 000000000..4c896c699
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/pr60769.C
@@ -0,0 +1,43 @@
+/* { dg-do compile } */
+/* { dg-options "-O" } */
+
+template <class T> void fun(T);
+struct B {};
+struct R {
+ int *x;
+ B f;
+};
+R v(int &, R);
+void rfun(R &);
+struct A {
+ void m_fn2(R p1) {
+ R a = p1;
+ rfun(p1);
+ fun(this);
+ fun(a);
+ }
+};
+struct J {
+ A ep;
+ A ap;
+ int c2a;
+ void m_fn1(R &p2) {
+ R d, e, b;
+ v(c2a, p2);
+ e = v(c2a, b);
+ ap.m_fn2(e);
+ v(c2a, p2);
+ d = v(c2a, b);
+ ep.m_fn2(d);
+ }
+};
+struct N {
+ int &p_;
+ J cfo;
+};
+void fn3(N&n) {
+ R h;
+ n.cfo.m_fn1(h);
+}
+extern N &c;
+void fn1() { fn3(c); }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/partial15.C b/gcc-4.8/gcc/testsuite/g++.dg/template/partial15.C
new file mode 100644
index 000000000..357bb05fa
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/template/partial15.C
@@ -0,0 +1,19 @@
+// PR c++/57043
+// { dg-do link }
+
+template<typename D> struct complex { };
+
+template<typename Tp>
+complex<Tp>
+pow(const complex<Tp>& x, const complex<Tp>& y) { return complex<Tp>(); }
+
+template<typename T, typename U>
+struct promote_2 { typedef T type; };
+
+template<typename Tp, typename Up>
+complex<typename promote_2<Tp, Up>::type>
+pow(const complex<Tp>& x, const complex<Up>& y);
+
+complex<double> (*powcc)(const complex<double>&, const complex<double>&) = pow;
+
+int main() {}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/ref7.C b/gcc-4.8/gcc/testsuite/g++.dg/template/ref7.C
new file mode 100644
index 000000000..432929272
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/template/ref7.C
@@ -0,0 +1,16 @@
+// PR c++/60274
+
+typedef const char *const& ProtocolIdType;
+
+template <ProtocolIdType protocolId>
+struct C {
+ typedef int ProtocolVersion;
+ struct D {
+ ProtocolVersion GetProtocolVersion();
+ };
+};
+template <ProtocolIdType protocolId>
+typename C<protocolId>::ProtocolVersion C<protocolId>::D::GetProtocolVersion()
+{
+ return 1;
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/shadow1.C b/gcc-4.8/gcc/testsuite/g++.dg/template/shadow1.C
new file mode 100644
index 000000000..6eb30d094
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/template/shadow1.C
@@ -0,0 +1,4 @@
+// PR c++/58632
+
+template<template<int I> class A> // { dg-message "shadows" }
+class A {}; // { dg-error "declaration" }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/using27.C b/gcc-4.8/gcc/testsuite/g++.dg/template/using27.C
new file mode 100644
index 000000000..f1835e171
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/template/using27.C
@@ -0,0 +1,33 @@
+// PR c++/37140
+
+struct X
+{
+ typedef int nested_type;
+};
+
+template <class T>
+struct A
+{
+ typedef X type;
+};
+
+template <class T>
+struct B : A<T>
+{
+ using typename A<T>::type;
+ typename type::nested_type x;
+};
+
+template <class T>
+struct C : B<T>
+{
+ using typename B<T>::type;
+ typename type::nested_type y;
+};
+
+struct D : C<int>
+{
+ using C<int>::type;
+ type::nested_type z;
+};
+
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/using28.C b/gcc-4.8/gcc/testsuite/g++.dg/template/using28.C
new file mode 100644
index 000000000..52f68cfe4
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/template/using28.C
@@ -0,0 +1,17 @@
+// PR c++/37140
+
+struct C
+{
+ static const int block_size = 1;
+};
+
+template <typename T> struct A {
+ typedef C type;
+};
+
+template <typename T> struct B : public A<T> {
+ using typename A<T>::type;
+ static const int block_size = type::block_size;
+};
+
+template class B<int>;
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/using29.C b/gcc-4.8/gcc/testsuite/g++.dg/template/using29.C
new file mode 100644
index 000000000..8726547ef
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/template/using29.C
@@ -0,0 +1,21 @@
+// PR c++/58047
+
+template <int N>
+struct print_arg { };
+
+struct const_holder {
+ static const int CONSTANT = 42;
+};
+
+template <typename T>
+struct identity {
+ typedef T type;
+};
+
+template <class T>
+struct test_case : public identity<T> {
+ using typename identity<T>::type;
+ print_arg<type::CONSTANT> printer;
+};
+
+template struct test_case<const_holder>;
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/tls/thread_local-ice2.C b/gcc-4.8/gcc/testsuite/g++.dg/tls/thread_local-ice2.C
new file mode 100644
index 000000000..53bc29780
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/tls/thread_local-ice2.C
@@ -0,0 +1,11 @@
+// PR c++/58672
+// { dg-options "-std=c++11" }
+// { dg-require-effective-target tls }
+
+struct A
+{
+ A(int);
+ i; // { dg-error "" }
+};
+
+thread_local A a(0);
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/tls/thread_local8.C b/gcc-4.8/gcc/testsuite/g++.dg/tls/thread_local8.C
new file mode 100644
index 000000000..9b91a6b9a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/tls/thread_local8.C
@@ -0,0 +1,12 @@
+// PR c++/55800
+// { dg-options "-std=c++11" }
+// { dg-require-alias "" }
+// { dg-require-effective-target tls }
+// { dg-final { scan-assembler "_ZTH12foo_instance" { target tls_native } } }
+
+struct foo
+{
+ foo();
+};
+
+thread_local foo foo_instance;
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/tm/noexcept-6.C b/gcc-4.8/gcc/testsuite/g++.dg/tm/noexcept-6.C
new file mode 100644
index 000000000..4391159e2
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/tm/noexcept-6.C
@@ -0,0 +1,23 @@
+// { dg-do compile }
+// { dg-options "-fno-exceptions -fgnu-tm -O -std=c++0x -fdump-tree-tmlower" }
+
+struct TrueFalse
+{
+ static constexpr bool v() { return true; }
+};
+
+int global;
+
+template<typename T> int foo()
+{
+ return __transaction_atomic noexcept(T::v()) (global + 1);
+}
+
+int f1()
+{
+ return foo<TrueFalse>();
+}
+
+/* { dg-final { scan-tree-dump-times "eh_must_not_throw" 0 "tmlower" } } */
+/* { dg-final { scan-tree-dump-times "__transaction_atomic" 1 "tmlower" } } */
+/* { dg-final { cleanup-tree-dump "tmlower" } } */
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/tm/pr60004.C b/gcc-4.8/gcc/testsuite/g++.dg/tm/pr60004.C
new file mode 100644
index 000000000..b8c2c0e03
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/tm/pr60004.C
@@ -0,0 +1,10 @@
+// { dg-do compile }
+// { dg-options "-fgnu-tm" }
+
+int a;
+int f() {
+ __transaction_atomic {
+ if (a == 5)
+ return 1;
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/torture/pr57499.C b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr57499.C
new file mode 100644
index 000000000..fd985a199
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr57499.C
@@ -0,0 +1,14 @@
+// PR middle-end/57499
+// { dg-do compile }
+
+struct S
+{
+ ~S () __attribute__ ((noreturn)) {} // { dg-warning "function does return" }
+};
+
+void
+foo ()
+{
+ S s;
+ throw 1;
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/torture/pr59163.C b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr59163.C
new file mode 100644
index 000000000..2f9a99970
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr59163.C
@@ -0,0 +1,30 @@
+// PR target/59163
+// { dg-do run }
+
+struct A { float a[4]; };
+struct B { int b; A a; };
+
+__attribute__((noinline, noclone)) void
+bar (A &a)
+{
+ if (a.a[0] != 36.0f || a.a[1] != 42.0f || a.a[2] != 48.0f || a.a[3] != 54.0f)
+ __builtin_abort ();
+}
+
+__attribute__((noinline, noclone)) void
+foo (A &a)
+{
+ int i;
+ A c = a;
+ for (i = 0; i < 4; i++)
+ c.a[i] *= 6.0f;
+ a = c;
+ bar (a);
+}
+
+int
+main ()
+{
+ B b = { 5, { 6, 7, 8, 9 } };
+ foo (b.a);
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/torture/pr60609.C b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr60609.C
new file mode 100644
index 000000000..9ddec0b60
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr60609.C
@@ -0,0 +1,252 @@
+/* { dg-do assemble } */
+
+class exception
+{
+};
+class bad_alloc:exception
+{
+};
+class logic_error:exception
+{
+};
+class domain_error:logic_error
+{
+};
+class invalid_argument:logic_error
+{
+};
+class length_error:logic_error
+{
+};
+class overflow_error:exception
+{
+};
+typedef int mpz_t[];
+template < class > class __gmp_expr;
+template <> class __gmp_expr < mpz_t >
+{
+ ~__gmp_expr ();
+};
+
+class PIP_Solution_Node;
+class internal_exception
+{
+ ~internal_exception ();
+};
+class not_an_integer:internal_exception
+{
+};
+class not_a_variable:internal_exception
+{
+};
+class not_an_optimization_mode:internal_exception
+{
+};
+class not_a_bounded_integer_type_width:internal_exception
+{
+};
+class not_a_bounded_integer_type_representation:internal_exception
+{
+};
+class not_a_bounded_integer_type_overflow:internal_exception
+{
+};
+class not_a_complexity_class:internal_exception
+{
+};
+class not_a_control_parameter_name:internal_exception
+{
+};
+class not_a_control_parameter_value:internal_exception
+{
+};
+class not_a_pip_problem_control_parameter_name:internal_exception
+{
+};
+class not_a_pip_problem_control_parameter_value:internal_exception
+{
+};
+class not_a_relation:internal_exception
+{
+};
+class ppl_handle_mismatch:internal_exception
+{
+};
+class timeout_exception
+{
+ ~timeout_exception ();
+};
+class deterministic_timeout_exception:timeout_exception
+{
+};
+void __assert_fail (const char *, const char *, int, int *)
+__attribute__ ((__noreturn__));
+void PL_get_pointer (void *);
+int Prolog_is_address ();
+inline int
+Prolog_get_address (void **p1)
+{
+ Prolog_is_address ()? static_cast <
+ void >(0) : __assert_fail ("Prolog_is_address", "./swi_cfli.hh", 0, 0);
+ PL_get_pointer (p1);
+ return 0;
+}
+
+class non_linear:internal_exception
+{
+};
+class not_unsigned_integer:internal_exception
+{
+};
+class not_universe_or_empty:internal_exception
+{
+};
+class not_a_nil_terminated_list:internal_exception
+{
+};
+class PPL_integer_out_of_range
+{
+ __gmp_expr < mpz_t > n;
+};
+void handle_exception ();
+template < typename T > T * term_to_handle (int, const char *)
+{
+ if (Prolog_is_address ())
+ {
+ void *p;
+ Prolog_get_address (&p);
+ return static_cast < T * >(0);
+ }
+ throw;
+}
+
+void
+ppl_new_MIP_Problem_from_MIP_Problem ()
+try
+{
+ term_to_handle < int >(0, "ppl_new_MIP_Problem_from_MIP_Problem/2");
+}
+
+catch (exception &)
+{
+}
+
+int
+ppl_PIP_Tree_Node_parametric_values ()
+{
+ try
+ {
+ PIP_Solution_Node *a = term_to_handle < PIP_Solution_Node > (0, 0);
+ (void)a;
+ return 1;
+ }
+ catch (internal_exception &)
+ {
+ }
+ catch (not_unsigned_integer &)
+ {
+ handle_exception ();
+ }
+ catch (non_linear &)
+ {
+ handle_exception ();
+ }
+ catch (not_a_variable &)
+ {
+ handle_exception ();
+ }
+ catch (not_an_integer &)
+ {
+ handle_exception ();
+ }
+ catch (ppl_handle_mismatch &)
+ {
+ handle_exception ();
+ }
+ catch (not_an_optimization_mode &)
+ {
+ handle_exception ();
+ }
+ catch (not_a_complexity_class &)
+ {
+ handle_exception ();
+ }
+ catch (not_a_bounded_integer_type_width &)
+ {
+ handle_exception ();
+ }
+ catch (not_a_bounded_integer_type_representation &)
+ {
+ handle_exception ();
+ }
+ catch (not_a_bounded_integer_type_overflow &)
+ {
+ handle_exception ();
+ }
+ catch (not_a_control_parameter_name &)
+ {
+ handle_exception ();
+ }
+ catch (not_a_control_parameter_value &)
+ {
+ handle_exception ();
+ }
+ catch (not_a_pip_problem_control_parameter_name &)
+ {
+ handle_exception ();
+ }
+ catch (not_a_pip_problem_control_parameter_value &)
+ {
+ handle_exception ();
+ }
+ catch (not_universe_or_empty &)
+ {
+ handle_exception ();
+ }
+ catch (not_a_relation &)
+ {
+ handle_exception ();
+ }
+ catch (not_a_nil_terminated_list &)
+ {
+ handle_exception ();
+ }
+ catch (PPL_integer_out_of_range &)
+ {
+ handle_exception ();
+ }
+ catch (int &)
+ {
+ } catch (timeout_exception &)
+ {
+ handle_exception ();
+ } catch (deterministic_timeout_exception &)
+ {
+ handle_exception ();
+ } catch (overflow_error &)
+ {
+ handle_exception ();
+ } catch (domain_error &)
+ {
+ handle_exception ();
+ } catch (length_error &)
+ {
+ handle_exception ();
+ } catch (invalid_argument &)
+ {
+ handle_exception ();
+ } catch (logic_error &)
+ {
+ handle_exception ();
+ } catch (bad_alloc &)
+ {
+ handle_exception ();
+ } catch (exception &)
+ {
+ handle_exception ();
+ } catch ( ...)
+ {
+ handle_exception ();
+ }
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/torture/pr60750.C b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr60750.C
new file mode 100644
index 000000000..a344bd764
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr60750.C
@@ -0,0 +1,21 @@
+// { dg-do run }
+// { dg-options "-std=c++11" }
+
+#include <string>
+#include <stdexcept>
+
+const std::string err_prefix = "Problem: ";
+void thrower (std::string msg)
+{
+ throw std::runtime_error(err_prefix + std::move(msg));
+}
+
+int main(int argc, char **argv)
+{
+ try {
+ std::string base = "hello";
+ thrower(std::move(base));
+ } catch (const std::runtime_error &e) {
+ }
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/torture/pr60895.C b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr60895.C
new file mode 100644
index 000000000..0edd36ada
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr60895.C
@@ -0,0 +1,32 @@
+// { dg-do compile }
+
+struct C
+{
+ double elems[3];
+};
+
+C
+foo ()
+{
+ C a;
+ double *f = a.elems;
+ int b;
+ for (; b;)
+ {
+ *f = 0;
+ ++f;
+ }
+ return a;
+}
+
+struct J
+{
+ C c;
+ __attribute__((always_inline)) J () : c (foo ()) {}
+};
+
+void
+bar ()
+{
+ J ();
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/tree-prof/pr59255.C b/gcc-4.8/gcc/testsuite/g++.dg/tree-prof/pr59255.C
new file mode 100644
index 000000000..eb2b51f7e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/tree-prof/pr59255.C
@@ -0,0 +1,29 @@
+// PR c++/59255
+// { dg-options "-O2 -std=c++11" }
+
+struct S
+{
+ __attribute__((noinline, noclone)) ~S () noexcept (true)
+ {
+ if (fn)
+ fn (1);
+ }
+ void (*fn) (int);
+};
+
+__attribute__((noinline, noclone)) void
+foo (int x)
+{
+ if (x != 1)
+ throw 1;
+}
+
+int
+main ()
+{
+ for (int i = 0; i < 100; i++)
+ {
+ S s;
+ s.fn = foo;
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/vect/pr60729.cc b/gcc-4.8/gcc/testsuite/g++.dg/vect/pr60729.cc
new file mode 100644
index 000000000..fd472c50a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/vect/pr60729.cc
@@ -0,0 +1,10 @@
+// { dg-do compile }
+// { dg-additional-options "-ftrapv" }
+
+void doSomething(int dim, double *Y, double *A)
+{
+ for (int k=0; k<dim; k++)
+ Y[k] += __builtin_fabs (A[k]);
+}
+
+// { dg-final { cleanup-tree-dump "vect" } }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/vect/pr60836.cc b/gcc-4.8/gcc/testsuite/g++.dg/vect/pr60836.cc
new file mode 100644
index 000000000..83bb18375
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/vect/pr60836.cc
@@ -0,0 +1,39 @@
+// { dg-do compile }
+
+int a, b;
+typedef double (*NormFunc) (const int &);
+int &
+max (int &p1, int &p2)
+{
+ if (p1 < p2)
+ return p2;
+ return p1;
+}
+
+struct A
+{
+ int operator () (int p1, int p2)
+ {
+ return max (p1, p2);
+ }
+};
+template < class, class > double
+norm_ (const int &)
+{
+ char c, d;
+ A e;
+ for (; a; a++)
+ {
+ b = e (b, d);
+ b = e (b, c);
+ }
+}
+
+void
+norm ()
+{
+ static NormFunc f = norm_ < int, A >;
+ f = 0;
+}
+
+// { dg-final { cleanup-tree-dump "vect" } }
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c
new file mode 100644
index 000000000..45aad2b2e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c
@@ -0,0 +1,11 @@
+/* PR middle-end/58970 */
+
+struct T { int b : 1; };
+struct S { struct T t[1]; };
+
+void
+foo (int x, struct S *s)
+{
+ if (x == -1)
+ s->t[x].b = 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c
new file mode 100644
index 000000000..3103b31e1
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c
@@ -0,0 +1,11 @@
+/* PR middle-end/58970 */
+
+struct T { char a : 8; char b : 1; };
+struct S { char x; struct T t[1]; };
+
+void
+foo (int x, struct S *s)
+{
+ if (x == -1)
+ s->t[x].b = 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr58997.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr58997.c
new file mode 100644
index 000000000..2c7a0f82c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr58997.c
@@ -0,0 +1,19 @@
+/* PR rtl-optimization/58997 */
+
+int a, b, c, e;
+short d;
+char h;
+
+void
+foo ()
+{
+ while (b)
+ {
+ d = a ? c : 1 % a;
+ c = d;
+ h = d;
+ if (!h)
+ while (e)
+ ;
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr59362.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr59362.c
new file mode 100644
index 000000000..3e78f76bc
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr59362.c
@@ -0,0 +1,21 @@
+/* PR tree-optimization/59362 */
+
+char *
+foo (char *r, int s)
+{
+ r = __builtin___stpcpy_chk (r, "abc", __builtin_object_size (r, 1));
+ if (s)
+ r = __builtin___stpcpy_chk (r, "d", __builtin_object_size (r, 1));
+ return r;
+}
+
+char *a;
+long int b;
+
+void
+bar (void)
+{
+ b = __builtin_object_size (0, 0);
+ a = __builtin___stpcpy_chk (0, "", b);
+ b = __builtin_object_size (a, 0);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr59803.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr59803.c
new file mode 100644
index 000000000..d2b5d2098
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr59803.c
@@ -0,0 +1,27 @@
+/* PR target/59803 */
+
+extern void baz (void) __attribute__ ((__noreturn__));
+struct A { int g, h; };
+extern struct A a;
+struct B { unsigned char i, j, k, l, m; };
+int c, d, e;
+static int f;
+
+void
+foo (void)
+{
+ f = 1;
+}
+
+void
+bar (struct B *x)
+{
+ x->i = e;
+ x->k = c;
+ x->l = d;
+ x->j = a.h;
+ x->m = f;
+ if (x->i != e) baz ();
+ if (x->k != c) baz ();
+ if (x->j != a.h) baz ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr60502.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr60502.c
new file mode 100644
index 000000000..8dd2de44d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr60502.c
@@ -0,0 +1,18 @@
+/* PR tree-optimization/60502 */
+
+typedef signed char v16i8 __attribute__ ((vector_size (16)));
+typedef unsigned char v16u8 __attribute__ ((vector_size (16)));
+
+void
+foo (v16i8 *x)
+{
+ v16i8 m1 = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
+ *x |= *x ^ m1;
+}
+
+void
+bar (v16u8 *x)
+{
+ v16u8 m1 = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
+ *x |= *x ^ m1;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20131127-1.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20131127-1.c
new file mode 100644
index 000000000..8ec496577
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20131127-1.c
@@ -0,0 +1,34 @@
+/* PR middle-end/59138 */
+/* Testcase by John Regehr <regehr@cs.utah.edu> */
+
+extern void abort (void);
+
+#pragma pack(1)
+
+struct S0 {
+ int f0;
+ int f1;
+ int f2;
+ short f3;
+};
+
+short a = 1;
+
+struct S0 b = { 1 }, c, d, e;
+
+struct S0 fn1() { return c; }
+
+void fn2 (void)
+{
+ b = fn1 ();
+ a = 0;
+ d = e;
+}
+
+int main (void)
+{
+ fn2 ();
+ if (a != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20140212-1.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20140212-1.c
new file mode 100644
index 000000000..8f1f84f3e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20140212-1.c
@@ -0,0 +1,37 @@
+/* PR rtl-optimization/60116 */
+/* Reported by Zhendong Su <su@cs.ucdavis.edu> */
+
+extern void abort (void);
+
+int a, b, c, d = 1, e, f = 1, h, i, k;
+char g, j;
+
+void
+fn1 (void)
+{
+ int l;
+ e = 0;
+ c = 0;
+ for (;;)
+ {
+ k = a && b;
+ j = k * 54;
+ g = j * 147;
+ l = ~g + (long long) e && 1;
+ if (d)
+ c = l;
+ else
+ h = i = l * 9UL;
+ if (f)
+ return;
+ }
+}
+
+int
+main (void)
+{
+ fn1 ();
+ if (c != 1)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20140326-1.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20140326-1.c
new file mode 100644
index 000000000..552e21891
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20140326-1.c
@@ -0,0 +1,10 @@
+int a;
+
+int
+main (void)
+{
+ char e[2] = { 0, 0 }, f = 0;
+ if (a == 131072)
+ f = e[a];
+ return f;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20140425-1.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20140425-1.c
new file mode 100644
index 000000000..c447ef95b
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/20140425-1.c
@@ -0,0 +1,23 @@
+/* PR target/60941 */
+/* Reported by Martin Husemann <martin@netbsd.org> */
+
+extern void abort (void);
+
+static void __attribute__((noinline))
+set (unsigned long *l)
+{
+ *l = 31;
+}
+
+int main (void)
+{
+ unsigned long l;
+ int i;
+
+ set (&l);
+ i = (int) l;
+ l = (unsigned long)(2U << i);
+ if (l != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr58726.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr58726.c
new file mode 100644
index 000000000..9fa8b6953
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr58726.c
@@ -0,0 +1,26 @@
+/* PR rtl-optimization/58726 */
+
+int a, c;
+union { int f1; int f2 : 1; } b;
+
+short
+foo (short p)
+{
+ return p < 0 ? p : a;
+}
+
+int
+main ()
+{
+ if (sizeof (short) * __CHAR_BIT__ != 16
+ || sizeof (int) * __CHAR_BIT__ != 32)
+ return 0;
+ b.f1 = 56374;
+ unsigned short d;
+ int e = b.f2;
+ d = e == 0 ? b.f1 : 0;
+ c = foo (d);
+ if (c != (short) 56374)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr58831.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr58831.c
new file mode 100644
index 000000000..a40cd54d2
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr58831.c
@@ -0,0 +1,40 @@
+#include <assert.h>
+
+int a, *b, c, d, f, **i, p, q, *r;
+short o, j;
+
+static int __attribute__((noinline, noclone))
+fn1 (int *p1, int **p2)
+{
+ int **e = &b;
+ for (; p; p++)
+ *p1 = 1;
+ *e = *p2 = &d;
+
+ assert (r);
+
+ return c;
+}
+
+static int ** __attribute__((noinline, noclone))
+fn2 (void)
+{
+ for (f = 0; f != 42; f++)
+ {
+ int *g[3] = {0, 0, 0};
+ for (o = 0; o; o--)
+ for (; a > 1;)
+ {
+ int **h[1] = { &g[2] };
+ }
+ }
+ return &r;
+}
+
+int
+main (void)
+{
+ i = fn2 ();
+ fn1 (b, i);
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr58984.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr58984.c
new file mode 100644
index 000000000..e0f7669c7
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr58984.c
@@ -0,0 +1,57 @@
+/* PR tree-optimization/58984 */
+
+struct S { int f0 : 8; int : 6; int f1 : 5; };
+struct T { char f0; int : 6; int f1 : 5; };
+
+int a, *c = &a, e, n, b, m;
+
+static int
+foo (struct S p)
+{
+ const unsigned short *f[36];
+ for (; e < 2; e++)
+ {
+ const unsigned short **i = &f[0];
+ *c ^= 1;
+ if (p.f1)
+ {
+ *i = 0;
+ return b;
+ }
+ }
+ return 0;
+}
+
+static int
+bar (struct T p)
+{
+ const unsigned short *f[36];
+ for (; e < 2; e++)
+ {
+ const unsigned short **i = &f[0];
+ *c ^= 1;
+ if (p.f1)
+ {
+ *i = 0;
+ return b;
+ }
+ }
+ return 0;
+}
+
+int
+main ()
+{
+ struct S o = { 1, 1 };
+ foo (o);
+ m = n || o.f0;
+ if (a != 1)
+ __builtin_abort ();
+ e = 0;
+ struct T p = { 1, 1 };
+ bar (p);
+ m |= n || p.f0;
+ if (a != 0)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c
new file mode 100644
index 000000000..18da0059e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c
@@ -0,0 +1,23 @@
+/* PR tree-optimization/59014 */
+
+__attribute__((noinline, noclone)) long long int
+foo (long long int x, long long int y)
+{
+ if (((int) x | (int) y) != 0)
+ return 6;
+ return x + y;
+}
+
+int
+main ()
+{
+ if (sizeof (long long) == sizeof (int))
+ return 0;
+ int shift_half = sizeof (int) * __CHAR_BIT__ / 2;
+ long long int x = (3LL << shift_half) << shift_half;
+ long long int y = (5LL << shift_half) << shift_half;
+ long long int z = foo (x, y);
+ if (z != ((8LL << shift_half) << shift_half))
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59014.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59014.c
new file mode 100644
index 000000000..10bf81a46
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59014.c
@@ -0,0 +1,25 @@
+/* PR tree-optimization/59014 */
+
+int a = 2, b, c, d;
+
+int
+foo ()
+{
+ for (;; c++)
+ if ((b > 0) | (a & 1))
+ ;
+ else
+ {
+ d = a;
+ return 0;
+ }
+}
+
+int
+main ()
+{
+ foo ();
+ if (d != 2)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59101.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59101.c
new file mode 100644
index 000000000..ed6a7e8fa
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59101.c
@@ -0,0 +1,15 @@
+/* PR target/59101 */
+
+__attribute__((noinline, noclone)) int
+foo (int a)
+{
+ return (~a & 4102790424LL) > 0 | 6;
+}
+
+int
+main ()
+{
+ if (foo (0) != 7)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59358.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59358.c
new file mode 100644
index 000000000..674026d62
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59358.c
@@ -0,0 +1,44 @@
+/* PR tree-optimization/59358 */
+
+__attribute__((noinline, noclone)) int
+foo (int *x, int y)
+{
+ int z = *x;
+ if (y > z && y <= 16)
+ while (y > z)
+ z *= 2;
+ return z;
+}
+
+int
+main ()
+{
+ int i;
+ for (i = 1; i < 17; i++)
+ {
+ int j = foo (&i, 16);
+ int k;
+ if (i >= 8 && i <= 15)
+ k = 16 + (i - 8) * 2;
+ else if (i >= 4 && i <= 7)
+ k = 16 + (i - 4) * 4;
+ else if (i == 3)
+ k = 24;
+ else
+ k = 16;
+ if (j != k)
+ __builtin_abort ();
+ j = foo (&i, 7);
+ if (i >= 7)
+ k = i;
+ else if (i >= 4)
+ k = 8 + (i - 4) * 2;
+ else if (i == 3)
+ k = 12;
+ else
+ k = 8;
+ if (j != k)
+ __builtin_abort ();
+ }
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59388.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59388.c
new file mode 100644
index 000000000..de3648a00
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59388.c
@@ -0,0 +1,11 @@
+/* PR tree-optimization/59388 */
+
+int a;
+struct S { unsigned int f:1; } b;
+
+int
+main ()
+{
+ a = (0 < b.f) | b.f;
+ return a;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60017.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60017.c
new file mode 100644
index 000000000..d72c12c8a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60017.c
@@ -0,0 +1,33 @@
+/* PR target/60017 */
+
+extern void abort (void);
+
+struct S0
+{
+ short m0;
+ short m1;
+};
+
+struct S1
+{
+ unsigned m0:1;
+ char m1[2][2];
+ struct S0 m2[2];
+};
+
+struct S1 x = { 1, {{2, 3}, {4, 5}}, {{6, 7}, {8, 9}} };
+
+struct S1 func (void)
+{
+ return x;
+}
+
+int main (void)
+{
+ struct S1 ret = func ();
+
+ if (ret.m2[1].m1 != 9)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60062.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60062.c
new file mode 100644
index 000000000..62973d458
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60062.c
@@ -0,0 +1,25 @@
+/* PR target/60062 */
+
+int a;
+
+static void
+foo (const char *p1, int p2)
+{
+ if (__builtin_strcmp (p1, "hello") != 0)
+ __builtin_abort ();
+}
+
+static void
+bar (const char *p1)
+{
+ if (__builtin_strcmp (p1, "hello") != 0)
+ __builtin_abort ();
+}
+
+__attribute__((optimize (0))) int
+main ()
+{
+ foo ("hello", a);
+ bar ("hello");
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60072.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60072.c
new file mode 100644
index 000000000..566874d63
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60072.c
@@ -0,0 +1,16 @@
+/* PR target/60072 */
+
+int c = 1;
+
+__attribute__ ((optimize (1)))
+static int *foo (int *p)
+{
+ return p;
+}
+
+int
+main ()
+{
+ *foo (&c) = 2;
+ return c - 2;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60454.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60454.c
new file mode 100644
index 000000000..ceec45e69
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60454.c
@@ -0,0 +1,31 @@
+#ifdef __UINT32_TYPE__
+typedef __UINT32_TYPE__ uint32_t;
+#else
+typedef unsigned uint32_t;
+#endif
+
+#define __fake_const_swab32(x) ((uint32_t)( \
+ (((uint32_t)(x) & (uint32_t)0x000000ffUL) << 24) | \
+ (((uint32_t)(x) & (uint32_t)0x0000ff00UL) << 8) | \
+ (((uint32_t)(x) & (uint32_t)0x000000ffUL) << 8) | \
+ (((uint32_t)(x) & (uint32_t)0x0000ff00UL) ) | \
+ (((uint32_t)(x) & (uint32_t)0xff000000UL) >> 24)))
+
+/* Previous version of bswap optimization would detect byte swap when none
+ happen. This test aims at catching such wrong detection to avoid
+ regressions. */
+
+__attribute__ ((noinline, noclone)) uint32_t
+fake_swap32 (uint32_t in)
+{
+ return __fake_const_swab32 (in);
+}
+
+int main(void)
+{
+ if (sizeof (uint32_t) * __CHAR_BIT__ != 32)
+ return 0;
+ if (fake_swap32 (0x12345678UL) != 0x78567E12UL)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60960.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60960.c
new file mode 100644
index 000000000..b4f08d4c5
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr60960.c
@@ -0,0 +1,38 @@
+/* PR tree-optimization/60960 */
+
+typedef unsigned char v4qi __attribute__ ((vector_size (4)));
+
+__attribute__((noinline, noclone)) v4qi
+f1 (v4qi v)
+{
+ return v / 2;
+}
+
+__attribute__((noinline, noclone)) v4qi
+f2 (v4qi v)
+{
+ return v / (v4qi) { 2, 2, 2, 2 };
+}
+
+__attribute__((noinline, noclone)) v4qi
+f3 (v4qi x, v4qi y)
+{
+ return x / y;
+}
+
+int
+main ()
+{
+ v4qi x = { 5, 5, 5, 5 };
+ v4qi y = { 2, 2, 2, 2 };
+ v4qi z = f1 (x);
+ if (__builtin_memcmp (&y, &z, sizeof (y)) != 0)
+ __builtin_abort ();
+ z = f2 (x);
+ if (__builtin_memcmp (&y, &z, sizeof (y)) != 0)
+ __builtin_abort ();
+ z = f3 (x, y);
+ if (__builtin_memcmp (&y, &z, sizeof (y)) != 0)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/20050922-1.c b/gcc-4.8/gcc/testsuite/gcc.dg/20050922-1.c
index ed5a3c63e..982f82011 100644
--- a/gcc-4.8/gcc/testsuite/gcc.dg/20050922-1.c
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/20050922-1.c
@@ -4,7 +4,7 @@
/* { dg-do run } */
/* { dg-options "-O1 -std=c99" } */
-#include <stdlib.h>
+extern void abort (void);
#if __INT_MAX__ == 2147483647
typedef unsigned int uint32_t;
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/20050922-2.c b/gcc-4.8/gcc/testsuite/gcc.dg/20050922-2.c
index c2974d03d..2e8db829e 100644
--- a/gcc-4.8/gcc/testsuite/gcc.dg/20050922-2.c
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/20050922-2.c
@@ -4,7 +4,8 @@
/* { dg-do run } */
/* { dg-options "-O1 -std=c99" } */
-#include <stdlib.h>
+extern void abort (void);
+extern void exit (int);
#if __INT_MAX__ == 2147483647
typedef unsigned int uint32_t;
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/atomic-store-6.c b/gcc-4.8/gcc/testsuite/gcc.dg/atomic-store-6.c
new file mode 100644
index 000000000..81499cd71
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/atomic-store-6.c
@@ -0,0 +1,13 @@
+/* { dg-do run } */
+/* { dg-require-effective-target sync_int_128_runtime } */
+/* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */
+
+__int128_t i;
+
+int main()
+{
+ __atomic_store_16(&i, -1, 0);
+ if (i != -1)
+ __builtin_abort();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/builtin-object-size-14.c b/gcc-4.8/gcc/testsuite/gcc.dg/builtin-object-size-14.c
new file mode 100644
index 000000000..085011eda
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/builtin-object-size-14.c
@@ -0,0 +1,28 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+extern void abort (void);
+extern char *strncpy(char *, const char *, __SIZE_TYPE__);
+
+union u {
+ struct {
+ char vi[8];
+ char pi[16];
+ };
+ char all[8+16+4];
+};
+
+void __attribute__((noinline,noclone))
+f(union u *u)
+{
+ char vi[8+1];
+ __builtin_strncpy(vi, u->vi, sizeof(u->vi));
+ if (__builtin_object_size (u->all, 1) != -1)
+ abort ();
+}
+int main()
+{
+ union u u;
+ f (&u);
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c b/gcc-4.8/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c
new file mode 100644
index 000000000..7b3316653
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c
@@ -0,0 +1,7 @@
+/* Test to make sure the macro info includes the predefined macros with line number 0. */
+/* { dg-do compile } */
+/* { dg-options "-g3 -gdwarf-2 -dA -fverbose-asm" } */
+/* { dg-final { scan-assembler "At line number 0" } } */
+
+#define FOO 1
+int i;
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/gomp/pr58809.c b/gcc-4.8/gcc/testsuite/gcc.dg/gomp/pr58809.c
new file mode 100644
index 000000000..5dc02f65a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/gomp/pr58809.c
@@ -0,0 +1,13 @@
+/* PR middle-end/58809 */
+/* { dg-do compile } */
+/* { dg-options "-fopenmp -O" } */
+
+int i;
+#pragma omp threadprivate (i)
+
+void foo()
+{
+ _Complex int j;
+#pragma omp parallel copyin (i) reduction (&&:j)
+ ;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr55022.c b/gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr55022.c
new file mode 100644
index 000000000..c631c0e23
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr55022.c
@@ -0,0 +1,27 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fgraphite-identity" } */
+
+extern void abort (void);
+
+void __attribute__((noinline,noclone))
+f(int *limit, int minLen, int maxLen)
+{
+ int i;
+
+ for (i = minLen; i <= maxLen; i++) {
+ limit[i] = i;
+ }
+}
+
+int main()
+{
+ int limit[256], i;
+ f (limit, 0, 255);
+ for (i = 0; i < 256; ++i)
+ {
+ if (limit[i] != i)
+ abort ();
+ __asm__ volatile ("" : : : "memory");
+ }
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr59817-1.c b/gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr59817-1.c
new file mode 100644
index 000000000..175fa16fd
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr59817-1.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-interchange" } */
+
+int kd;
+
+void
+n2(void)
+{
+ static int so;
+ static short int i5;
+ int wj;
+ int *il;
+ int *nk = &so;
+ for (wj = 0; wj < 2; ++wj)
+ *nk = ((i5 += *il) || kd );
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr59817-2.c b/gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr59817-2.c
new file mode 100644
index 000000000..139500768
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr59817-2.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-interchange" } */
+
+void
+xl(void)
+{
+ static int j3;
+ for (j3 = 0; j3 < 1; ++j3) {
+ static int f2;
+ static int w7;
+ short int b5;
+ int ok;
+ f2 = (b5 += ok) ? (w7 = 0): (w7 ? 0 : (f2 = ok));
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr60740.c b/gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr60740.c
new file mode 100644
index 000000000..5b7c18022
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/graphite/pr60740.c
@@ -0,0 +1,16 @@
+/* { dg-options "-O2 -floop-interchange" } */
+
+int **db6 = 0;
+
+void
+k26(void)
+{
+ static int geb = 0;
+ int *a22 = &geb;
+ int **l30 = &a22;
+ int *c4b;
+ int ndf;
+ for (ndf = 0; ndf <= 1; ++ndf)
+ *c4b = (db6 == l30) && (*a22)--;
+}
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/guality/pr59776.c b/gcc-4.8/gcc/testsuite/gcc.dg/guality/pr59776.c
new file mode 100644
index 000000000..382abb622
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/guality/pr59776.c
@@ -0,0 +1,29 @@
+/* PR debug/59776 */
+/* { dg-do run } */
+/* { dg-options "-g" } */
+
+#include "../nop.h"
+
+struct S { float f, g; };
+
+__attribute__((noinline, noclone)) void
+foo (struct S *p)
+{
+ struct S s1, s2; /* { dg-final { gdb-test pr59776.c:17 "s1.f" "5.0" } } */
+ s1 = *p; /* { dg-final { gdb-test pr59776.c:17 "s1.g" "6.0" } } */
+ s2 = s1; /* { dg-final { gdb-test pr59776.c:17 "s2.f" "0.0" } } */
+ *(int *) &s2.f = 0; /* { dg-final { gdb-test pr59776.c:17 "s2.g" "6.0" } } */
+ asm volatile (NOP : : : "memory"); /* { dg-final { gdb-test pr59776.c:20 "s1.f" "5.0" } } */
+ asm volatile (NOP : : : "memory"); /* { dg-final { gdb-test pr59776.c:20 "s1.g" "6.0" } } */
+ s2 = s1; /* { dg-final { gdb-test pr59776.c:20 "s2.f" "5.0" } } */
+ asm volatile (NOP : : : "memory"); /* { dg-final { gdb-test pr59776.c:20 "s2.g" "6.0" } } */
+ asm volatile (NOP : : : "memory");
+}
+
+int
+main ()
+{
+ struct S x = { 5.0f, 6.0f };
+ foo (&x);
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pr55260.c b/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pr55260.c
new file mode 100644
index 000000000..ef151b0a2
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pr55260.c
@@ -0,0 +1,38 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-inline -fipa-cp-clone" } */
+
+typedef struct {
+ int *ptr;
+ int len;
+} string;
+typedef struct {
+ string nantstr;
+ int *nant;
+} malv;
+typedef struct {
+ int *nor;
+} list_heads;
+int b;
+list_heads *fn1(string, int *, unsigned);
+void fn2(malv *p1, list_heads *p2, unsigned p3) {
+ string a = p1->nantstr;
+ fn1(a, p1->nant, p3);
+}
+
+void fn3(unsigned p1) { fn2(0, 0, p1); }
+
+list_heads *fn1(string p1, int *p2, unsigned p3) {
+ while (1) {
+ if (p3)
+ fn3(1);
+ if (b)
+ return 0;
+ fn3(1);
+ }
+}
+
+void fn5() {
+ list_heads c;
+ c.nor = 0;
+ fn2(0, &c, 1);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pr59610.c b/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pr59610.c
new file mode 100644
index 000000000..fc0933441
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pr59610.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+struct A { int a; };
+extern void *y;
+
+__attribute__((optimize (0))) void
+foo (void *p, struct A x)
+{
+ foo (y, x);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr56824.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr56824.c
new file mode 100644
index 000000000..d682d0a81
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr56824.c
@@ -0,0 +1,18 @@
+/* PR preprocessor/56824 */
+/* { dg-do compile } */
+/* { dg-options "-Waggregate-return" } */
+
+struct S { int i; };
+struct S foo (void);
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Waggregate-return"
+
+int
+main ()
+{
+ foo ();
+ return 0;
+}
+
+#pragma GCC diagnostic pop
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr58668.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr58668.c
new file mode 100644
index 000000000..3e09508dc
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr58668.c
@@ -0,0 +1,25 @@
+/* PR rtl-optimization/58668 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-mthumb" { target { { arm*-*-* } && arm_thumb2_ok } } } */
+
+void *fn1 (void *);
+void *fn2 (void *, const char *);
+void fn3 (void *);
+void fn4 (void *, int);
+
+void *
+test (void *x)
+{
+ void *a, *b;
+ if (!(a = fn1 (x)))
+ return (void *) 0;
+ if (!(b = fn2 (a, "w")))
+ {
+ fn3 (a);
+ return (void *) 0;
+ }
+ fn3 (a);
+ fn4 (b, 1);
+ return b;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr58805.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr58805.c
new file mode 100644
index 000000000..dda0e4bdf
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr58805.c
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-tail-merge -fdump-tree-pre" } */
+
+/* Type that matches the 'p' constraint. */
+#define TYPE void *
+
+static inline
+void bar (TYPE *r)
+{
+ TYPE t;
+ __asm__ ("" : "=&p" (t), "=p" (*r));
+}
+
+void
+foo (int n, TYPE *x, TYPE *y)
+{
+ if (n == 0)
+ bar (x);
+ else
+ bar (y);
+}
+
+/* { dg-final { scan-tree-dump-times "__asm__" 2 "pre"} } */
+/* { dg-final { cleanup-tree-dump "pre" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr59011.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr59011.c
new file mode 100644
index 000000000..2fb8187ad
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr59011.c
@@ -0,0 +1,22 @@
+/* PR middle-end/59011 */
+/* { dg-do compile } */
+/* { dg-options "-std=gnu99" } */
+
+void
+foo (int m)
+{
+ int a[m];
+ void
+ bar (void)
+ {
+ {
+ int
+ baz (void)
+ {
+ return a[0];
+ }
+ }
+ a[0] = 42;
+ }
+ bar ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr59351.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr59351.c
new file mode 100644
index 000000000..384058f40
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr59351.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c99 -Wpedantic" } */
+
+unsigned int
+foo (void)
+{
+ return sizeof ((int[]) {}); /* { dg-warning "ISO C forbids empty initializer braces" } */
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr59827.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr59827.c
new file mode 100644
index 000000000..77e1e9ca2
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr59827.c
@@ -0,0 +1,15 @@
+/* PR middle-end/59827 */
+/* { dg-do compile } */
+
+int
+foo (int p[2][]) /* { dg-error "array type has incomplete element type" } */
+{
+ return p[0][0];
+}
+
+void
+bar (void)
+{
+ int p[2][1];
+ foo (p); /* { dg-error "type of formal parameter 1 is incomplete" } */
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr59860.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr59860.c
new file mode 100644
index 000000000..6807d9c84
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr59860.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O" } */
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * __attribute__ ((__nothrow__ , __leaf__))
+strcat (char *__restrict __dest, const char *__restrict __src)
+{
+ return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
+}
+static char raw_decode;
+void foo (char **argv, char *outfilename)
+{
+ if (**argv == 'r')
+ raw_decode = 1;
+ strcat (outfilename, raw_decode ? ".raw" : ".wav");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr60485-1.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr60485-1.c
new file mode 100644
index 000000000..2e5c2e5bf
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr60485-1.c
@@ -0,0 +1,29 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+extern void abort (void);
+struct S {
+ int *i[4];
+ int *p1;
+ int *p2;
+ int *p3;
+ int *p4;
+};
+int **b;
+int main()
+{
+ int i = 1;
+ struct S s;
+ s.p3 = &i;
+ int **p;
+ if (b)
+ p = b;
+ else
+ p = &s.i[2];
+ p += 4;
+ if (!b)
+ **p = 0;
+ if (i != 0)
+ abort ();
+ return i;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr60485-2.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr60485-2.c
new file mode 100644
index 000000000..767e61d1c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr60485-2.c
@@ -0,0 +1,38 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+extern void abort (void);
+struct S {
+ int *i[4];
+ int *p1;
+ int *p2;
+ int *p3;
+ int *p4;
+ int **x;
+};
+int **b;
+int main()
+{
+ int i = 1;
+ struct S s;
+ s.p3 = &i;
+ int **p;
+ if (b)
+ p = b;
+ else
+ p = &s.i[2];
+ p += 4;
+ /* prevert fowrprop from creating an offsetted sd constraint and
+ preserve the pointer offsetting constraint. */
+ s.x = p;
+ p = s.x;
+ if (!b)
+ {
+ int *z = *p;
+ /* z should point to i (and non-local/escaped). */
+ *z = 0;
+ }
+ if (i != 0)
+ abort ();
+ return i;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/stack-usage-1.c b/gcc-4.8/gcc/testsuite/gcc.dg/stack-usage-1.c
index b6524f9a1..78aaef08b 100644
--- a/gcc-4.8/gcc/testsuite/gcc.dg/stack-usage-1.c
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/stack-usage-1.c
@@ -38,7 +38,11 @@
# endif
#elif defined (__powerpc64__) || defined (__ppc64__) || defined (__POWERPC64__) \
|| defined (__PPC64__)
+# if _CALL_ELF == 2
+# define SIZE 208
+# else
# define SIZE 180
+# endif
#elif defined (__powerpc__) || defined (__PPC__) || defined (__ppc__) \
|| defined (__POWERPC__) || defined (PPC) || defined (_IBMR2)
# if defined (__ALTIVEC__)
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/tls/pr58595.c b/gcc-4.8/gcc/testsuite/gcc.dg/tls/pr58595.c
new file mode 100644
index 000000000..d830e76d4
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/tls/pr58595.c
@@ -0,0 +1,28 @@
+/* PR target/58595 */
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-fpic" { target fpic } } */
+/* { dg-require-effective-target tls } */
+/* { dg-require-effective-target sync_int_long } */
+
+struct S { unsigned long a, b; };
+__thread struct S s;
+void bar (unsigned long *);
+
+__attribute__((noinline)) void
+foo (void)
+{
+ int i;
+ for (i = 0; i < 10; i++)
+ __sync_fetch_and_add (&s.b, 1L);
+}
+
+int
+main ()
+{
+ s.b = 12;
+ foo ();
+ if (s.b != 22)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57425-1.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57425-1.c
new file mode 100644
index 000000000..8ca85cafe
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57425-1.c
@@ -0,0 +1,37 @@
+/* { dg-do run } */
+
+extern void abort (void) __attribute__((noreturn));
+
+union setconflict
+{
+ int a[20];
+ long b[10];
+};
+
+int
+main ()
+{
+ int sum = 0;
+ {
+ union setconflict a;
+ int *c;
+ c = a.a;
+ asm ("": "=r" (c):"0" (c));
+ *c = 0;
+ asm ("": "=r" (c):"0" (c));
+ sum += *c;
+ }
+ {
+ union setconflict a;
+ long *c;
+ c = a.b;
+ asm ("": "=r" (c):"0" (c));
+ *c = 1;
+ asm ("": "=r" (c):"0" (c));
+ sum += *c;
+ }
+
+ if (sum != 1)
+ abort();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57425-2.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57425-2.c
new file mode 100644
index 000000000..ccb546e0e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57425-2.c
@@ -0,0 +1,31 @@
+/* { dg-do run } */
+
+extern void abort (void) __attribute__((noreturn));
+
+int
+main ()
+{
+ int sum = 0;
+ {
+ int a[20];
+ int *c;
+ c = a;
+ asm ("": "=r" (c):"0" (c));
+ *c = 0;
+ asm ("": "=r" (c):"0" (c));
+ sum += *c;
+ }
+ {
+ long b[10];
+ long *c;
+ c = b;
+ asm ("": "=r" (c):"0" (c));
+ *c = 1;
+ asm ("": "=r" (c):"0" (c));
+ sum += *c;
+ }
+
+ if (sum != 1)
+ abort();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57425-3.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57425-3.c
new file mode 100644
index 000000000..8e0c7fe2d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57425-3.c
@@ -0,0 +1,31 @@
+/* { dg-do run } */
+
+extern void abort (void) __attribute__((noreturn));
+
+int
+main ()
+{
+ int sum = 0;
+ {
+ long a[20];
+ long *c;
+ c = a;
+ asm ("": "=r" (c):"0" (c));
+ *c = 0;
+ asm ("": "=r" (c):"0" (c));
+ sum += *c;
+ }
+ {
+ long long b[10];
+ long long *c;
+ c = b;
+ asm ("": "=r" (c):"0" (c));
+ *c = 1;
+ asm ("": "=r" (c):"0" (c));
+ sum += *c;
+ }
+
+ if (sum != 1)
+ abort();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57488.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57488.c
new file mode 100644
index 000000000..7eda36476
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57488.c
@@ -0,0 +1,58 @@
+/* { dg-do run } */
+
+extern void abort (void);
+
+int i, j, *pj = &j, **ppj = &pj;
+int x, *px = &x;
+
+short s, *ps = &s, k;
+
+unsigned short u, *pu = &u, **ppu = &pu;
+
+char c, *pc = &c;
+
+unsigned char v = 48;
+
+static int
+bar (int p)
+{
+ p = k;
+ *px = **ppu = i;
+ *ppj = &p;
+ if (**ppj)
+ *pj = p;
+ return p;
+}
+
+void __attribute__((noinline))
+foo ()
+{
+ for (; i <= 3; i++)
+ for (; j; j--);
+
+ u ^= bar (*pj);
+
+ for (k = 1; k >= 0; k--)
+ {
+ int l;
+ bar (0);
+ for (l = 1; l < 5; l++)
+ {
+ int m;
+ for (m = 6; m; m--)
+ {
+ v--;
+ *ps = *pc;
+ }
+ }
+ }
+}
+
+int
+main ()
+{
+ foo ();
+ if (v != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57517.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57517.c
new file mode 100644
index 000000000..2422d8ee6
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57517.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+
+int x[1024], y[1024], z[1024], w[1024];
+void foo (void)
+{
+ int i;
+ for (i = 1; i < 1024; ++i)
+ {
+ int a = x[i];
+ int b = y[i];
+ int c = x[i-1];
+ int d = y[i-1];
+ if (w[i])
+ z[i] = (a + b) + (c + d);
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57569.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57569.c
new file mode 100644
index 000000000..f036d559d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57569.c
@@ -0,0 +1,37 @@
+/* { dg-do run } */
+
+extern void abort (void) __attribute__((noreturn));
+
+struct S { int f0; } a;
+
+int b, e, *d = &b, f;
+
+void
+fn1 ()
+{
+ int **g[9][6];
+ int ***h = &g[6][3];
+ for (; e < 9; e++) {
+ f = 0;
+ for (; f < 6; f++)
+ g[e][f] = &d;
+ }
+ ***h = 0;
+}
+
+void
+fn2 ()
+{
+ fn1 ();
+ struct S c[4][10] = {};
+ a = c[3][9];
+}
+
+int
+main ()
+{
+ fn2 ();
+ if (a.f0 != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57864.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57864.c
new file mode 100644
index 000000000..93962c20e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57864.c
@@ -0,0 +1,37 @@
+/* { dg-do compile } */
+
+union U {
+ double val;
+ union U *ptr;
+};
+
+union U *d;
+double a;
+int b;
+int c;
+
+static void fn1(union U *p1, int p2, _Bool p3)
+{
+ union U *e;
+
+ if (p2 == 0)
+ a = ((union U*)((unsigned long)p1 & ~1))->val;
+
+ if (b) {
+ e = p1;
+ } else if (c) {
+ e = ((union U*)((unsigned long)p1 & ~1))->ptr;
+ d = e;
+ } else {
+ e = 0;
+ d = ((union U*)0)->ptr;
+ }
+
+ fn1 (e, 0, 0);
+ fn1 (0, 0, p3);
+}
+
+void fn2 (void)
+{
+ fn1 (0, 0, 0);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58079.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58079.c
new file mode 100644
index 000000000..99a30181f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58079.c
@@ -0,0 +1,107 @@
+/* { dg-options "-mlong-calls" { target mips*-*-* } } */
+
+typedef unsigned char u8;
+typedef unsigned short u16;
+typedef unsigned int __kernel_size_t;
+typedef __kernel_size_t size_t;
+struct list_head {
+ struct list_head *next;
+};
+
+struct dmx_ts_feed {
+ int is_filtering;
+};
+struct dmx_section_feed {
+ u16 secbufp;
+ u16 seclen;
+ u16 tsfeedp;
+};
+
+typedef int (*dmx_ts_cb) (
+ const u8 * buffer1,
+ size_t buffer1_length,
+ const u8 * buffer2,
+ size_t buffer2_length
+);
+
+struct dvb_demux_feed {
+ union {
+ struct dmx_ts_feed ts;
+ struct dmx_section_feed sec;
+ } feed;
+ union {
+ dmx_ts_cb ts;
+ } cb;
+ int type;
+ u16 pid;
+ int ts_type;
+ struct list_head list_head;
+};
+
+struct dvb_demux {
+ int (*stop_feed)(struct dvb_demux_feed *feed);
+ struct list_head feed_list;
+};
+
+
+static
+inline
+__attribute__((always_inline))
+u8
+payload(const u8 *tsp)
+{
+ if (tsp[3] & 0x20) {
+ return 184 - 1 - tsp[4];
+ }
+ return 184;
+}
+
+static
+inline
+__attribute__((always_inline))
+int
+dvb_dmx_swfilter_payload(struct dvb_demux_feed *feed, const u8 *buf)
+{
+ int count = payload(buf);
+ int p;
+ if (count == 0)
+ return -1;
+ return feed->cb.ts(&buf[p], count, ((void *)0), 0);
+}
+
+static
+inline
+__attribute__((always_inline))
+void
+dvb_dmx_swfilter_packet_type(struct dvb_demux_feed *feed, const u8 *buf)
+{
+ switch (feed->type) {
+ case 0:
+ if (feed->ts_type & 1) {
+ dvb_dmx_swfilter_payload(feed, buf);
+ }
+ if (dvb_dmx_swfilter_section_packet(feed, buf) < 0)
+ feed->feed.sec.seclen = feed->feed.sec.secbufp = 0;
+ }
+}
+
+static
+void
+dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)
+{
+ struct dvb_demux_feed *feed;
+ int dvr_done = 0;
+
+ for (feed = ({ const typeof( ((typeof(*feed) *)0)->list_head ) *__mptr = ((&demux->feed_list)->next); (typeof(*feed) *)( (char *)__mptr - __builtin_offsetof(typeof(*feed),list_head) );}); __builtin_prefetch(feed->list_head.next), &feed->list_head != (&demux->feed_list); feed = ({ const typeof( ((typeof(*feed) *)0)->list_head ) *__mptr = (feed->list_head.next); (typeof(*feed) *)( (char *)__mptr - __builtin_offsetof(typeof(*feed),list_head) );})) {
+ if (((((feed)->type == 0) && ((feed)->feed.ts.is_filtering) && (((feed)->ts_type & (1 | 8)) == 1))) && (dvr_done++))
+ dvb_dmx_swfilter_packet_type(feed, buf);
+ else if (feed->pid == 0x2000)
+ feed->cb.ts(buf, 188, ((void *)0), 0);
+ }
+}
+void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, size_t count)
+{
+ while (count--) {
+ dvb_dmx_swfilter_packet(demux, buf);
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58143-1.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58143-1.c
new file mode 100644
index 000000000..855515edb
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58143-1.c
@@ -0,0 +1,51 @@
+/* { dg-do run } */
+/* { dg-additional-options "-fstrict-overflow" } */
+
+extern void abort (void);
+
+int a, b, c, d, e, f, g, h = 1, i;
+
+int foo (int p)
+{
+ return p < 0 && a < - __INT_MAX__ - 1 - p ? 0 : 1;
+}
+
+int *bar ()
+{
+ int j;
+ i = h ? 0 : 1 % h;
+ for (j = 0; j < 1; j++)
+ for (d = 0; d; d++)
+ for (e = 1; e;)
+ return 0;
+ return 0;
+}
+
+int baz ()
+{
+ for (; b >= 0; b--)
+ for (c = 1; c >= 0; c--)
+ {
+ int *k = &c;
+ for (;;)
+ {
+ for (f = 0; f < 1; f++)
+ {
+ g = foo (*k);
+ bar ();
+ }
+ if (*k)
+ break;
+ return 0;
+ }
+ }
+ return 0;
+}
+
+int main ()
+{
+ baz ();
+ if (b != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58143-2.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58143-2.c
new file mode 100644
index 000000000..dd0dae1ef
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58143-2.c
@@ -0,0 +1,34 @@
+/* { dg-do run } */
+/* { dg-additional-options "-fstrict-overflow" } */
+
+int a, b, d, e, f, *g, h, i;
+volatile int c;
+
+char foo (unsigned char p)
+{
+ return p + 1;
+}
+
+int bar ()
+{
+ for (h = 0; h < 3; h = foo (h))
+ {
+ c;
+ for (f = 0; f < 1; f++)
+ {
+ i = a && 0 < -__INT_MAX__ - h ? 0 : 1;
+ if (e)
+ for (; d;)
+ b = 0;
+ else
+ g = 0;
+ }
+ }
+ return 0;
+}
+
+int main ()
+{
+ bar ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58143-3.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58143-3.c
new file mode 100644
index 000000000..23ae9cd39
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58143-3.c
@@ -0,0 +1,18 @@
+/* { dg-do run } */
+/* { dg-additional-options "-fstrict-overflow" } */
+
+int a, b, c, d, e;
+
+int
+main ()
+{
+ for (b = 4; b > -30; b--)
+ for (; c;)
+ for (;;)
+ {
+ e = a > __INT_MAX__ - b;
+ if (d)
+ break;
+ }
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58779.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58779.c
new file mode 100644
index 000000000..b0c0c8695
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58779.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+
+int a, c;
+
+int main ()
+{
+ int e = -1;
+ short d = (c <= 0) ^ e;
+ if ((unsigned int) a - (a || d) <= (unsigned int) a)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58830.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58830.c
new file mode 100644
index 000000000..8081f8b2c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58830.c
@@ -0,0 +1,42 @@
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-pre -ftree-partial-pre" } */
+
+extern void abort (void);
+
+int b, c, d, f, g, h, i, j[6], *l = &b, *m, n, *o, r;
+char k;
+
+static int
+foo ()
+{
+ char *p = &k;
+
+ for (; d; d++)
+ if (i)
+ h = 0;
+ else
+ h = c || (r = 0);
+
+ for (f = 0; f < 2; f++)
+ {
+ unsigned int q;
+ *l = 0;
+ if (n)
+ *m = g;
+ if (g)
+ o = 0;
+ for (q = -8; q >= 5; q++)
+ (*p)--;
+ }
+
+ return 0;
+}
+
+int
+main ()
+{
+ foo ();
+ if (j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[0]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ^ (k & 15)] != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58941.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58941.c
new file mode 100644
index 000000000..c0eea0731
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58941.c
@@ -0,0 +1,33 @@
+/* { dg-do run } */
+
+extern void abort (void);
+
+typedef struct {
+ int msgLength;
+ unsigned char data[1000];
+} SMsg;
+
+typedef struct {
+ int dummy;
+ int d[0];
+} SData;
+
+int condition = 3;
+
+int main()
+{
+ SMsg msg;
+ SData *pData = (SData*)(msg.data);
+ unsigned int i = 0;
+ for (i = 0; i < 1; i++)
+ {
+ pData->d[i] = 0;
+ if(condition & 1)
+ pData->d[i] |= 0x55;
+ if(condition & 2)
+ pData->d[i] |= 0xaa;
+ }
+ if (pData->d[0] != 0xff)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58956.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58956.c
new file mode 100644
index 000000000..7576ba7fb
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr58956.c
@@ -0,0 +1,30 @@
+/* { dg-do run } */
+
+extern void abort (void);
+
+struct S
+{
+ int f0;
+} a = {1}, b, g, *c = &b, **f = &c;
+
+int *d, **e = &d, h;
+
+struct S
+foo ()
+{
+ *e = &h;
+ if (!d)
+ __builtin_unreachable ();
+ *f = &g;
+ return a;
+}
+
+int
+main ()
+{
+ struct S *i = c;
+ *i = foo ();
+ if (b.f0 != 1)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59047.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59047.c
new file mode 100644
index 000000000..fcedfcba8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59047.c
@@ -0,0 +1,39 @@
+/* { dg-do run } */
+
+extern void abort (void);
+
+struct
+{
+ int f0;
+ int f1:1;
+ int f2:2;
+} a = {0, 0, 1};
+
+int b, c, *d, e, f;
+
+int
+fn1 ()
+{
+ for (; b < 1; ++b)
+ {
+ for (e = 0; e < 1; e = 1)
+ {
+ int **g = &d;
+ *g = &c;
+ }
+ *d = 0;
+ f = a.f1;
+ if (f)
+ return 0;
+ }
+ return 0;
+}
+
+int
+main ()
+{
+ fn1 ();
+ if (b != 1)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59139.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59139.c
new file mode 100644
index 000000000..4ec9177ff
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59139.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+
+int a, b, c, d, e;
+int fn1(p1, p2) { return p2 == 0 ? p1 : 1 % p2; }
+
+void fn2()
+{
+ c = 0;
+ for (;; c = (unsigned short)c)
+ {
+ b = 2;
+ for (; b; b = a)
+ {
+ e = fn1(2, c && 1);
+ d = c == 0 ? e : c;
+ if (d)
+ return;
+ }
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59164.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59164.c
new file mode 100644
index 000000000..1ec69610c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59164.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+
+int a, d, e;
+long b[10];
+int c[10][8];
+
+int fn1(p1)
+{
+ return 1 >> p1;
+}
+
+void fn2(void)
+{
+ int f;
+ for (a=1; a <= 4; a++)
+ {
+ f = fn1(0 < c[a][0]);
+ if (f || d)
+ e = b[a] = 1;
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59288.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59288.c
new file mode 100644
index 000000000..8331e7328
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59288.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+
+void
+baz (int *d)
+{
+ long int i, j, k;
+ for (i = 0, j = 0, k = 0; i < 512; i = (int) i + 1, j = (int) j + 1, k = (int) k + 3)
+ d[i] = j ^ (i * 3) ^ (2 * k + 2);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59330.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59330.c
new file mode 100644
index 000000000..74b832ea3
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59330.c
@@ -0,0 +1,17 @@
+/* { dg-do run } */
+
+void free(void *ptr)
+{
+}
+
+void *foo(void)
+{
+ return 0;
+}
+
+int main(void)
+{
+ void *p = foo();
+ free(p);
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59715.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59715.c
new file mode 100644
index 000000000..19c09de55
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59715.c
@@ -0,0 +1,21 @@
+/* { dg-do run } */
+
+extern void abort (void);
+
+int a = 2, b;
+
+int
+main ()
+{
+ int c;
+ if (!b)
+ {
+ b = a;
+ c = a == 0 ? 1 : 1 % a;
+ if (c)
+ b = 0;
+ }
+ if (b != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59891.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59891.c
new file mode 100644
index 000000000..1562acccf
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59891.c
@@ -0,0 +1,9 @@
+/* PR c/59891 */
+
+unsigned int a;
+
+int
+main ()
+{
+ return (0 ? a : 0) ? : 0 % 0; /* { dg-warning "division by zero" } */
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59903.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59903.c
new file mode 100644
index 000000000..01772df61
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr59903.c
@@ -0,0 +1,56 @@
+/* { dg-do compile } */
+
+int a, b, c, d, e, f, g, h, i[3], l, m, n, o, p, q, r;
+
+struct S0
+{
+ int f0;
+ int f1;
+ int f2;
+ int f3;
+} j;
+
+static int
+fn1 (int p1)
+{
+ return p1 || ((p1 > 0) > (e << 1));
+}
+
+static struct S0
+fn2 (struct S0 p1)
+{
+ char s;
+ struct S0 t = {0,0,0,0};
+ int u = 2;
+ for (;;)
+ {
+ if (i[0])
+ break;
+ for (m = 0; m < 4; m++)
+ for (p1.f0 = 0; p1.f0 < 3; p1.f0++)
+ {
+ j = t;
+ t.f3 = i[p1.f0];
+ o = b || 1 >> b ? 0 : a < 0;
+ q = 1 % d;
+ if ((g < fn1 ((1 ^ (q & 1)) | n)) ^ u)
+ j.f3 |= p % 2;
+ s = j.f3 > 0 ? j.f3 : j.f3 << 1;
+ r = l = s && p1.f1 * c;
+ h = p1.f1;
+ }
+ }
+ return p1;
+}
+
+int
+main ()
+{
+ for (;f;)
+ {
+ struct S0 v = {0,0,0,0};
+ fn2 (v);
+ j.f3 = 0;
+ }
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60115.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60115.c
new file mode 100644
index 000000000..cf7f45dfb
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60115.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+
+int a, b[2];
+
+int
+main ()
+{
+lbl:
+ for (; a; a--)
+ if (b[10000])
+ goto lbl;
+
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60183.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60183.c
new file mode 100644
index 000000000..d37b4b80a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60183.c
@@ -0,0 +1,38 @@
+/* { dg-do run } */
+
+/* Large so an out-of-bound read will crash. */
+unsigned char c[0x30001] = { 1 };
+int j = 2;
+
+static void
+foo (unsigned long *x, unsigned char *y)
+{
+ int i;
+ unsigned long w = x[0];
+ for (i = 0; i < j; i++)
+ {
+ w += *y;
+ y += 0x10000;
+ w += *y;
+ y += 0x10000;
+ }
+ x[1] = w;
+}
+
+__attribute__ ((noinline, noclone)) void
+bar (unsigned long *x)
+{
+ foo (x, c);
+}
+
+int
+main ()
+{
+ unsigned long a[2] = { 0, -1UL };
+ asm volatile (""::"r" (c):"memory");
+ c[0] = 0;
+ bar (a);
+ if (a[1] != 0)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60766.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60766.c
new file mode 100644
index 000000000..6f16e3b74
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60766.c
@@ -0,0 +1,15 @@
+/* { dg-do run } */
+
+int m = 9;
+
+int main()
+{
+ int n, x;
+
+ n = m;
+ for (x = 0; x <= n; x++)
+ if (n == x + (x + 1) + (x + 2))
+ return 0;
+
+ __builtin_abort();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60903.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60903.c
new file mode 100644
index 000000000..5d93ae3ee
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60903.c
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+
+extern int a, b, k, q;
+
+void
+foo ()
+{
+ if (a)
+ {
+ while (q)
+ {
+ lbl:
+ if (a)
+ {
+ a = 0;
+ goto lbl;
+ }
+ }
+ b = k;
+ }
+ goto lbl;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60930.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60930.c
new file mode 100644
index 000000000..5e35f1988
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr60930.c
@@ -0,0 +1,22 @@
+/* { dg-do run } */
+
+int x = 1;
+
+__attribute__((noinline, noclone)) void
+foo (unsigned long long t)
+{
+ asm volatile ("" : : "r" (&t));
+ if (t == 1)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+#if __SIZEOF_LONG_LONG__ >= 8
+ unsigned long long t = 0xffffffffffffffffULL * (0xffffffffUL * x);
+ if (t != 0xffffffff00000001ULL)
+ foo (t);;
+#endif
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c b/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c
new file mode 100644
index 000000000..0af243814
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-options "-O3" } */
+
+int a, c, e[5][2];
+unsigned int d;
+
+int
+main ()
+{
+ for (d = 0; d < 2; d++)
+ if (a ? 0 : e[c + 3][d] & e[c + 4][d])
+ break;
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c b/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c
new file mode 100644
index 000000000..e7ae87ccc
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c
@@ -0,0 +1,18 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -fdump-tree-pcom-details" } */
+
+int b, f, d[5][2];
+unsigned int c;
+
+int
+main ()
+{
+ for (c = 0; c < 2; c++)
+ if (d[b + 3][c] & d[b + 4][c])
+ if (f)
+ break;
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump "Executing predictive commoning" "pcom" } } */
+/* { dg-final { cleanup-tree-dump "pcom" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/unused-8b.c b/gcc-4.8/gcc/testsuite/gcc.dg/unused-8b.c
new file mode 100644
index 000000000..5b4b89493
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/unused-8b.c
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-Wall -Wno-unused -Wextra" } */
+
+void foo(int x) { }
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vect/pr60276.c b/gcc-4.8/gcc/testsuite/gcc.dg/vect/pr60276.c
new file mode 100644
index 000000000..d4ad21980
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vect/pr60276.c
@@ -0,0 +1,52 @@
+/* { dg-do run } */
+
+extern void abort (void);
+
+static void
+foo (int *out, const int *lp, unsigned samples)
+{
+ int x, target;
+ for (x = 0, target = 0; x < (int)samples; x += 2, target++)
+ {
+ out[x] = lp[target];
+ out[x - 1] = out[x - 2] + out[x];
+ }
+}
+
+static void
+foo_novec (int *out, const int *lp, unsigned samples)
+{
+ int x, target;
+ for (x = 0, target = 0; x < (int)samples; x += 2, target++)
+ {
+ out[x] = lp[target];
+ out[x - 1] = out[x - 2] + out[x];
+ __asm__ volatile ("" : : : "memory");
+ }
+}
+
+int main(void)
+{
+ const int lp[25] = {
+ 0, 2, 4, 6, 8,
+ 10, 12, 14, 16,
+ 18, 20, 22, 24,
+ 26, 28, 30, 32,
+ 34, 36, 38, 40,
+ 42, 44, 46, 48,
+ };
+ int out[49] = {0};
+ int out2[49] = {0};
+ int s;
+
+ foo (out + 2, lp + 1, 48);
+ foo_novec (out2 + 2, lp + 1, 48);
+
+ for (s = 0; s < 49; s++)
+ if (out[s] != out2[s])
+ abort ();
+
+ return 0;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vect/pr60382.c b/gcc-4.8/gcc/testsuite/gcc.dg/vect/pr60382.c
new file mode 100644
index 000000000..a28c6313c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vect/pr60382.c
@@ -0,0 +1,32 @@
+#include "tree-vect.h"
+
+int a, b, c, e, f;
+
+void
+foo ()
+{
+ for (b = 0; b < 3; b++)
+ if (e)
+ {
+ for (c = 0; c < 4; c++)
+ {
+ if (b)
+ continue;
+ f = 1;
+ for (a = 0; a < 2; a++)
+ f |= 1;
+ }
+ for (;;)
+ ;
+ }
+}
+
+int
+main ()
+{
+ check_vect ();
+ foo ();
+ return 0;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract-be-order.c
new file mode 100644
index 000000000..5c09471d9
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract-be-order.c
@@ -0,0 +1,33 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+static void test()
+{
+ vector unsigned char va = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char vb = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector unsigned short vc = {0,1,2,3,4,5,6,7};
+ vector signed short vd = {-4,-3,-2,-1,0,1,2,3};
+ vector unsigned int ve = {0,1,2,3};
+ vector signed int vf = {-2,-1,0,1};
+ vector float vg = {-2.0f,-1.0f,0.0f,1.0f};
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ check (vec_extract (va, 5) == 10, "vec_extract (va, 5)");
+ check (vec_extract (vb, 0) == 7, "vec_extract (vb, 0)");
+ check (vec_extract (vc, 7) == 0, "vec_extract (vc, 7)");
+ check (vec_extract (vd, 3) == 0, "vec_extract (vd, 3)");
+ check (vec_extract (ve, 2) == 1, "vec_extract (ve, 2)");
+ check (vec_extract (vf, 1) == 0, "vec_extract (vf, 1)");
+ check (vec_extract (vg, 0) == 1.0f, "vec_extract (vg, 0)");
+#else
+ check (vec_extract (va, 5) == 5, "vec_extract (va, 5)");
+ check (vec_extract (vb, 0) == -8, "vec_extract (vb, 0)");
+ check (vec_extract (vc, 7) == 7, "vec_extract (vc, 7)");
+ check (vec_extract (vd, 3) == -1, "vec_extract (vd, 3)");
+ check (vec_extract (ve, 2) == 2, "vec_extract (ve, 2)");
+ check (vec_extract (vf, 1) == -1, "vec_extract (vf, 1)");
+ check (vec_extract (vg, 0) == -2.0f, "vec_extract (vg, 0)");
+#endif
+}
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract-vsx-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract-vsx-be-order.c
new file mode 100644
index 000000000..6428ea5d8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract-vsx-be-order.c
@@ -0,0 +1,19 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static void test()
+{
+ vector long long vl = {0, 1};
+ vector double vd = {0.0, 1.0};
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ check (vec_extract (vl, 0) == 1, "vl, 0");
+ check (vec_extract (vd, 1) == 0.0, "vd, 1");
+#else
+ check (vec_extract (vl, 0) == 0, "vl, 0");
+ check (vec_extract (vd, 1) == 1.0, "vd, 1");
+#endif
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract-vsx.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract-vsx.c
new file mode 100644
index 000000000..cd34a2ae3
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract-vsx.c
@@ -0,0 +1,16 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static void test()
+{
+ vector long long vl = {0, 1};
+ vector double vd = {0.0, 1.0};
+
+ check (vec_extract (vl, 0) == 0, "vec_extract, vl, 0");
+ check (vec_extract (vd, 1) == 1.0, "vec_extract, vd, 1");
+ check (vl[0] == 0, "[], vl, 0");
+ check (vd[1] == 1.0, "[], vd, 0");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract.c
new file mode 100644
index 000000000..6fc472557
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/extract.c
@@ -0,0 +1,21 @@
+#include "harness.h"
+
+static void test()
+{
+ vector unsigned char va = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char vb = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector unsigned short vc = {0,1,2,3,4,5,6,7};
+ vector signed short vd = {-4,-3,-2,-1,0,1,2,3};
+ vector unsigned int ve = {0,1,2,3};
+ vector signed int vf = {-2,-1,0,1};
+ vector float vg = {-2.0f,-1.0f,0.0f,1.0f};
+
+ check (vec_extract (va, 5) == 5, "vec_extract (va, 5)");
+ check (vec_extract (vb, 0) == -8, "vec_extract (vb, 0)");
+ check (vec_extract (vc, 7) == 7, "vec_extract (vc, 7)");
+ check (vec_extract (vd, 3) == -1, "vec_extract (vd, 3)");
+ check (vec_extract (ve, 2) == 2, "vec_extract (ve, 2)");
+ check (vec_extract (vf, 1) == -1, "vec_extract (vf, 1)");
+ check (vec_extract (vg, 0) == -2.0f, "vec_extract (vg, 0)");
+}
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/gcc-bug-i.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/gcc-bug-i.c
index 97ef14488..3e0e6a079 100644
--- a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/gcc-bug-i.c
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/gcc-bug-i.c
@@ -13,12 +13,27 @@
#define DO_INLINE __attribute__ ((always_inline))
#define DONT_INLINE __attribute__ ((noinline))
+#ifdef __LITTLE_ENDIAN__
+static inline DO_INLINE int inline_me(vector signed short data)
+{
+ union {vector signed short v; signed short s[8];} u;
+ signed short x;
+ unsigned char x1, x2;
+
+ u.v = data;
+ x = u.s[7];
+ x1 = (x >> 8) & 0xff;
+ x2 = x & 0xff;
+ return ((x2 << 8) | x1);
+}
+#else
static inline DO_INLINE int inline_me(vector signed short data)
{
union {vector signed short v; signed short s[8];} u;
u.v = data;
return u.s[7];
}
+#endif
static DONT_INLINE int foo(vector signed short data)
{
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert-be-order.c
new file mode 100644
index 000000000..592ef28c0
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert-be-order.c
@@ -0,0 +1,65 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+static void test()
+{
+ vector unsigned char va = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char vb = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector unsigned short vc = {0,1,2,3,4,5,6,7};
+ vector signed short vd = {-4,-3,-2,-1,0,1,2,3};
+ vector unsigned int ve = {0,1,2,3};
+ vector signed int vf = {-2,-1,0,1};
+ vector float vg = {-2.0f,-1.0f,0.0f,1.0f};
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ check (vec_all_eq (vec_insert (16, va, 5),
+ ((vector unsigned char)
+ {0,1,2,3,4,5,6,7,8,9,16,11,12,13,14,15})),
+ "vec_insert (va LE)");
+ check (vec_all_eq (vec_insert (-16, vb, 0),
+ ((vector signed char)
+ {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,-16})),
+ "vec_insert (vb LE)");
+ check (vec_all_eq (vec_insert (16, vc, 7),
+ ((vector unsigned short){16,1,2,3,4,5,6,7})),
+ "vec_insert (vc LE)");
+ check (vec_all_eq (vec_insert (-16, vd, 3),
+ ((vector signed short){-4,-3,-2,-1,-16,1,2,3})),
+ "vec_insert (vd LE)");
+ check (vec_all_eq (vec_insert (16, ve, 2),
+ ((vector unsigned int){0,16,2,3})),
+ "vec_insert (ve LE)");
+ check (vec_all_eq (vec_insert (-16, vf, 1),
+ ((vector signed int){-2,-1,-16,1})),
+ "vec_insert (vf LE)");
+ check (vec_all_eq (vec_insert (-16.0f, vg, 0),
+ ((vector float){-2.0f,-1.0f,0.0f,-16.0f})),
+ "vec_insert (vg LE)");
+#else
+ check (vec_all_eq (vec_insert (16, va, 5),
+ ((vector unsigned char)
+ {0,1,2,3,4,16,6,7,8,9,10,11,12,13,14,15})),
+ "vec_insert (va BE)");
+ check (vec_all_eq (vec_insert (-16, vb, 0),
+ ((vector signed char)
+ {-16,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7})),
+ "vec_insert (vb BE)");
+ check (vec_all_eq (vec_insert (16, vc, 7),
+ ((vector unsigned short){0,1,2,3,4,5,6,16})),
+ "vec_insert (vc BE)");
+ check (vec_all_eq (vec_insert (-16, vd, 3),
+ ((vector signed short){-4,-3,-2,-16,0,1,2,3})),
+ "vec_insert (vd BE)");
+ check (vec_all_eq (vec_insert (16, ve, 2),
+ ((vector unsigned int){0,1,16,3})),
+ "vec_insert (ve BE)");
+ check (vec_all_eq (vec_insert (-16, vf, 1),
+ ((vector signed int){-2,-16,0,1})),
+ "vec_insert (vf BE)");
+ check (vec_all_eq (vec_insert (-16.0f, vg, 0),
+ ((vector float){-16.0f,-1.0f,0.0f,1.0f})),
+ "vec_insert (vg BE)");
+#endif
+}
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert-vsx-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert-vsx-be-order.c
new file mode 100644
index 000000000..672fc449e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert-vsx-be-order.c
@@ -0,0 +1,34 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static int vec_long_long_eq (vector long long x, vector long long y)
+{
+ return (x[0] == y[0] && x[1] == y[1]);
+}
+
+static int vec_dbl_eq (vector double x, vector double y)
+{
+ return (x[0] == y[0] && x[1] == y[1]);
+}
+
+static void test()
+{
+ vector long long vl = {0, 1};
+ vector double vd = {0.0, 1.0};
+ vector long long vlr = vec_insert (2, vl, 0);
+ vector double vdr = vec_insert (2.0, vd, 1);
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector long long vler = {0, 2};
+ vector double vder = {2.0, 1.0};
+#else
+ vector long long vler = {2, 1};
+ vector double vder = {0.0, 2.0};
+#endif
+
+ check (vec_long_long_eq (vlr, vler), "vl");
+ check (vec_dbl_eq (vdr, vder), "vd");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert-vsx.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert-vsx.c
new file mode 100644
index 000000000..afb9c7016
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert-vsx.c
@@ -0,0 +1,28 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static int vec_long_long_eq (vector long long x, vector long long y)
+{
+ return (x[0] == y[0] && x[1] == y[1]);
+}
+
+static int vec_dbl_eq (vector double x, vector double y)
+{
+ return (x[0] == y[0] && x[1] == y[1]);
+}
+
+static void test()
+{
+ vector long long vl = {0, 1};
+ vector double vd = {0.0, 1.0};
+ vector long long vlr = vec_insert (2, vl, 0);
+ vector double vdr = vec_insert (2.0, vd, 1);
+ vector long long vler = {2, 1};
+ vector double vder = {0.0, 2.0};
+
+ check (vec_long_long_eq (vlr, vler), "vl");
+ check (vec_dbl_eq (vdr, vder), "vd");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert.c
new file mode 100644
index 000000000..39cd75d87
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/insert.c
@@ -0,0 +1,37 @@
+#include "harness.h"
+
+static void test()
+{
+ vector unsigned char va = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char vb = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector unsigned short vc = {0,1,2,3,4,5,6,7};
+ vector signed short vd = {-4,-3,-2,-1,0,1,2,3};
+ vector unsigned int ve = {0,1,2,3};
+ vector signed int vf = {-2,-1,0,1};
+ vector float vg = {-2.0f,-1.0f,0.0f,1.0f};
+
+ check (vec_all_eq (vec_insert (16, va, 5),
+ ((vector unsigned char)
+ {0,1,2,3,4,16,6,7,8,9,10,11,12,13,14,15})),
+ "vec_insert (va)");
+ check (vec_all_eq (vec_insert (-16, vb, 0),
+ ((vector signed char)
+ {-16,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7})),
+ "vec_insert (vb)");
+ check (vec_all_eq (vec_insert (16, vc, 7),
+ ((vector unsigned short){0,1,2,3,4,5,6,16})),
+ "vec_insert (vc)");
+ check (vec_all_eq (vec_insert (-16, vd, 3),
+ ((vector signed short){-4,-3,-2,-16,0,1,2,3})),
+ "vec_insert (vd)");
+ check (vec_all_eq (vec_insert (16, ve, 2),
+ ((vector unsigned int){0,1,16,3})),
+ "vec_insert (ve)");
+ check (vec_all_eq (vec_insert (-16, vf, 1),
+ ((vector signed int){-2,-16,0,1})),
+ "vec_insert (vf)");
+ check (vec_all_eq (vec_insert (-16.0f, vg, 0),
+ ((vector float){-16.0f,-1.0f,0.0f,1.0f})),
+ "vec_insert (vg)");
+}
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld-be-order.c
new file mode 100644
index 000000000..903b997c9
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld-be-order.c
@@ -0,0 +1,107 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+static unsigned char svuc[16] __attribute__ ((aligned (16)));
+static signed char svsc[16] __attribute__ ((aligned (16)));
+static unsigned char svbc[16] __attribute__ ((aligned (16)));
+static unsigned short svus[8] __attribute__ ((aligned (16)));
+static signed short svss[8] __attribute__ ((aligned (16)));
+static unsigned short svbs[8] __attribute__ ((aligned (16)));
+static unsigned short svp[8] __attribute__ ((aligned (16)));
+static unsigned int svui[4] __attribute__ ((aligned (16)));
+static signed int svsi[4] __attribute__ ((aligned (16)));
+static unsigned int svbi[4] __attribute__ ((aligned (16)));
+static float svf[4] __attribute__ ((aligned (16)));
+
+static void init ()
+{
+ unsigned int i;
+ for (i = 0; i < 16; ++i)
+ {
+ svuc[i] = i;
+ svsc[i] = i - 8;
+ svbc[i] = (i % 2) ? 0xff : 0;
+ }
+ for (i = 0; i < 8; ++i)
+ {
+ svus[i] = i;
+ svss[i] = i - 4;
+ svbs[i] = (i % 2) ? 0xffff : 0;
+ svp[i] = i;
+ }
+ for (i = 0; i < 4; ++i)
+ {
+ svui[i] = i;
+ svsi[i] = i - 2;
+ svbi[i] = (i % 2) ? 0xffffffff : 0;
+ svf[i] = i * 1.0f;
+ }
+}
+
+static void test ()
+{
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector unsigned char evuc = {15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
+ vector signed char evsc = {7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8};
+ vector bool char evbc = {255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0};
+ vector unsigned short evus = {7,6,5,4,3,2,1,0};
+ vector signed short evss = {3,2,1,0,-1,-2,-3,-4};
+ vector bool short evbs = {65535,0,65535,0,65535,0,65535,0};
+ vector pixel evp = {7,6,5,4,3,2,1,0};
+ vector unsigned int evui = {3,2,1,0};
+ vector signed int evsi = {1,0,-1,-2};
+ vector bool int evbi = {0xffffffff,0,0xffffffff,0};
+ vector float evf = {3.0,2.0,1.0,0.0};
+#else
+ vector unsigned char evuc = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char evsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector bool char evbc = {0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255};
+ vector unsigned short evus = {0,1,2,3,4,5,6,7};
+ vector signed short evss = {-4,-3,-2,-1,0,1,2,3};
+ vector bool short evbs = {0,65535,0,65535,0,65535,0,65535};
+ vector pixel evp = {0,1,2,3,4,5,6,7};
+ vector unsigned int evui = {0,1,2,3};
+ vector signed int evsi = {-2,-1,0,1};
+ vector bool int evbi = {0,0xffffffff,0,0xffffffff};
+ vector float evf = {0.0,1.0,2.0,3.0};
+#endif
+
+ vector unsigned char vuc;
+ vector signed char vsc;
+ vector bool char vbc;
+ vector unsigned short vus;
+ vector signed short vss;
+ vector bool short vbs;
+ vector pixel vp;
+ vector unsigned int vui;
+ vector signed int vsi;
+ vector bool int vbi;
+ vector float vf;
+
+ init ();
+
+ vuc = vec_ld (0, (vector unsigned char *)svuc);
+ vsc = vec_ld (0, (vector signed char *)svsc);
+ vbc = vec_ld (0, (vector bool char *)svbc);
+ vus = vec_ld (0, (vector unsigned short *)svus);
+ vss = vec_ld (0, (vector signed short *)svss);
+ vbs = vec_ld (0, (vector bool short *)svbs);
+ vp = vec_ld (0, (vector pixel *)svp);
+ vui = vec_ld (0, (vector unsigned int *)svui);
+ vsi = vec_ld (0, (vector signed int *)svsi);
+ vbi = vec_ld (0, (vector bool int *)svbi);
+ vf = vec_ld (0, (vector float *)svf);
+
+ check (vec_all_eq (vuc, evuc), "vuc");
+ check (vec_all_eq (vsc, evsc), "vsc");
+ check (vec_all_eq (vbc, evbc), "vbc");
+ check (vec_all_eq (vus, evus), "vus");
+ check (vec_all_eq (vss, evss), "vss");
+ check (vec_all_eq (vbs, evbs), "vbs");
+ check (vec_all_eq (vp, evp ), "vp" );
+ check (vec_all_eq (vui, evui), "vui");
+ check (vec_all_eq (vsi, evsi), "vsi");
+ check (vec_all_eq (vbi, evbi), "vbi");
+ check (vec_all_eq (vf, evf ), "vf" );
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld-vsx-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld-vsx-be-order.c
new file mode 100644
index 000000000..fc81beb0d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld-vsx-be-order.c
@@ -0,0 +1,44 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static unsigned long long svul[2] __attribute__ ((aligned (16)));
+static double svd[2] __attribute__ ((aligned (16)));
+
+static void init ()
+{
+ unsigned int i;
+ for (i = 0; i < 2; ++i)
+ {
+ svul[i] = i;
+ svd[i] = i * 1.0;
+ }
+}
+
+static void test ()
+{
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector unsigned long long evul = {1,0};
+ vector double evd = {1.0,0.0};
+#else
+ vector unsigned long long evul = {0,1};
+ vector double evd = {0.0,1.0};
+#endif
+
+ vector unsigned long long vul;
+ vector double vd;
+ unsigned i;
+
+ init ();
+
+ vul = vec_ld (0, (vector unsigned long long *)svul);
+ vd = vec_ld (0, (vector double *)svd);
+
+ for (i = 0; i < 2; ++i)
+ {
+ check (vul[i] == evul[i], "vul");
+ check (vd[i] == evd[i], "vd" );
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld-vsx.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld-vsx.c
new file mode 100644
index 000000000..9d2a529f8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld-vsx.c
@@ -0,0 +1,39 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static unsigned long long svul[2] __attribute__ ((aligned (16)));
+static double svd[2] __attribute__ ((aligned (16)));
+
+static void init ()
+{
+ unsigned int i;
+ for (i = 0; i < 2; ++i)
+ {
+ svul[i] = i;
+ svd[i] = i * 1.0;
+ }
+}
+
+static void test ()
+{
+ vector unsigned long long evul = {0,1};
+ vector double evd = {0.0,1.0};
+
+ vector unsigned long long vul;
+ vector double vd;
+ unsigned i;
+
+ init ();
+
+ vul = vec_ld (0, (vector unsigned long long *)svul);
+ vd = vec_ld (0, (vector double *)svd);
+
+ for (i = 0; i < 2; ++i)
+ {
+ check (vul[i] == evul[i], "vul");
+ check (vd[i] == evd[i], "vd" );
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld.c
new file mode 100644
index 000000000..851fbd58a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ld.c
@@ -0,0 +1,91 @@
+#include "harness.h"
+
+static unsigned char svuc[16] __attribute__ ((aligned (16)));
+static signed char svsc[16] __attribute__ ((aligned (16)));
+static unsigned char svbc[16] __attribute__ ((aligned (16)));
+static unsigned short svus[8] __attribute__ ((aligned (16)));
+static signed short svss[8] __attribute__ ((aligned (16)));
+static unsigned short svbs[8] __attribute__ ((aligned (16)));
+static unsigned short svp[8] __attribute__ ((aligned (16)));
+static unsigned int svui[4] __attribute__ ((aligned (16)));
+static signed int svsi[4] __attribute__ ((aligned (16)));
+static unsigned int svbi[4] __attribute__ ((aligned (16)));
+static float svf[4] __attribute__ ((aligned (16)));
+
+static void init ()
+{
+ unsigned int i;
+ for (i = 0; i < 16; ++i)
+ {
+ svuc[i] = i;
+ svsc[i] = i - 8;
+ svbc[i] = (i % 2) ? 0xff : 0;
+ }
+ for (i = 0; i < 8; ++i)
+ {
+ svus[i] = i;
+ svss[i] = i - 4;
+ svbs[i] = (i % 2) ? 0xffff : 0;
+ svp[i] = i;
+ }
+ for (i = 0; i < 4; ++i)
+ {
+ svui[i] = i;
+ svsi[i] = i - 2;
+ svbi[i] = (i % 2) ? 0xffffffff : 0;
+ svf[i] = i * 1.0f;
+ }
+}
+
+static void test ()
+{
+ vector unsigned char evuc = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char evsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector bool char evbc = {0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255};
+ vector unsigned short evus = {0,1,2,3,4,5,6,7};
+ vector signed short evss = {-4,-3,-2,-1,0,1,2,3};
+ vector bool short evbs = {0,65535,0,65535,0,65535,0,65535};
+ vector pixel evp = {0,1,2,3,4,5,6,7};
+ vector unsigned int evui = {0,1,2,3};
+ vector signed int evsi = {-2,-1,0,1};
+ vector bool int evbi = {0,0xffffffff,0,0xffffffff};
+ vector float evf = {0.0,1.0,2.0,3.0};
+
+ vector unsigned char vuc;
+ vector signed char vsc;
+ vector bool char vbc;
+ vector unsigned short vus;
+ vector signed short vss;
+ vector bool short vbs;
+ vector pixel vp;
+ vector unsigned int vui;
+ vector signed int vsi;
+ vector bool int vbi;
+ vector float vf;
+
+ init ();
+
+ vuc = vec_ld (0, (vector unsigned char *)svuc);
+ vsc = vec_ld (0, (vector signed char *)svsc);
+ vbc = vec_ld (0, (vector bool char *)svbc);
+ vus = vec_ld (0, (vector unsigned short *)svus);
+ vss = vec_ld (0, (vector signed short *)svss);
+ vbs = vec_ld (0, (vector bool short *)svbs);
+ vp = vec_ld (0, (vector pixel *)svp);
+ vui = vec_ld (0, (vector unsigned int *)svui);
+ vsi = vec_ld (0, (vector signed int *)svsi);
+ vbi = vec_ld (0, (vector bool int *)svbi);
+ vf = vec_ld (0, (vector float *)svf);
+
+ check (vec_all_eq (vuc, evuc), "vuc");
+ check (vec_all_eq (vsc, evsc), "vsc");
+ check (vec_all_eq (vbc, evbc), "vbc");
+ check (vec_all_eq (vus, evus), "vus");
+ check (vec_all_eq (vss, evss), "vss");
+ check (vec_all_eq (vbs, evbs), "vbs");
+ check (vec_all_eq (vp, evp ), "vp" );
+ check (vec_all_eq (vui, evui), "vui");
+ check (vec_all_eq (vsi, evsi), "vsi");
+ check (vec_all_eq (vbi, evbi), "vbi");
+ check (vec_all_eq (vf, evf ), "vf" );
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/lde-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/lde-be-order.c
new file mode 100644
index 000000000..9a6d5bae5
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/lde-be-order.c
@@ -0,0 +1,73 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+static unsigned char svuc[16] __attribute__ ((aligned (16)));
+static signed char svsc[16] __attribute__ ((aligned (16)));
+static unsigned short svus[8] __attribute__ ((aligned (16)));
+static signed short svss[8] __attribute__ ((aligned (16)));
+static unsigned int svui[4] __attribute__ ((aligned (16)));
+static signed int svsi[4] __attribute__ ((aligned (16)));
+static float svf[4] __attribute__ ((aligned (16)));
+
+static void init ()
+{
+ int i;
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ for (i = 15; i >= 0; --i)
+#else
+ for (i = 0; i < 16; ++i)
+#endif
+ {
+ svuc[i] = i;
+ svsc[i] = i - 8;
+ }
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ for (i = 7; i >= 0; --i)
+#else
+ for (i = 0; i < 8; ++i)
+#endif
+ {
+ svus[i] = i;
+ svss[i] = i - 4;
+ }
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ for (i = 3; i >= 0; --i)
+#else
+ for (i = 0; i < 4; ++i)
+#endif
+ {
+ svui[i] = i;
+ svsi[i] = i - 2;
+ svf[i] = i * 1.0f;
+ }
+}
+
+static void test ()
+{
+ vector unsigned char vuc;
+ vector signed char vsc;
+ vector unsigned short vus;
+ vector signed short vss;
+ vector unsigned int vui;
+ vector signed int vsi;
+ vector float vf;
+
+ init ();
+
+ vuc = vec_lde (9*1, (unsigned char *)svuc);
+ vsc = vec_lde (14*1, (signed char *)svsc);
+ vus = vec_lde (7*2, (unsigned short *)svus);
+ vss = vec_lde (1*2, (signed short *)svss);
+ vui = vec_lde (3*4, (unsigned int *)svui);
+ vsi = vec_lde (2*4, (signed int *)svsi);
+ vf = vec_lde (0*4, (float *)svf);
+
+ check (vec_extract (vuc, 9) == 9, "vuc");
+ check (vec_extract (vsc, 14) == 6, "vsc");
+ check (vec_extract (vus, 7) == 7, "vus");
+ check (vec_extract (vss, 1) == -3, "vss");
+ check (vec_extract (vui, 3) == 3, "vui");
+ check (vec_extract (vsi, 2) == 0, "vsi");
+ check (vec_extract (vf, 0) == 0.0, "vf");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/lde.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/lde.c
new file mode 100644
index 000000000..5594963c7
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/lde.c
@@ -0,0 +1,59 @@
+#include "harness.h"
+
+static unsigned char svuc[16] __attribute__ ((aligned (16)));
+static signed char svsc[16] __attribute__ ((aligned (16)));
+static unsigned short svus[8] __attribute__ ((aligned (16)));
+static signed short svss[8] __attribute__ ((aligned (16)));
+static unsigned int svui[4] __attribute__ ((aligned (16)));
+static signed int svsi[4] __attribute__ ((aligned (16)));
+static float svf[4] __attribute__ ((aligned (16)));
+
+static void init ()
+{
+ unsigned int i;
+ for (i = 0; i < 16; ++i)
+ {
+ svuc[i] = i;
+ svsc[i] = i - 8;
+ }
+ for (i = 0; i < 8; ++i)
+ {
+ svus[i] = i;
+ svss[i] = i - 4;
+ }
+ for (i = 0; i < 4; ++i)
+ {
+ svui[i] = i;
+ svsi[i] = i - 2;
+ svf[i] = i * 1.0f;
+ }
+}
+
+static void test ()
+{
+ vector unsigned char vuc;
+ vector signed char vsc;
+ vector unsigned short vus;
+ vector signed short vss;
+ vector unsigned int vui;
+ vector signed int vsi;
+ vector float vf;
+
+ init ();
+
+ vuc = vec_lde (9*1, (unsigned char *)svuc);
+ vsc = vec_lde (14*1, (signed char *)svsc);
+ vus = vec_lde (7*2, (unsigned short *)svus);
+ vss = vec_lde (1*2, (signed short *)svss);
+ vui = vec_lde (3*4, (unsigned int *)svui);
+ vsi = vec_lde (2*4, (signed int *)svsi);
+ vf = vec_lde (0*4, (float *)svf);
+
+ check (vec_extract (vuc, 9) == 9, "vuc");
+ check (vec_extract (vsc, 14) == 6, "vsc");
+ check (vec_extract (vus, 7) == 7, "vus");
+ check (vec_extract (vss, 1) == -3, "vss");
+ check (vec_extract (vui, 3) == 3, "vui");
+ check (vec_extract (vsi, 2) == 0, "vsi");
+ check (vec_extract (vf, 0) == 0.0, "vf");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl-be-order.c
new file mode 100644
index 000000000..397849fe1
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl-be-order.c
@@ -0,0 +1,107 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+static unsigned char svuc[16] __attribute__ ((aligned (16)));
+static signed char svsc[16] __attribute__ ((aligned (16)));
+static unsigned char svbc[16] __attribute__ ((aligned (16)));
+static unsigned short svus[8] __attribute__ ((aligned (16)));
+static signed short svss[8] __attribute__ ((aligned (16)));
+static unsigned short svbs[8] __attribute__ ((aligned (16)));
+static unsigned short svp[8] __attribute__ ((aligned (16)));
+static unsigned int svui[4] __attribute__ ((aligned (16)));
+static signed int svsi[4] __attribute__ ((aligned (16)));
+static unsigned int svbi[4] __attribute__ ((aligned (16)));
+static float svf[4] __attribute__ ((aligned (16)));
+
+static void init ()
+{
+ unsigned int i;
+ for (i = 0; i < 16; ++i)
+ {
+ svuc[i] = i;
+ svsc[i] = i - 8;
+ svbc[i] = (i % 2) ? 0xff : 0;
+ }
+ for (i = 0; i < 8; ++i)
+ {
+ svus[i] = i;
+ svss[i] = i - 4;
+ svbs[i] = (i % 2) ? 0xffff : 0;
+ svp[i] = i;
+ }
+ for (i = 0; i < 4; ++i)
+ {
+ svui[i] = i;
+ svsi[i] = i - 2;
+ svbi[i] = (i % 2) ? 0xffffffff : 0;
+ svf[i] = i * 1.0f;
+ }
+}
+
+static void test ()
+{
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector unsigned char evuc = {15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
+ vector signed char evsc = {7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8};
+ vector bool char evbc = {255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0};
+ vector unsigned short evus = {7,6,5,4,3,2,1,0};
+ vector signed short evss = {3,2,1,0,-1,-2,-3,-4};
+ vector bool short evbs = {65535,0,65535,0,65535,0,65535,0};
+ vector pixel evp = {7,6,5,4,3,2,1,0};
+ vector unsigned int evui = {3,2,1,0};
+ vector signed int evsi = {1,0,-1,-2};
+ vector bool int evbi = {0xffffffff,0,0xffffffff,0};
+ vector float evf = {3.0,2.0,1.0,0.0};
+#else
+ vector unsigned char evuc = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char evsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector bool char evbc = {0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255};
+ vector unsigned short evus = {0,1,2,3,4,5,6,7};
+ vector signed short evss = {-4,-3,-2,-1,0,1,2,3};
+ vector bool short evbs = {0,65535,0,65535,0,65535,0,65535};
+ vector pixel evp = {0,1,2,3,4,5,6,7};
+ vector unsigned int evui = {0,1,2,3};
+ vector signed int evsi = {-2,-1,0,1};
+ vector bool int evbi = {0,0xffffffff,0,0xffffffff};
+ vector float evf = {0.0,1.0,2.0,3.0};
+#endif
+
+ vector unsigned char vuc;
+ vector signed char vsc;
+ vector bool char vbc;
+ vector unsigned short vus;
+ vector signed short vss;
+ vector bool short vbs;
+ vector pixel vp;
+ vector unsigned int vui;
+ vector signed int vsi;
+ vector bool int vbi;
+ vector float vf;
+
+ init ();
+
+ vuc = vec_ldl (0, (vector unsigned char *)svuc);
+ vsc = vec_ldl (0, (vector signed char *)svsc);
+ vbc = vec_ldl (0, (vector bool char *)svbc);
+ vus = vec_ldl (0, (vector unsigned short *)svus);
+ vss = vec_ldl (0, (vector signed short *)svss);
+ vbs = vec_ldl (0, (vector bool short *)svbs);
+ vp = vec_ldl (0, (vector pixel *)svp);
+ vui = vec_ldl (0, (vector unsigned int *)svui);
+ vsi = vec_ldl (0, (vector signed int *)svsi);
+ vbi = vec_ldl (0, (vector bool int *)svbi);
+ vf = vec_ldl (0, (vector float *)svf);
+
+ check (vec_all_eq (vuc, evuc), "vuc");
+ check (vec_all_eq (vsc, evsc), "vsc");
+ check (vec_all_eq (vbc, evbc), "vbc");
+ check (vec_all_eq (vus, evus), "vus");
+ check (vec_all_eq (vss, evss), "vss");
+ check (vec_all_eq (vbs, evbs), "vbs");
+ check (vec_all_eq (vp, evp ), "vp" );
+ check (vec_all_eq (vui, evui), "vui");
+ check (vec_all_eq (vsi, evsi), "vsi");
+ check (vec_all_eq (vbi, evbi), "vbi");
+ check (vec_all_eq (vf, evf ), "vf" );
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl-vsx-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl-vsx-be-order.c
new file mode 100644
index 000000000..1dd0ca33e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl-vsx-be-order.c
@@ -0,0 +1,44 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static unsigned long long svul[2] __attribute__ ((aligned (16)));
+static double svd[2] __attribute__ ((aligned (16)));
+
+static void init ()
+{
+ unsigned int i;
+ for (i = 0; i < 2; ++i)
+ {
+ svul[i] = i;
+ svd[i] = i * 1.0;
+ }
+}
+
+static void test ()
+{
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector unsigned long long evul = {1,0};
+ vector double evd = {1.0,0.0};
+#else
+ vector unsigned long long evul = {0,1};
+ vector double evd = {0.0,1.0};
+#endif
+
+ vector unsigned long long vul;
+ vector double vd;
+ unsigned i;
+
+ init ();
+
+ vul = vec_ldl (0, (vector unsigned long long *)svul);
+ vd = vec_ldl (0, (vector double *)svd);
+
+ for (i = 0; i < 2; ++i)
+ {
+ check (vul[i] == evul[i], "vul");
+ check (vd[i] == evd[i], "vd" );
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl-vsx.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl-vsx.c
new file mode 100644
index 000000000..4bf3224f6
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl-vsx.c
@@ -0,0 +1,39 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static unsigned long long svul[2] __attribute__ ((aligned (16)));
+static double svd[2] __attribute__ ((aligned (16)));
+
+static void init ()
+{
+ unsigned int i;
+ for (i = 0; i < 2; ++i)
+ {
+ svul[i] = i;
+ svd[i] = i * 1.0;
+ }
+}
+
+static void test ()
+{
+ vector unsigned long long evul = {0,1};
+ vector double evd = {0.0,1.0};
+
+ vector unsigned long long vul;
+ vector double vd;
+ unsigned i;
+
+ init ();
+
+ vul = vec_ldl (0, (vector unsigned long long *)svul);
+ vd = vec_ldl (0, (vector double *)svd);
+
+ for (i = 0; i < 2; ++i)
+ {
+ check (vul[i] == evul[i], "vul");
+ check (vd[i] == evd[i], "vd" );
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl.c
new file mode 100644
index 000000000..3f9a603e3
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ldl.c
@@ -0,0 +1,91 @@
+#include "harness.h"
+
+static unsigned char svuc[16] __attribute__ ((aligned (16)));
+static signed char svsc[16] __attribute__ ((aligned (16)));
+static unsigned char svbc[16] __attribute__ ((aligned (16)));
+static unsigned short svus[8] __attribute__ ((aligned (16)));
+static signed short svss[8] __attribute__ ((aligned (16)));
+static unsigned short svbs[8] __attribute__ ((aligned (16)));
+static unsigned short svp[8] __attribute__ ((aligned (16)));
+static unsigned int svui[4] __attribute__ ((aligned (16)));
+static signed int svsi[4] __attribute__ ((aligned (16)));
+static unsigned int svbi[4] __attribute__ ((aligned (16)));
+static float svf[4] __attribute__ ((aligned (16)));
+
+static void init ()
+{
+ unsigned int i;
+ for (i = 0; i < 16; ++i)
+ {
+ svuc[i] = i;
+ svsc[i] = i - 8;
+ svbc[i] = (i % 2) ? 0xff : 0;
+ }
+ for (i = 0; i < 8; ++i)
+ {
+ svus[i] = i;
+ svss[i] = i - 4;
+ svbs[i] = (i % 2) ? 0xffff : 0;
+ svp[i] = i;
+ }
+ for (i = 0; i < 4; ++i)
+ {
+ svui[i] = i;
+ svsi[i] = i - 2;
+ svbi[i] = (i % 2) ? 0xffffffff : 0;
+ svf[i] = i * 1.0f;
+ }
+}
+
+static void test ()
+{
+ vector unsigned char evuc = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char evsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector bool char evbc = {0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255};
+ vector unsigned short evus = {0,1,2,3,4,5,6,7};
+ vector signed short evss = {-4,-3,-2,-1,0,1,2,3};
+ vector bool short evbs = {0,65535,0,65535,0,65535,0,65535};
+ vector pixel evp = {0,1,2,3,4,5,6,7};
+ vector unsigned int evui = {0,1,2,3};
+ vector signed int evsi = {-2,-1,0,1};
+ vector bool int evbi = {0,0xffffffff,0,0xffffffff};
+ vector float evf = {0.0,1.0,2.0,3.0};
+
+ vector unsigned char vuc;
+ vector signed char vsc;
+ vector bool char vbc;
+ vector unsigned short vus;
+ vector signed short vss;
+ vector bool short vbs;
+ vector pixel vp;
+ vector unsigned int vui;
+ vector signed int vsi;
+ vector bool int vbi;
+ vector float vf;
+
+ init ();
+
+ vuc = vec_ldl (0, (vector unsigned char *)svuc);
+ vsc = vec_ldl (0, (vector signed char *)svsc);
+ vbc = vec_ldl (0, (vector bool char *)svbc);
+ vus = vec_ldl (0, (vector unsigned short *)svus);
+ vss = vec_ldl (0, (vector signed short *)svss);
+ vbs = vec_ldl (0, (vector bool short *)svbs);
+ vp = vec_ldl (0, (vector pixel *)svp);
+ vui = vec_ldl (0, (vector unsigned int *)svui);
+ vsi = vec_ldl (0, (vector signed int *)svsi);
+ vbi = vec_ldl (0, (vector bool int *)svbi);
+ vf = vec_ldl (0, (vector float *)svf);
+
+ check (vec_all_eq (vuc, evuc), "vuc");
+ check (vec_all_eq (vsc, evsc), "vsc");
+ check (vec_all_eq (vbc, evbc), "vbc");
+ check (vec_all_eq (vus, evus), "vus");
+ check (vec_all_eq (vss, evss), "vss");
+ check (vec_all_eq (vbs, evbs), "vbs");
+ check (vec_all_eq (vp, evp ), "vp" );
+ check (vec_all_eq (vui, evui), "vui");
+ check (vec_all_eq (vsi, evsi), "vsi");
+ check (vec_all_eq (vbi, evbi), "vbi");
+ check (vec_all_eq (vf, evf ), "vf" );
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge-be-order.c
new file mode 100644
index 000000000..2de888fa4
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge-be-order.c
@@ -0,0 +1,96 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+static void test()
+{
+ /* Input vectors. */
+ vector unsigned char vuca = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector unsigned char vucb
+ = {16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
+ vector signed char vsca
+ = {-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1};
+ vector signed char vscb = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector unsigned short vusa = {0,1,2,3,4,5,6,7};
+ vector unsigned short vusb = {8,9,10,11,12,13,14,15};
+ vector signed short vssa = {-8,-7,-6,-5,-4,-3,-2,-1};
+ vector signed short vssb = {0,1,2,3,4,5,6,7};
+ vector unsigned int vuia = {0,1,2,3};
+ vector unsigned int vuib = {4,5,6,7};
+ vector signed int vsia = {-4,-3,-2,-1};
+ vector signed int vsib = {0,1,2,3};
+ vector float vfa = {-4.0,-3.0,-2.0,-1.0};
+ vector float vfb = {0.0,1.0,2.0,3.0};
+
+ /* Result vectors. */
+ vector unsigned char vuch, vucl;
+ vector signed char vsch, vscl;
+ vector unsigned short vush, vusl;
+ vector signed short vssh, vssl;
+ vector unsigned int vuih, vuil;
+ vector signed int vsih, vsil;
+ vector float vfh, vfl;
+
+ /* Expected result vectors. */
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector unsigned char vucrh = {24,8,25,9,26,10,27,11,28,12,29,13,30,14,31,15};
+ vector unsigned char vucrl = {16,0,17,1,18,2,19,3,20,4,21,5,22,6,23,7};
+ vector signed char vscrh = {8,-8,9,-7,10,-6,11,-5,12,-4,13,-3,14,-2,15,-1};
+ vector signed char vscrl = {0,-16,1,-15,2,-14,3,-13,4,-12,5,-11,6,-10,7,-9};
+ vector unsigned short vusrh = {12,4,13,5,14,6,15,7};
+ vector unsigned short vusrl = {8,0,9,1,10,2,11,3};
+ vector signed short vssrh = {4,-4,5,-3,6,-2,7,-1};
+ vector signed short vssrl = {0,-8,1,-7,2,-6,3,-5};
+ vector unsigned int vuirh = {6,2,7,3};
+ vector unsigned int vuirl = {4,0,5,1};
+ vector signed int vsirh = {2,-2,3,-1};
+ vector signed int vsirl = {0,-4,1,-3};
+ vector float vfrh = {2.0,-2.0,3.0,-1.0};
+ vector float vfrl = {0.0,-4.0,1.0,-3.0};
+#else
+ vector unsigned char vucrh = {0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23};
+ vector unsigned char vucrl = {8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31};
+ vector signed char vscrh = {-16,0,-15,1,-14,2,-13,3,-12,4,-11,5,-10,6,-9,7};
+ vector signed char vscrl = {-8,8,-7,9,-6,10,-5,11,-4,12,-3,13,-2,14,-1,15};
+ vector unsigned short vusrh = {0,8,1,9,2,10,3,11};
+ vector unsigned short vusrl = {4,12,5,13,6,14,7,15};
+ vector signed short vssrh = {-8,0,-7,1,-6,2,-5,3};
+ vector signed short vssrl = {-4,4,-3,5,-2,6,-1,7};
+ vector unsigned int vuirh = {0,4,1,5};
+ vector unsigned int vuirl = {2,6,3,7};
+ vector signed int vsirh = {-4,0,-3,1};
+ vector signed int vsirl = {-2,2,-1,3};
+ vector float vfrh = {-4.0,0.0,-3.0,1.0};
+ vector float vfrl = {-2.0,2.0,-1.0,3.0};
+#endif
+
+ vuch = vec_mergeh (vuca, vucb);
+ vucl = vec_mergel (vuca, vucb);
+ vsch = vec_mergeh (vsca, vscb);
+ vscl = vec_mergel (vsca, vscb);
+ vush = vec_mergeh (vusa, vusb);
+ vusl = vec_mergel (vusa, vusb);
+ vssh = vec_mergeh (vssa, vssb);
+ vssl = vec_mergel (vssa, vssb);
+ vuih = vec_mergeh (vuia, vuib);
+ vuil = vec_mergel (vuia, vuib);
+ vsih = vec_mergeh (vsia, vsib);
+ vsil = vec_mergel (vsia, vsib);
+ vfh = vec_mergeh (vfa, vfb );
+ vfl = vec_mergel (vfa, vfb );
+
+ check (vec_all_eq (vuch, vucrh), "vuch");
+ check (vec_all_eq (vucl, vucrl), "vucl");
+ check (vec_all_eq (vsch, vscrh), "vsch");
+ check (vec_all_eq (vscl, vscrl), "vscl");
+ check (vec_all_eq (vush, vusrh), "vush");
+ check (vec_all_eq (vusl, vusrl), "vusl");
+ check (vec_all_eq (vssh, vssrh), "vssh");
+ check (vec_all_eq (vssl, vssrl), "vssl");
+ check (vec_all_eq (vuih, vuirh), "vuih");
+ check (vec_all_eq (vuil, vuirl), "vuil");
+ check (vec_all_eq (vsih, vsirh), "vsih");
+ check (vec_all_eq (vsil, vsirl), "vsil");
+ check (vec_all_eq (vfh, vfrh), "vfh");
+ check (vec_all_eq (vfl, vfrl), "vfl");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge-vsx-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge-vsx-be-order.c
new file mode 100644
index 000000000..56e0b0e6c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge-vsx-be-order.c
@@ -0,0 +1,84 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static int vec_long_long_eq (vector long long x, vector long long y)
+{
+ return (x[0] == y[0] && x[1] == y[1]);
+}
+
+static int vec_double_eq (vector double x, vector double y)
+{
+ return (x[0] == y[0] && x[1] == y[1]);
+}
+
+static void test()
+{
+ /* Input vectors. */
+ vector long long vla = {-2,-1};
+ vector long long vlb = {0,1};
+ vector double vda = {-2.0,-1.0};
+ vector double vdb = {0.0,1.0};
+ vector unsigned int vuia = {0,1,2,3};
+ vector unsigned int vuib = {4,5,6,7};
+ vector signed int vsia = {-4,-3,-2,-1};
+ vector signed int vsib = {0,1,2,3};
+ vector float vfa = {-4.0,-3.0,-2.0,-1.0};
+ vector float vfb = {0.0,1.0,2.0,3.0};
+
+ /* Result vectors. */
+ vector long long vlh, vll;
+ vector double vdh, vdl;
+ vector unsigned int vuih, vuil;
+ vector signed int vsih, vsil;
+ vector float vfh, vfl;
+
+ /* Expected result vectors. */
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector long long vlrh = {1,-1};
+ vector long long vlrl = {0,-2};
+ vector double vdrh = {1.0,-1.0};
+ vector double vdrl = {0.0,-2.0};
+ vector unsigned int vuirh = {6,2,7,3};
+ vector unsigned int vuirl = {4,0,5,1};
+ vector signed int vsirh = {2,-2,3,-1};
+ vector signed int vsirl = {0,-4,1,-3};
+ vector float vfrh = {2.0,-2.0,3.0,-1.0};
+ vector float vfrl = {0.0,-4.0,1.0,-3.0};
+#else
+ vector long long vlrh = {-2,0};
+ vector long long vlrl = {-1,1};
+ vector double vdrh = {-2.0,0.0};
+ vector double vdrl = {-1.0,1.0};
+ vector unsigned int vuirh = {0,4,1,5};
+ vector unsigned int vuirl = {2,6,3,7};
+ vector signed int vsirh = {-4,0,-3,1};
+ vector signed int vsirl = {-2,2,-1,3};
+ vector float vfrh = {-4.0,0.0,-3.0,1.0};
+ vector float vfrl = {-2.0,2.0,-1.0,3.0};
+#endif
+
+ vlh = vec_mergeh (vla, vlb);
+ vll = vec_mergel (vla, vlb);
+ vdh = vec_mergeh (vda, vdb);
+ vdl = vec_mergel (vda, vdb);
+ vuih = vec_mergeh (vuia, vuib);
+ vuil = vec_mergel (vuia, vuib);
+ vsih = vec_mergeh (vsia, vsib);
+ vsil = vec_mergel (vsia, vsib);
+ vfh = vec_mergeh (vfa, vfb );
+ vfl = vec_mergel (vfa, vfb );
+
+ check (vec_long_long_eq (vlh, vlrh), "vlh");
+ check (vec_long_long_eq (vll, vlrl), "vll");
+ check (vec_double_eq (vdh, vdrh), "vdh" );
+ check (vec_double_eq (vdl, vdrl), "vdl" );
+ check (vec_all_eq (vuih, vuirh), "vuih");
+ check (vec_all_eq (vuil, vuirl), "vuil");
+ check (vec_all_eq (vsih, vsirh), "vsih");
+ check (vec_all_eq (vsil, vsirl), "vsil");
+ check (vec_all_eq (vfh, vfrh), "vfh");
+ check (vec_all_eq (vfl, vfrl), "vfl");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge-vsx.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge-vsx.c
new file mode 100644
index 000000000..40693e95b
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge-vsx.c
@@ -0,0 +1,71 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static int vec_long_long_eq (vector long long x, vector long long y)
+{
+ return (x[0] == y[0] && x[1] == y[1]);
+}
+
+static int vec_double_eq (vector double x, vector double y)
+{
+ return (x[0] == y[0] && x[1] == y[1]);
+}
+
+static void test()
+{
+ /* Input vectors. */
+ vector long long vla = {-2,-1};
+ vector long long vlb = {0,1};
+ vector double vda = {-2.0,-1.0};
+ vector double vdb = {0.0,1.0};
+ vector unsigned int vuia = {0,1,2,3};
+ vector unsigned int vuib = {4,5,6,7};
+ vector signed int vsia = {-4,-3,-2,-1};
+ vector signed int vsib = {0,1,2,3};
+ vector float vfa = {-4.0,-3.0,-2.0,-1.0};
+ vector float vfb = {0.0,1.0,2.0,3.0};
+
+ /* Result vectors. */
+ vector long long vlh, vll;
+ vector double vdh, vdl;
+ vector unsigned int vuih, vuil;
+ vector signed int vsih, vsil;
+ vector float vfh, vfl;
+
+ /* Expected result vectors. */
+ vector long long vlrh = {-2,0};
+ vector long long vlrl = {-1,1};
+ vector double vdrh = {-2.0,0.0};
+ vector double vdrl = {-1.0,1.0};
+ vector unsigned int vuirh = {0,4,1,5};
+ vector unsigned int vuirl = {2,6,3,7};
+ vector signed int vsirh = {-4,0,-3,1};
+ vector signed int vsirl = {-2,2,-1,3};
+ vector float vfrh = {-4.0,0.0,-3.0,1.0};
+ vector float vfrl = {-2.0,2.0,-1.0,3.0};
+
+ vlh = vec_mergeh (vla, vlb);
+ vll = vec_mergel (vla, vlb);
+ vdh = vec_mergeh (vda, vdb);
+ vdl = vec_mergel (vda, vdb);
+ vuih = vec_mergeh (vuia, vuib);
+ vuil = vec_mergel (vuia, vuib);
+ vsih = vec_mergeh (vsia, vsib);
+ vsil = vec_mergel (vsia, vsib);
+ vfh = vec_mergeh (vfa, vfb );
+ vfl = vec_mergel (vfa, vfb );
+
+ check (vec_long_long_eq (vlh, vlrh), "vlh");
+ check (vec_long_long_eq (vll, vlrl), "vll");
+ check (vec_double_eq (vdh, vdrh), "vdh" );
+ check (vec_double_eq (vdl, vdrl), "vdl" );
+ check (vec_all_eq (vuih, vuirh), "vuih");
+ check (vec_all_eq (vuil, vuirl), "vuil");
+ check (vec_all_eq (vsih, vsirh), "vsih");
+ check (vec_all_eq (vsil, vsirl), "vsil");
+ check (vec_all_eq (vfh, vfrh), "vfh");
+ check (vec_all_eq (vfl, vfrl), "vfl");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge.c
new file mode 100644
index 000000000..84b14fea7
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/merge.c
@@ -0,0 +1,77 @@
+#include "harness.h"
+
+static void test()
+{
+ /* Input vectors. */
+ vector unsigned char vuca = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector unsigned char vucb
+ = {16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
+ vector signed char vsca
+ = {-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1};
+ vector signed char vscb = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector unsigned short vusa = {0,1,2,3,4,5,6,7};
+ vector unsigned short vusb = {8,9,10,11,12,13,14,15};
+ vector signed short vssa = {-8,-7,-6,-5,-4,-3,-2,-1};
+ vector signed short vssb = {0,1,2,3,4,5,6,7};
+ vector unsigned int vuia = {0,1,2,3};
+ vector unsigned int vuib = {4,5,6,7};
+ vector signed int vsia = {-4,-3,-2,-1};
+ vector signed int vsib = {0,1,2,3};
+ vector float vfa = {-4.0,-3.0,-2.0,-1.0};
+ vector float vfb = {0.0,1.0,2.0,3.0};
+
+ /* Result vectors. */
+ vector unsigned char vuch, vucl;
+ vector signed char vsch, vscl;
+ vector unsigned short vush, vusl;
+ vector signed short vssh, vssl;
+ vector unsigned int vuih, vuil;
+ vector signed int vsih, vsil;
+ vector float vfh, vfl;
+
+ /* Expected result vectors. */
+ vector unsigned char vucrh = {0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23};
+ vector unsigned char vucrl = {8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31};
+ vector signed char vscrh = {-16,0,-15,1,-14,2,-13,3,-12,4,-11,5,-10,6,-9,7};
+ vector signed char vscrl = {-8,8,-7,9,-6,10,-5,11,-4,12,-3,13,-2,14,-1,15};
+ vector unsigned short vusrh = {0,8,1,9,2,10,3,11};
+ vector unsigned short vusrl = {4,12,5,13,6,14,7,15};
+ vector signed short vssrh = {-8,0,-7,1,-6,2,-5,3};
+ vector signed short vssrl = {-4,4,-3,5,-2,6,-1,7};
+ vector unsigned int vuirh = {0,4,1,5};
+ vector unsigned int vuirl = {2,6,3,7};
+ vector signed int vsirh = {-4,0,-3,1};
+ vector signed int vsirl = {-2,2,-1,3};
+ vector float vfrh = {-4.0,0.0,-3.0,1.0};
+ vector float vfrl = {-2.0,2.0,-1.0,3.0};
+
+ vuch = vec_mergeh (vuca, vucb);
+ vucl = vec_mergel (vuca, vucb);
+ vsch = vec_mergeh (vsca, vscb);
+ vscl = vec_mergel (vsca, vscb);
+ vush = vec_mergeh (vusa, vusb);
+ vusl = vec_mergel (vusa, vusb);
+ vssh = vec_mergeh (vssa, vssb);
+ vssl = vec_mergel (vssa, vssb);
+ vuih = vec_mergeh (vuia, vuib);
+ vuil = vec_mergel (vuia, vuib);
+ vsih = vec_mergeh (vsia, vsib);
+ vsil = vec_mergel (vsia, vsib);
+ vfh = vec_mergeh (vfa, vfb );
+ vfl = vec_mergel (vfa, vfb );
+
+ check (vec_all_eq (vuch, vucrh), "vuch");
+ check (vec_all_eq (vucl, vucrl), "vucl");
+ check (vec_all_eq (vsch, vscrh), "vsch");
+ check (vec_all_eq (vscl, vscrl), "vscl");
+ check (vec_all_eq (vush, vusrh), "vush");
+ check (vec_all_eq (vusl, vusrl), "vusl");
+ check (vec_all_eq (vssh, vssrh), "vssh");
+ check (vec_all_eq (vssl, vssrl), "vssl");
+ check (vec_all_eq (vuih, vuirh), "vuih");
+ check (vec_all_eq (vuil, vuirl), "vuil");
+ check (vec_all_eq (vsih, vsirh), "vsih");
+ check (vec_all_eq (vsil, vsirl), "vsil");
+ check (vec_all_eq (vfh, vfrh), "vfh");
+ check (vec_all_eq (vfl, vfrl), "vfl");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/mult-even-odd-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/mult-even-odd-be-order.c
new file mode 100644
index 000000000..ff3047486
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/mult-even-odd-be-order.c
@@ -0,0 +1,64 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+static void test()
+{
+ vector unsigned char vuca = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector unsigned char vucb = {2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3};
+ vector signed char vsca = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector signed char vscb = {2,-3,2,-3,2,-3,2,-3,2,-3,2,-3,2,-3,2,-3};
+ vector unsigned short vusa = {0,1,2,3,4,5,6,7};
+ vector unsigned short vusb = {2,3,2,3,2,3,2,3};
+ vector signed short vssa = {-4,-3,-2,-1,0,1,2,3};
+ vector signed short vssb = {2,-3,2,-3,2,-3,2,-3};
+ vector unsigned short vuse, vuso;
+ vector signed short vsse, vsso;
+ vector unsigned int vuie, vuio;
+ vector signed int vsie, vsio;
+
+ vuse = vec_mule (vuca, vucb);
+ vuso = vec_mulo (vuca, vucb);
+ vsse = vec_mule (vsca, vscb);
+ vsso = vec_mulo (vsca, vscb);
+ vuie = vec_mule (vusa, vusb);
+ vuio = vec_mulo (vusa, vusb);
+ vsie = vec_mule (vssa, vssb);
+ vsio = vec_mulo (vssa, vssb);
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ check (vec_all_eq (vuse,
+ ((vector unsigned short){3,9,15,21,27,33,39,45})),
+ "vuse");
+ check (vec_all_eq (vuso,
+ ((vector unsigned short){0,4,8,12,16,20,24,28})),
+ "vuso");
+ check (vec_all_eq (vsse,
+ ((vector signed short){21,15,9,3,-3,-9,-15,-21})),
+ "vsse");
+ check (vec_all_eq (vsso,
+ ((vector signed short){-16,-12,-8,-4,0,4,8,12})),
+ "vsso");
+ check (vec_all_eq (vuie, ((vector unsigned int){3,9,15,21})), "vuie");
+ check (vec_all_eq (vuio, ((vector unsigned int){0,4,8,12})), "vuio");
+ check (vec_all_eq (vsie, ((vector signed int){9,3,-3,-9})), "vsie");
+ check (vec_all_eq (vsio, ((vector signed int){-8,-4,0,4})), "vsio");
+#else
+ check (vec_all_eq (vuse,
+ ((vector unsigned short){0,4,8,12,16,20,24,28})),
+ "vuse");
+ check (vec_all_eq (vuso,
+ ((vector unsigned short){3,9,15,21,27,33,39,45})),
+ "vuso");
+ check (vec_all_eq (vsse,
+ ((vector signed short){-16,-12,-8,-4,0,4,8,12})),
+ "vsse");
+ check (vec_all_eq (vsso,
+ ((vector signed short){21,15,9,3,-3,-9,-15,-21})),
+ "vsso");
+ check (vec_all_eq (vuie, ((vector unsigned int){0,4,8,12})), "vuie");
+ check (vec_all_eq (vuio, ((vector unsigned int){3,9,15,21})), "vuio");
+ check (vec_all_eq (vsie, ((vector signed int){-8,-4,0,4})), "vsie");
+ check (vec_all_eq (vsio, ((vector signed int){9,3,-3,-9})), "vsio");
+#endif
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/mult-even-odd.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/mult-even-odd.c
new file mode 100644
index 000000000..34b72e900
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/mult-even-odd.c
@@ -0,0 +1,43 @@
+#include "harness.h"
+
+static void test()
+{
+ vector unsigned char vuca = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector unsigned char vucb = {2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3};
+ vector signed char vsca = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector signed char vscb = {2,-3,2,-3,2,-3,2,-3,2,-3,2,-3,2,-3,2,-3};
+ vector unsigned short vusa = {0,1,2,3,4,5,6,7};
+ vector unsigned short vusb = {2,3,2,3,2,3,2,3};
+ vector signed short vssa = {-4,-3,-2,-1,0,1,2,3};
+ vector signed short vssb = {2,-3,2,-3,2,-3,2,-3};
+ vector unsigned short vuse, vuso;
+ vector signed short vsse, vsso;
+ vector unsigned int vuie, vuio;
+ vector signed int vsie, vsio;
+
+ vuse = vec_mule (vuca, vucb);
+ vuso = vec_mulo (vuca, vucb);
+ vsse = vec_mule (vsca, vscb);
+ vsso = vec_mulo (vsca, vscb);
+ vuie = vec_mule (vusa, vusb);
+ vuio = vec_mulo (vusa, vusb);
+ vsie = vec_mule (vssa, vssb);
+ vsio = vec_mulo (vssa, vssb);
+
+ check (vec_all_eq (vuse,
+ ((vector unsigned short){0,4,8,12,16,20,24,28})),
+ "vuse");
+ check (vec_all_eq (vuso,
+ ((vector unsigned short){3,9,15,21,27,33,39,45})),
+ "vuso");
+ check (vec_all_eq (vsse,
+ ((vector signed short){-16,-12,-8,-4,0,4,8,12})),
+ "vsse");
+ check (vec_all_eq (vsso,
+ ((vector signed short){21,15,9,3,-3,-9,-15,-21})),
+ "vsso");
+ check (vec_all_eq (vuie, ((vector unsigned int){0,4,8,12})), "vuie");
+ check (vec_all_eq (vuio, ((vector unsigned int){3,9,15,21})), "vuio");
+ check (vec_all_eq (vsie, ((vector signed int){-8,-4,0,4})), "vsie");
+ check (vec_all_eq (vsio, ((vector signed int){9,3,-3,-9})), "vsio");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/pack-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/pack-be-order.c
new file mode 100644
index 000000000..c400fc882
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/pack-be-order.c
@@ -0,0 +1,136 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+#define BIG 4294967295
+
+static void test()
+{
+ /* Input vectors. */
+ vector unsigned short vusa = {0,1,2,3,4,5,6,7};
+ vector unsigned short vusb = {8,9,10,11,12,13,14,15};
+ vector signed short vssa = {-8,-7,-6,-5,-4,-3,-2,-1};
+ vector signed short vssb = {0,1,2,3,4,5,6,7};
+ vector bool short vbsa = {0,65535,65535,0,0,0,65535,0};
+ vector bool short vbsb = {65535,0,0,65535,65535,65535,0,65535};
+ vector unsigned int vuia = {0,1,2,3};
+ vector unsigned int vuib = {4,5,6,7};
+ vector signed int vsia = {-4,-3,-2,-1};
+ vector signed int vsib = {0,1,2,3};
+ vector bool int vbia = {0,BIG,BIG,BIG};
+ vector bool int vbib = {BIG,0,0,0};
+ vector unsigned int vipa = {(0<<24) + (2<<19) + (3<<11) + (4<<3),
+ (1<<24) + (5<<19) + (6<<11) + (7<<3),
+ (0<<24) + (8<<19) + (9<<11) + (10<<3),
+ (1<<24) + (11<<19) + (12<<11) + (13<<3)};
+ vector unsigned int vipb = {(1<<24) + (14<<19) + (15<<11) + (16<<3),
+ (0<<24) + (17<<19) + (18<<11) + (19<<3),
+ (1<<24) + (20<<19) + (21<<11) + (22<<3),
+ (0<<24) + (23<<19) + (24<<11) + (25<<3)};
+ vector unsigned short vusc = {0,256,1,257,2,258,3,259};
+ vector unsigned short vusd = {4,260,5,261,6,262,7,263};
+ vector signed short vssc = {-1,-128,0,127,-2,-129,1,128};
+ vector signed short vssd = {-3,-130,2,129,-4,-131,3,130};
+ vector unsigned int vuic = {0,65536,1,65537};
+ vector unsigned int vuid = {2,65538,3,65539};
+ vector signed int vsic = {-1,-32768,0,32767};
+ vector signed int vsid = {-2,-32769,1,32768};
+
+ /* Result vectors. */
+ vector unsigned char vucr;
+ vector signed char vscr;
+ vector bool char vbcr;
+ vector unsigned short vusr;
+ vector signed short vssr;
+ vector bool short vbsr;
+ vector pixel vpr;
+ vector unsigned char vucsr;
+ vector signed char vscsr;
+ vector unsigned short vussr;
+ vector signed short vsssr;
+ vector unsigned char vucsur1, vucsur2;
+ vector unsigned short vussur1, vussur2;
+
+ /* Expected result vectors. */
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector unsigned char vucer = {8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7};
+ vector signed char vscer = {0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1};
+ vector bool char vbcer = {255,0,0,255,255,255,0,255,0,255,255,0,0,0,255,0};
+ vector unsigned short vuser = {4,5,6,7,0,1,2,3};
+ vector signed short vsser = {0,1,2,3,-4,-3,-2,-1};
+ vector bool short vbser = {65535,0,0,0,0,65535,65535,65535};
+ vector pixel vper = {(1<<15) + (14<<10) + (15<<5) + 16,
+ (0<<15) + (17<<10) + (18<<5) + 19,
+ (1<<15) + (20<<10) + (21<<5) + 22,
+ (0<<15) + (23<<10) + (24<<5) + 25,
+ (0<<15) + (2<<10) + (3<<5) + 4,
+ (1<<15) + (5<<10) + (6<<5) + 7,
+ (0<<15) + (8<<10) + (9<<5) + 10,
+ (1<<15) + (11<<10) + (12<<5) + 13};
+ vector unsigned char vucser = {4,255,5,255,6,255,7,255,0,255,1,255,2,255,3,255};
+ vector signed char vscser = {-3,-128,2,127,-4,-128,3,127,
+ -1,-128,0,127,-2,-128,1,127};
+ vector unsigned short vusser = {2,65535,3,65535,0,65535,1,65535};
+ vector signed short vssser = {-2,-32768,1,32767,-1,-32768,0,32767};
+ vector unsigned char vucsuer1 = {4,255,5,255,6,255,7,255,0,255,1,255,2,255,3,255};
+ vector unsigned char vucsuer2 = {0,0,2,129,0,0,3,130,0,0,0,127,0,0,1,128};
+ vector unsigned short vussuer1 = {2,65535,3,65535,0,65535,1,65535};
+ vector unsigned short vussuer2 = {0,0,1,32768,0,0,0,32767};
+#else
+ vector unsigned char vucer = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char vscer = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector bool char vbcer = {0,255,255,0,0,0,255,0,255,0,0,255,255,255,0,255};
+ vector unsigned short vuser = {0,1,2,3,4,5,6,7};
+ vector signed short vsser = {-4,-3,-2,-1,0,1,2,3};
+ vector bool short vbser = {0,65535,65535,65535,65535,0,0,0};
+ vector pixel vper = {(0<<15) + (2<<10) + (3<<5) + 4,
+ (1<<15) + (5<<10) + (6<<5) + 7,
+ (0<<15) + (8<<10) + (9<<5) + 10,
+ (1<<15) + (11<<10) + (12<<5) + 13,
+ (1<<15) + (14<<10) + (15<<5) + 16,
+ (0<<15) + (17<<10) + (18<<5) + 19,
+ (1<<15) + (20<<10) + (21<<5) + 22,
+ (0<<15) + (23<<10) + (24<<5) + 25};
+ vector unsigned char vucser = {0,255,1,255,2,255,3,255,4,255,5,255,6,255,7,255};
+ vector signed char vscser = {-1,-128,0,127,-2,-128,1,127,
+ -3,-128,2,127,-4,-128,3,127};
+ vector unsigned short vusser = {0,65535,1,65535,2,65535,3,65535};
+ vector signed short vssser = {-1,-32768,0,32767,-2,-32768,1,32767};
+ vector unsigned char vucsuer1 = {0,255,1,255,2,255,3,255,4,255,5,255,6,255,7,255};
+ vector unsigned char vucsuer2 = {0,0,0,127,0,0,1,128,0,0,2,129,0,0,3,130};
+ vector unsigned short vussuer1 = {0,65535,1,65535,2,65535,3,65535};
+ vector unsigned short vussuer2 = {0,0,0,32767,0,0,1,32768};
+#endif
+
+ vucr = vec_pack (vusa, vusb);
+ vscr = vec_pack (vssa, vssb);
+ vbcr = vec_pack (vbsa, vbsb);
+ vusr = vec_pack (vuia, vuib);
+ vssr = vec_pack (vsia, vsib);
+ vbsr = vec_pack (vbia, vbib);
+ vpr = vec_packpx (vipa, vipb);
+ vucsr = vec_packs (vusc, vusd);
+ vscsr = vec_packs (vssc, vssd);
+ vussr = vec_packs (vuic, vuid);
+ vsssr = vec_packs (vsic, vsid);
+ vucsur1 = vec_packsu (vusc, vusd);
+ vucsur2 = vec_packsu (vssc, vssd);
+ vussur1 = vec_packsu (vuic, vuid);
+ vussur2 = vec_packsu (vsic, vsid);
+
+ check (vec_all_eq (vucr, vucer), "vucr");
+ check (vec_all_eq (vscr, vscer), "vscr");
+ check (vec_all_eq (vbcr, vbcer), "vbcr");
+ check (vec_all_eq (vusr, vuser), "vusr");
+ check (vec_all_eq (vssr, vsser), "vssr");
+ check (vec_all_eq (vbsr, vbser), "vbsr");
+ check (vec_all_eq (vpr, vper ), "vpr" );
+ check (vec_all_eq (vucsr, vucser), "vucsr");
+ check (vec_all_eq (vscsr, vscser), "vscsr");
+ check (vec_all_eq (vussr, vusser), "vussr");
+ check (vec_all_eq (vsssr, vssser), "vsssr");
+ check (vec_all_eq (vucsur1, vucsuer1), "vucsur1");
+ check (vec_all_eq (vucsur2, vucsuer2), "vucsur2");
+ check (vec_all_eq (vussur1, vussuer1), "vussur1");
+ check (vec_all_eq (vussur2, vussuer2), "vussur2");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/pack.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/pack.c
new file mode 100644
index 000000000..d1b49f0a6
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/pack.c
@@ -0,0 +1,108 @@
+#include "harness.h"
+
+#define BIG 4294967295
+
+static void test()
+{
+ /* Input vectors. */
+ vector unsigned short vusa = {0,1,2,3,4,5,6,7};
+ vector unsigned short vusb = {8,9,10,11,12,13,14,15};
+ vector signed short vssa = {-8,-7,-6,-5,-4,-3,-2,-1};
+ vector signed short vssb = {0,1,2,3,4,5,6,7};
+ vector bool short vbsa = {0,65535,65535,0,0,0,65535,0};
+ vector bool short vbsb = {65535,0,0,65535,65535,65535,0,65535};
+ vector unsigned int vuia = {0,1,2,3};
+ vector unsigned int vuib = {4,5,6,7};
+ vector signed int vsia = {-4,-3,-2,-1};
+ vector signed int vsib = {0,1,2,3};
+ vector bool int vbia = {0,BIG,BIG,BIG};
+ vector bool int vbib = {BIG,0,0,0};
+ vector unsigned int vipa = {(0<<24) + (2<<19) + (3<<11) + (4<<3),
+ (1<<24) + (5<<19) + (6<<11) + (7<<3),
+ (0<<24) + (8<<19) + (9<<11) + (10<<3),
+ (1<<24) + (11<<19) + (12<<11) + (13<<3)};
+ vector unsigned int vipb = {(1<<24) + (14<<19) + (15<<11) + (16<<3),
+ (0<<24) + (17<<19) + (18<<11) + (19<<3),
+ (1<<24) + (20<<19) + (21<<11) + (22<<3),
+ (0<<24) + (23<<19) + (24<<11) + (25<<3)};
+ vector unsigned short vusc = {0,256,1,257,2,258,3,259};
+ vector unsigned short vusd = {4,260,5,261,6,262,7,263};
+ vector signed short vssc = {-1,-128,0,127,-2,-129,1,128};
+ vector signed short vssd = {-3,-130,2,129,-4,-131,3,130};
+ vector unsigned int vuic = {0,65536,1,65537};
+ vector unsigned int vuid = {2,65538,3,65539};
+ vector signed int vsic = {-1,-32768,0,32767};
+ vector signed int vsid = {-2,-32769,1,32768};
+
+ /* Result vectors. */
+ vector unsigned char vucr;
+ vector signed char vscr;
+ vector bool char vbcr;
+ vector unsigned short vusr;
+ vector signed short vssr;
+ vector bool short vbsr;
+ vector pixel vpr;
+ vector unsigned char vucsr;
+ vector signed char vscsr;
+ vector unsigned short vussr;
+ vector signed short vsssr;
+ vector unsigned char vucsur1, vucsur2;
+ vector unsigned short vussur1, vussur2;
+
+ /* Expected result vectors. */
+ vector unsigned char vucer = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char vscer = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector bool char vbcer = {0,255,255,0,0,0,255,0,255,0,0,255,255,255,0,255};
+ vector unsigned short vuser = {0,1,2,3,4,5,6,7};
+ vector signed short vsser = {-4,-3,-2,-1,0,1,2,3};
+ vector bool short vbser = {0,65535,65535,65535,65535,0,0,0};
+ vector pixel vper = {(0<<15) + (2<<10) + (3<<5) + 4,
+ (1<<15) + (5<<10) + (6<<5) + 7,
+ (0<<15) + (8<<10) + (9<<5) + 10,
+ (1<<15) + (11<<10) + (12<<5) + 13,
+ (1<<15) + (14<<10) + (15<<5) + 16,
+ (0<<15) + (17<<10) + (18<<5) + 19,
+ (1<<15) + (20<<10) + (21<<5) + 22,
+ (0<<15) + (23<<10) + (24<<5) + 25};
+ vector unsigned char vucser = {0,255,1,255,2,255,3,255,4,255,5,255,6,255,7,255};
+ vector signed char vscser = {-1,-128,0,127,-2,-128,1,127,
+ -3,-128,2,127,-4,-128,3,127};
+ vector unsigned short vusser = {0,65535,1,65535,2,65535,3,65535};
+ vector signed short vssser = {-1,-32768,0,32767,-2,-32768,1,32767};
+ vector unsigned char vucsuer1 = {0,255,1,255,2,255,3,255,4,255,5,255,6,255,7,255};
+ vector unsigned char vucsuer2 = {0,0,0,127,0,0,1,128,0,0,2,129,0,0,3,130};
+ vector unsigned short vussuer1 = {0,65535,1,65535,2,65535,3,65535};
+ vector unsigned short vussuer2 = {0,0,0,32767,0,0,1,32768};
+
+ vucr = vec_pack (vusa, vusb);
+ vscr = vec_pack (vssa, vssb);
+ vbcr = vec_pack (vbsa, vbsb);
+ vusr = vec_pack (vuia, vuib);
+ vssr = vec_pack (vsia, vsib);
+ vbsr = vec_pack (vbia, vbib);
+ vpr = vec_packpx (vipa, vipb);
+ vucsr = vec_packs (vusc, vusd);
+ vscsr = vec_packs (vssc, vssd);
+ vussr = vec_packs (vuic, vuid);
+ vsssr = vec_packs (vsic, vsid);
+ vucsur1 = vec_packsu (vusc, vusd);
+ vucsur2 = vec_packsu (vssc, vssd);
+ vussur1 = vec_packsu (vuic, vuid);
+ vussur2 = vec_packsu (vsic, vsid);
+
+ check (vec_all_eq (vucr, vucer), "vucr");
+ check (vec_all_eq (vscr, vscer), "vscr");
+ check (vec_all_eq (vbcr, vbcer), "vbcr");
+ check (vec_all_eq (vusr, vuser), "vusr");
+ check (vec_all_eq (vssr, vsser), "vssr");
+ check (vec_all_eq (vbsr, vbser), "vbsr");
+ check (vec_all_eq (vpr, vper ), "vpr" );
+ check (vec_all_eq (vucsr, vucser), "vucsr");
+ check (vec_all_eq (vscsr, vscser), "vscsr");
+ check (vec_all_eq (vussr, vusser), "vussr");
+ check (vec_all_eq (vsssr, vssser), "vsssr");
+ check (vec_all_eq (vucsur1, vucsuer1), "vucsur1");
+ check (vec_all_eq (vucsur2, vucsuer2), "vucsur2");
+ check (vec_all_eq (vussur1, vussuer1), "vussur1");
+ check (vec_all_eq (vussur2, vussuer2), "vussur2");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/perm-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/perm-be-order.c
new file mode 100644
index 000000000..604f63dc9
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/perm-be-order.c
@@ -0,0 +1,74 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+static void test()
+{
+ /* Input vectors. */
+ vector unsigned char vuca = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector unsigned char vucb = {16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
+ vector signed char vsca = {-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1};
+ vector signed char vscb = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector unsigned short vusa = {0,1,2,3,4,5,6,7};
+ vector unsigned short vusb = {8,9,10,11,12,13,14,15};
+ vector signed short vssa = {-8,-7,-6,-5,-4,-3,-2,-1};
+ vector signed short vssb = {0,1,2,3,4,5,6,7};
+ vector unsigned int vuia = {0,1,2,3};
+ vector unsigned int vuib = {4,5,6,7};
+ vector signed int vsia = {-4,-3,-2,-1};
+ vector signed int vsib = {0,1,2,3};
+ vector float vfa = {-4.0,-3.0,-2.0,-1.0};
+ vector float vfb = {0.0,1.0,2.0,3.0};
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector unsigned char vucp = {15,16,14,17,13,18,12,19,11,20,10,21,9,22,8,23};
+ vector unsigned char vscp = {15,16,14,17,13,18,12,19,11,20,10,21,9,22,8,23};
+ vector unsigned char vusp = {15,14,17,16,13,12,19,18,11,10,21,20,9,8,23,22};
+ vector unsigned char vssp = {15,14,17,16,13,12,19,18,11,10,21,20,9,8,23,22};
+ vector unsigned char vuip = {15,14,13,12,19,18,17,16,11,10,9,8,23,22,21,20};
+ vector unsigned char vsip = {15,14,13,12,19,18,17,16,11,10,9,8,23,22,21,20};
+ vector unsigned char vfp = {15,14,13,12,19,18,17,16,11,10,9,8,23,22,21,20};
+#else
+ vector unsigned char vucp = {0,31,1,30,2,29,3,28,4,27,5,26,6,25,7,24};
+ vector unsigned char vscp = {0,31,1,30,2,29,3,28,4,27,5,26,6,25,7,24};
+ vector unsigned char vusp = {0,1,30,31,2,3,28,29,4,5,26,27,6,7,24,25};
+ vector unsigned char vssp = {0,1,30,31,2,3,28,29,4,5,26,27,6,7,24,25};
+ vector unsigned char vuip = {0,1,2,3,28,29,30,31,4,5,6,7,24,25,26,27};
+ vector unsigned char vsip = {0,1,2,3,28,29,30,31,4,5,6,7,24,25,26,27};
+ vector unsigned char vfp = {0,1,2,3,28,29,30,31,4,5,6,7,24,25,26,27};
+#endif
+
+ /* Result vectors. */
+ vector unsigned char vuc;
+ vector signed char vsc;
+ vector unsigned short vus;
+ vector signed short vss;
+ vector unsigned int vui;
+ vector signed int vsi;
+ vector float vf;
+
+ /* Expected result vectors. */
+ vector unsigned char vucr = {0,31,1,30,2,29,3,28,4,27,5,26,6,25,7,24};
+ vector signed char vscr = {-16,15,-15,14,-14,13,-13,12,-12,11,-11,10,-10,9,-9,8};
+ vector unsigned short vusr = {0,15,1,14,2,13,3,12};
+ vector signed short vssr = {-8,7,-7,6,-6,5,-5,4};
+ vector unsigned int vuir = {0,7,1,6};
+ vector signed int vsir = {-4,3,-3,2};
+ vector float vfr = {-4.0,3.0,-3.0,2.0};
+
+ vuc = vec_perm (vuca, vucb, vucp);
+ vsc = vec_perm (vsca, vscb, vscp);
+ vus = vec_perm (vusa, vusb, vusp);
+ vss = vec_perm (vssa, vssb, vssp);
+ vui = vec_perm (vuia, vuib, vuip);
+ vsi = vec_perm (vsia, vsib, vsip);
+ vf = vec_perm (vfa, vfb, vfp );
+
+ check (vec_all_eq (vuc, vucr), "vuc");
+ check (vec_all_eq (vsc, vscr), "vsc");
+ check (vec_all_eq (vus, vusr), "vus");
+ check (vec_all_eq (vss, vssr), "vss");
+ check (vec_all_eq (vui, vuir), "vui");
+ check (vec_all_eq (vsi, vsir), "vsi");
+ check (vec_all_eq (vf, vfr), "vf" );
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/perm.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/perm.c
new file mode 100644
index 000000000..be6bf3422
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/perm.c
@@ -0,0 +1,69 @@
+#include "harness.h"
+
+static void test()
+{
+ /* Input vectors. */
+ vector unsigned char vuca = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector unsigned char vucb
+ = {16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
+ vector unsigned char vucp = {0,31,1,30,2,29,3,28,4,27,5,26,6,25,7,24};
+
+ vector signed char vsca
+ = {-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1};
+ vector signed char vscb = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector unsigned char vscp = {0,31,1,30,2,29,3,28,4,27,5,26,6,25,7,24};
+
+ vector unsigned short vusa = {0,1,2,3,4,5,6,7};
+ vector unsigned short vusb = {8,9,10,11,12,13,14,15};
+ vector unsigned char vusp = {0,1,30,31,2,3,28,29,4,5,26,27,6,7,24,25};
+
+ vector signed short vssa = {-8,-7,-6,-5,-4,-3,-2,-1};
+ vector signed short vssb = {0,1,2,3,4,5,6,7};
+ vector unsigned char vssp = {0,1,30,31,2,3,28,29,4,5,26,27,6,7,24,25};
+
+ vector unsigned int vuia = {0,1,2,3};
+ vector unsigned int vuib = {4,5,6,7};
+ vector unsigned char vuip = {0,1,2,3,28,29,30,31,4,5,6,7,24,25,26,27};
+
+ vector signed int vsia = {-4,-3,-2,-1};
+ vector signed int vsib = {0,1,2,3};
+ vector unsigned char vsip = {0,1,2,3,28,29,30,31,4,5,6,7,24,25,26,27};
+
+ vector float vfa = {-4.0,-3.0,-2.0,-1.0};
+ vector float vfb = {0.0,1.0,2.0,3.0};
+ vector unsigned char vfp = {0,1,2,3,28,29,30,31,4,5,6,7,24,25,26,27};
+
+ /* Result vectors. */
+ vector unsigned char vuc;
+ vector signed char vsc;
+ vector unsigned short vus;
+ vector signed short vss;
+ vector unsigned int vui;
+ vector signed int vsi;
+ vector float vf;
+
+ /* Expected result vectors. */
+ vector unsigned char vucr = {0,31,1,30,2,29,3,28,4,27,5,26,6,25,7,24};
+ vector signed char vscr = {-16,15,-15,14,-14,13,-13,12,-12,11,-11,10,-10,9,-9,8};
+ vector unsigned short vusr = {0,15,1,14,2,13,3,12};
+ vector signed short vssr = {-8,7,-7,6,-6,5,-5,4};
+ vector unsigned int vuir = {0,7,1,6};
+ vector signed int vsir = {-4,3,-3,2};
+ vector float vfr = {-4.0,3.0,-3.0,2.0};
+
+ vuc = vec_perm (vuca, vucb, vucp);
+ vsc = vec_perm (vsca, vscb, vscp);
+ vus = vec_perm (vusa, vusb, vusp);
+ vss = vec_perm (vssa, vssb, vssp);
+ vui = vec_perm (vuia, vuib, vuip);
+ vsi = vec_perm (vsia, vsib, vsip);
+ vf = vec_perm (vfa, vfb, vfp );
+
+ check (vec_all_eq (vuc, vucr), "vuc");
+ check (vec_all_eq (vsc, vscr), "vsc");
+ check (vec_all_eq (vus, vusr), "vus");
+ check (vec_all_eq (vss, vssr), "vss");
+ check (vec_all_eq (vui, vuir), "vui");
+ check (vec_all_eq (vsi, vsir), "vsi");
+ check (vec_all_eq (vf, vfr), "vf" );
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/sn7153.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/sn7153.c
index a498a8620..2381a891c 100644
--- a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/sn7153.c
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/sn7153.c
@@ -34,7 +34,11 @@ main()
void validate_sat()
{
+#ifdef __LITTLE_ENDIAN__
+ if (vec_any_ne(vec_splat(vec_mfvscr(), 0), ((vector unsigned short){1,1,1,1,1,1,1,1})))
+#else
if (vec_any_ne(vec_splat(vec_mfvscr(), 7), ((vector unsigned short){1,1,1,1,1,1,1,1})))
+#endif
{
union {vector unsigned short v; unsigned short s[8];} u;
u.v = vec_mfvscr();
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat-be-order.c
new file mode 100644
index 000000000..e265ae4be
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat-be-order.c
@@ -0,0 +1,59 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+static void test()
+{
+ /* Input vectors. */
+ vector unsigned char vuc = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char vsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector unsigned short vus = {0,1,2,3,4,5,6,7};
+ vector signed short vss = {-4,-3,-2,-1,0,1,2,3};
+ vector unsigned int vui = {0,1,2,3};
+ vector signed int vsi = {-2,-1,0,1};
+ vector float vf = {-2.0,-1.0,0.0,1.0};
+
+ /* Result vectors. */
+ vector unsigned char vucr;
+ vector signed char vscr;
+ vector unsigned short vusr;
+ vector signed short vssr;
+ vector unsigned int vuir;
+ vector signed int vsir;
+ vector float vfr;
+
+ /* Expected result vectors. */
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector unsigned char vucer = {14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14};
+ vector signed char vscer = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
+ vector unsigned short vuser = {0,0,0,0,0,0,0,0};
+ vector signed short vsser = {3,3,3,3,3,3,3,3};
+ vector unsigned int vuier = {1,1,1,1};
+ vector signed int vsier = {-2,-2,-2,-2};
+ vector float vfer = {0.0,0.0,0.0,0.0};
+#else
+ vector unsigned char vucer = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
+ vector signed char vscer = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+ vector unsigned short vuser = {7,7,7,7,7,7,7,7};
+ vector signed short vsser = {-4,-4,-4,-4,-4,-4,-4,-4};
+ vector unsigned int vuier = {2,2,2,2};
+ vector signed int vsier = {1,1,1,1};
+ vector float vfer = {-1.0,-1.0,-1.0,-1.0};
+#endif
+
+ vucr = vec_splat (vuc, 1);
+ vscr = vec_splat (vsc, 8);
+ vusr = vec_splat (vus, 7);
+ vssr = vec_splat (vss, 0);
+ vuir = vec_splat (vui, 2);
+ vsir = vec_splat (vsi, 3);
+ vfr = vec_splat (vf, 1);
+
+ check (vec_all_eq (vucr, vucer), "vuc");
+ check (vec_all_eq (vscr, vscer), "vsc");
+ check (vec_all_eq (vusr, vuser), "vus");
+ check (vec_all_eq (vssr, vsser), "vss");
+ check (vec_all_eq (vuir, vuier), "vui");
+ check (vec_all_eq (vsir, vsier), "vsi");
+ check (vec_all_eq (vfr, vfer ), "vf");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat-vsx-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat-vsx-be-order.c
new file mode 100644
index 000000000..cd389bd0f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat-vsx-be-order.c
@@ -0,0 +1,37 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static void test()
+{
+ /* Input vectors. */
+ vector unsigned int vui = {0,1,2,3};
+ vector signed int vsi = {-2,-1,0,1};
+ vector float vf = {-2.0,-1.0,0.0,1.0};
+
+ /* Result vectors. */
+ vector unsigned int vuir;
+ vector signed int vsir;
+ vector float vfr;
+
+ /* Expected result vectors. */
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector unsigned int vuier = {1,1,1,1};
+ vector signed int vsier = {-2,-2,-2,-2};
+ vector float vfer = {0.0,0.0,0.0,0.0};
+#else
+ vector unsigned int vuier = {2,2,2,2};
+ vector signed int vsier = {1,1,1,1};
+ vector float vfer = {-1.0,-1.0,-1.0,-1.0};
+#endif
+
+ vuir = vec_splat (vui, 2);
+ vsir = vec_splat (vsi, 3);
+ vfr = vec_splat (vf, 1);
+
+ check (vec_all_eq (vuir, vuier), "vui");
+ check (vec_all_eq (vsir, vsier), "vsi");
+ check (vec_all_eq (vfr, vfer ), "vf");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat-vsx.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat-vsx.c
new file mode 100644
index 000000000..5a6e7dfe4
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat-vsx.c
@@ -0,0 +1,31 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static void test()
+{
+ /* Input vectors. */
+ vector unsigned int vui = {0,1,2,3};
+ vector signed int vsi = {-2,-1,0,1};
+ vector float vf = {-2.0,-1.0,0.0,1.0};
+
+ /* Result vectors. */
+ vector unsigned int vuir;
+ vector signed int vsir;
+ vector float vfr;
+
+ /* Expected result vectors. */
+ vector unsigned int vuier = {2,2,2,2};
+ vector signed int vsier = {1,1,1,1};
+ vector float vfer = {-1.0,-1.0,-1.0,-1.0};
+
+ vuir = vec_splat (vui, 2);
+ vsir = vec_splat (vsi, 3);
+ vfr = vec_splat (vf, 1);
+
+ check (vec_all_eq (vuir, vuier), "vui");
+ check (vec_all_eq (vsir, vsier), "vsi");
+ check (vec_all_eq (vfr, vfer ), "vf");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat.c
new file mode 100644
index 000000000..e45974ac9
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/splat.c
@@ -0,0 +1,47 @@
+#include "harness.h"
+
+static void test()
+{
+ /* Input vectors. */
+ vector unsigned char vuc = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char vsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector unsigned short vus = {0,1,2,3,4,5,6,7};
+ vector signed short vss = {-4,-3,-2,-1,0,1,2,3};
+ vector unsigned int vui = {0,1,2,3};
+ vector signed int vsi = {-2,-1,0,1};
+ vector float vf = {-2.0,-1.0,0.0,1.0};
+
+ /* Result vectors. */
+ vector unsigned char vucr;
+ vector signed char vscr;
+ vector unsigned short vusr;
+ vector signed short vssr;
+ vector unsigned int vuir;
+ vector signed int vsir;
+ vector float vfr;
+
+ /* Expected result vectors. */
+ vector unsigned char vucer = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
+ vector signed char vscer = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+ vector unsigned short vuser = {7,7,7,7,7,7,7,7};
+ vector signed short vsser = {-4,-4,-4,-4,-4,-4,-4,-4};
+ vector unsigned int vuier = {2,2,2,2};
+ vector signed int vsier = {1,1,1,1};
+ vector float vfer = {-1.0,-1.0,-1.0,-1.0};
+
+ vucr = vec_splat (vuc, 1);
+ vscr = vec_splat (vsc, 8);
+ vusr = vec_splat (vus, 7);
+ vssr = vec_splat (vss, 0);
+ vuir = vec_splat (vui, 2);
+ vsir = vec_splat (vsi, 3);
+ vfr = vec_splat (vf, 1);
+
+ check (vec_all_eq (vucr, vucer), "vuc");
+ check (vec_all_eq (vscr, vscer), "vsc");
+ check (vec_all_eq (vusr, vuser), "vus");
+ check (vec_all_eq (vssr, vsser), "vss");
+ check (vec_all_eq (vuir, vuier), "vui");
+ check (vec_all_eq (vsir, vsier), "vsi");
+ check (vec_all_eq (vfr, vfer ), "vf");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/st-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/st-be-order.c
new file mode 100644
index 000000000..1a7b01bb5
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/st-be-order.c
@@ -0,0 +1,83 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+static unsigned char svuc[16] __attribute__ ((aligned (16)));
+static signed char svsc[16] __attribute__ ((aligned (16)));
+static unsigned char svbc[16] __attribute__ ((aligned (16)));
+static unsigned short svus[8] __attribute__ ((aligned (16)));
+static signed short svss[8] __attribute__ ((aligned (16)));
+static unsigned short svbs[8] __attribute__ ((aligned (16)));
+static unsigned short svp[8] __attribute__ ((aligned (16)));
+static unsigned int svui[4] __attribute__ ((aligned (16)));
+static signed int svsi[4] __attribute__ ((aligned (16)));
+static unsigned int svbi[4] __attribute__ ((aligned (16)));
+static float svf[4] __attribute__ ((aligned (16)));
+
+static void check_arrays ()
+{
+ unsigned int i;
+ for (i = 0; i < 16; ++i)
+ {
+ check (svuc[i] == i, "svuc");
+ check (svsc[i] == i - 8, "svsc");
+ check (svbc[i] == ((i % 2) ? 0xff : 0), "svbc");
+ }
+ for (i = 0; i < 8; ++i)
+ {
+ check (svus[i] == i, "svus");
+ check (svss[i] == i - 4, "svss");
+ check (svbs[i] == ((i % 2) ? 0xffff : 0), "svbs");
+ check (svp[i] == i, "svp");
+ }
+ for (i = 0; i < 4; ++i)
+ {
+ check (svui[i] == i, "svui");
+ check (svsi[i] == i - 2, "svsi");
+ check (svbi[i] == ((i % 2) ? 0xffffffff : 0), "svbi");
+ check (svf[i] == i * 1.0f, "svf");
+ }
+}
+
+static void test ()
+{
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector unsigned char vuc = {15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
+ vector signed char vsc = {7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8};
+ vector bool char vbc = {255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0};
+ vector unsigned short vus = {7,6,5,4,3,2,1,0};
+ vector signed short vss = {3,2,1,0,-1,-2,-3,-4};
+ vector bool short vbs = {65535,0,65535,0,65535,0,65535,0};
+ vector pixel vp = {7,6,5,4,3,2,1,0};
+ vector unsigned int vui = {3,2,1,0};
+ vector signed int vsi = {1,0,-1,-2};
+ vector bool int vbi = {0xffffffff,0,0xffffffff,0};
+ vector float vf = {3.0,2.0,1.0,0.0};
+#else
+ vector unsigned char vuc = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char vsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector bool char vbc = {0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255};
+ vector unsigned short vus = {0,1,2,3,4,5,6,7};
+ vector signed short vss = {-4,-3,-2,-1,0,1,2,3};
+ vector bool short vbs = {0,65535,0,65535,0,65535,0,65535};
+ vector pixel vp = {0,1,2,3,4,5,6,7};
+ vector unsigned int vui = {0,1,2,3};
+ vector signed int vsi = {-2,-1,0,1};
+ vector bool int vbi = {0,0xffffffff,0,0xffffffff};
+ vector float vf = {0.0,1.0,2.0,3.0};
+#endif
+
+ vec_st (vuc, 0, (vector unsigned char *)svuc);
+ vec_st (vsc, 0, (vector signed char *)svsc);
+ vec_st (vbc, 0, (vector bool char *)svbc);
+ vec_st (vus, 0, (vector unsigned short *)svus);
+ vec_st (vss, 0, (vector signed short *)svss);
+ vec_st (vbs, 0, (vector bool short *)svbs);
+ vec_st (vp, 0, (vector pixel *)svp);
+ vec_st (vui, 0, (vector unsigned int *)svui);
+ vec_st (vsi, 0, (vector signed int *)svsi);
+ vec_st (vbi, 0, (vector bool int *)svbi);
+ vec_st (vf, 0, (vector float *)svf);
+
+ check_arrays ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/st-vsx-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/st-vsx-be-order.c
new file mode 100644
index 000000000..a2688fab5
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/st-vsx-be-order.c
@@ -0,0 +1,34 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static unsigned long long svul[2] __attribute__ ((aligned (16)));
+static double svd[2] __attribute__ ((aligned (16)));
+
+static void check_arrays ()
+{
+ unsigned int i;
+ for (i = 0; i < 2; ++i)
+ {
+ check (svul[i] == i, "svul");
+ check (svd[i] == i * 1.0, "svd");
+ }
+}
+
+static void test ()
+{
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector unsigned long long vul = {1,0};
+ vector double vd = {1.0,0.0};
+#else
+ vector unsigned long long vul = {0,1};
+ vector double vd = {0.0,1.0};
+#endif
+
+ vec_st (vul, 0, (vector unsigned long long *)svul);
+ vec_st (vd, 0, (vector double *)svd);
+
+ check_arrays ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/st-vsx.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/st-vsx.c
new file mode 100644
index 000000000..ef67de0ba
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/st-vsx.c
@@ -0,0 +1,29 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static unsigned long long svul[2] __attribute__ ((aligned (16)));
+static double svd[2] __attribute__ ((aligned (16)));
+
+static void check_arrays ()
+{
+ unsigned int i;
+ for (i = 0; i < 2; ++i)
+ {
+ check (svul[i] == i, "svul");
+ check (svd[i] == i * 1.0, "svd");
+ }
+}
+
+static void test ()
+{
+ vector unsigned long long vul = {0,1};
+ vector double vd = {0.0,1.0};
+
+ vec_st (vul, 0, (vector unsigned long long *)svul);
+ vec_st (vd, 0, (vector double *)svd);
+
+ check_arrays ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/st.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/st.c
new file mode 100644
index 000000000..3339b7283
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/st.c
@@ -0,0 +1,67 @@
+#include "harness.h"
+
+static unsigned char svuc[16] __attribute__ ((aligned (16)));
+static signed char svsc[16] __attribute__ ((aligned (16)));
+static unsigned char svbc[16] __attribute__ ((aligned (16)));
+static unsigned short svus[8] __attribute__ ((aligned (16)));
+static signed short svss[8] __attribute__ ((aligned (16)));
+static unsigned short svbs[8] __attribute__ ((aligned (16)));
+static unsigned short svp[8] __attribute__ ((aligned (16)));
+static unsigned int svui[4] __attribute__ ((aligned (16)));
+static signed int svsi[4] __attribute__ ((aligned (16)));
+static unsigned int svbi[4] __attribute__ ((aligned (16)));
+static float svf[4] __attribute__ ((aligned (16)));
+
+static void check_arrays ()
+{
+ unsigned int i;
+ for (i = 0; i < 16; ++i)
+ {
+ check (svuc[i] == i, "svuc");
+ check (svsc[i] == i - 8, "svsc");
+ check (svbc[i] == ((i % 2) ? 0xff : 0), "svbc");
+ }
+ for (i = 0; i < 8; ++i)
+ {
+ check (svus[i] == i, "svus");
+ check (svss[i] == i - 4, "svss");
+ check (svbs[i] == ((i % 2) ? 0xffff : 0), "svbs");
+ check (svp[i] == i, "svp");
+ }
+ for (i = 0; i < 4; ++i)
+ {
+ check (svui[i] == i, "svui");
+ check (svsi[i] == i - 2, "svsi");
+ check (svbi[i] == ((i % 2) ? 0xffffffff : 0), "svbi");
+ check (svf[i] == i * 1.0f, "svf");
+ }
+}
+
+static void test ()
+{
+ vector unsigned char vuc = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char vsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector bool char vbc = {0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255};
+ vector unsigned short vus = {0,1,2,3,4,5,6,7};
+ vector signed short vss = {-4,-3,-2,-1,0,1,2,3};
+ vector bool short vbs = {0,65535,0,65535,0,65535,0,65535};
+ vector pixel vp = {0,1,2,3,4,5,6,7};
+ vector unsigned int vui = {0,1,2,3};
+ vector signed int vsi = {-2,-1,0,1};
+ vector bool int vbi = {0,0xffffffff,0,0xffffffff};
+ vector float vf = {0.0,1.0,2.0,3.0};
+
+ vec_st (vuc, 0, (vector unsigned char *)svuc);
+ vec_st (vsc, 0, (vector signed char *)svsc);
+ vec_st (vbc, 0, (vector bool char *)svbc);
+ vec_st (vus, 0, (vector unsigned short *)svus);
+ vec_st (vss, 0, (vector signed short *)svss);
+ vec_st (vbs, 0, (vector bool short *)svbs);
+ vec_st (vp, 0, (vector pixel *)svp);
+ vec_st (vui, 0, (vector unsigned int *)svui);
+ vec_st (vsi, 0, (vector signed int *)svsi);
+ vec_st (vbi, 0, (vector bool int *)svbi);
+ vec_st (vf, 0, (vector float *)svf);
+
+ check_arrays ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ste-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ste-be-order.c
new file mode 100644
index 000000000..75f2004f3
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ste-be-order.c
@@ -0,0 +1,53 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+static unsigned char svuc[16] __attribute__ ((aligned (16)));
+static signed char svsc[16] __attribute__ ((aligned (16)));
+static unsigned short svus[8] __attribute__ ((aligned (16)));
+static signed short svss[8] __attribute__ ((aligned (16)));
+static unsigned int svui[4] __attribute__ ((aligned (16)));
+static signed int svsi[4] __attribute__ ((aligned (16)));
+static float svf[4] __attribute__ ((aligned (16)));
+
+static void check_arrays ()
+{
+ check (svuc[9] == 9, "svuc");
+ check (svsc[14] == 6, "svsc");
+ check (svus[7] == 7, "svus");
+ check (svss[1] == -3, "svss");
+ check (svui[3] == 3, "svui");
+ check (svsi[2] == 0, "svsi");
+ check (svf[0] == 0.0, "svf");
+}
+
+static void test ()
+{
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector unsigned char vuc = {15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
+ vector signed char vsc = {7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8};
+ vector unsigned short vus = {7,6,5,4,3,2,1,0};
+ vector signed short vss = {3,2,1,0,-1,-2,-3,-4};
+ vector unsigned int vui = {3,2,1,0};
+ vector signed int vsi = {1,0,-1,-2};
+ vector float vf = {3.0,2.0,1.0,0.0};
+#else
+ vector unsigned char vuc = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char vsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector unsigned short vus = {0,1,2,3,4,5,6,7};
+ vector signed short vss = {-4,-3,-2,-1,0,1,2,3};
+ vector unsigned int vui = {0,1,2,3};
+ vector signed int vsi = {-2,-1,0,1};
+ vector float vf = {0.0,1.0,2.0,3.0};
+#endif
+
+ vec_ste (vuc, 9*1, (unsigned char *)svuc);
+ vec_ste (vsc, 14*1, (signed char *)svsc);
+ vec_ste (vus, 7*2, (unsigned short *)svus);
+ vec_ste (vss, 1*2, (signed short *)svss);
+ vec_ste (vui, 3*4, (unsigned int *)svui);
+ vec_ste (vsi, 2*4, (signed int *)svsi);
+ vec_ste (vf, 0*4, (float *)svf);
+
+ check_arrays ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ste.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ste.c
new file mode 100644
index 000000000..9bbda3b32
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/ste.c
@@ -0,0 +1,41 @@
+#include "harness.h"
+
+static unsigned char svuc[16] __attribute__ ((aligned (16)));
+static signed char svsc[16] __attribute__ ((aligned (16)));
+static unsigned short svus[8] __attribute__ ((aligned (16)));
+static signed short svss[8] __attribute__ ((aligned (16)));
+static unsigned int svui[4] __attribute__ ((aligned (16)));
+static signed int svsi[4] __attribute__ ((aligned (16)));
+static float svf[4] __attribute__ ((aligned (16)));
+
+static void check_arrays ()
+{
+ check (svuc[9] == 9, "svuc");
+ check (svsc[14] == 6, "svsc");
+ check (svus[7] == 7, "svus");
+ check (svss[1] == -3, "svss");
+ check (svui[3] == 3, "svui");
+ check (svsi[2] == 0, "svsi");
+ check (svf[0] == 0.0, "svf");
+}
+
+static void test ()
+{
+ vector unsigned char vuc = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char vsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector unsigned short vus = {0,1,2,3,4,5,6,7};
+ vector signed short vss = {-4,-3,-2,-1,0,1,2,3};
+ vector unsigned int vui = {0,1,2,3};
+ vector signed int vsi = {-2,-1,0,1};
+ vector float vf = {0.0,1.0,2.0,3.0};
+
+ vec_ste (vuc, 9*1, (unsigned char *)svuc);
+ vec_ste (vsc, 14*1, (signed char *)svsc);
+ vec_ste (vus, 7*2, (unsigned short *)svus);
+ vec_ste (vss, 1*2, (signed short *)svss);
+ vec_ste (vui, 3*4, (unsigned int *)svui);
+ vec_ste (vsi, 2*4, (signed int *)svsi);
+ vec_ste (vf, 0*4, (float *)svf);
+
+ check_arrays ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl-be-order.c
new file mode 100644
index 000000000..7f00a0364
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl-be-order.c
@@ -0,0 +1,83 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+static unsigned char svuc[16] __attribute__ ((aligned (16)));
+static signed char svsc[16] __attribute__ ((aligned (16)));
+static unsigned char svbc[16] __attribute__ ((aligned (16)));
+static unsigned short svus[8] __attribute__ ((aligned (16)));
+static signed short svss[8] __attribute__ ((aligned (16)));
+static unsigned short svbs[8] __attribute__ ((aligned (16)));
+static unsigned short svp[8] __attribute__ ((aligned (16)));
+static unsigned int svui[4] __attribute__ ((aligned (16)));
+static signed int svsi[4] __attribute__ ((aligned (16)));
+static unsigned int svbi[4] __attribute__ ((aligned (16)));
+static float svf[4] __attribute__ ((aligned (16)));
+
+static void check_arrays ()
+{
+ unsigned int i;
+ for (i = 0; i < 16; ++i)
+ {
+ check (svuc[i] == i, "svuc");
+ check (svsc[i] == i - 8, "svsc");
+ check (svbc[i] == ((i % 2) ? 0xff : 0), "svbc");
+ }
+ for (i = 0; i < 8; ++i)
+ {
+ check (svus[i] == i, "svus");
+ check (svss[i] == i - 4, "svss");
+ check (svbs[i] == ((i % 2) ? 0xffff : 0), "svbs");
+ check (svp[i] == i, "svp");
+ }
+ for (i = 0; i < 4; ++i)
+ {
+ check (svui[i] == i, "svui");
+ check (svsi[i] == i - 2, "svsi");
+ check (svbi[i] == ((i % 2) ? 0xffffffff : 0), "svbi");
+ check (svf[i] == i * 1.0f, "svf");
+ }
+}
+
+static void test ()
+{
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector unsigned char vuc = {15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
+ vector signed char vsc = {7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8};
+ vector bool char vbc = {255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0};
+ vector unsigned short vus = {7,6,5,4,3,2,1,0};
+ vector signed short vss = {3,2,1,0,-1,-2,-3,-4};
+ vector bool short vbs = {65535,0,65535,0,65535,0,65535,0};
+ vector pixel vp = {7,6,5,4,3,2,1,0};
+ vector unsigned int vui = {3,2,1,0};
+ vector signed int vsi = {1,0,-1,-2};
+ vector bool int vbi = {0xffffffff,0,0xffffffff,0};
+ vector float vf = {3.0,2.0,1.0,0.0};
+#else
+ vector unsigned char vuc = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char vsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector bool char vbc = {0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255};
+ vector unsigned short vus = {0,1,2,3,4,5,6,7};
+ vector signed short vss = {-4,-3,-2,-1,0,1,2,3};
+ vector bool short vbs = {0,65535,0,65535,0,65535,0,65535};
+ vector pixel vp = {0,1,2,3,4,5,6,7};
+ vector unsigned int vui = {0,1,2,3};
+ vector signed int vsi = {-2,-1,0,1};
+ vector bool int vbi = {0,0xffffffff,0,0xffffffff};
+ vector float vf = {0.0,1.0,2.0,3.0};
+#endif
+
+ vec_stl (vuc, 0, (vector unsigned char *)svuc);
+ vec_stl (vsc, 0, (vector signed char *)svsc);
+ vec_stl (vbc, 0, (vector bool char *)svbc);
+ vec_stl (vus, 0, (vector unsigned short *)svus);
+ vec_stl (vss, 0, (vector signed short *)svss);
+ vec_stl (vbs, 0, (vector bool short *)svbs);
+ vec_stl (vp, 0, (vector pixel *)svp);
+ vec_stl (vui, 0, (vector unsigned int *)svui);
+ vec_stl (vsi, 0, (vector signed int *)svsi);
+ vec_stl (vbi, 0, (vector bool int *)svbi);
+ vec_stl (vf, 0, (vector float *)svf);
+
+ check_arrays ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl-vsx-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl-vsx-be-order.c
new file mode 100644
index 000000000..26f2c2772
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl-vsx-be-order.c
@@ -0,0 +1,34 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static unsigned long long svul[2] __attribute__ ((aligned (16)));
+static double svd[2] __attribute__ ((aligned (16)));
+
+static void check_arrays ()
+{
+ unsigned int i;
+ for (i = 0; i < 2; ++i)
+ {
+ check (svul[i] == i, "svul");
+ check (svd[i] == i * 1.0, "svd");
+ }
+}
+
+static void test ()
+{
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector unsigned long long vul = {1,0};
+ vector double vd = {1.0,0.0};
+#else
+ vector unsigned long long vul = {0,1};
+ vector double vd = {0.0,1.0};
+#endif
+
+ vec_stl (vul, 0, (vector unsigned long long *)svul);
+ vec_stl (vd, 0, (vector double *)svd);
+
+ check_arrays ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl-vsx.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl-vsx.c
new file mode 100644
index 000000000..9a1cce6f8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl-vsx.c
@@ -0,0 +1,29 @@
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec -mabi=altivec -std=gnu99 -mvsx" } */
+
+#include "harness.h"
+
+static unsigned long long svul[2] __attribute__ ((aligned (16)));
+static double svd[2] __attribute__ ((aligned (16)));
+
+static void check_arrays ()
+{
+ unsigned int i;
+ for (i = 0; i < 2; ++i)
+ {
+ check (svul[i] == i, "svul");
+ check (svd[i] == i * 1.0, "svd");
+ }
+}
+
+static void test ()
+{
+ vector unsigned long long vul = {0,1};
+ vector double vd = {0.0,1.0};
+
+ vec_stl (vul, 0, (vector unsigned long long *)svul);
+ vec_stl (vd, 0, (vector double *)svd);
+
+ check_arrays ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl.c
new file mode 100644
index 000000000..9ebd8782a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/stl.c
@@ -0,0 +1,67 @@
+#include "harness.h"
+
+static unsigned char svuc[16] __attribute__ ((aligned (16)));
+static signed char svsc[16] __attribute__ ((aligned (16)));
+static unsigned char svbc[16] __attribute__ ((aligned (16)));
+static unsigned short svus[8] __attribute__ ((aligned (16)));
+static signed short svss[8] __attribute__ ((aligned (16)));
+static unsigned short svbs[8] __attribute__ ((aligned (16)));
+static unsigned short svp[8] __attribute__ ((aligned (16)));
+static unsigned int svui[4] __attribute__ ((aligned (16)));
+static signed int svsi[4] __attribute__ ((aligned (16)));
+static unsigned int svbi[4] __attribute__ ((aligned (16)));
+static float svf[4] __attribute__ ((aligned (16)));
+
+static void check_arrays ()
+{
+ unsigned int i;
+ for (i = 0; i < 16; ++i)
+ {
+ check (svuc[i] == i, "svuc");
+ check (svsc[i] == i - 8, "svsc");
+ check (svbc[i] == ((i % 2) ? 0xff : 0), "svbc");
+ }
+ for (i = 0; i < 8; ++i)
+ {
+ check (svus[i] == i, "svus");
+ check (svss[i] == i - 4, "svss");
+ check (svbs[i] == ((i % 2) ? 0xffff : 0), "svbs");
+ check (svp[i] == i, "svp");
+ }
+ for (i = 0; i < 4; ++i)
+ {
+ check (svui[i] == i, "svui");
+ check (svsi[i] == i - 2, "svsi");
+ check (svbi[i] == ((i % 2) ? 0xffffffff : 0), "svbi");
+ check (svf[i] == i * 1.0f, "svf");
+ }
+}
+
+static void test ()
+{
+ vector unsigned char vuc = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ vector signed char vsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector bool char vbc = {0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255};
+ vector unsigned short vus = {0,1,2,3,4,5,6,7};
+ vector signed short vss = {-4,-3,-2,-1,0,1,2,3};
+ vector bool short vbs = {0,65535,0,65535,0,65535,0,65535};
+ vector pixel vp = {0,1,2,3,4,5,6,7};
+ vector unsigned int vui = {0,1,2,3};
+ vector signed int vsi = {-2,-1,0,1};
+ vector bool int vbi = {0,0xffffffff,0,0xffffffff};
+ vector float vf = {0.0,1.0,2.0,3.0};
+
+ vec_stl (vuc, 0, (vector unsigned char *)svuc);
+ vec_stl (vsc, 0, (vector signed char *)svsc);
+ vec_stl (vbc, 0, (vector bool char *)svbc);
+ vec_stl (vus, 0, (vector unsigned short *)svus);
+ vec_stl (vss, 0, (vector signed short *)svss);
+ vec_stl (vbs, 0, (vector bool short *)svbs);
+ vec_stl (vp, 0, (vector pixel *)svp);
+ vec_stl (vui, 0, (vector unsigned int *)svui);
+ vec_stl (vsi, 0, (vector signed int *)svsi);
+ vec_stl (vbi, 0, (vector bool int *)svbi);
+ vec_stl (vf, 0, (vector float *)svf);
+
+ check_arrays ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/sum2s-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/sum2s-be-order.c
new file mode 100644
index 000000000..0981cc1d5
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/sum2s-be-order.c
@@ -0,0 +1,19 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+static void test()
+{
+ vector signed int vsia = {-10,1,2,3};
+ vector signed int vsib = {100,101,102,-103};
+ vector signed int vsir;
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector signed int vsier = {91,0,107,0};
+#else
+ vector signed int vsier = {0,92,0,-98};
+#endif
+
+ vsir = vec_sum2s (vsia, vsib);
+
+ check (vec_all_eq (vsir, vsier), "vsir");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/sum2s.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/sum2s.c
new file mode 100644
index 000000000..ded05be84
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/sum2s.c
@@ -0,0 +1,13 @@
+#include "harness.h"
+
+static void test()
+{
+ vector signed int vsia = {-10,1,2,3};
+ vector signed int vsib = {100,101,102,-103};
+ vector signed int vsir;
+ vector signed int vsier = {0,92,0,-98};
+
+ vsir = vec_sum2s (vsia, vsib);
+
+ check (vec_all_eq (vsir, vsier), "vsir");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/unpack-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/unpack-be-order.c
new file mode 100644
index 000000000..e174433dd
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/unpack-be-order.c
@@ -0,0 +1,88 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+#define BIG 4294967295
+
+static void test()
+{
+ /* Input vectors. */
+ vector signed char vsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector bool char vbc = {0,255,255,0,0,0,255,0,255,0,0,255,255,255,0,255};
+ vector pixel vp = {(0<<15) + (1<<10) + (2<<5) + 3,
+ (1<<15) + (4<<10) + (5<<5) + 6,
+ (0<<15) + (7<<10) + (8<<5) + 9,
+ (1<<15) + (10<<10) + (11<<5) + 12,
+ (1<<15) + (13<<10) + (14<<5) + 15,
+ (0<<15) + (16<<10) + (17<<5) + 18,
+ (1<<15) + (19<<10) + (20<<5) + 21,
+ (0<<15) + (22<<10) + (23<<5) + 24};
+ vector signed short vss = {-4,-3,-2,-1,0,1,2,3};
+ vector bool short vbs = {0,65535,65535,0,0,0,65535,0};
+
+ /* Result vectors. */
+ vector signed short vsch, vscl;
+ vector bool short vbsh, vbsl;
+ vector unsigned int vuih, vuil;
+ vector signed int vsih, vsil;
+ vector bool int vbih, vbil;
+
+ /* Expected result vectors. */
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector signed short vschr = {0,1,2,3,4,5,6,7};
+ vector signed short vsclr = {-8,-7,-6,-5,-4,-3,-2,-1};
+ vector bool short vbshr = {65535,0,0,65535,65535,65535,0,65535};
+ vector bool short vbslr = {0,65535,65535,0,0,0,65535,0};
+ vector unsigned int vuihr = {(65535<<24) + (13<<16) + (14<<8) + 15,
+ (0<<24) + (16<<16) + (17<<8) + 18,
+ (65535<<24) + (19<<16) + (20<<8) + 21,
+ (0<<24) + (22<<16) + (23<<8) + 24};
+ vector unsigned int vuilr = {(0<<24) + (1<<16) + (2<<8) + 3,
+ (65535<<24) + (4<<16) + (5<<8) + 6,
+ (0<<24) + (7<<16) + (8<<8) + 9,
+ (65535<<24) + (10<<16) + (11<<8) + 12};
+ vector signed int vsihr = {0,1,2,3};
+ vector signed int vsilr = {-4,-3,-2,-1};
+ vector bool int vbihr = {0,0,BIG,0};
+ vector bool int vbilr = {0,BIG,BIG,0};
+#else
+ vector signed short vschr = {-8,-7,-6,-5,-4,-3,-2,-1};
+ vector signed short vsclr = {0,1,2,3,4,5,6,7};
+ vector bool short vbshr = {0,65535,65535,0,0,0,65535,0};
+ vector bool short vbslr = {65535,0,0,65535,65535,65535,0,65535};
+ vector unsigned int vuihr = {(0<<24) + (1<<16) + (2<<8) + 3,
+ (65535<<24) + (4<<16) + (5<<8) + 6,
+ (0<<24) + (7<<16) + (8<<8) + 9,
+ (65535<<24) + (10<<16) + (11<<8) + 12};
+ vector unsigned int vuilr = {(65535<<24) + (13<<16) + (14<<8) + 15,
+ (0<<24) + (16<<16) + (17<<8) + 18,
+ (65535<<24) + (19<<16) + (20<<8) + 21,
+ (0<<24) + (22<<16) + (23<<8) + 24};
+ vector signed int vsihr = {-4,-3,-2,-1};
+ vector signed int vsilr = {0,1,2,3};
+ vector bool int vbihr = {0,BIG,BIG,0};
+ vector bool int vbilr = {0,0,BIG,0};
+#endif
+
+ vsch = vec_unpackh (vsc);
+ vscl = vec_unpackl (vsc);
+ vbsh = vec_unpackh (vbc);
+ vbsl = vec_unpackl (vbc);
+ vuih = vec_unpackh (vp);
+ vuil = vec_unpackl (vp);
+ vsih = vec_unpackh (vss);
+ vsil = vec_unpackl (vss);
+ vbih = vec_unpackh (vbs);
+ vbil = vec_unpackl (vbs);
+
+ check (vec_all_eq (vsch, vschr), "vsch");
+ check (vec_all_eq (vscl, vsclr), "vscl");
+ check (vec_all_eq (vbsh, vbshr), "vbsh");
+ check (vec_all_eq (vbsl, vbslr), "vbsl");
+ check (vec_all_eq (vuih, vuihr), "vuih");
+ check (vec_all_eq (vuil, vuilr), "vuil");
+ check (vec_all_eq (vsih, vsihr), "vsih");
+ check (vec_all_eq (vsil, vsilr), "vsil");
+ check (vec_all_eq (vbih, vbihr), "vbih");
+ check (vec_all_eq (vbil, vbilr), "vbil");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/unpack.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/unpack.c
new file mode 100644
index 000000000..3c13163cb
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/unpack.c
@@ -0,0 +1,67 @@
+#include "harness.h"
+
+#define BIG 4294967295
+
+static void test()
+{
+ /* Input vectors. */
+ vector signed char vsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
+ vector bool char vbc = {0,255,255,0,0,0,255,0,255,0,0,255,255,255,0,255};
+ vector pixel vp = {(0<<15) + (1<<10) + (2<<5) + 3,
+ (1<<15) + (4<<10) + (5<<5) + 6,
+ (0<<15) + (7<<10) + (8<<5) + 9,
+ (1<<15) + (10<<10) + (11<<5) + 12,
+ (1<<15) + (13<<10) + (14<<5) + 15,
+ (0<<15) + (16<<10) + (17<<5) + 18,
+ (1<<15) + (19<<10) + (20<<5) + 21,
+ (0<<15) + (22<<10) + (23<<5) + 24};
+ vector signed short vss = {-4,-3,-2,-1,0,1,2,3};
+ vector bool short vbs = {0,65535,65535,0,0,0,65535,0};
+
+ /* Result vectors. */
+ vector signed short vsch, vscl;
+ vector bool short vbsh, vbsl;
+ vector unsigned int vuih, vuil;
+ vector signed int vsih, vsil;
+ vector bool int vbih, vbil;
+
+ /* Expected result vectors. */
+ vector signed short vschr = {-8,-7,-6,-5,-4,-3,-2,-1};
+ vector signed short vsclr = {0,1,2,3,4,5,6,7};
+ vector bool short vbshr = {0,65535,65535,0,0,0,65535,0};
+ vector bool short vbslr = {65535,0,0,65535,65535,65535,0,65535};
+ vector unsigned int vuihr = {(0<<24) + (1<<16) + (2<<8) + 3,
+ (65535<<24) + (4<<16) + (5<<8) + 6,
+ (0<<24) + (7<<16) + (8<<8) + 9,
+ (65535<<24) + (10<<16) + (11<<8) + 12};
+ vector unsigned int vuilr = {(65535<<24) + (13<<16) + (14<<8) + 15,
+ (0<<24) + (16<<16) + (17<<8) + 18,
+ (65535<<24) + (19<<16) + (20<<8) + 21,
+ (0<<24) + (22<<16) + (23<<8) + 24};
+ vector signed int vsihr = {-4,-3,-2,-1};
+ vector signed int vsilr = {0,1,2,3};
+ vector bool int vbihr = {0,BIG,BIG,0};
+ vector bool int vbilr = {0,0,BIG,0};
+
+ vsch = vec_unpackh (vsc);
+ vscl = vec_unpackl (vsc);
+ vbsh = vec_unpackh (vbc);
+ vbsl = vec_unpackl (vbc);
+ vuih = vec_unpackh (vp);
+ vuil = vec_unpackl (vp);
+ vsih = vec_unpackh (vss);
+ vsil = vec_unpackl (vss);
+ vbih = vec_unpackh (vbs);
+ vbil = vec_unpackl (vbs);
+
+ check (vec_all_eq (vsch, vschr), "vsch");
+ check (vec_all_eq (vscl, vsclr), "vscl");
+ check (vec_all_eq (vbsh, vbshr), "vbsh");
+ check (vec_all_eq (vbsl, vbslr), "vbsl");
+ check (vec_all_eq (vuih, vuihr), "vuih");
+ check (vec_all_eq (vuil, vuilr), "vuil");
+ check (vec_all_eq (vsih, vsihr), "vsih");
+ check (vec_all_eq (vsil, vsilr), "vsil");
+ check (vec_all_eq (vbih, vbihr), "vbih");
+ check (vec_all_eq (vbil, vbilr), "vbil");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/vec-set.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/vec-set.c
new file mode 100644
index 000000000..fa11c47a1
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/vec-set.c
@@ -0,0 +1,14 @@
+#include "harness.h"
+
+vector short
+vec_set (short m)
+{
+ return (vector short){m, 0, 0, 0, 0, 0, 0, 0};
+}
+
+static void test()
+{
+ check (vec_all_eq (vec_set (7),
+ ((vector short){7, 0, 0, 0, 0, 0, 0, 0})),
+ "vec_set");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/vsums-be-order.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/vsums-be-order.c
new file mode 100644
index 000000000..e4a34e9f9
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/vsums-be-order.c
@@ -0,0 +1,20 @@
+/* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mno-vsx" } */
+
+#include "harness.h"
+
+static void test()
+{
+ vector signed int va = {-7,11,-13,17};
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ vector signed int vb = {128,0,0,0};
+ vector signed int evd = {136,0,0,0};
+#else
+ vector signed int vb = {0,0,0,128};
+ vector signed int evd = {0,0,0,136};
+#endif
+
+ vector signed int vd = vec_sums (va, vb);
+
+ check (vec_all_eq (vd, evd), "sums");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vmx/vsums.c b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/vsums.c
new file mode 100644
index 000000000..d678aceec
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.dg/vmx/vsums.c
@@ -0,0 +1,12 @@
+#include "harness.h"
+
+static void test()
+{
+ vector signed int va = {-7,11,-13,17};
+ vector signed int vb = {0,0,0,128};
+ vector signed int evd = {0,0,0,136};
+
+ vector signed int vd = vec_sums (va, vb);
+
+ check (vec_all_eq (vd, evd), "sums");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
index 1b8530843..cad70ab62 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
@@ -1,7 +1,13 @@
/* { dg-do compile } */
/* { dg-options "-O2" } */
-#include "../../../config/aarch64/arm_neon.h"
+#include <arm_neon.h>
+
+/* Used to force a variable to a SIMD register. */
+#define force_simd(V1) asm volatile ("mov %d0, %1.d[0]" \
+ : "=w"(V1) \
+ : "w"(V1) \
+ : /* No clobbers */);
/* { dg-final { scan-assembler-times "\\tadd\\tx\[0-9\]+" 2 } } */
@@ -31,7 +37,12 @@ test_vaddd_s64_2 (int64x1_t a, int64x1_t b, int64x1_t c, int64x1_t d)
uint64x1_t
test_vceqd_s64 (int64x1_t a, int64x1_t b)
{
- return vceqd_s64 (a, b);
+ uint64x1_t res;
+ force_simd (a);
+ force_simd (b);
+ res = vceqd_s64 (a, b);
+ force_simd (res);
+ return res;
}
/* { dg-final { scan-assembler-times "\\tcmeq\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
@@ -39,7 +50,11 @@ test_vceqd_s64 (int64x1_t a, int64x1_t b)
uint64x1_t
test_vceqzd_s64 (int64x1_t a)
{
- return vceqzd_s64 (a);
+ uint64x1_t res;
+ force_simd (a);
+ res = vceqzd_s64 (a);
+ force_simd (res);
+ return res;
}
/* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
@@ -47,21 +62,36 @@ test_vceqzd_s64 (int64x1_t a)
uint64x1_t
test_vcged_s64 (int64x1_t a, int64x1_t b)
{
- return vcged_s64 (a, b);
+ uint64x1_t res;
+ force_simd (a);
+ force_simd (b);
+ res = vcged_s64 (a, b);
+ force_simd (res);
+ return res;
}
uint64x1_t
test_vcled_s64 (int64x1_t a, int64x1_t b)
{
- return vcled_s64 (a, b);
+ uint64x1_t res;
+ force_simd (a);
+ force_simd (b);
+ res = vcled_s64 (a, b);
+ force_simd (res);
+ return res;
}
-/* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
+/* Idiom recognition will cause this testcase not to generate
+ the expected cmge instruction, so do not check for it. */
uint64x1_t
test_vcgezd_s64 (int64x1_t a)
{
- return vcgezd_s64 (a);
+ uint64x1_t res;
+ force_simd (a);
+ res = vcgezd_s64 (a);
+ force_simd (res);
+ return res;
}
/* { dg-final { scan-assembler-times "\\tcmhs\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
@@ -69,7 +99,12 @@ test_vcgezd_s64 (int64x1_t a)
uint64x1_t
test_vcged_u64 (uint64x1_t a, uint64x1_t b)
{
- return vcged_u64 (a, b);
+ uint64x1_t res;
+ force_simd (a);
+ force_simd (b);
+ res = vcged_u64 (a, b);
+ force_simd (res);
+ return res;
}
/* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
@@ -77,13 +112,23 @@ test_vcged_u64 (uint64x1_t a, uint64x1_t b)
uint64x1_t
test_vcgtd_s64 (int64x1_t a, int64x1_t b)
{
- return vcgtd_s64 (a, b);
+ uint64x1_t res;
+ force_simd (a);
+ force_simd (b);
+ res = vcgtd_s64 (a, b);
+ force_simd (res);
+ return res;
}
uint64x1_t
test_vcltd_s64 (int64x1_t a, int64x1_t b)
{
- return vcltd_s64 (a, b);
+ uint64x1_t res;
+ force_simd (a);
+ force_simd (b);
+ res = vcltd_s64 (a, b);
+ force_simd (res);
+ return res;
}
/* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
@@ -91,7 +136,11 @@ test_vcltd_s64 (int64x1_t a, int64x1_t b)
uint64x1_t
test_vcgtzd_s64 (int64x1_t a)
{
- return vcgtzd_s64 (a);
+ uint64x1_t res;
+ force_simd (a);
+ res = vcgtzd_s64 (a);
+ force_simd (res);
+ return res;
}
/* { dg-final { scan-assembler-times "\\tcmhi\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
@@ -99,7 +148,12 @@ test_vcgtzd_s64 (int64x1_t a)
uint64x1_t
test_vcgtd_u64 (uint64x1_t a, uint64x1_t b)
{
- return vcgtd_u64 (a, b);
+ uint64x1_t res;
+ force_simd (a);
+ force_simd (b);
+ res = vcgtd_u64 (a, b);
+ force_simd (res);
+ return res;
}
/* { dg-final { scan-assembler-times "\\tcmle\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
@@ -107,15 +161,24 @@ test_vcgtd_u64 (uint64x1_t a, uint64x1_t b)
uint64x1_t
test_vclezd_s64 (int64x1_t a)
{
- return vclezd_s64 (a);
+ uint64x1_t res;
+ force_simd (a);
+ res = vclezd_s64 (a);
+ force_simd (res);
+ return res;
}
-/* { dg-final { scan-assembler-times "\\tcmlt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
+/* Idiom recognition will cause this testcase not to generate
+ the expected cmlt instruction, so do not check for it. */
uint64x1_t
test_vcltzd_s64 (int64x1_t a)
{
- return vcltzd_s64 (a);
+ uint64x1_t res;
+ force_simd (a);
+ res = vcltzd_s64 (a);
+ force_simd (res);
+ return res;
}
/* { dg-final { scan-assembler-times "\\tdup\\tb\[0-9\]+, v\[0-9\]+\.b" 2 } } */
@@ -179,13 +242,23 @@ test_vdupd_lane_u64 (uint64x2_t a)
int64x1_t
test_vtst_s64 (int64x1_t a, int64x1_t b)
{
- return vtstd_s64 (a, b);
+ uint64x1_t res;
+ force_simd (a);
+ force_simd (b);
+ res = vtstd_s64 (a, b);
+ force_simd (res);
+ return res;
}
uint64x1_t
test_vtst_u64 (uint64x1_t a, uint64x1_t b)
{
- return vtstd_u64 (a, b);
+ uint64x1_t res;
+ force_simd (a);
+ force_simd (b);
+ res = vtstd_s64 (a, b);
+ force_simd (res);
+ return res;
}
/* { dg-final { scan-assembler-times "\\taddp\\td\[0-9\]+, v\[0-9\]+\.2d" 1 } } */
@@ -722,7 +795,10 @@ test_vrshld_u64 (uint64x1_t a, uint64x1_t b)
return vrshld_u64 (a, b);
}
-/* { dg-final { scan-assembler-times "\\tasr\\tx\[0-9\]+" 1 } } */
+/* Other intrinsics can generate an asr instruction (vcltzd, vcgezd),
+ so we cannot check scan-assembler-times. */
+
+/* { dg-final { scan-assembler "\\tasr\\tx\[0-9\]+" } } */
int64x1_t
test_vshrd_n_s64 (int64x1_t a)
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c b/gcc-4.8/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c
new file mode 100644
index 000000000..5f4c927b6
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c
@@ -0,0 +1,25 @@
+/* Test the `vst1Q_laneu64' ARM Neon intrinsic. */
+
+/* Detect ICE in the case of unaligned memory address. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+
+unsigned char dummy_store[1000];
+
+void
+foo (char* addr)
+{
+ uint8x16_t vdata = vld1q_u8 (addr);
+ vst1q_lane_u64 ((uint64_t*) &dummy_store, vreinterpretq_u64_u8 (vdata), 0);
+}
+
+uint64_t
+bar (uint64x2_t vdata)
+{
+ vdata = vld1q_lane_u64 ((uint64_t*) &dummy_store, vdata, 0);
+ return vgetq_lane_u64 (vdata, 0);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/arm/pr54300.C b/gcc-4.8/gcc/testsuite/gcc.target/arm/pr54300.C
new file mode 100644
index 000000000..eb1a74e36
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/arm/pr54300.C
@@ -0,0 +1,61 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon } */
+/* { dg-options "-O2" } */
+/* { dg-add-options arm_neon } */
+
+#include <arm_neon.h>
+#include <stdlib.h>
+
+struct __attribute__ ((aligned(8))) _v16u8_ {
+ uint8x16_t val;
+ _v16u8_( const int16x8_t &src) { val = vreinterpretq_u8_s16(src); }
+ operator int16x8_t () const { return vreinterpretq_s16_u8(val); }
+};
+typedef struct _v16u8_ v16u8;
+
+struct __attribute__ ((aligned(4))) _v8u8_ {
+ uint8x8_t val;
+ _v8u8_( const uint8x8_t &src) { val = src; }
+ operator int16x4_t () const { return vreinterpret_s16_u8(val); }
+};
+typedef struct _v8u8_ v8u8;
+
+typedef v16u8 v8i16;
+typedef int32x4_t v4i32;
+typedef const short cv1i16;
+typedef const unsigned char cv1u8;
+typedef const v8i16 cv8i16;
+
+static inline __attribute__((always_inline)) v8u8 zero_64(){ return vdup_n_u8( 0 ); }
+
+static inline __attribute__((always_inline)) v8i16 loadlo_8i16( cv8i16* p ){
+ return vcombine_s16( vld1_s16( (cv1i16 *)p ), zero_64() );
+}
+static inline __attribute__((always_inline)) v8i16 _loadlo_8i16( cv8i16* p, int offset ){
+ return loadlo_8i16( (cv8i16*)(&((cv1u8*)p)[offset]) );
+}
+
+void __attribute__((noinline))
+test(unsigned short *_Inp, int32_t *_Out,
+ unsigned int s1v, unsigned int dv0,
+ unsigned int smask_v)
+{
+ int32x4_t c = vdupq_n_s32(0);
+
+ for(unsigned int sv=0 ; sv!=dv0 ; sv=(sv+s1v)&smask_v )
+ {
+ int32x4_t s;
+ s = vmovl_s16( vget_low_s16( _loadlo_8i16( (cv8i16*) _Inp, sv ) ) );
+ c = vaddq_s32( c, s );
+ }
+ vst1q_s32( _Out, c );
+}
+
+main()
+{
+ unsigned short a[4] = {1, 2, 3, 4};
+ int32_t b[4] = {0, 0, 0, 0};
+ test(a, b, 1, 1, ~0);
+ if (b[0] != 1 || b[1] != 2 || b[2] != 3 || b[3] != 4)
+ abort();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/arm/pr57637.c b/gcc-4.8/gcc/testsuite/gcc.target/arm/pr57637.c
new file mode 100644
index 000000000..2b9bfdded
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/arm/pr57637.c
@@ -0,0 +1,206 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-inline" } */
+
+typedef struct _GtkCssStyleProperty GtkCssStyleProperty;
+
+struct _GtkCssStyleProperty
+{
+ int *initial_value;
+ unsigned int id;
+ unsigned int inherit :1;
+ unsigned int animated :1;
+ unsigned int affects_size :1;
+ unsigned int affects_font :1;
+
+ int * parse_value;
+ int * query_value;
+ int * assign_value;
+};
+
+void
+g_assertion_message_expr (const char *domain,
+ const char *file,
+ int line,
+ const char *func,
+ const char *expr) __attribute__((__noreturn__));
+
+void
+g_assertion_message_expr (const char *domain,
+ const char *file,
+ int line,
+ const char *func,
+ const char *expr)
+{
+ __builtin_abort ();
+}
+int
+get_id (GtkCssStyleProperty *property)
+{
+ return 1;
+}
+int
+_gtk_css_style_property_get_type ()
+{
+ return 1;
+}
+
+GtkCssStyleProperty *
+g_object_new (int object_type,
+ const char *first_property_name,
+ ...)
+{
+ return (GtkCssStyleProperty *) __builtin_malloc (sizeof (GtkCssStyleProperty));
+}
+
+typedef enum {
+ INHERIT = (1 << 0),
+ ANIMATED = (1 << 1),
+ RESIZE = (1 << 2),
+ FONT = (1 << 3)
+} GtkStylePropertyFlags;
+
+int t = 0;
+void
+gtk_css_style_property_register (const char * name,
+ int expected_id,
+ int value_type,
+ int flags,
+ int *parse_value,
+ int *query_value,
+ int *assign_value,
+ int *initial_value)
+{
+ GtkCssStyleProperty *node;
+
+ do
+ {
+ if (__builtin_expect (__extension__ (
+ {
+ int _g_boolean_var_;
+ if (initial_value != ((void *)0))
+ _g_boolean_var_ = 1;
+ else
+ _g_boolean_var_ = 0;
+ _g_boolean_var_;
+ }),
+ 1))
+ ;
+ else
+ g_assertion_message_expr ("Gtk",
+ "gtkcssstylepropertyimpl.c",
+ 85,
+ ((const char*) (__PRETTY_FUNCTION__)),
+ "initial_value != NULL");
+ } while (0);
+
+ do
+ {
+ if (__builtin_expect (__extension__ (
+ {
+ int _g_boolean_var_;
+ if (parse_value != ((void *)0))
+ _g_boolean_var_ = 1;
+ else
+ _g_boolean_var_ = 0;
+ _g_boolean_var_;
+ }),
+ 1))
+ ;
+ else
+ g_assertion_message_expr ("Gtk",
+ "gtkcssstylepropertyimpl.c",
+ 86,
+ ((const char*) (__PRETTY_FUNCTION__)),
+ "parse_value != NULL");
+ } while (0);
+
+ do
+ {
+ if (__builtin_expect (__extension__ (
+ {
+ int _g_boolean_var_;
+ if (value_type == ((int) ((1) << (2)))
+ || query_value != ((void *)0))
+ _g_boolean_var_ = 1;
+ else
+ _g_boolean_var_ = 0;
+ _g_boolean_var_;
+ }),
+ 1))
+ ;
+ else
+ g_assertion_message_expr ("Gtk",
+ "gtkcssstylepropertyimpl.c",
+ 87, ((const char*) (__PRETTY_FUNCTION__)),
+ "value_type == NONE || query_value != NULL");
+ } while (0);
+
+ /* FLAGS is changed in a cond_exec instruction with pr57637. */
+ if (flags == 15)
+ t = 15;
+
+ do
+ {
+ if (__builtin_expect (__extension__ (
+ {
+ int _g_boolean_var_;
+ if (value_type == ((1) << (2))
+ || assign_value != ((void *)0))
+ _g_boolean_var_ = 1;
+ else
+ _g_boolean_var_ = 0;
+ _g_boolean_var_;
+ }),
+ 1))
+ ;
+ else
+ g_assertion_message_expr ("Gtk",
+ "gtkcssstylepropertyimpl.c",
+ 88, ((const char*) (__PRETTY_FUNCTION__)),
+ "value_type == NONE || assign_value != NULL");
+ } while (0);
+
+ node = g_object_new ((_gtk_css_style_property_get_type ()),
+ "value-type", value_type,
+ "affects-size", (flags & RESIZE) ? (0) : (!(0)),
+ "affects-font", (flags & FONT) ? (!(0)) : (0),
+ "animated", (flags & ANIMATED) ? (!(0)) : (0),
+ "inherit", (flags & INHERIT) ? (!(0)) : (0),
+ "initial-value", initial_value,
+ "name", name,
+ ((void *)0));
+
+ node->parse_value = parse_value;
+ node->query_value = query_value;
+ node->assign_value = assign_value;
+
+ do
+ {
+ if (__builtin_expect (__extension__ (
+ {
+ int _g_boolean_var_;
+ if (get_id (node) == expected_id)
+ _g_boolean_var_ = 1;
+ else
+ _g_boolean_var_ = 0;
+ _g_boolean_var_;
+ }),
+ 1))
+ ;
+ else
+ g_assertion_message_expr ("Gtk",
+ "gtkcssstylepropertyimpl.c",
+ 106,
+ ((const char*) (__PRETTY_FUNCTION__)),
+ "get_id (node) == expected_id");
+ } while (0);
+}
+
+int main ()
+{
+ gtk_css_style_property_register ("test", 1, 4, 15, &t, &t, &t, &t);
+
+ if (t != 15)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/arm/pr59826.c b/gcc-4.8/gcc/testsuite/gcc.target/arm/pr59826.c
new file mode 100644
index 000000000..b7053e426
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/arm/pr59826.c
@@ -0,0 +1,35 @@
+/* { dg-do compile } */
+/* { dg-options "-mthumb -mcpu=cortex-m4 -fprefetch-loop-arrays -O2" } */
+
+typedef struct genxWriter_rec * genxWriter;
+typedef unsigned char * utf8;
+typedef const unsigned char * constUtf8;
+
+int genxScrubText(genxWriter w, constUtf8 in, utf8 out)
+{
+ int problems = 0;
+ constUtf8 last = in;
+
+ while (*in)
+ {
+ int c = genxNextUnicodeChar(&in);
+ if (c == -1)
+ {
+ problems++;
+ last = in;
+ continue;
+ }
+
+ if (!isXMLChar(w, c))
+ {
+ problems++;
+ last = in;
+ continue;
+ }
+
+ while (last < in)
+ *out++ = *last++;
+ }
+ *out = 0;
+ return problems;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c b/gcc-4.8/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c
new file mode 100644
index 000000000..bd85e8640
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+/* { dg-options "-g -fPIC" } */
+
+void *v;
+void a (void *x) { }
+void b (void) { }
+ /* line 7. */
+int /* line 8. */
+main (int argc) /* line 9. */
+{ /* line 10. */
+ if (argc == 12345) /* line 11. */
+ {
+ a (v);
+ return 1;
+ }
+ b ();
+
+ return 0;
+}
+
+/* { dg-final { scan-assembler-not "\.loc 1 7 0" } } */
+/* { dg-final { scan-assembler-not "\.loc 1 8 0" } } */
+/* { dg-final { scan-assembler-not "\.loc 1 9 0" } } */
+
+/* The loc at the start of the prologue. */
+/* { dg-final { scan-assembler-times "\.loc 1 10 0" 1 } } */
+
+/* The loc at the end of the prologue, with the first user line. */
+/* { dg-final { scan-assembler-times "\.loc 1 11 0" 1 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c b/gcc-4.8/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c
new file mode 100644
index 000000000..df269fc84
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_thumb1_ok } */
+/* { dg-options "-mthumb -fpic -mpic-register=9" } */
+
+int g_test;
+
+int
+foo (int par)
+{
+ g_test = par;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c b/gcc-4.8/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c
new file mode 100644
index 000000000..6e9b2570a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_thumb1_ok } */
+/* { dg-options "-mthumb -fpic -msingle-pic-base" } */
+
+int g_test;
+
+int
+foo (int par)
+{
+ g_test = par;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/arm/vrinta-ce.c b/gcc-4.8/gcc/testsuite/gcc.target/arm/vrinta-ce.c
new file mode 100644
index 000000000..71c5b3b0e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/arm/vrinta-ce.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_v8_vfp_ok } */
+/* { dg-options "-O2 -marm -march=armv8-a" } */
+/* { dg-add-options arm_v8_vfp } */
+
+double foo (double a)
+{
+ if (a > 3.0)
+ return __builtin_round (a);
+
+ return 0.0;
+}
+
+/* { dg-final { scan-assembler-times "vrinta.f64\td\[0-9\]+" 1 } } */
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/avr/pr60991.c b/gcc-4.8/gcc/testsuite/gcc.target/avr/pr60991.c
new file mode 100644
index 000000000..a09f42a62
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/avr/pr60991.c
@@ -0,0 +1,21 @@
+/* { dg-do run } */
+/* { dg-options "-O1" } */
+
+/* This testcase (simplified from the original bug report) exposes
+ PR60991. The code generated for writing the __int24 value corrupts
+ the frame pointer if the offset is <= 63 + MAX_LD_OFFSET */
+
+#include <stdlib.h>
+
+int main(void)
+{
+ volatile char junk[62];
+ junk[0] = 5;
+ volatile __int24 staticConfig = 0;
+
+ if (junk[0] != 5)
+ abort();
+
+ exit(0);
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/avr/torture/pr61055.c b/gcc-4.8/gcc/testsuite/gcc.target/avr/torture/pr61055.c
new file mode 100644
index 000000000..9dd1f427d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/avr/torture/pr61055.c
@@ -0,0 +1,88 @@
+/* { dg-do run } */
+/* { dg-options { -fno-peephole2 } } */
+
+#include <stdlib.h>
+
+typedef __UINT16_TYPE__ uint16_t;
+typedef __INT16_TYPE__ int16_t;
+typedef __UINT8_TYPE__ uint8_t;
+
+uint8_t __attribute__((noinline,noclone))
+fun_inc (uint8_t c0)
+{
+ register uint8_t c asm ("r15") = c0;
+
+ /* Force target value into R15 (lower register) */
+ asm ("" : "+l" (c));
+
+ c++;
+ if (c >= 0x80)
+ c = 0;
+
+ asm ("" : "+l" (c));
+
+ return c;
+}
+
+uint8_t __attribute__((noinline,noclone))
+fun_dec (uint8_t c0)
+{
+ register uint8_t c asm ("r15") = c0;
+
+ /* Force target value into R15 (lower register) */
+ asm ("" : "+l" (c));
+
+ c--;
+ if (c < 0x80)
+ c = 0;
+
+ asm ("" : "+l" (c));
+
+ return c;
+}
+
+
+uint8_t __attribute__((noinline,noclone))
+fun_neg (uint8_t c0)
+{
+ register uint8_t c asm ("r15") = c0;
+
+ c = -c;
+ if (c >= 0x80)
+ c = 0;
+
+ return c;
+}
+
+uint16_t __attribute__((noinline,noclone))
+fun_adiw (uint16_t c0)
+{
+ register uint16_t c asm ("r24") = c0;
+
+ /* Force target value into R24 (for ADIW) */
+ asm ("" : "+r" (c));
+
+ c += 2;
+ if (c >= 0x8000)
+ c = 0;
+
+ asm ("" : "+r" (c));
+
+ return c;
+}
+
+
+int main()
+{
+ if (fun_inc (0x7f) != 0)
+ abort();
+
+ if (fun_neg (0x80) != 0)
+ abort();
+
+ if (fun_adiw (0x7ffe) != 0)
+ abort();
+
+ exit (0);
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c
index d91212283..cc524c8a6 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c
@@ -15,7 +15,7 @@ void static
avx_test (void)
{
union256d u;
- double e [4] __attribute__ ((aligned (8))) = {41124.234,2344.2354,8653.65635,856.43576};
+ double e [4] __attribute__ ((aligned (32))) = {41124.234,2344.2354,8653.65635,856.43576};
u.x = test (e);
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c
index 96a664ac1..9224484ca 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c
@@ -15,7 +15,7 @@ void static
avx_test (void)
{
union256d u;
- double e [4] __attribute__ ((aligned (8))) = {0.0};
+ double e [4] __attribute__ ((aligned (32))) = {0.0};
u.x = _mm256_set_pd (39578.467285, 7856.342941, 85632.783567, 47563.234215);
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/nest-1.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/nest-1.c
new file mode 100644
index 000000000..ba75350fb
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/nest-1.c
@@ -0,0 +1,14 @@
+/* { dg-do compile { target llp64 } } */
+/* { dg-options "" } */
+
+void foo (int i)
+{
+ void nested (void)
+ {
+ char arr[(1U << 31) + 4U];
+ arr[i] = 0;
+ }
+
+ nested ();
+}
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr30315.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr30315.c
index 998d5071e..557b4f751 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr30315.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr30315.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2" } */
-/* { dg-final { scan-assembler-times "cmp" 4 } } */
+/* { dg-final { scan-assembler-not "cmp" } } */
extern void abort (void);
int c;
@@ -34,39 +34,10 @@ void pluscconly##t##C (T a, T b) \
}
#define PLUSCCONLY(T, t) PLUSCCONLY1(T, t, a) PLUSCCONLY1(T, t, b)
-#define MINUSCC(T, t) \
-T minuscc##t (T a, T b) \
-{ \
- T difference = a - b; \
- if (difference > a) \
- abort (); \
- return difference; \
-}
-
-#define DECCC(T, t) \
-T deccc##t (T a, T b) \
-{ \
- T difference = a - b; \
- if (difference > a) \
- c --; \
- return difference; \
-}
-
-#define MINUSCCONLY(T, t) \
-void minuscconly##t (T a, T b) \
-{ \
- T difference = a - b; \
- if (difference > a) \
- abort (); \
-}
-
#define TEST(T, t) \
PLUSCC(T, t) \
PLUSCCONLY(T, t) \
- INCCC(T, t) \
- MINUSCC(T, t) \
- MINUSCCONLY(T, t) \
- DECCC(T, t)
+ INCCC(T, t)
TEST (unsigned long, l)
TEST (unsigned int, i)
@@ -84,14 +55,3 @@ unsigned long pluscczext##C (unsigned int a, unsigned int b) \
PLUSCCZEXT(a)
PLUSCCZEXT(b)
-
-#define MINUSCCZEXT \
-unsigned long minuscczext (unsigned int a, unsigned int b) \
-{ \
- unsigned int difference = a - b; \
- if (difference > a) \
- abort (); \
- return difference; \
-}
-
-MINUSCCZEXT
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr39162.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr39162.c
index c549106ad..efb46deae 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr39162.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr39162.c
@@ -1,11 +1,14 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -Wno-psabi -msse2 -mno-avx" } */
+/* { dg-prune-output "ABI for passing parameters" } */
+/* { dg-options "-O2 -msse2 -mno-avx" } */
/* { dg-additional-options "-mabi=sysv" { target x86_64-*-mingw* } } */
typedef long long __m256i __attribute__ ((__vector_size__ (32), __may_alias__));
-__m256i
+extern __m256i y;
+
+void
bar (__m256i x) /* { dg-warning "AVX" "" } */
{
- return x;
+ y = x;
}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr43546.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr43546.c
new file mode 100644
index 000000000..53cb3a07f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr43546.c
@@ -0,0 +1,12 @@
+/* PR target/43546 */
+/* { dg-do compile } */
+/* { dg-options "-O1" } */
+/* { dg-additional-options "-mpreferred-stack-boundary=2 -msseregparm -msse" { target ia32 } } */
+
+extern void bar (double);
+
+void
+foo (void)
+{
+ bar (1.0);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr54694.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr54694.c
new file mode 100644
index 000000000..bcf82c2a1
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr54694.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O" } */
+
+register void *hfp __asm__("%ebp"); /* { dg-message "note: for" } */
+
+extern void g(void *);
+
+void f(int x) /* { dg-error "frame pointer required" } */
+{
+ g(__builtin_alloca(x));
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr58137.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr58137.c
new file mode 100644
index 000000000..0a7daf83c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr58137.c
@@ -0,0 +1,33 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -mavx2" } */
+
+typedef unsigned int U32;
+
+struct sv {
+ void* sv_any;
+ U32 sv_refcnt;
+ U32 sv_flags;
+};
+typedef struct sv SV;
+
+struct xrv {
+ SV * xrv_rv;
+};
+typedef struct xrv XRV;
+
+extern XRV * PL_xrv_root;
+
+void
+more_xrv (void)
+{
+ register XRV* xrv;
+ register XRV* xrvend;
+ xrv = PL_xrv_root;
+ xrvend = &xrv[200 / sizeof (XRV) - 1];
+ while (xrv < xrvend)
+ {
+ xrv->xrv_rv = (SV*)(xrv + 1);
+ xrv++;
+ }
+ xrv->xrv_rv = 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr58690.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr58690.c
new file mode 100644
index 000000000..87a87cc9c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr58690.c
@@ -0,0 +1,14 @@
+/* { dg-do compile { target { ! { ia32 } } } } */
+/* { dg-require-effective-target maybe_x32 } */
+/* { dg-options "-O2 -mx32 -maddress-mode=short" } */
+
+struct gomp_thread
+{
+ char foo[41];
+};
+extern __thread struct gomp_thread gomp_tls_data;
+void
+foo (void)
+{
+ __builtin_memset (&gomp_tls_data, '\0', sizeof (gomp_tls_data));
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59021.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59021.c
new file mode 100644
index 000000000..a1df27b10
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59021.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mavx -mvzeroupper" } */
+
+extern void abort (void);
+
+struct S {
+ int i1;
+ int i2;
+ int i3;
+};
+
+typedef double v4df __attribute__ ((vector_size (32)));
+
+extern int foo (v4df, int i1, int i2, int i3, int i4, int i5, struct S s);
+
+void bar (v4df v, struct S s)
+{
+ int r = foo (v, 1, 2, 3, 4, 5, s);
+ if (r)
+ abort ();
+}
+
+/* { dg-final { scan-assembler-not "vzeroupper" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59034-1.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59034-1.c
new file mode 100644
index 000000000..1f4c4e04a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59034-1.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { ! { ia32 } } } } */
+/* { dg-require-effective-target maybe_x32 } */
+/* { dg-options "-O -mx32 -mtune=corei7 -maddress-mode=short" } */
+
+extern int foo(int, ...);
+int bar(void) {
+ long double l = 1.2345E6;
+ foo(0, l);
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59034-2.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59034-2.c
new file mode 100644
index 000000000..14e594ba6
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59034-2.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { ! { ia32 } } } } */
+/* { dg-require-effective-target maybe_x32 } */
+/* { dg-options "-O -mx32 -mtune=corei7 -maddress-mode=long" } */
+
+extern int foo(int, ...);
+int bar(void) {
+ long double l = 1.2345E6;
+ foo(0, l);
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59405.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59405.c
new file mode 100644
index 000000000..1136e2e45
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59405.c
@@ -0,0 +1,24 @@
+/* { dg-do run } */
+/* { dg-options "-mmmx -mfpmath=387" } */
+
+#include "mmx-check.h"
+
+#include <mmintrin.h>
+
+typedef float float32x2_t __attribute__ ((vector_size (8)));
+
+float
+foo32x2_be (float32x2_t x)
+{
+ _mm_empty ();
+ return x[1];
+}
+
+static void
+mmx_test (void)
+{
+ float32x2_t b = { 0.0f, 1.0f };
+
+ if (foo32x2_be (b) != 1.0f)
+ abort ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59470.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59470.c
new file mode 100644
index 000000000..0d9952fb4
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59470.c
@@ -0,0 +1,17 @@
+/* PR middle-end/58956 */
+/* PR middle-end/59470 */
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+int a, b, d[1024];
+
+int
+main ()
+{
+ int c = a;
+ asm ("{movl $6, (%2); movl $1, %0|mov dword ptr [%2], 6; mov %0, 1}"
+ : "=r" (d[c]) : "rm" (b), "r" (&a) : "memory");
+ if (d[0] != 1 || d[6] != 0)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59625.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59625.c
new file mode 100644
index 000000000..8e1a7794b
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59625.c
@@ -0,0 +1,36 @@
+/* PR target/59625 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -mtune=atom" } */
+
+int
+foo (void)
+{
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ asm goto ("" : : : : lab);
+ return 0;
+lab:
+ return 1;
+}
+
+/* Verify we don't consider asm goto as a jump for four jumps limit
+ optimization. asm goto doesn't have to contain a jump at all,
+ the branching to labels can happen through different means. */
+/* { dg-final { scan-assembler-not "(p2align\[^\n\r\]*\[\n\r]*\[^\n\r\]*){8}p2align" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-1.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-1.c
new file mode 100644
index 000000000..46bff0181
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-1.c
@@ -0,0 +1,15 @@
+/* PR target/59794 */
+/* { dg-do compile { target { ia32 } } } */
+/* { dg-options "-O2 -mno-mmx" } */
+/* { dg-skip-if "no MMX vector" { *-*-mingw* } } */
+
+typedef int __v2si __attribute__ ((__vector_size__ (8)));
+
+extern __v2si x;
+
+extern void bar (__v2si);
+void
+foo (void)
+{
+ bar (x); /* { dg-message "warning: MMX vector argument without MMX enabled changes the ABI" } */
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-2.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-2.c
new file mode 100644
index 000000000..f13998214
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-2.c
@@ -0,0 +1,15 @@
+/* PR target/59794 */
+/* { dg-prune-output "ABI for passing parameters" } */
+/* { dg-options "-O2 -mno-sse" } */
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
+
+typedef double __v2df __attribute__ ((__vector_size__ (16)));
+
+extern __v2df x;
+
+extern void bar (__v2df);
+void
+foo (void)
+{
+ bar (x); /* { dg-message "warning: SSE vector argument without SSE enabled changes the ABI" } */
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-3.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-3.c
new file mode 100644
index 000000000..a65893c63
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-3.c
@@ -0,0 +1,15 @@
+/* PR target/59794 */
+/* { dg-prune-output "ABI for passing parameters" } */
+/* { dg-options "-O2 -mno-avx" } */
+/* { dg-skip-if "no AVX vector" { *-*-mingw* } } */
+
+typedef int __v8si __attribute__ ((__vector_size__ (32)));
+
+extern __v8si x;
+
+extern void bar (__v8si);
+void
+foo (void)
+{
+ bar (x); /* { dg-message "warning: AVX vector argument without AVX enabled changes the ABI" } */
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-4.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-4.c
new file mode 100644
index 000000000..5ad0b070a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-4.c
@@ -0,0 +1,14 @@
+/* PR target/59794 */
+/* { dg-do compile { target { ia32 } } } */
+/* { dg-options "-O2 -mno-mmx" } */
+/* { dg-skip-if "no MMX vector" { *-*-mingw* } } */
+
+typedef int __v2si __attribute__ ((__vector_size__ (8)));
+
+extern __v2si x;
+
+__v2si
+foo (void)
+{ /* { dg-warning "MMX vector return without MMX enabled changes the ABI" } */
+ return x;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-5.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-5.c
new file mode 100644
index 000000000..24c88be09
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-5.c
@@ -0,0 +1,14 @@
+/* PR target/59794 */
+/* { dg-do compile { target { ia32 } } } */
+/* { dg-options "-O2 -mno-sse" } */
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
+
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
+
+extern __v4si x;
+
+__v4si
+foo (void)
+{ /* { dg-warning "SSE vector return without SSE enabled changes the ABI" } */
+ return x;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-6.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-6.c
new file mode 100644
index 000000000..c809f9579
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-6.c
@@ -0,0 +1,14 @@
+/* PR target/59794 */
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-options "-O2 -mno-sse" } */
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
+
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
+
+extern __v4si x;
+
+__v4si
+foo (void)
+{ /* { dg-error "SSE register return with SSE disabled" } */
+ return x;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-7.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-7.c
new file mode 100644
index 000000000..57fd3d276
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59794-7.c
@@ -0,0 +1,13 @@
+/* PR target/59794 */
+/* { dg-options "-O2 -mno-avx" } */
+/* { dg-skip-if "no AVX vector" { *-*-mingw* } } */
+
+typedef int __v8si __attribute__ ((__vector_size__ (32)));
+
+extern __v8si x;
+
+__v8si
+foo (void)
+{ /* { dg-warning "AVX vector return without AVX enabled changes the ABI" } */
+ return x;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59839.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59839.c
new file mode 100644
index 000000000..dfb89456f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59839.c
@@ -0,0 +1,12 @@
+/* PR target/59839 */
+/* { dg-do compile } */
+/* { dg-options "-O0 -mavx2" } */
+
+#include <x86intrin.h>
+
+void
+test (const float *x)
+{
+ __m256i i = _mm256_set1_epi32 (1);
+ __m256 d = _mm256_i32gather_ps (x, i, 1);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59929.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59929.c
new file mode 100644
index 000000000..4591dc4d6
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr59929.c
@@ -0,0 +1,55 @@
+/* { dg-do run } */
+/* { dg-options "-O0 -mno-accumulate-outgoing-args" } */
+/* { dg-options "-O0 -mno-accumulate-outgoing-args -mx32 -maddress-mode=short" { target x32 } } */
+
+void
+__attribute__ ((noinline))
+test (float x1, float x2, float x3, float x4, float x5, float x6,
+ float x7, float x8, float x9, float x10, float x11, float x12,
+ float x13, float x14, float x15, float x16)
+{
+ if (x1 != 91
+ || x2 != 92
+ || x3 != 93
+ || x4 != 94
+ || x5 != 95
+ || x6 != 96
+ || x7 != 97
+ || x8 != 98
+ || x9 != 99
+ || x10 != 100
+ || x11 != 101
+ || x12 != 102
+ || x13 != 103
+ || x14 != 104
+ || x15 != 105
+ || x16 != 106)
+ __builtin_abort ();
+}
+
+float x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
+ x14, x15, x16;
+
+int
+main ()
+{
+ x1 = 91;
+ x2 = 92;
+ x3 = 93;
+ x4 = 94;
+ x5 = 95;
+ x6 = 96;
+ x7 = 97;
+ x8 = 98;
+ x9 = 99;
+ x10 = 100;
+ x11 = 101;
+ x12 = 102;
+ x13 = 103;
+ x14 = 104;
+ x15 = 105;
+ x16 = 106;
+ test (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
+ x14, x15, x16);
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60516.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60516.c
new file mode 100644
index 000000000..575c8b61d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60516.c
@@ -0,0 +1,20 @@
+/* PR target/60516 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+struct S { char c[65536]; };
+
+__attribute__((ms_abi, thiscall)) void
+foo (void *x, struct S y)
+{
+}
+
+__attribute__((ms_abi, fastcall)) void
+bar (void *x, void *y, struct S z)
+{
+}
+
+__attribute__((ms_abi, stdcall)) void
+baz (struct S x)
+{
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60693.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60693.c
new file mode 100644
index 000000000..e6033a783
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60693.c
@@ -0,0 +1,13 @@
+/* PR target/60693 */
+/* { dg-do compile } */
+/* { dg-options "-O0" } */
+
+void bar (char *);
+
+void
+foo (void)
+{
+ char buf[4096];
+ __builtin_memcpy (buf, (void *) 0x8000, 4096);
+ bar (buf);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60700.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60700.c
new file mode 100644
index 000000000..5428f3616
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60700.c
@@ -0,0 +1,59 @@
+/* PR rtl-optimization/60700 */
+/* { dg-do run { target ia32 } } */
+/* { dg-options "-O3 -march=i686" } */
+
+int
+__attribute__((noinline))
+foo (void)
+{
+ return 0;
+}
+
+void *g = (void *)1;
+
+struct st {
+ char data[36]; /* must be greater than 32. */
+};
+
+int
+__attribute__((noinline))
+repro(struct st **out)
+{
+ int status = 0;
+
+ *out = 0;
+
+ status = foo();
+ if (status != 0) {
+ return status;
+ }
+
+ if (0 == g) {
+ status = 999;
+ return status;
+ }
+
+ *out = (struct st *)__builtin_malloc(sizeof(struct st));
+ if (0 == *out) {
+ status = 42;
+ return status;
+ }
+
+ __builtin_memset(*out, 0, sizeof(struct st));
+
+ return status;
+}
+
+int
+main ()
+{
+ struct st *p;
+ int ret = repro (&p);
+ unsigned int i;
+
+ for (i = 0; i < sizeof (p->data)/sizeof (p->data[0]); i++)
+ if (p->data[i] != 0)
+ __builtin_abort ();
+
+ return ret;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60909-1.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60909-1.c
new file mode 100644
index 000000000..5a1ac3c0f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60909-1.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-mrdrnd" } */
+
+extern void bar (int);
+
+void
+foo (unsigned *u)
+{
+ int i = __builtin_ia32_rdrand32_step (u);
+ bar (i);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60909-2.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60909-2.c
new file mode 100644
index 000000000..dd356685b
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr60909-2.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-mrdseed" } */
+
+extern void bar (int);
+
+void
+foo (unsigned *u)
+{
+ int i = __builtin_ia32_rdseed_si_step (u);
+ bar (i);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr9771-1.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr9771-1.c
index 38586fe97..daad319c3 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr9771-1.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr9771-1.c
@@ -45,7 +45,17 @@ void test(void)
exit(0);
}
-int main()
+/* main usually performs dynamic realignment of the stack in case
+ _start would fail to properly align the stack, but for dynamic
+ stack realignment we need frame pointer which is incompatible
+ with -ffixed-ebp and the global register var. So, cheat here
+ and hide from the compiler that main is really main. */
+#define ASMNAME(cname) ASMNAME2 (__USER_LABEL_PREFIX__, cname)
+#define ASMNAME2(prefix, cname) STRING (prefix) cname
+#define STRING(x) #x
+int real_main() __asm (ASMNAME ("main"));
+
+int real_main()
{
test();
return 0;
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c
index b8b9dba0c..55d9f594f 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c
@@ -25,7 +25,7 @@ static void
TEST (void)
{
union128d u;
- double e[2] __attribute__ ((aligned (8))) = {2134.3343,1234.635654};
+ double e[2] __attribute__ ((aligned (16))) = {2134.3343,1234.635654};
u.x = test (e);
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c
index 8298551ba..87da33277 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c
@@ -25,7 +25,7 @@ static void
TEST (void)
{
union128d u;
- double e[2] __attribute__ ((aligned (8))) = {0.0};
+ double e[2] __attribute__ ((aligned (16))) = {0.0};
u.x = _mm_set_pd (2134.3343,1234.635654);
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/xop-frczX.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/xop-frczX.c
new file mode 100644
index 000000000..931b5ce39
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/xop-frczX.c
@@ -0,0 +1,60 @@
+/* { dg-do run } */
+/* { dg-require-effective-target xop } */
+/* { dg-options "-O2 -mxop" } */
+
+#include "xop-check.h"
+
+#include <x86intrin.h>
+
+void
+check_mm_vmfrcz_sd (__m128d __A, __m128d __B)
+{
+ union128d a, b, c;
+ double d[2];
+
+ a.x = __A;
+ b.x = __B;
+ c.x = _mm_frcz_sd (__A, __B);
+ d[0] = b.a[0] - (int)b.a[0] ;
+ d[1] = a.a[1];
+ if (check_union128d (c, d))
+ abort ();
+}
+
+void
+check_mm_vmfrcz_ss (__m128 __A, __m128 __B)
+{
+ union128 a, b, c;
+ float f[4];
+
+ a.x = __A;
+ b.x = __B;
+ c.x = _mm_frcz_ss (__A, __B);
+ f[0] = b.a[0] - (int)b.a[0] ;
+ f[1] = a.a[1];
+ f[2] = a.a[2];
+ f[3] = a.a[3];
+ if (check_union128 (c, f))
+ abort ();
+}
+
+static void
+xop_test (void)
+{
+ union128 a, b;
+ union128d c,d;
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ a.a[i] = i + 3.5;
+ b.a[i] = i + 7.9;
+ }
+ for (i = 0; i < 2; i++)
+ {
+ c.a[i] = i + 3.5;
+ d.a[i] = i + 7.987654321;
+ }
+ check_mm_vmfrcz_ss (a.x, b.x);
+ check_mm_vmfrcz_sd (c.x, d.x);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c b/gcc-4.8/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c
new file mode 100644
index 000000000..79cc5f9dd
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c
@@ -0,0 +1,9 @@
+/* { dg-options "-O3 -mcpu=v6.00.a -mhard-float" } */
+
+void float_func(float f1, float f2, float f3)
+{
+ /* { dg-final { scan-assembler "fcmp\.eq\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */
+ /* { dg-final { scan-assembler "fcmp\.le\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */
+ if(f1==f2 && f1<=f3)
+ print ("f1 eq f2 && f1 le f3");
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c b/gcc-4.8/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c
new file mode 100644
index 000000000..fdcde1fa7
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+
+void trap ()
+{
+ __builtin_trap ();
+}
+
+/* { dg-final { scan-assembler "brki\tr0,-1" } } */ \ No newline at end of file
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c b/gcc-4.8/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c
new file mode 100644
index 000000000..e285fb821
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c
@@ -0,0 +1,74 @@
+/* { dg-options "-O2 -fPIC" } */
+
+typedef struct test_struct
+{
+ unsigned long long h[8];
+ unsigned long long Nl,Nh;
+ union {
+ unsigned long long d[16];
+ unsigned char p[(16*8)];
+ } u;
+ unsigned int num,md_len;
+} TEST_STRUCT;
+
+static const unsigned long long K512[12] = {
+ 0x428a2f98d728ae22,0x7137449123ef65cd,
+ 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc,
+ 0x3956c25bf348b538,0x59f111f1b605d019,
+ 0x923f82a4af194f9b,0xab1c5ed5da6d8118,
+ 0xd807aa98a3030242,0x12835b0145706fbe,
+ 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2};
+
+#define ROTR(x,s) (((x)>>s) | (x)<<(64-s))
+#define Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
+#define Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))
+#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z)))
+#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
+
+#define ROUND_00_15(i,a,b,c,d,e,f,g,h) do { \
+ T1 += h + Sigma1(e) + Ch(e,f,g) + K512[i]; \
+ h = Sigma0(a) + Maj(a,b,c); \
+ d += T1; h += T1; } while (0)
+
+#define ROUND_16_80(i,a,b,c,d,e,f,g,h,X) do { \
+ T1 = X[(i)&0x0f] += s0 + s1 + X[(i+9)&0x0f]; \
+ ROUND_00_15(i,a,b,c,d,e,f,g,h); } while (0)
+
+static void testfunc1 (TEST_STRUCT *ctx, const void *in, unsigned int num)
+{
+ const unsigned long long *W=in;
+ unsigned long long a,b,c,d,e,f,g,h,s0,s1,T1;
+ unsigned long long X[16];
+ int i;
+
+ while (num--) {
+
+ T1 = X[0] = W[0]; ROUND_00_15(0,a,b,c,d,e,f,g,h);
+ T1 = X[1] = W[1]; ROUND_00_15(1,h,a,b,c,d,e,f,g);
+ T1 = X[2] = W[2]; ROUND_00_15(2,g,h,a,b,c,d,e,f);
+ T1 = X[3] = W[3]; ROUND_00_15(3,f,g,h,a,b,c,d,e);
+ T1 = X[4] = W[4]; ROUND_00_15(4,e,f,g,h,a,b,c,d);
+ T1 = X[5] = W[5]; ROUND_00_15(5,d,e,f,g,h,a,b,c);
+ T1 = X[6] = W[6]; ROUND_00_15(6,c,d,e,f,g,h,a,b);
+ T1 = X[7] = W[7]; ROUND_00_15(7,b,c,d,e,f,g,h,a);
+ T1 = X[8] = W[8]; ROUND_00_15(8,a,b,c,d,e,f,g,h);
+ T1 = X[9] = W[9]; ROUND_00_15(9,h,a,b,c,d,e,f,g);
+
+ for (i=16;i<80;i+=8)
+ {
+ ROUND_16_80(i+0,a,b,c,d,e,f,g,h,X);
+ }
+
+ ctx->h[4] += e; ctx->h[5] += f; ctx->h[6] += g; ctx->h[7] += h;
+ }
+}
+
+int testfunc2 (TEST_STRUCT *c, const void *_data, unsigned int len)
+{
+ const unsigned char *data=(const unsigned char *)_data;
+
+ unsigned char *p=(unsigned char *)c->u.p;
+
+ testfunc1 (c,p,0);
+ testfunc1 (c,data,len/sizeof(c->u));
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-1.c b/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-1.c
new file mode 100644
index 000000000..24016f269
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-1.c
@@ -0,0 +1,10 @@
+/* { dg-options "isa_rev>=2" } */
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
+
+NOMIPS16 unsigned short
+foo (unsigned short x)
+{
+ return ((x << 8) & 0xff00) | ((x >> 8) & 0xff);
+}
+
+/* { dg-final { scan-assembler "\twsbh\t" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-2.c b/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-2.c
new file mode 100644
index 000000000..e0ca496b6
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-2.c
@@ -0,0 +1,9 @@
+/* { dg-options "isa_rev>=2" } */
+
+NOMIPS16 unsigned short
+foo (unsigned short x)
+{
+ return __builtin_bswap16 (x);
+}
+
+/* { dg-final { scan-assembler "\twsbh\t" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-3.c b/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-3.c
new file mode 100644
index 000000000..5d2086fd3
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-3.c
@@ -0,0 +1,14 @@
+/* { dg-options "isa_rev>=2" } */
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
+
+NOMIPS16 unsigned int
+foo (unsigned int x)
+{
+ return (((x << 24) & 0xff000000)
+ | ((x << 8) & 0xff0000)
+ | ((x >> 8) & 0xff00)
+ | ((x >> 24) & 0xff));
+}
+
+/* { dg-final { scan-assembler "\twsbh\t" } } */
+/* { dg-final { scan-assembler "\tror\t" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-4.c b/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-4.c
new file mode 100644
index 000000000..ac37a0114
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-4.c
@@ -0,0 +1,10 @@
+/* { dg-options "isa_rev>=2" } */
+
+NOMIPS16 unsigned int
+foo (unsigned int x)
+{
+ return __builtin_bswap32 (x);
+}
+
+/* { dg-final { scan-assembler "\twsbh\t" } } */
+/* { dg-final { scan-assembler "\tror\t" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-5.c b/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-5.c
new file mode 100644
index 000000000..45520e4ab
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-5.c
@@ -0,0 +1,20 @@
+/* { dg-options "isa_rev>=2 -mgp64" } */
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
+
+typedef unsigned long long uint64_t;
+
+NOMIPS16 uint64_t
+foo (uint64_t x)
+{
+ return (((x << 56) & 0xff00000000000000ull)
+ | ((x << 40) & 0xff000000000000ull)
+ | ((x << 24) & 0xff0000000000ull)
+ | ((x << 8) & 0xff00000000ull)
+ | ((x >> 8) & 0xff000000)
+ | ((x >> 24) & 0xff0000)
+ | ((x >> 40) & 0xff00)
+ | ((x >> 56) & 0xff));
+}
+
+/* { dg-final { scan-assembler "\tdsbh\t" } } */
+/* { dg-final { scan-assembler "\tdshd\t" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-6.c b/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-6.c
new file mode 100644
index 000000000..1145357fe
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/mips/bswap-6.c
@@ -0,0 +1,12 @@
+/* { dg-options "isa_rev>=2 -mgp64" } */
+
+typedef unsigned long long uint64_t;
+
+NOMIPS16 uint64_t
+foo (uint64_t x)
+{
+ return __builtin_bswap64 (x);
+}
+
+/* { dg-final { scan-assembler "\tdsbh\t" } } */
+/* { dg-final { scan-assembler "\tdshd\t" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/mips/pr59137.c b/gcc-4.8/gcc/testsuite/gcc.target/mips/pr59137.c
new file mode 100644
index 000000000..898650656
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/mips/pr59137.c
@@ -0,0 +1,34 @@
+/* { dg-do run } */
+/* { dg-options "-mno-plt" } */
+
+extern void abort (void);
+
+struct lispstruct
+{
+ int e;
+ int t;
+};
+
+struct lispstruct Cnil_body;
+struct lispstruct Ct_body;
+int nvalues;
+
+struct lispstruct * __attribute__ ((noinline))
+fLlistp (struct lispstruct *x0)
+{
+ if (x0 == &Cnil_body
+ || (((unsigned long) x0 >= 0x80000000) ? 0
+ : (!x0->e ? (x0 != &Cnil_body) : x0->t)))
+ x0 = &Ct_body;
+ else
+ x0 = &Cnil_body;
+ nvalues = 1;
+ return x0;
+}
+
+int main ()
+{
+ if (fLlistp ((struct lispstruct *) 0xa0000001) != &Cnil_body)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/altivec-perm-1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/altivec-perm-1.c
index ee5c5eee9..c3cf67e44 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/altivec-perm-1.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/altivec-perm-1.c
@@ -19,19 +19,6 @@ V b4(V x)
return __builtin_shuffle(x, (V){ 4,5,6,7, 4,5,6,7, 4,5,6,7, 4,5,6,7, });
}
-V p2(V x, V y)
-{
- return __builtin_shuffle(x, y,
- (V){ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 });
-
-}
-
-V p4(V x, V y)
-{
- return __builtin_shuffle(x, y,
- (V){ 2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31 });
-}
-
V h1(V x, V y)
{
return __builtin_shuffle(x, y,
@@ -72,5 +59,3 @@ V l4(V x, V y)
/* { dg-final { scan-assembler "vspltb" } } */
/* { dg-final { scan-assembler "vsplth" } } */
/* { dg-final { scan-assembler "vspltw" } } */
-/* { dg-final { scan-assembler "vpkuhum" } } */
-/* { dg-final { scan-assembler "vpkuwum" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/altivec-perm-3.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/altivec-perm-3.c
new file mode 100644
index 000000000..d0b671eac
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/altivec-perm-3.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-skip-if "" { powerpc*le-*-* } { "*" } { "" } } */
+/* { dg-options "-O -maltivec -mno-vsx" } */
+
+typedef unsigned char V __attribute__((vector_size(16)));
+
+V p2(V x, V y)
+{
+ return __builtin_shuffle(x, y,
+ (V){ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 });
+
+}
+
+V p4(V x, V y)
+{
+ return __builtin_shuffle(x, y,
+ (V){ 2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31 });
+}
+
+/* { dg-final { scan-assembler-not "vperm" } } */
+/* { dg-final { scan-assembler "vpkuhum" } } */
+/* { dg-final { scan-assembler "vpkuwum" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/atomic-p7.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/atomic-p7.c
new file mode 100644
index 000000000..3442bfba4
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/atomic-p7.c
@@ -0,0 +1,207 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mcpu=power7 -O2" } */
+/* { dg-final { scan-assembler-not "lbarx" } } */
+/* { dg-final { scan-assembler-not "lharx" } } */
+/* { dg-final { scan-assembler-times "lwarx" 18 } } */
+/* { dg-final { scan-assembler-times "ldarx" 6 } } */
+/* { dg-final { scan-assembler-not "lqarx" } } */
+/* { dg-final { scan-assembler-not "stbcx" } } */
+/* { dg-final { scan-assembler-not "sthcx" } } */
+/* { dg-final { scan-assembler-times "stwcx" 18 } } */
+/* { dg-final { scan-assembler-times "stdcx" 6 } } */
+/* { dg-final { scan-assembler-not "stqcx" } } */
+/* { dg-final { scan-assembler-times "bl __atomic" 6 } } */
+/* { dg-final { scan-assembler-times "isync" 12 } } */
+/* { dg-final { scan-assembler-times "lwsync" 8 } } */
+/* { dg-final { scan-assembler-not "mtvsrd" } } */
+/* { dg-final { scan-assembler-not "mtvsrwa" } } */
+/* { dg-final { scan-assembler-not "mtvsrwz" } } */
+/* { dg-final { scan-assembler-not "mfvsrd" } } */
+/* { dg-final { scan-assembler-not "mfvsrwz" } } */
+
+/* Test for the byte atomic operations on power8 using lbarx/stbcx. */
+char
+char_fetch_add_relaxed (char *ptr, int value)
+{
+ return __atomic_fetch_add (ptr, value, __ATOMIC_RELAXED);
+}
+
+char
+char_fetch_sub_consume (char *ptr, int value)
+{
+ return __atomic_fetch_sub (ptr, value, __ATOMIC_CONSUME);
+}
+
+char
+char_fetch_and_acquire (char *ptr, int value)
+{
+ return __atomic_fetch_and (ptr, value, __ATOMIC_ACQUIRE);
+}
+
+char
+char_fetch_ior_release (char *ptr, int value)
+{
+ return __atomic_fetch_or (ptr, value, __ATOMIC_RELEASE);
+}
+
+char
+char_fetch_xor_acq_rel (char *ptr, int value)
+{
+ return __atomic_fetch_xor (ptr, value, __ATOMIC_ACQ_REL);
+}
+
+char
+char_fetch_nand_seq_cst (char *ptr, int value)
+{
+ return __atomic_fetch_nand (ptr, value, __ATOMIC_SEQ_CST);
+}
+
+/* Test for the half word atomic operations on power8 using lharx/sthcx. */
+short
+short_fetch_add_relaxed (short *ptr, int value)
+{
+ return __atomic_fetch_add (ptr, value, __ATOMIC_RELAXED);
+}
+
+short
+short_fetch_sub_consume (short *ptr, int value)
+{
+ return __atomic_fetch_sub (ptr, value, __ATOMIC_CONSUME);
+}
+
+short
+short_fetch_and_acquire (short *ptr, int value)
+{
+ return __atomic_fetch_and (ptr, value, __ATOMIC_ACQUIRE);
+}
+
+short
+short_fetch_ior_release (short *ptr, int value)
+{
+ return __atomic_fetch_or (ptr, value, __ATOMIC_RELEASE);
+}
+
+short
+short_fetch_xor_acq_rel (short *ptr, int value)
+{
+ return __atomic_fetch_xor (ptr, value, __ATOMIC_ACQ_REL);
+}
+
+short
+short_fetch_nand_seq_cst (short *ptr, int value)
+{
+ return __atomic_fetch_nand (ptr, value, __ATOMIC_SEQ_CST);
+}
+
+/* Test for the word atomic operations on power8 using lwarx/stwcx. */
+int
+int_fetch_add_relaxed (int *ptr, int value)
+{
+ return __atomic_fetch_add (ptr, value, __ATOMIC_RELAXED);
+}
+
+int
+int_fetch_sub_consume (int *ptr, int value)
+{
+ return __atomic_fetch_sub (ptr, value, __ATOMIC_CONSUME);
+}
+
+int
+int_fetch_and_acquire (int *ptr, int value)
+{
+ return __atomic_fetch_and (ptr, value, __ATOMIC_ACQUIRE);
+}
+
+int
+int_fetch_ior_release (int *ptr, int value)
+{
+ return __atomic_fetch_or (ptr, value, __ATOMIC_RELEASE);
+}
+
+int
+int_fetch_xor_acq_rel (int *ptr, int value)
+{
+ return __atomic_fetch_xor (ptr, value, __ATOMIC_ACQ_REL);
+}
+
+int
+int_fetch_nand_seq_cst (int *ptr, int value)
+{
+ return __atomic_fetch_nand (ptr, value, __ATOMIC_SEQ_CST);
+}
+
+/* Test for the double word atomic operations on power8 using ldarx/stdcx. */
+long
+long_fetch_add_relaxed (long *ptr, long value)
+{
+ return __atomic_fetch_add (ptr, value, __ATOMIC_RELAXED);
+}
+
+long
+long_fetch_sub_consume (long *ptr, long value)
+{
+ return __atomic_fetch_sub (ptr, value, __ATOMIC_CONSUME);
+}
+
+long
+long_fetch_and_acquire (long *ptr, long value)
+{
+ return __atomic_fetch_and (ptr, value, __ATOMIC_ACQUIRE);
+}
+
+long
+long_fetch_ior_release (long *ptr, long value)
+{
+ return __atomic_fetch_or (ptr, value, __ATOMIC_RELEASE);
+}
+
+long
+long_fetch_xor_acq_rel (long *ptr, long value)
+{
+ return __atomic_fetch_xor (ptr, value, __ATOMIC_ACQ_REL);
+}
+
+long
+long_fetch_nand_seq_cst (long *ptr, long value)
+{
+ return __atomic_fetch_nand (ptr, value, __ATOMIC_SEQ_CST);
+}
+
+/* Test for the quad word atomic operations on power8 using ldarx/stdcx. */
+__int128_t
+quad_fetch_add_relaxed (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_add (ptr, value, __ATOMIC_RELAXED);
+}
+
+__int128_t
+quad_fetch_sub_consume (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_sub (ptr, value, __ATOMIC_CONSUME);
+}
+
+__int128_t
+quad_fetch_and_acquire (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_and (ptr, value, __ATOMIC_ACQUIRE);
+}
+
+__int128_t
+quad_fetch_ior_release (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_or (ptr, value, __ATOMIC_RELEASE);
+}
+
+__int128_t
+quad_fetch_xor_acq_rel (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_xor (ptr, value, __ATOMIC_ACQ_REL);
+}
+
+__int128_t
+quad_fetch_nand_seq_cst (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_nand (ptr, value, __ATOMIC_SEQ_CST);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/atomic-p8.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/atomic-p8.c
new file mode 100644
index 000000000..17460ac4c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/atomic-p8.c
@@ -0,0 +1,237 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2" } */
+/* { dg-final { scan-assembler-times "lbarx" 7 } } */
+/* { dg-final { scan-assembler-times "lharx" 7 } } */
+/* { dg-final { scan-assembler-times "lwarx" 7 } } */
+/* { dg-final { scan-assembler-times "ldarx" 7 } } */
+/* { dg-final { scan-assembler-times "lqarx" 7 } } */
+/* { dg-final { scan-assembler-times "stbcx" 7 } } */
+/* { dg-final { scan-assembler-times "sthcx" 7 } } */
+/* { dg-final { scan-assembler-times "stwcx" 7 } } */
+/* { dg-final { scan-assembler-times "stdcx" 7 } } */
+/* { dg-final { scan-assembler-times "stqcx" 7 } } */
+/* { dg-final { scan-assembler-not "bl __atomic" } } */
+/* { dg-final { scan-assembler-times "isync" 20 } } */
+/* { dg-final { scan-assembler-times "lwsync" 10 } } */
+/* { dg-final { scan-assembler-not "mtvsrd" } } */
+/* { dg-final { scan-assembler-not "mtvsrwa" } } */
+/* { dg-final { scan-assembler-not "mtvsrwz" } } */
+/* { dg-final { scan-assembler-not "mfvsrd" } } */
+/* { dg-final { scan-assembler-not "mfvsrwz" } } */
+
+/* Test for the byte atomic operations on power8 using lbarx/stbcx. */
+char
+char_fetch_add_relaxed (char *ptr, int value)
+{
+ return __atomic_fetch_add (ptr, value, __ATOMIC_RELAXED);
+}
+
+char
+char_fetch_sub_consume (char *ptr, int value)
+{
+ return __atomic_fetch_sub (ptr, value, __ATOMIC_CONSUME);
+}
+
+char
+char_fetch_and_acquire (char *ptr, int value)
+{
+ return __atomic_fetch_and (ptr, value, __ATOMIC_ACQUIRE);
+}
+
+char
+char_fetch_ior_release (char *ptr, int value)
+{
+ return __atomic_fetch_or (ptr, value, __ATOMIC_RELEASE);
+}
+
+char
+char_fetch_xor_acq_rel (char *ptr, int value)
+{
+ return __atomic_fetch_xor (ptr, value, __ATOMIC_ACQ_REL);
+}
+
+char
+char_fetch_nand_seq_cst (char *ptr, int value)
+{
+ return __atomic_fetch_nand (ptr, value, __ATOMIC_SEQ_CST);
+}
+
+void
+char_val_compare_and_swap (char *p, int i, int j, char *q)
+{
+ *q = __sync_val_compare_and_swap (p, i, j);
+}
+
+/* Test for the half word atomic operations on power8 using lharx/sthcx. */
+short
+short_fetch_add_relaxed (short *ptr, int value)
+{
+ return __atomic_fetch_add (ptr, value, __ATOMIC_RELAXED);
+}
+
+short
+short_fetch_sub_consume (short *ptr, int value)
+{
+ return __atomic_fetch_sub (ptr, value, __ATOMIC_CONSUME);
+}
+
+short
+short_fetch_and_acquire (short *ptr, int value)
+{
+ return __atomic_fetch_and (ptr, value, __ATOMIC_ACQUIRE);
+}
+
+short
+short_fetch_ior_release (short *ptr, int value)
+{
+ return __atomic_fetch_or (ptr, value, __ATOMIC_RELEASE);
+}
+
+short
+short_fetch_xor_acq_rel (short *ptr, int value)
+{
+ return __atomic_fetch_xor (ptr, value, __ATOMIC_ACQ_REL);
+}
+
+short
+short_fetch_nand_seq_cst (short *ptr, int value)
+{
+ return __atomic_fetch_nand (ptr, value, __ATOMIC_SEQ_CST);
+}
+
+void
+short_val_compare_and_swap (short *p, int i, int j, short *q)
+{
+ *q = __sync_val_compare_and_swap (p, i, j);
+}
+
+/* Test for the word atomic operations on power8 using lwarx/stwcx. */
+int
+int_fetch_add_relaxed (int *ptr, int value)
+{
+ return __atomic_fetch_add (ptr, value, __ATOMIC_RELAXED);
+}
+
+int
+int_fetch_sub_consume (int *ptr, int value)
+{
+ return __atomic_fetch_sub (ptr, value, __ATOMIC_CONSUME);
+}
+
+int
+int_fetch_and_acquire (int *ptr, int value)
+{
+ return __atomic_fetch_and (ptr, value, __ATOMIC_ACQUIRE);
+}
+
+int
+int_fetch_ior_release (int *ptr, int value)
+{
+ return __atomic_fetch_or (ptr, value, __ATOMIC_RELEASE);
+}
+
+int
+int_fetch_xor_acq_rel (int *ptr, int value)
+{
+ return __atomic_fetch_xor (ptr, value, __ATOMIC_ACQ_REL);
+}
+
+int
+int_fetch_nand_seq_cst (int *ptr, int value)
+{
+ return __atomic_fetch_nand (ptr, value, __ATOMIC_SEQ_CST);
+}
+
+void
+int_val_compare_and_swap (int *p, int i, int j, int *q)
+{
+ *q = __sync_val_compare_and_swap (p, i, j);
+}
+
+/* Test for the double word atomic operations on power8 using ldarx/stdcx. */
+long
+long_fetch_add_relaxed (long *ptr, long value)
+{
+ return __atomic_fetch_add (ptr, value, __ATOMIC_RELAXED);
+}
+
+long
+long_fetch_sub_consume (long *ptr, long value)
+{
+ return __atomic_fetch_sub (ptr, value, __ATOMIC_CONSUME);
+}
+
+long
+long_fetch_and_acquire (long *ptr, long value)
+{
+ return __atomic_fetch_and (ptr, value, __ATOMIC_ACQUIRE);
+}
+
+long
+long_fetch_ior_release (long *ptr, long value)
+{
+ return __atomic_fetch_or (ptr, value, __ATOMIC_RELEASE);
+}
+
+long
+long_fetch_xor_acq_rel (long *ptr, long value)
+{
+ return __atomic_fetch_xor (ptr, value, __ATOMIC_ACQ_REL);
+}
+
+long
+long_fetch_nand_seq_cst (long *ptr, long value)
+{
+ return __atomic_fetch_nand (ptr, value, __ATOMIC_SEQ_CST);
+}
+
+void
+long_val_compare_and_swap (long *p, long i, long j, long *q)
+{
+ *q = __sync_val_compare_and_swap (p, i, j);
+}
+
+/* Test for the quad word atomic operations on power8 using ldarx/stdcx. */
+__int128_t
+quad_fetch_add_relaxed (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_add (ptr, value, __ATOMIC_RELAXED);
+}
+
+__int128_t
+quad_fetch_sub_consume (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_sub (ptr, value, __ATOMIC_CONSUME);
+}
+
+__int128_t
+quad_fetch_and_acquire (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_and (ptr, value, __ATOMIC_ACQUIRE);
+}
+
+__int128_t
+quad_fetch_ior_release (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_or (ptr, value, __ATOMIC_RELEASE);
+}
+
+__int128_t
+quad_fetch_xor_acq_rel (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_xor (ptr, value, __ATOMIC_ACQ_REL);
+}
+
+__int128_t
+quad_fetch_nand_seq_cst (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_nand (ptr, value, __ATOMIC_SEQ_CST);
+}
+
+void
+quad_val_compare_and_swap (__int128_t *p, __int128_t i, __int128_t j, __int128_t *q)
+{
+ *q = __sync_val_compare_and_swap (p, i, j);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/atomic_load_store-p8.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/atomic_load_store-p8.c
new file mode 100644
index 000000000..8a5cbfaa3
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/atomic_load_store-p8.c
@@ -0,0 +1,22 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2" } */
+/* { dg-final { scan-assembler-times "lq" 1 } } */
+/* { dg-final { scan-assembler-times "stq" 1 } } */
+/* { dg-final { scan-assembler-not "bl __atomic" } } */
+/* { dg-final { scan-assembler-not "lqarx" } } */
+/* { dg-final { scan-assembler-not "stqcx" } } */
+
+__int128
+atomic_load_128_relaxed (__int128 *ptr)
+{
+ return __atomic_load_n (ptr, __ATOMIC_RELAXED);
+}
+
+void
+atomic_store_128_relaxed (__int128 *ptr, __int128 val)
+{
+ __atomic_store_n (ptr, val, __ATOMIC_RELAXED);
+}
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bcd-1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bcd-1.c
new file mode 100644
index 000000000..c7496c235
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bcd-1.c
@@ -0,0 +1,27 @@
+/* { dg-do compile { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mcpu=power7 -O2" } */
+/* { dg-final { scan-assembler-times "cdtbcd " 1 } } */
+/* { dg-final { scan-assembler-times "cbcdtd " 1 } } */
+/* { dg-final { scan-assembler-times "addg6s " 1 } } */
+/* { dg-final { scan-assembler-not "bl __builtin" } } */
+
+unsigned int
+to_bcd (unsigned int a)
+{
+ return __builtin_cdtbcd (a);
+}
+
+unsigned int
+from_bcd (unsigned int a)
+{
+ return __builtin_cbcdtd (a);
+}
+
+unsigned int
+bcd_arith (unsigned int a, unsigned int b)
+{
+ return __builtin_addg6s (a, b);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bcd-2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bcd-2.c
new file mode 100644
index 000000000..d330b7423
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bcd-2.c
@@ -0,0 +1,44 @@
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2" } */
+/* { dg-final { scan-assembler-times "bcdadd\[.\] " 2 } } */
+/* { dg-final { scan-assembler-times "bcdsub\[.\] " 2 } } */
+/* { dg-final { scan-assembler-not "bl __builtin" } } */
+/* { dg-final { scan-assembler-not "mtvsr" } } */
+/* { dg-final { scan-assembler-not "mfvsr" } } */
+/* { dg-final { scan-assembler-not "lvx" } } */
+/* { dg-final { scan-assembler-not "lxvw4x" } } */
+/* { dg-final { scan-assembler-not "lxvd2x" } } */
+/* { dg-final { scan-assembler-not "stvx" } } */
+/* { dg-final { scan-assembler-not "stxvw4x" } } */
+/* { dg-final { scan-assembler-not "stxvd2x" } } */
+
+typedef __int128_t __attribute__((__vector_size__(16))) vector_128_t;
+typedef __int128_t scalar_128_t;
+typedef unsigned long long scalar_64_t;
+
+vector_128_t
+do_add_0 (vector_128_t a, vector_128_t b)
+{
+ return __builtin_bcdadd (a, b, 0);
+}
+
+vector_128_t
+do_add_1 (vector_128_t a, vector_128_t b)
+{
+ return __builtin_bcdadd (a, b, 1);
+}
+
+vector_128_t
+do_sub_0 (vector_128_t a, vector_128_t b)
+{
+ return __builtin_bcdsub (a, b, 0);
+}
+
+vector_128_t
+do_sub_1 (vector_128_t a, vector_128_t b)
+{
+ return __builtin_bcdsub (a, b, 1);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bcd-3.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bcd-3.c
new file mode 100644
index 000000000..436cecf6f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bcd-3.c
@@ -0,0 +1,103 @@
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2" } */
+/* { dg-final { scan-assembler-times "bcdadd\[.\] " 4 } } */
+/* { dg-final { scan-assembler-times "bcdsub\[.\] " 4 } } */
+/* { dg-final { scan-assembler-not "bl __builtin" } } */
+/* { dg-final { scan-assembler-not "mtvsr" } } */
+/* { dg-final { scan-assembler-not "mfvsr" } } */
+/* { dg-final { scan-assembler-not "lvx" } } */
+/* { dg-final { scan-assembler-not "lxvw4x" } } */
+/* { dg-final { scan-assembler-not "lxvd2x" } } */
+/* { dg-final { scan-assembler-not "stvx" } } */
+/* { dg-final { scan-assembler-not "stxvw4x" } } */
+/* { dg-final { scan-assembler-not "stxvd2x" } } */
+
+typedef __int128_t __attribute__((__vector_size__(16))) vector_128_t;
+typedef __int128_t scalar_128_t;
+typedef unsigned long long scalar_64_t;
+
+/* Test whether the peephole works to allow folding a bcdadd, with a
+ bcdadd_<test> into a single instruction. */
+
+vector_128_t
+do_add_lt (vector_128_t a, vector_128_t b, int *p)
+{
+ vector_128_t ret = __builtin_bcdadd (a, b, 0);
+ if (__builtin_bcdadd_lt (a, b, 0))
+ *p = 1;
+
+ return ret;
+}
+
+vector_128_t
+do_add_eq (vector_128_t a, vector_128_t b, int *p)
+{
+ vector_128_t ret = __builtin_bcdadd (a, b, 0);
+ if (__builtin_bcdadd_eq (a, b, 0))
+ *p = 1;
+
+ return ret;
+}
+
+vector_128_t
+do_add_gt (vector_128_t a, vector_128_t b, int *p)
+{
+ vector_128_t ret = __builtin_bcdadd (a, b, 0);
+ if (__builtin_bcdadd_gt (a, b, 0))
+ *p = 1;
+
+ return ret;
+}
+
+vector_128_t
+do_add_ov (vector_128_t a, vector_128_t b, int *p)
+{
+ vector_128_t ret = __builtin_bcdadd (a, b, 0);
+ if (__builtin_bcdadd_ov (a, b, 0))
+ *p = 1;
+
+ return ret;
+}
+
+vector_128_t
+do_sub_lt (vector_128_t a, vector_128_t b, int *p)
+{
+ vector_128_t ret = __builtin_bcdsub (a, b, 0);
+ if (__builtin_bcdsub_lt (a, b, 0))
+ *p = 1;
+
+ return ret;
+}
+
+vector_128_t
+do_sub_eq (vector_128_t a, vector_128_t b, int *p)
+{
+ vector_128_t ret = __builtin_bcdsub (a, b, 0);
+ if (__builtin_bcdsub_eq (a, b, 0))
+ *p = 1;
+
+ return ret;
+}
+
+vector_128_t
+do_sub_gt (vector_128_t a, vector_128_t b, int *p)
+{
+ vector_128_t ret = __builtin_bcdsub (a, b, 0);
+ if (__builtin_bcdsub_gt (a, b, 0))
+ *p = 1;
+
+ return ret;
+}
+
+vector_128_t
+do_sub_ov (vector_128_t a, vector_128_t b, int *p)
+{
+ vector_128_t ret = __builtin_bcdsub (a, b, 0);
+ if (__builtin_bcdsub_ov (a, b, 0))
+ *p = 1;
+
+ return ret;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool.c
new file mode 100644
index 000000000..f007db4b5
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool.c
@@ -0,0 +1,14 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-options "-O2" } */
+/* { dg-final { scan-assembler "eqv" } } */
+/* { dg-final { scan-assembler "nand" } } */
+/* { dg-final { scan-assembler "nor" } } */
+
+#ifndef TYPE
+#define TYPE unsigned long
+#endif
+
+TYPE op1 (TYPE a, TYPE b) { return ~(a ^ b); } /* eqv */
+TYPE op2 (TYPE a, TYPE b) { return ~(a & b); } /* nand */
+TYPE op3 (TYPE a, TYPE b) { return ~(a | b); } /* nor */
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-av.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-av.c
new file mode 100644
index 000000000..fc56ce261
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-av.c
@@ -0,0 +1,32 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-O2 -mcpu=power6 -maltivec" } */
+/* { dg-final { scan-assembler-not "\[ \t\]and " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]or " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]nor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]andc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]eqv " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]orc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]nand " } } */
+/* { dg-final { scan-assembler "\[ \t\]vand " } } */
+/* { dg-final { scan-assembler "\[ \t\]vandc " } } */
+/* { dg-final { scan-assembler "\[ \t\]vor " } } */
+/* { dg-final { scan-assembler "\[ \t\]vxor " } } */
+/* { dg-final { scan-assembler "\[ \t\]vnor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxland " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlxor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlnor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlandc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxleqv " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlorc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlnand " } } */
+
+#ifndef TYPE
+typedef int v4si __attribute__ ((vector_size (16)));
+#define TYPE v4si
+#endif
+
+#include "bool2.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-p5.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-p5.c
new file mode 100644
index 000000000..e4810d00d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-p5.c
@@ -0,0 +1,32 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-O2 -mcpu=power5 -mabi=altivec -mno-altivec -mno-vsx" } */
+/* { dg-final { scan-assembler "\[ \t\]and " } } */
+/* { dg-final { scan-assembler "\[ \t\]or " } } */
+/* { dg-final { scan-assembler "\[ \t\]xor " } } */
+/* { dg-final { scan-assembler "\[ \t\]nor " } } */
+/* { dg-final { scan-assembler "\[ \t\]andc " } } */
+/* { dg-final { scan-assembler "\[ \t\]eqv " } } */
+/* { dg-final { scan-assembler "\[ \t\]orc " } } */
+/* { dg-final { scan-assembler "\[ \t\]nand " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vand " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vandc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vxor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vnor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxland " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlxor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlnor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlandc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxleqv " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlorc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlnand " } } */
+
+#ifndef TYPE
+typedef int v4si __attribute__ ((vector_size (16)));
+#define TYPE v4si
+#endif
+
+#include "bool2.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-p7.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-p7.c
new file mode 100644
index 000000000..274fcb090
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-p7.c
@@ -0,0 +1,31 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O2 -mcpu=power7" } */
+/* { dg-final { scan-assembler-not "\[ \t\]and " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]or " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]nor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]eqv " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]andc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]orc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]nand " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vand " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vxor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vnor " } } */
+/* { dg-final { scan-assembler "\[ \t\]xxland " } } */
+/* { dg-final { scan-assembler "\[ \t\]xxlor " } } */
+/* { dg-final { scan-assembler "\[ \t\]xxlxor " } } */
+/* { dg-final { scan-assembler "\[ \t\]xxlnor " } } */
+/* { dg-final { scan-assembler "\[ \t\]xxlandc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxleqv " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlorc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlnand " } } */
+
+#ifndef TYPE
+typedef int v4si __attribute__ ((vector_size (16)));
+#define TYPE v4si
+#endif
+
+#include "bool2.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-p8.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-p8.c
new file mode 100644
index 000000000..34f4d2df8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2-p8.c
@@ -0,0 +1,32 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-O2 -mcpu=power8" } */
+/* { dg-final { scan-assembler-not "\[ \t\]and " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]or " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]nor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]eqv " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]andc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]orc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]nand " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vand " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vandc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vxor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vnor " } } */
+/* { dg-final { scan-assembler "\[ \t\]xxland " } } */
+/* { dg-final { scan-assembler "\[ \t\]xxlor " } } */
+/* { dg-final { scan-assembler "\[ \t\]xxlxor " } } */
+/* { dg-final { scan-assembler "\[ \t\]xxlnor " } } */
+/* { dg-final { scan-assembler "\[ \t\]xxlandc " } } */
+/* { dg-final { scan-assembler "\[ \t\]xxleqv " } } */
+/* { dg-final { scan-assembler "\[ \t\]xxlorc " } } */
+/* { dg-final { scan-assembler "\[ \t\]xxlnand " } } */
+
+#ifndef TYPE
+typedef int v4si __attribute__ ((vector_size (16)));
+#define TYPE v4si
+#endif
+
+#include "bool2.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2.h b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2.h
new file mode 100644
index 000000000..4513944c2
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool2.h
@@ -0,0 +1,29 @@
+/* Test various logical operations. */
+
+TYPE arg1 (TYPE p, TYPE q) { return p & q; } /* AND */
+TYPE arg2 (TYPE p, TYPE q) { return p | q; } /* OR */
+TYPE arg3 (TYPE p, TYPE q) { return p ^ q; } /* XOR */
+TYPE arg4 (TYPE p) { return ~ p; } /* NOR */
+TYPE arg5 (TYPE p, TYPE q) { return ~(p & q); } /* NAND */
+TYPE arg6 (TYPE p, TYPE q) { return ~(p | q); } /* NOR */
+TYPE arg7 (TYPE p, TYPE q) { return ~(p ^ q); } /* EQV */
+TYPE arg8 (TYPE p, TYPE q) { return (~p) & q; } /* ANDC */
+TYPE arg9 (TYPE p, TYPE q) { return (~p) | q; } /* ORC */
+TYPE arg10(TYPE p, TYPE q) { return (~p) ^ q; } /* EQV */
+TYPE arg11(TYPE p, TYPE q) { return p & (~q); } /* ANDC */
+TYPE arg12(TYPE p, TYPE q) { return p | (~q); } /* ORC */
+TYPE arg13(TYPE p, TYPE q) { return p ^ (~q); } /* EQV */
+
+void ptr1 (TYPE *p) { p[0] = p[1] & p[2]; } /* AND */
+void ptr2 (TYPE *p) { p[0] = p[1] | p[2]; } /* OR */
+void ptr3 (TYPE *p) { p[0] = p[1] ^ p[2]; } /* XOR */
+void ptr4 (TYPE *p) { p[0] = ~p[1]; } /* NOR */
+void ptr5 (TYPE *p) { p[0] = ~(p[1] & p[2]); } /* NAND */
+void ptr6 (TYPE *p) { p[0] = ~(p[1] | p[2]); } /* NOR */
+void ptr7 (TYPE *p) { p[0] = ~(p[1] ^ p[2]); } /* EQV */
+void ptr8 (TYPE *p) { p[0] = ~(p[1]) & p[2]; } /* ANDC */
+void ptr9 (TYPE *p) { p[0] = (~p[1]) | p[2]; } /* ORC */
+void ptr10(TYPE *p) { p[0] = (~p[1]) ^ p[2]; } /* EQV */
+void ptr11(TYPE *p) { p[0] = p[1] & (~p[2]); } /* ANDC */
+void ptr12(TYPE *p) { p[0] = p[1] | (~p[2]); } /* ORC */
+void ptr13(TYPE *p) { p[0] = p[1] ^ (~p[2]); } /* EQV */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3-av.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3-av.c
new file mode 100644
index 000000000..d4aac786b
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3-av.c
@@ -0,0 +1,37 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-O2 -mcpu=power6 -mabi=altivec -maltivec -mno-vsx" } */
+/* { dg-final { scan-assembler "\[ \t\]and " } } */
+/* { dg-final { scan-assembler "\[ \t\]or " } } */
+/* { dg-final { scan-assembler "\[ \t\]xor " } } */
+/* { dg-final { scan-assembler "\[ \t\]nor " } } */
+/* { dg-final { scan-assembler "\[ \t\]andc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vand " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vandc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vxor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vnor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxland " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlxor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlnor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlandc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxleqv " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlorc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlnand " } } */
+
+/* On altivec, for 128-bit types, ORC/ANDC/EQV might not show up, since the
+ vector unit doesn't support these, so the appropriate combine patterns may
+ not be generated. */
+
+#ifndef TYPE
+#ifdef _ARCH_PPC64
+#define TYPE __int128_t
+#else
+typedef int v4si __attribute__ ((vector_size (16)));
+#define TYPE v4si
+#endif
+#endif
+
+#include "bool3.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3-p7.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3-p7.c
new file mode 100644
index 000000000..34e3c9e79
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3-p7.c
@@ -0,0 +1,37 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O2 -mcpu=power7" } */
+/* { dg-final { scan-assembler "\[ \t\]and " } } */
+/* { dg-final { scan-assembler "\[ \t\]or " } } */
+/* { dg-final { scan-assembler "\[ \t\]xor " } } */
+/* { dg-final { scan-assembler "\[ \t\]nor " } } */
+/* { dg-final { scan-assembler "\[ \t\]andc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vand " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vandc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vxor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vnor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxland " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlxor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlnor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlandc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxleqv " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlorc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlnand " } } */
+
+/* On power7, for 128-bit types, ORC/ANDC/EQV might not show up, since the
+ vector unit doesn't support these, so the appropriate combine patterns may
+ not be generated. */
+
+#ifndef TYPE
+#ifdef _ARCH_PPC64
+#define TYPE __int128_t
+#else
+typedef int v4si __attribute__ ((vector_size (16)));
+#define TYPE v4si
+#endif
+#endif
+
+#include "bool3.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3-p8.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3-p8.c
new file mode 100644
index 000000000..e1b2dfa7e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3-p8.c
@@ -0,0 +1,36 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-O2 -mcpu=power8" } */
+/* { dg-final { scan-assembler "\[ \t\]and " } } */
+/* { dg-final { scan-assembler "\[ \t\]or " } } */
+/* { dg-final { scan-assembler "\[ \t\]xor " } } */
+/* { dg-final { scan-assembler "\[ \t\]nor " } } */
+/* { dg-final { scan-assembler "\[ \t\]andc " } } */
+/* { dg-final { scan-assembler "\[ \t\]eqv " } } */
+/* { dg-final { scan-assembler "\[ \t\]orc " } } */
+/* { dg-final { scan-assembler "\[ \t\]nand " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vand " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vandc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vxor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]vnor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxland " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlxor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlnor " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlandc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxleqv " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlorc " } } */
+/* { dg-final { scan-assembler-not "\[ \t\]xxlnand " } } */
+
+#ifndef TYPE
+#ifdef _ARCH_PPC64
+#define TYPE __int128_t
+#else
+typedef int v4si __attribute__ ((vector_size (16)));
+#define TYPE v4si
+#endif
+#endif
+
+#include "bool3.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3.h b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3.h
new file mode 100644
index 000000000..7b99a4a61
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/bool3.h
@@ -0,0 +1,186 @@
+/* Test forcing 128-bit logical types into GPR registers. */
+
+#if defined(NO_ASM)
+#define FORCE_REG1(X)
+#define FORCE_REG2(X,Y)
+
+#else
+#if defined(USE_ALTIVEC)
+#define REG_CLASS "+v"
+#define PRINT_REG1 "# altivec reg %0"
+#define PRINT_REG2 "# altivec reg %0, %1"
+
+#elif defined(USE_FPR)
+#define REG_CLASS "+d"
+#define PRINT_REG1 "# fpr reg %0"
+#define PRINT_REG2 "# fpr reg %0, %1"
+
+#elif defined(USE_VSX)
+#define REG_CLASS "+wa"
+#define PRINT_REG1 "# vsx reg %x0"
+#define PRINT_REG2 "# vsx reg %x0, %x1"
+
+#else
+#define REG_CLASS "+r"
+#define PRINT_REG1 "# gpr reg %0"
+#define PRINT_REG2 "# gpr reg %0, %1"
+#endif
+
+#define FORCE_REG1(X) __asm__ (PRINT_REG1 : REG_CLASS (X))
+#define FORCE_REG2(X,Y) __asm__ (PRINT_REG2 : REG_CLASS (X), REG_CLASS (Y))
+#endif
+
+void ptr1 (TYPE *p)
+{
+ TYPE a = p[1];
+ TYPE b = p[2];
+ TYPE c;
+
+ FORCE_REG2 (a, b);
+ c = a & b; /* AND */
+ FORCE_REG1 (c);
+ p[0] = c;
+}
+
+void ptr2 (TYPE *p)
+{
+ TYPE a = p[1];
+ TYPE b = p[2];
+ TYPE c;
+
+ FORCE_REG2 (a, b);
+ c = a | b; /* OR */
+ FORCE_REG1 (c);
+ p[0] = c;
+}
+
+void ptr3 (TYPE *p)
+{
+ TYPE a = p[1];
+ TYPE b = p[2];
+ TYPE c;
+
+ FORCE_REG2 (a, b);
+ c = a ^ b; /* XOR */
+ FORCE_REG1 (c);
+ p[0] = c;
+}
+
+void ptr4 (TYPE *p)
+{
+ TYPE a = p[1];
+ TYPE b;
+
+ FORCE_REG1 (a);
+ b = ~a; /* NOR */
+ FORCE_REG1 (b);
+ p[0] = b;
+}
+
+void ptr5 (TYPE *p)
+{
+ TYPE a = p[1];
+ TYPE b = p[2];
+ TYPE c;
+
+ FORCE_REG2 (a, b);
+ c = ~(a & b); /* NAND */
+ FORCE_REG1 (c);
+ p[0] = c;
+}
+
+void ptr6 (TYPE *p)
+{
+ TYPE a = p[1];
+ TYPE b = p[2];
+ TYPE c;
+
+ FORCE_REG2 (a, b);
+ c = ~(a | b); /* AND */
+ FORCE_REG1 (c);
+ p[0] = c;
+}
+
+void ptr7 (TYPE *p)
+{
+ TYPE a = p[1];
+ TYPE b = p[2];
+ TYPE c;
+
+ FORCE_REG2 (a, b);
+ c = ~(a ^ b); /* EQV */
+ FORCE_REG1 (c);
+ p[0] = c;
+}
+
+void ptr8 (TYPE *p)
+{
+ TYPE a = p[1];
+ TYPE b = p[2];
+ TYPE c;
+
+ FORCE_REG2 (a, b);
+ c = (~a) & b; /* ANDC */
+ FORCE_REG1 (c);
+ p[0] = c;
+}
+
+void ptr9 (TYPE *p)
+{
+ TYPE a = p[1];
+ TYPE b = p[2];
+ TYPE c;
+
+ FORCE_REG2 (a, b);
+ c = (~a) | b; /* ORC */
+ FORCE_REG1 (c);
+ p[0] = c;
+}
+
+void ptr10 (TYPE *p)
+{
+ TYPE a = p[1];
+ TYPE b = p[2];
+ TYPE c;
+
+ FORCE_REG2 (a, b);
+ c = (~a) ^ b; /* EQV */
+ FORCE_REG1 (c);
+ p[0] = c;
+}
+
+void ptr11 (TYPE *p)
+{
+ TYPE a = p[1];
+ TYPE b = p[2];
+ TYPE c;
+
+ FORCE_REG2 (a, b);
+ c = a & (~b); /* ANDC */
+ FORCE_REG1 (c);
+ p[0] = c;
+}
+
+void ptr12 (TYPE *p)
+{
+ TYPE a = p[1];
+ TYPE b = p[2];
+ TYPE c;
+
+ FORCE_REG2 (a, b);
+ c = a | (~b); /* ORC */
+ FORCE_REG1 (c);
+ p[0] = c;
+}
+
+void ptr13 (TYPE *p)
+{
+ TYPE a = p[1];
+ TYPE b = p[2];
+ TYPE c;
+
+ FORCE_REG2 (a, b);
+ c = a ^ (~b); /* AND */
+ FORCE_REG1 (c);
+ p[0] = c;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/crypto-builtin-1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/crypto-builtin-1.c
new file mode 100644
index 000000000..87291954e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/crypto-builtin-1.c
@@ -0,0 +1,130 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fvect-cost-model -fno-unroll-loops -fno-unroll-all-loops" } */
+
+typedef vector unsigned long long crypto_t;
+typedef vector unsigned long long v2di_t;
+typedef vector unsigned int v4si_t;
+typedef vector unsigned short v8hi_t;
+typedef vector unsigned char v16qi_t;
+
+crypto_t crpyto1 (crypto_t a)
+{
+ return __builtin_crypto_vsbox (a);
+}
+
+crypto_t crypto2 (crypto_t a, crypto_t b)
+{
+ return __builtin_crypto_vcipher (a, b);
+}
+
+crypto_t crypto3 (crypto_t a, crypto_t b)
+{
+ return __builtin_crypto_vcipherlast (a, b);
+}
+
+crypto_t crypto4 (crypto_t a, crypto_t b)
+{
+ return __builtin_crypto_vncipher (a, b);
+}
+
+crypto_t crypto5 (crypto_t a, crypto_t b)
+{
+ return __builtin_crypto_vncipherlast (a, b);
+}
+
+v16qi_t crypto6a (v16qi_t a, v16qi_t b, v16qi_t c)
+{
+ return __builtin_crypto_vpermxor (a, b, c);
+}
+
+v8hi_t crypto6b (v8hi_t a, v8hi_t b, v8hi_t c)
+{
+ return __builtin_crypto_vpermxor (a, b, c);
+}
+
+v4si_t crypto6c (v4si_t a, v4si_t b, v4si_t c)
+{
+ return __builtin_crypto_vpermxor (a, b, c);
+}
+
+v2di_t crypto6d (v2di_t a, v2di_t b, v2di_t c)
+{
+ return __builtin_crypto_vpermxor (a, b, c);
+}
+
+v16qi_t crypto7a (v16qi_t a, v16qi_t b)
+{
+ return __builtin_crypto_vpmsumb (a, b);
+}
+
+v16qi_t crypto7b (v16qi_t a, v16qi_t b)
+{
+ return __builtin_crypto_vpmsum (a, b);
+}
+
+v8hi_t crypto7c (v8hi_t a, v8hi_t b)
+{
+ return __builtin_crypto_vpmsumh (a, b);
+}
+
+v8hi_t crypto7d (v8hi_t a, v8hi_t b)
+{
+ return __builtin_crypto_vpmsum (a, b);
+}
+
+v4si_t crypto7e (v4si_t a, v4si_t b)
+{
+ return __builtin_crypto_vpmsumw (a, b);
+}
+
+v4si_t crypto7f (v4si_t a, v4si_t b)
+{
+ return __builtin_crypto_vpmsum (a, b);
+}
+
+v2di_t crypto7g (v2di_t a, v2di_t b)
+{
+ return __builtin_crypto_vpmsumd (a, b);
+}
+
+v2di_t crypto7h (v2di_t a, v2di_t b)
+{
+ return __builtin_crypto_vpmsum (a, b);
+}
+
+v2di_t crypto8a (v2di_t a)
+{
+ return __builtin_crypto_vshasigmad (a, 0, 8);
+}
+
+v2di_t crypto8b (v2di_t a)
+{
+ return __builtin_crypto_vshasigma (a, 0, 8);
+}
+
+v4si_t crypto8c (v4si_t a)
+{
+ return __builtin_crypto_vshasigmaw (a, 1, 15);
+}
+
+v4si_t crypto8d (v4si_t a)
+{
+ return __builtin_crypto_vshasigma (a, 1, 15);
+}
+
+/* Note space is used after the instruction so that vcipherlast does not match
+ vcipher. */
+/* { dg-final { scan-assembler-times "vcipher " 1 } } */
+/* { dg-final { scan-assembler-times "vcipherlast " 1 } } */
+/* { dg-final { scan-assembler-times "vncipher " 1 } } */
+/* { dg-final { scan-assembler-times "vncipherlast " 1 } } */
+/* { dg-final { scan-assembler-times "vpermxor " 4 } } */
+/* { dg-final { scan-assembler-times "vpmsumb " 2 } } */
+/* { dg-final { scan-assembler-times "vpmsumd " 2 } } */
+/* { dg-final { scan-assembler-times "vpmsumh " 2 } } */
+/* { dg-final { scan-assembler-times "vpmsumw " 2 } } */
+/* { dg-final { scan-assembler-times "vsbox " 1 } } */
+/* { dg-final { scan-assembler-times "vshasigmad " 2 } } */
+/* { dg-final { scan-assembler-times "vshasigmaw " 2 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/darwin-longlong.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/darwin-longlong.c
index 0692b3d80..14b56d082 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/darwin-longlong.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/darwin-longlong.c
@@ -11,7 +11,11 @@ int msw(long long in)
int i[2];
} ud;
ud.ll = in;
+#ifdef __LITTLE_ENDIAN__
+ return ud.i[1];
+#else
return ud.i[0];
+#endif
}
int main()
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c
new file mode 100644
index 000000000..614f27264
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c
@@ -0,0 +1,88 @@
+/* { dg-do compile { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mcpu=power7 -O2" } */
+/* { dg-final { scan-assembler-times "ddedpd " 4 } } */
+/* { dg-final { scan-assembler-times "denbcd " 2 } } */
+/* { dg-final { scan-assembler-times "dxex " 1 } } */
+/* { dg-final { scan-assembler-times "diex " 1 } } */
+/* { dg-final { scan-assembler-times "dscli " 2 } } */
+/* { dg-final { scan-assembler-times "dscri " 2 } } */
+/* { dg-final { scan-assembler-not "bl __builtin" } } */
+/* { dg-final { scan-assembler-not "dctqpq" } } */
+/* { dg-final { scan-assembler-not "drdpq" } } */
+/* { dg-final { scan-assembler-not "stfd" } } */
+/* { dg-final { scan-assembler-not "lfd" } } */
+
+_Decimal64
+do_dedpd_0 (_Decimal64 a)
+{
+ return __builtin_ddedpd (0, a);
+}
+
+_Decimal64
+do_dedpd_1 (_Decimal64 a)
+{
+ return __builtin_ddedpd (1, a);
+}
+
+_Decimal64
+do_dedpd_2 (_Decimal64 a)
+{
+ return __builtin_ddedpd (2, a);
+}
+
+_Decimal64
+do_dedpd_3 (_Decimal64 a)
+{
+ return __builtin_ddedpd (3, a);
+}
+
+_Decimal64
+do_enbcd_0 (_Decimal64 a)
+{
+ return __builtin_denbcd (0, a);
+}
+
+_Decimal64
+do_enbcd_1 (_Decimal64 a)
+{
+ return __builtin_denbcd (1, a);
+}
+
+_Decimal64
+do_xex (_Decimal64 a)
+{
+ return __builtin_dxex (a);
+}
+
+_Decimal64
+do_iex (_Decimal64 a, _Decimal64 b)
+{
+ return __builtin_diex (a, b);
+}
+
+_Decimal64
+do_scli_1 (_Decimal64 a)
+{
+ return __builtin_dscli (a, 1);
+}
+
+_Decimal64
+do_scli_10 (_Decimal64 a)
+{
+ return __builtin_dscli (a, 10);
+}
+
+_Decimal64
+do_scri_1 (_Decimal64 a)
+{
+ return __builtin_dscri (a, 1);
+}
+
+_Decimal64
+do_scri_10 (_Decimal64 a)
+{
+ return __builtin_dscri (a, 10);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c
new file mode 100644
index 000000000..189bc9ad6
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c
@@ -0,0 +1,88 @@
+/* { dg-do compile { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mcpu=power7 -O2" } */
+/* { dg-final { scan-assembler-times "ddedpdq " 4 } } */
+/* { dg-final { scan-assembler-times "denbcdq " 2 } } */
+/* { dg-final { scan-assembler-times "dxexq " 1 } } */
+/* { dg-final { scan-assembler-times "diexq " 1 } } */
+/* { dg-final { scan-assembler-times "dscliq " 2 } } */
+/* { dg-final { scan-assembler-times "dscriq " 2 } } */
+/* { dg-final { scan-assembler-not "bl __builtin" } } */
+/* { dg-final { scan-assembler-not "dctqpq" } } */
+/* { dg-final { scan-assembler-not "drdpq" } } */
+/* { dg-final { scan-assembler-not "stfd" } } */
+/* { dg-final { scan-assembler-not "lfd" } } */
+
+_Decimal128
+do_dedpdq_0 (_Decimal128 a)
+{
+ return __builtin_ddedpdq (0, a);
+}
+
+_Decimal128
+do_dedpdq_1 (_Decimal128 a)
+{
+ return __builtin_ddedpdq (1, a);
+}
+
+_Decimal128
+do_dedpdq_2 (_Decimal128 a)
+{
+ return __builtin_ddedpdq (2, a);
+}
+
+_Decimal128
+do_dedpdq_3 (_Decimal128 a)
+{
+ return __builtin_ddedpdq (3, a);
+}
+
+_Decimal128
+do_enbcdq_0 (_Decimal128 a)
+{
+ return __builtin_denbcdq (0, a);
+}
+
+_Decimal128
+do_enbcdq_1 (_Decimal128 a)
+{
+ return __builtin_denbcdq (1, a);
+}
+
+_Decimal128
+do_xexq (_Decimal128 a)
+{
+ return __builtin_dxexq (a);
+}
+
+_Decimal128
+do_iexq (_Decimal128 a, _Decimal128 b)
+{
+ return __builtin_diexq (a, b);
+}
+
+_Decimal128
+do_scliq_1 (_Decimal128 a)
+{
+ return __builtin_dscliq (a, 1);
+}
+
+_Decimal128
+do_scliq_10 (_Decimal128 a)
+{
+ return __builtin_dscliq (a, 10);
+}
+
+_Decimal128
+do_scriq_1 (_Decimal128 a)
+{
+ return __builtin_dscriq (a, 1);
+}
+
+_Decimal128
+do_scriq_10 (_Decimal128 a)
+{
+ return __builtin_dscriq (a, 10);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-dd-2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-dd-2.c
new file mode 100644
index 000000000..fcb72bdff
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-dd-2.c
@@ -0,0 +1,26 @@
+/* Test generation of DFP instructions for POWER6. */
+/* { dg-do compile { target { powerpc*-*-linux* && powerpc_fprs } } } */
+/* { dg-options "-std=gnu99 -O1 -mcpu=power6" } */
+
+/* { dg-final { scan-assembler-times "fneg" 1 } } */
+/* { dg-final { scan-assembler-times "fabs" 1 } } */
+/* { dg-final { scan-assembler-times "fnabs" 1 } } */
+/* { dg-final { scan-assembler-times "fmr" 0 } } */
+
+_Decimal64
+func1 (_Decimal64 a, _Decimal64 b)
+{
+ return -b;
+}
+
+_Decimal64
+func2 (_Decimal64 a, _Decimal64 b)
+{
+ return __builtin_fabsd64 (b);
+}
+
+_Decimal64
+func3 (_Decimal64 a, _Decimal64 b)
+{
+ return - __builtin_fabsd64 (b);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-td-2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-td-2.c
new file mode 100644
index 000000000..a078cc469
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-td-2.c
@@ -0,0 +1,29 @@
+/* Test generation of DFP instructions for POWER6. */
+/* { dg-do compile { target { powerpc*-*-linux* && powerpc_fprs } } } */
+/* { dg-options "-std=gnu99 -O1 -mcpu=power6" } */
+
+/* { dg-final { scan-assembler-times "fneg" 1 } } */
+/* { dg-final { scan-assembler-times "fabs" 1 } } */
+/* { dg-final { scan-assembler-times "fnabs" 1 } } */
+/* { dg-final { scan-assembler-times "fmr" 0 } } */
+
+/* These tests verify we only generate fneg, fabs and fnabs
+ instructions and no fmr's since these are done in place. */
+
+_Decimal128
+func1 (_Decimal128 a)
+{
+ return -a;
+}
+
+_Decimal128
+func2 (_Decimal128 a)
+{
+ return __builtin_fabsd128 (a);
+}
+
+_Decimal128
+func3 (_Decimal128 a)
+{
+ return - __builtin_fabsd128 (a);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-td-3.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-td-3.c
new file mode 100644
index 000000000..e825e5cad
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/dfp-td-3.c
@@ -0,0 +1,29 @@
+/* Test generation of DFP instructions for POWER6. */
+/* { dg-do compile { target { powerpc*-*-linux* && powerpc_fprs } } } */
+/* { dg-options "-std=gnu99 -O1 -mcpu=power6" } */
+
+/* { dg-final { scan-assembler-times "fneg" 1 } } */
+/* { dg-final { scan-assembler-times "fabs" 1 } } */
+/* { dg-final { scan-assembler-times "fnabs" 1 } } */
+/* { dg-final { scan-assembler-times "fmr" 3 } } */
+
+/* These tests verify we generate fneg, fabs and fnabs and
+ associated fmr's since these are not done in place. */
+
+_Decimal128
+func1 (_Decimal128 a, _Decimal128 b)
+{
+ return -b;
+}
+
+_Decimal128
+func2 (_Decimal128 a, _Decimal128 b)
+{
+ return __builtin_fabsd128 (b);
+}
+
+_Decimal128
+func3 (_Decimal128 a, _Decimal128 b)
+{
+ return - __builtin_fabsd128 (b);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-double1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-double1.c
new file mode 100644
index 000000000..2569ac843
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-double1.c
@@ -0,0 +1,16 @@
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2" } */
+/* { dg-final { scan-assembler "mtvsrd" } } */
+/* { dg-final { scan-assembler "mfvsrd" } } */
+
+/* Check code generation for direct move for double types. */
+
+#define TYPE double
+#define IS_FLOAT 1
+#define NO_ALTIVEC 1
+#define VSX_REG_ATTR "ws"
+
+#include "direct-move.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-double2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-double2.c
new file mode 100644
index 000000000..c8702204b
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-double2.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target p8vector_hw } */
+/* { dg-options "-mcpu=power8 -O2" } */
+
+/* Check whether we get the right bits for direct move at runtime. */
+
+#define TYPE double
+#define IS_FLOAT 1
+#define NO_ALTIVEC 1
+#define DO_MAIN
+#define VSX_REG_ATTR "ws"
+
+#include "direct-move.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-float1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-float1.c
new file mode 100644
index 000000000..524c0eead
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-float1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2" } */
+/* { dg-final { scan-assembler "mtvsrd" } } */
+/* { dg-final { scan-assembler "mfvsrd" } } */
+/* { dg-final { scan-assembler "xscvdpspn" } } */
+/* { dg-final { scan-assembler "xscvspdpn" } } */
+
+/* Check code generation for direct move for float types. */
+
+#define TYPE float
+#define IS_FLOAT 1
+#define NO_ALTIVEC 1
+#define VSX_REG_ATTR "ww"
+
+#include "direct-move.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-float2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-float2.c
new file mode 100644
index 000000000..352e76166
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-float2.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target p8vector_hw } */
+/* { dg-options "-mcpu=power8 -O2" } */
+
+/* Check whether we get the right bits for direct move at runtime. */
+
+#define TYPE float
+#define IS_FLOAT 1
+#define NO_ALTIVEC 1
+#define DO_MAIN
+#define VSX_REG_ATTR "ww"
+
+#include "direct-move.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-long1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-long1.c
new file mode 100644
index 000000000..0a78f9cb2
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-long1.c
@@ -0,0 +1,16 @@
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2" } */
+/* { dg-final { scan-assembler "mtvsrd" } } */
+/* { dg-final { scan-assembler "mfvsrd" } } */
+
+/* Check code generation for direct move for long types. */
+
+#define TYPE long
+#define IS_INT 1
+#define NO_ALTIVEC 1
+#define VSX_REG_ATTR "d"
+
+#include "direct-move.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-long2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-long2.c
new file mode 100644
index 000000000..cee9e0e0f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-long2.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target p8vector_hw } */
+/* { dg-options "-mcpu=power8 -O2" } */
+
+/* Check whether we get the right bits for direct move at runtime. */
+
+#define TYPE long
+#define IS_INT 1
+#define NO_ALTIVEC 1
+#define DO_MAIN
+#define VSX_REG_ATTR "d"
+
+#include "direct-move.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-vint1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-vint1.c
new file mode 100644
index 000000000..3067b9a8e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-vint1.c
@@ -0,0 +1,14 @@
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2" } */
+/* { dg-final { scan-assembler "mtvsrd" } } */
+/* { dg-final { scan-assembler "mfvsrd" } } */
+
+/* Check code generation for direct move for vector types. */
+
+#define TYPE vector int
+#define VSX_REG_ATTR "wa"
+
+#include "direct-move.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-vint2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-vint2.c
new file mode 100644
index 000000000..0d8264faf
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move-vint2.c
@@ -0,0 +1,13 @@
+/* { dg-do run { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target p8vector_hw } */
+/* { dg-options "-mcpu=power8 -O2" } */
+
+/* Check whether we get the right bits for direct move at runtime. */
+
+#define TYPE vector int
+#define DO_MAIN
+#define VSX_REG_ATTR "wa"
+
+#include "direct-move.h"
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move.h b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move.h
new file mode 100644
index 000000000..6a5b7ba18
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/direct-move.h
@@ -0,0 +1,188 @@
+/* Test functions for direct move support. */
+
+#include <math.h>
+extern void abort (void);
+
+#ifndef VSX_REG_ATTR
+#define VSX_REG_ATTR "wa"
+#endif
+
+void __attribute__((__noinline__))
+copy (TYPE *a, TYPE *b)
+{
+ *b = *a;
+}
+
+#ifndef NO_GPR
+void __attribute__((__noinline__))
+load_gpr (TYPE *a, TYPE *b)
+{
+ TYPE c = *a;
+ __asm__ ("# gpr, reg = %0" : "+b" (c));
+ *b = c;
+}
+#endif
+
+#ifndef NO_FPR
+void __attribute__((__noinline__))
+load_fpr (TYPE *a, TYPE *b)
+{
+ TYPE c = *a;
+ __asm__ ("# fpr, reg = %0" : "+d" (c));
+ *b = c;
+}
+#endif
+
+#ifndef NO_ALTIVEC
+void __attribute__((__noinline__))
+load_altivec (TYPE *a, TYPE *b)
+{
+ TYPE c = *a;
+ __asm__ ("# altivec, reg = %0" : "+v" (c));
+ *b = c;
+}
+#endif
+
+#ifndef NO_VSX
+void __attribute__((__noinline__))
+load_vsx (TYPE *a, TYPE *b)
+{
+ TYPE c = *a;
+ __asm__ ("# vsx, reg = %x0" : "+" VSX_REG_ATTR (c));
+ *b = c;
+}
+#endif
+
+#ifndef NO_GPR_TO_VSX
+void __attribute__((__noinline__))
+load_gpr_to_vsx (TYPE *a, TYPE *b)
+{
+ TYPE c = *a;
+ TYPE d;
+ __asm__ ("# gpr, reg = %0" : "+b" (c));
+ d = c;
+ __asm__ ("# vsx, reg = %x0" : "+" VSX_REG_ATTR (d));
+ *b = d;
+}
+#endif
+
+#ifndef NO_VSX_TO_GPR
+void __attribute__((__noinline__))
+load_vsx_to_gpr (TYPE *a, TYPE *b)
+{
+ TYPE c = *a;
+ TYPE d;
+ __asm__ ("# vsx, reg = %x0" : "+" VSX_REG_ATTR (c));
+ d = c;
+ __asm__ ("# gpr, reg = %0" : "+b" (d));
+ *b = d;
+}
+#endif
+
+#ifdef DO_MAIN
+typedef void (fn_type (TYPE *, TYPE *));
+
+struct test_struct {
+ fn_type *func;
+ const char *name;
+};
+
+const struct test_struct test_functions[] = {
+ { copy, "copy" },
+#ifndef NO_GPR
+ { load_gpr, "load_gpr" },
+#endif
+#ifndef NO_FPR
+ { load_fpr, "load_fpr" },
+#endif
+#ifndef NO_ALTIVEC
+ { load_altivec, "load_altivec" },
+#endif
+#ifndef NO_VSX
+ { load_vsx, "load_vsx" },
+#endif
+#ifndef NO_GPR_TO_VSX
+ { load_gpr_to_vsx, "load_gpr_to_vsx" },
+#endif
+#ifndef NO_VSX_TO_GPR
+ { load_vsx_to_gpr, "load_vsx_to_gpr" },
+#endif
+};
+
+/* Test a given value for each of the functions. */
+void __attribute__((__noinline__))
+test_value (TYPE a)
+{
+ long i;
+
+ for (i = 0; i < sizeof (test_functions) / sizeof (test_functions[0]); i++)
+ {
+ TYPE b;
+
+ test_functions[i].func (&a, &b);
+ if (memcmp ((void *)&a, (void *)&b, sizeof (TYPE)) != 0)
+ abort ();
+ }
+}
+
+/* Main program. */
+int
+main (void)
+{
+ long i,j;
+ union {
+ TYPE value;
+ unsigned char bytes[sizeof (TYPE)];
+ } u;
+
+#if IS_INT
+ TYPE value = (TYPE)-5;
+ for (i = 0; i < 12; i++)
+ {
+ test_value (value);
+ value++;
+ }
+
+ for (i = 0; i < 8*sizeof (TYPE); i++)
+ test_value (((TYPE)1) << i);
+
+#elif IS_UNS
+ TYPE value = (TYPE)0;
+ for (i = 0; i < 10; i++)
+ {
+ test_value (value);
+ test_value (~ value);
+ value++;
+ }
+
+ for (i = 0; i < 8*sizeof (TYPE); i++)
+ test_value (((TYPE)1) << i);
+
+#elif IS_FLOAT
+ TYPE value = (TYPE)-5;
+ for (i = 0; i < 12; i++)
+ {
+ test_value (value);
+ value++;
+ }
+
+ test_value ((TYPE)3.1415926535);
+ test_value ((TYPE)1.23456);
+ test_value ((TYPE)(-0.0));
+ test_value ((TYPE)NAN);
+ test_value ((TYPE)+INFINITY);
+ test_value ((TYPE)-INFINITY);
+#else
+
+ for (j = 0; j < 10; j++)
+ {
+ for (i = 0; i < sizeof (TYPE); i++)
+ u.bytes[i] = (unsigned char) (random () >> 4);
+
+ test_value (u.value);
+ }
+#endif
+
+ return 0;
+}
+#endif
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/extend-divide-1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/extend-divide-1.c
new file mode 100644
index 000000000..5f948b721
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/extend-divide-1.c
@@ -0,0 +1,34 @@
+/* { dg-do compile { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mcpu=power7 -O2" } */
+/* { dg-final { scan-assembler-times "divwe " 1 } } */
+/* { dg-final { scan-assembler-times "divweo " 1 } } */
+/* { dg-final { scan-assembler-times "divweu " 1 } } */
+/* { dg-final { scan-assembler-times "divweuo " 1 } } */
+/* { dg-final { scan-assembler-not "bl __builtin" } } */
+
+int
+div_we (int a, int b)
+{
+ return __builtin_divwe (a, b);
+}
+
+int
+div_weo (int a, int b)
+{
+ return __builtin_divweo (a, b);
+}
+
+unsigned int
+div_weu (unsigned int a, unsigned int b)
+{
+ return __builtin_divweu (a, b);
+}
+
+unsigned int
+div_weuo (unsigned int a, unsigned int b)
+{
+ return __builtin_divweuo (a, b);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/extend-divide-2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/extend-divide-2.c
new file mode 100644
index 000000000..8ee6c8cf7
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/extend-divide-2.c
@@ -0,0 +1,34 @@
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mcpu=power7 -O2" } */
+/* { dg-final { scan-assembler-times "divde " 1 } } */
+/* { dg-final { scan-assembler-times "divdeo " 1 } } */
+/* { dg-final { scan-assembler-times "divdeu " 1 } } */
+/* { dg-final { scan-assembler-times "divdeuo " 1 } } */
+/* { dg-final { scan-assembler-not "bl __builtin" } } */
+
+long
+div_de (long a, long b)
+{
+ return __builtin_divde (a, b);
+}
+
+long
+div_deo (long a, long b)
+{
+ return __builtin_divdeo (a, b);
+}
+
+unsigned long
+div_deu (unsigned long a, unsigned long b)
+{
+ return __builtin_divdeu (a, b);
+}
+
+unsigned long
+div_deuo (unsigned long a, unsigned long b)
+{
+ return __builtin_divdeuo (a, b);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/fusion.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/fusion.c
new file mode 100644
index 000000000..60e635972
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/fusion.c
@@ -0,0 +1,24 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*le-*-* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power7 -mtune=power8 -O3" } */
+
+#define LARGE 0x12345
+
+int fusion_uchar (unsigned char *p){ return p[LARGE]; }
+int fusion_schar (signed char *p){ return p[LARGE]; }
+int fusion_ushort (unsigned short *p){ return p[LARGE]; }
+int fusion_short (short *p){ return p[LARGE]; }
+int fusion_int (int *p){ return p[LARGE]; }
+unsigned fusion_uns (unsigned *p){ return p[LARGE]; }
+
+vector double fusion_vector (vector double *p) { return p[2]; }
+
+/* { dg-final { scan-assembler-times "gpr load fusion" 6 } } */
+/* { dg-final { scan-assembler-times "vector load fusion" 1 } } */
+/* { dg-final { scan-assembler-times "lbz" 2 } } */
+/* { dg-final { scan-assembler-times "extsb" 1 } } */
+/* { dg-final { scan-assembler-times "lhz" 2 } } */
+/* { dg-final { scan-assembler-times "extsh" 1 } } */
+/* { dg-final { scan-assembler-times "lwz" 2 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/htm-builtin-1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/htm-builtin-1.c
new file mode 100644
index 000000000..e58816a7f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/htm-builtin-1.c
@@ -0,0 +1,51 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_htm_ok } */
+/* { dg-options "-O2 -mhtm" } */
+
+/* { dg-final { scan-assembler-times "tbegin\\." 1 } } */
+/* { dg-final { scan-assembler-times "tend\\." 2 } } */
+/* { dg-final { scan-assembler-times "tabort\\." 2 } } */
+/* { dg-final { scan-assembler-times "tabortdc\\." 1 } } */
+/* { dg-final { scan-assembler-times "tabortdci\\." 1 } } */
+/* { dg-final { scan-assembler-times "tabortwc\\." 1 } } */
+/* { dg-final { scan-assembler-times "tabortwci\\." 2 } } */
+/* { dg-final { scan-assembler-times "tcheck\\." 1 } } */
+/* { dg-final { scan-assembler-times "trechkpt\\." 1 } } */
+/* { dg-final { scan-assembler-times "treclaim\\." 1 } } */
+/* { dg-final { scan-assembler-times "tsr\\." 3 } } */
+/* { dg-final { scan-assembler-times "mfspr" 4 } } */
+/* { dg-final { scan-assembler-times "mtspr" 4 } } */
+
+void use_builtins (long *p, char code, long *a, long *b)
+{
+ p[0] = __builtin_tbegin (0);
+ p[1] = __builtin_tend (0);
+ p[2] = __builtin_tendall ();
+ p[3] = __builtin_tabort (0);
+ p[4] = __builtin_tabort (code);
+
+ p[5] = __builtin_tabortdc (0xf, a[5], b[5]);
+ p[6] = __builtin_tabortdci (0xf, a[6], 13);
+ p[7] = __builtin_tabortwc (0xf, a[7], b[7]);
+ p[8] = __builtin_tabortwci (0xf, a[8], 13);
+
+ p[9] = __builtin_tcheck (5);
+ p[10] = __builtin_trechkpt ();
+ p[11] = __builtin_treclaim (0);
+ p[12] = __builtin_tresume ();
+ p[13] = __builtin_tsuspend ();
+ p[14] = __builtin_tsr (0);
+ p[15] = __builtin_ttest (); /* This expands to a tabortwci. */
+
+
+ p[16] = __builtin_get_texasr ();
+ p[17] = __builtin_get_texasru ();
+ p[18] = __builtin_get_tfhar ();
+ p[19] = __builtin_get_tfiar ();
+
+ __builtin_set_texasr (a[20]);
+ __builtin_set_texasru (a[21]);
+ __builtin_set_tfhar (a[22]);
+ __builtin_set_tfiar (a[23]);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/htm-xl-intrin-1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/htm-xl-intrin-1.c
new file mode 100644
index 000000000..5e92814b7
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/htm-xl-intrin-1.c
@@ -0,0 +1,32 @@
+/* This checks the availability of the XL compiler intrinsics for
+ transactional execution with the expected prototypes. */
+
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_htm_ok } */
+/* { dg-options "-O2 -mhtm" } */
+
+#include <htmxlintrin.h>
+
+void
+foo (void *TM_buff, long *result, unsigned char *code)
+{
+ *result++ = __TM_simple_begin ();
+ *result++ = __TM_begin (TM_buff);
+ *result++ = __TM_end ();
+ __TM_abort ();
+ __TM_named_abort (*code);
+ __TM_resume ();
+ __TM_suspend ();
+ *result++ = __TM_is_user_abort (TM_buff);
+ *result++ = __TM_is_named_user_abort (TM_buff, code);
+ *result++ = __TM_is_illegal (TM_buff);
+ *result++ = __TM_is_footprint_exceeded (TM_buff);
+ *result++ = __TM_nesting_depth (TM_buff);
+ *result++ = __TM_is_nested_too_deep (TM_buff);
+ *result++ = __TM_is_conflict (TM_buff);
+ *result++ = __TM_is_failure_persistent (TM_buff);
+ *result++ = __TM_failure_address (TM_buff);
+ *result++ = __TM_failure_code (TM_buff);
+}
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/mmfpgpr.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/mmfpgpr.c
new file mode 100644
index 000000000..7f2d3d3ef
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/mmfpgpr.c
@@ -0,0 +1,22 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O2 -mcpu=power6x -mmfpgpr" } */
+/* { dg-final { scan-assembler "mffgpr" } } */
+/* { dg-final { scan-assembler "mftgpr" } } */
+
+/* Test that we generate the instructions to move between the GPR and FPR
+ registers under power6x. */
+
+extern long return_long (void);
+extern double return_double (void);
+
+double return_double2 (void)
+{
+ return (double) return_long ();
+}
+
+long return_long2 (void)
+{
+ return (long) return_double ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-1.c
new file mode 100644
index 000000000..6fd3acc2a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-1.c
@@ -0,0 +1,65 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fvect-cost-model -fno-unroll-loops -fno-unroll-all-loops" } */
+
+#ifndef TYPE
+#define TYPE long long
+#endif
+
+#ifndef SIGN_TYPE
+#define SIGN_TYPE signed TYPE
+#endif
+
+#ifndef UNS_TYPE
+#define UNS_TYPE unsigned TYPE
+#endif
+
+typedef vector SIGN_TYPE v_sign;
+typedef vector UNS_TYPE v_uns;
+
+v_sign sign_add (v_sign a, v_sign b)
+{
+ return a + b;
+}
+
+v_sign sign_sub (v_sign a, v_sign b)
+{
+ return a - b;
+}
+
+v_sign sign_shift_left (v_sign a, v_sign b)
+{
+ return a << b;
+}
+
+v_sign sign_shift_right (v_sign a, v_sign b)
+{
+ return a >> b;
+}
+
+v_uns uns_add (v_uns a, v_uns b)
+{
+ return a + b;
+}
+
+v_uns uns_sub (v_uns a, v_uns b)
+{
+ return a - b;
+}
+
+v_uns uns_shift_left (v_uns a, v_uns b)
+{
+ return a << b;
+}
+
+v_uns uns_shift_right (v_uns a, v_uns b)
+{
+ return a >> b;
+}
+
+/* { dg-final { scan-assembler-times "vaddudm" 2 } } */
+/* { dg-final { scan-assembler-times "vsubudm" 2 } } */
+/* { dg-final { scan-assembler-times "vsld" 2 } } */
+/* { dg-final { scan-assembler-times "vsrad" 1 } } */
+/* { dg-final { scan-assembler-times "vsrd" 1 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
new file mode 100644
index 000000000..412040bfa
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
@@ -0,0 +1,204 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fvect-cost-model -fno-unroll-loops -fno-unroll-all-loops" } */
+
+#include <altivec.h>
+
+typedef vector long long v_sign;
+typedef vector unsigned long long v_uns;
+typedef vector bool long long v_bool;
+
+v_sign sign_add_1 (v_sign a, v_sign b)
+{
+ return __builtin_altivec_vaddudm (a, b);
+}
+
+v_sign sign_add_2 (v_sign a, v_sign b)
+{
+ return vec_add (a, b);
+}
+
+v_sign sign_add_3 (v_sign a, v_sign b)
+{
+ return vec_vaddudm (a, b);
+}
+
+v_sign sign_sub_1 (v_sign a, v_sign b)
+{
+ return __builtin_altivec_vsubudm (a, b);
+}
+
+v_sign sign_sub_2 (v_sign a, v_sign b)
+{
+ return vec_sub (a, b);
+}
+
+
+v_sign sign_sub_3 (v_sign a, v_sign b)
+{
+ return vec_vsubudm (a, b);
+}
+
+v_sign sign_min_1 (v_sign a, v_sign b)
+{
+ return __builtin_altivec_vminsd (a, b);
+}
+
+v_sign sign_min_2 (v_sign a, v_sign b)
+{
+ return vec_min (a, b);
+}
+
+v_sign sign_min_3 (v_sign a, v_sign b)
+{
+ return vec_vminsd (a, b);
+}
+
+v_sign sign_max_1 (v_sign a, v_sign b)
+{
+ return __builtin_altivec_vmaxsd (a, b);
+}
+
+v_sign sign_max_2 (v_sign a, v_sign b)
+{
+ return vec_max (a, b);
+}
+
+v_sign sign_max_3 (v_sign a, v_sign b)
+{
+ return vec_vmaxsd (a, b);
+}
+
+v_sign sign_abs (v_sign a)
+{
+ return vec_abs (a); /* xor, vsubudm, vmaxsd. */
+}
+
+v_bool sign_eq (v_sign a, v_sign b)
+{
+ return vec_cmpeq (a, b);
+}
+
+v_bool sign_lt (v_sign a, v_sign b)
+{
+ return vec_cmplt (a, b);
+}
+
+v_uns uns_add_2 (v_uns a, v_uns b)
+{
+ return vec_add (a, b);
+}
+
+v_uns uns_add_3 (v_uns a, v_uns b)
+{
+ return vec_vaddudm (a, b);
+}
+
+v_uns uns_sub_2 (v_uns a, v_uns b)
+{
+ return vec_sub (a, b);
+}
+
+v_uns uns_sub_3 (v_uns a, v_uns b)
+{
+ return vec_vsubudm (a, b);
+}
+
+v_uns uns_min_2 (v_uns a, v_uns b)
+{
+ return vec_min (a, b);
+}
+
+v_uns uns_min_3 (v_uns a, v_uns b)
+{
+ return vec_vminud (a, b);
+}
+
+v_uns uns_max_2 (v_uns a, v_uns b)
+{
+ return vec_max (a, b);
+}
+
+v_uns uns_max_3 (v_uns a, v_uns b)
+{
+ return vec_vmaxud (a, b);
+}
+
+v_bool uns_eq (v_uns a, v_uns b)
+{
+ return vec_cmpeq (a, b);
+}
+
+v_bool uns_lt (v_uns a, v_uns b)
+{
+ return vec_cmplt (a, b);
+}
+
+v_sign sign_rl_1 (v_sign a, v_sign b)
+{
+ return __builtin_altivec_vrld (a, b);
+}
+
+v_sign sign_rl_2 (v_sign a, v_uns b)
+{
+ return vec_rl (a, b);
+}
+
+v_uns uns_rl_2 (v_uns a, v_uns b)
+{
+ return vec_rl (a, b);
+}
+
+v_sign sign_sl_1 (v_sign a, v_sign b)
+{
+ return __builtin_altivec_vsld (a, b);
+}
+
+v_sign sign_sl_2 (v_sign a, v_uns b)
+{
+ return vec_sl (a, b);
+}
+
+v_sign sign_sl_3 (v_sign a, v_uns b)
+{
+ return vec_vsld (a, b);
+}
+
+v_uns uns_sl_2 (v_uns a, v_uns b)
+{
+ return vec_sl (a, b);
+}
+
+v_uns uns_sl_3 (v_uns a, v_uns b)
+{
+ return vec_vsld (a, b);
+}
+
+v_sign sign_sra_1 (v_sign a, v_sign b)
+{
+ return __builtin_altivec_vsrad (a, b);
+}
+
+v_sign sign_sra_2 (v_sign a, v_uns b)
+{
+ return vec_sra (a, b);
+}
+
+v_sign sign_sra_3 (v_sign a, v_uns b)
+{
+ return vec_vsrad (a, b);
+}
+
+/* { dg-final { scan-assembler-times "vaddudm" 5 } } */
+/* { dg-final { scan-assembler-times "vsubudm" 6 } } */
+/* { dg-final { scan-assembler-times "vmaxsd" 4 } } */
+/* { dg-final { scan-assembler-times "vminsd" 3 } } */
+/* { dg-final { scan-assembler-times "vmaxud" 2 } } */
+/* { dg-final { scan-assembler-times "vminud" 2 } } */
+/* { dg-final { scan-assembler-times "vcmpequd" 2 } } */
+/* { dg-final { scan-assembler-times "vcmpgtsd" 1 } } */
+/* { dg-final { scan-assembler-times "vcmpgtud" 1 } } */
+/* { dg-final { scan-assembler-times "vrld" 3 } } */
+/* { dg-final { scan-assembler-times "vsld" 5 } } */
+/* { dg-final { scan-assembler-times "vsrad" 3 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
new file mode 100644
index 000000000..b3f725f2d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
@@ -0,0 +1,104 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O3 -ftree-vectorize -fvect-cost-model" } */
+
+#include <altivec.h>
+
+typedef vector long long vll_sign;
+typedef vector unsigned long long vll_uns;
+typedef vector bool long long vll_bool;
+
+typedef vector int vi_sign;
+typedef vector unsigned int vi_uns;
+typedef vector bool int vi_bool;
+
+typedef vector short vs_sign;
+typedef vector unsigned short vs_uns;
+typedef vector bool short vs_bool;
+
+typedef vector signed char vc_sign;
+typedef vector unsigned char vc_uns;
+typedef vector bool char vc_bool;
+
+
+vi_sign vi_pack_1 (vll_sign a, vll_sign b)
+{
+ return __builtin_altivec_vpkudum (a, b);
+}
+
+vi_sign vi_pack_2 (vll_sign a, vll_sign b)
+{
+ return vec_pack (a, b);
+}
+
+vi_sign vi_pack_3 (vll_sign a, vll_sign b)
+{
+ return vec_vpkudum (a, b);
+}
+
+vs_sign vs_pack_1 (vi_sign a, vi_sign b)
+{
+ return __builtin_altivec_vpkuwum (a, b);
+}
+
+vs_sign vs_pack_2 (vi_sign a, vi_sign b)
+{
+ return vec_pack (a, b);
+}
+
+vs_sign vs_pack_3 (vi_sign a, vi_sign b)
+{
+ return vec_vpkuwum (a, b);
+}
+
+vc_sign vc_pack_1 (vs_sign a, vs_sign b)
+{
+ return __builtin_altivec_vpkuhum (a, b);
+}
+
+vc_sign vc_pack_2 (vs_sign a, vs_sign b)
+{
+ return vec_pack (a, b);
+}
+
+vc_sign vc_pack_3 (vs_sign a, vs_sign b)
+{
+ return vec_vpkuhum (a, b);
+}
+
+vll_sign vll_unpack_hi_1 (vi_sign a)
+{
+ return __builtin_altivec_vupkhsw (a);
+}
+
+vll_sign vll_unpack_hi_2 (vi_sign a)
+{
+ return vec_unpackh (a);
+}
+
+vll_sign vll_unpack_hi_3 (vi_sign a)
+{
+ return __builtin_vec_vupkhsw (a);
+}
+
+vll_sign vll_unpack_lo_1 (vi_sign a)
+{
+ return vec_vupklsw (a);
+}
+
+vll_sign vll_unpack_lo_2 (vi_sign a)
+{
+ return vec_unpackl (a);
+}
+
+vll_sign vll_unpack_lo_3 (vi_sign a)
+{
+ return vec_vupklsw (a);
+}
+
+/* { dg-final { scan-assembler-times "vpkudum" 3 } } */
+/* { dg-final { scan-assembler-times "vpkuwum" 3 } } */
+/* { dg-final { scan-assembler-times "vpkuhum" 3 } } */
+/* { dg-final { scan-assembler-times "vupklsw" 3 } } */
+/* { dg-final { scan-assembler-times "vupkhsw" 3 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
new file mode 100644
index 000000000..518a6aa5e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
@@ -0,0 +1,249 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O3 -ftree-vectorize -fvect-cost-model" } */
+
+#include <altivec.h>
+
+typedef vector long long vll_sign;
+typedef vector unsigned long long vll_uns;
+typedef vector bool long long vll_bool;
+
+typedef vector int vi_sign;
+typedef vector unsigned int vi_uns;
+typedef vector bool int vi_bool;
+
+typedef vector short vs_sign;
+typedef vector unsigned short vs_uns;
+typedef vector bool short vs_bool;
+
+typedef vector signed char vc_sign;
+typedef vector unsigned char vc_uns;
+typedef vector bool char vc_bool;
+
+vll_sign vll_clz_1 (vll_sign a)
+{
+ return __builtin_altivec_vclzd (a);
+}
+
+vll_sign vll_clz_2 (vll_sign a)
+{
+ return vec_vclz (a);
+}
+
+vll_sign vll_clz_3 (vll_sign a)
+{
+ return vec_vclzd (a);
+}
+
+vll_uns vll_clz_4 (vll_uns a)
+{
+ return vec_vclz (a);
+}
+
+vll_uns vll_clz_5 (vll_uns a)
+{
+ return vec_vclzd (a);
+}
+
+vi_sign vi_clz_1 (vi_sign a)
+{
+ return __builtin_altivec_vclzw (a);
+}
+
+vi_sign vi_clz_2 (vi_sign a)
+{
+ return vec_vclz (a);
+}
+
+vi_sign vi_clz_3 (vi_sign a)
+{
+ return vec_vclzw (a);
+}
+
+vi_uns vi_clz_4 (vi_uns a)
+{
+ return vec_vclz (a);
+}
+
+vi_uns vi_clz_5 (vi_uns a)
+{
+ return vec_vclzw (a);
+}
+
+vs_sign vs_clz_1 (vs_sign a)
+{
+ return __builtin_altivec_vclzh (a);
+}
+
+vs_sign vs_clz_2 (vs_sign a)
+{
+ return vec_vclz (a);
+}
+
+vs_sign vs_clz_3 (vs_sign a)
+{
+ return vec_vclzh (a);
+}
+
+vs_uns vs_clz_4 (vs_uns a)
+{
+ return vec_vclz (a);
+}
+
+vs_uns vs_clz_5 (vs_uns a)
+{
+ return vec_vclzh (a);
+}
+
+vc_sign vc_clz_1 (vc_sign a)
+{
+ return __builtin_altivec_vclzb (a);
+}
+
+vc_sign vc_clz_2 (vc_sign a)
+{
+ return vec_vclz (a);
+}
+
+vc_sign vc_clz_3 (vc_sign a)
+{
+ return vec_vclzb (a);
+}
+
+vc_uns vc_clz_4 (vc_uns a)
+{
+ return vec_vclz (a);
+}
+
+vc_uns vc_clz_5 (vc_uns a)
+{
+ return vec_vclzb (a);
+}
+
+vll_sign vll_popcnt_1 (vll_sign a)
+{
+ return __builtin_altivec_vpopcntd (a);
+}
+
+vll_sign vll_popcnt_2 (vll_sign a)
+{
+ return vec_vpopcnt (a);
+}
+
+vll_sign vll_popcnt_3 (vll_sign a)
+{
+ return vec_vpopcntd (a);
+}
+
+vll_uns vll_popcnt_4 (vll_uns a)
+{
+ return vec_vpopcnt (a);
+}
+
+vll_uns vll_popcnt_5 (vll_uns a)
+{
+ return vec_vpopcntd (a);
+}
+
+vi_sign vi_popcnt_1 (vi_sign a)
+{
+ return __builtin_altivec_vpopcntw (a);
+}
+
+vi_sign vi_popcnt_2 (vi_sign a)
+{
+ return vec_vpopcnt (a);
+}
+
+vi_sign vi_popcnt_3 (vi_sign a)
+{
+ return vec_vpopcntw (a);
+}
+
+vi_uns vi_popcnt_4 (vi_uns a)
+{
+ return vec_vpopcnt (a);
+}
+
+vi_uns vi_popcnt_5 (vi_uns a)
+{
+ return vec_vpopcntw (a);
+}
+
+vs_sign vs_popcnt_1 (vs_sign a)
+{
+ return __builtin_altivec_vpopcnth (a);
+}
+
+vs_sign vs_popcnt_2 (vs_sign a)
+{
+ return vec_vpopcnt (a);
+}
+
+vs_sign vs_popcnt_3 (vs_sign a)
+{
+ return vec_vpopcnth (a);
+}
+
+vs_uns vs_popcnt_4 (vs_uns a)
+{
+ return vec_vpopcnt (a);
+}
+
+vs_uns vs_popcnt_5 (vs_uns a)
+{
+ return vec_vpopcnth (a);
+}
+
+vc_sign vc_popcnt_1 (vc_sign a)
+{
+ return __builtin_altivec_vpopcntb (a);
+}
+
+vc_sign vc_popcnt_2 (vc_sign a)
+{
+ return vec_vpopcnt (a);
+}
+
+vc_sign vc_popcnt_3 (vc_sign a)
+{
+ return vec_vpopcntb (a);
+}
+
+vc_uns vc_popcnt_4 (vc_uns a)
+{
+ return vec_vpopcnt (a);
+}
+
+vc_uns vc_popcnt_5 (vc_uns a)
+{
+ return vec_vpopcntb (a);
+}
+
+vc_uns vc_gbb_1 (vc_uns a)
+{
+ return __builtin_altivec_vgbbd (a);
+}
+
+vc_sign vc_gbb_2 (vc_sign a)
+{
+ return vec_vgbbd (a);
+}
+
+vc_uns vc_gbb_3 (vc_uns a)
+{
+ return vec_vgbbd (a);
+}
+
+/* { dg-final { scan-assembler-times "vclzd" 5 } } */
+/* { dg-final { scan-assembler-times "vclzw" 5 } } */
+/* { dg-final { scan-assembler-times "vclzh" 5 } } */
+/* { dg-final { scan-assembler-times "vclzb" 5 } } */
+
+/* { dg-final { scan-assembler-times "vpopcntd" 5 } } */
+/* { dg-final { scan-assembler-times "vpopcntw" 5 } } */
+/* { dg-final { scan-assembler-times "vpopcnth" 5 } } */
+/* { dg-final { scan-assembler-times "vpopcntb" 5 } } */
+
+/* { dg-final { scan-assembler-times "vgbbd" 3 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-5.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-5.c
new file mode 100644
index 000000000..2e64551ff
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-5.c
@@ -0,0 +1,105 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fvect-cost-model -fno-unroll-loops -fno-unroll-all-loops" } */
+
+#include <altivec.h>
+
+#ifndef SIZE
+#define SIZE 1024
+#endif
+
+#ifndef ALIGN
+#define ALIGN 32
+#endif
+
+#ifndef ATTR_ALIGN
+#define ATTR_ALIGN __attribute__((__aligned__(ALIGN)))
+#endif
+
+#define DOIT(TYPE, PREFIX) \
+TYPE PREFIX ## _eqv_builtin (TYPE a, TYPE b) \
+{ \
+ return vec_eqv (a, b); \
+} \
+ \
+TYPE PREFIX ## _eqv_arith (TYPE a, TYPE b) \
+{ \
+ return ~(a ^ b); \
+} \
+ \
+TYPE PREFIX ## _nand_builtin (TYPE a, TYPE b) \
+{ \
+ return vec_nand (a, b); \
+} \
+ \
+TYPE PREFIX ## _nand_arith1 (TYPE a, TYPE b) \
+{ \
+ return ~(a & b); \
+} \
+ \
+TYPE PREFIX ## _nand_arith2 (TYPE a, TYPE b) \
+{ \
+ return (~a) | (~b); \
+} \
+ \
+TYPE PREFIX ## _orc_builtin (TYPE a, TYPE b) \
+{ \
+ return vec_orc (a, b); \
+} \
+ \
+TYPE PREFIX ## _orc_arith1 (TYPE a, TYPE b) \
+{ \
+ return (~ a) | b; \
+} \
+ \
+TYPE PREFIX ## _orc_arith2 (TYPE a, TYPE b) \
+{ \
+ return a | (~ b); \
+}
+
+#define DOIT_FLOAT(TYPE, PREFIX) \
+TYPE PREFIX ## _eqv_builtin (TYPE a, TYPE b) \
+{ \
+ return vec_eqv (a, b); \
+} \
+ \
+TYPE PREFIX ## _nand_builtin (TYPE a, TYPE b) \
+{ \
+ return vec_nand (a, b); \
+} \
+ \
+TYPE PREFIX ## _orc_builtin (TYPE a, TYPE b) \
+{ \
+ return vec_orc (a, b); \
+}
+
+typedef vector signed char sign_char_vec;
+typedef vector short sign_short_vec;
+typedef vector int sign_int_vec;
+typedef vector long long sign_llong_vec;
+
+typedef vector unsigned char uns_char_vec;
+typedef vector unsigned short uns_short_vec;
+typedef vector unsigned int uns_int_vec;
+typedef vector unsigned long long uns_llong_vec;
+
+typedef vector float float_vec;
+typedef vector double double_vec;
+
+DOIT(sign_char_vec, sign_char)
+DOIT(sign_short_vec, sign_short)
+DOIT(sign_int_vec, sign_int)
+DOIT(sign_llong_vec, sign_llong)
+
+DOIT(uns_char_vec, uns_char)
+DOIT(uns_short_vec, uns_short)
+DOIT(uns_int_vec, uns_int)
+DOIT(uns_llong_vec, uns_llong)
+
+DOIT_FLOAT(float_vec, float)
+DOIT_FLOAT(double_vec, double)
+
+/* { dg-final { scan-assembler-times "xxleqv" 18 } } */
+/* { dg-final { scan-assembler-times "xxlnand" 26 } } */
+/* { dg-final { scan-assembler-times "xxlorc" 26 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-6.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-6.c
new file mode 100644
index 000000000..8b81781c6
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-6.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2" } */
+
+vector float dbl_to_float_p8 (double x) { return __builtin_vsx_xscvdpspn (x); }
+double float_to_dbl_p8 (vector float x) { return __builtin_vsx_xscvspdpn (x); }
+
+/* { dg-final { scan-assembler "xscvdpspn" } } */
+/* { dg-final { scan-assembler "xscvspdpn" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c
new file mode 100644
index 000000000..45a300fb9
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c
@@ -0,0 +1,32 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2" } */
+
+#include <altivec.h>
+
+typedef vector int v_sign;
+typedef vector unsigned int v_uns;
+
+v_sign even_sign (v_sign a, v_sign b)
+{
+ return vec_vmrgew (a, b);
+}
+
+v_uns even_uns (v_uns a, v_uns b)
+{
+ return vec_vmrgew (a, b);
+}
+
+v_sign odd_sign (v_sign a, v_sign b)
+{
+ return vec_vmrgow (a, b);
+}
+
+v_uns odd_uns (v_uns a, v_uns b)
+{
+ return vec_vmrgow (a, b);
+}
+
+/* { dg-final { scan-assembler-times "vmrgew" 2 } } */
+/* { dg-final { scan-assembler-times "vmrgow" 2 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-fp.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-fp.c
new file mode 100644
index 000000000..3cfd8161d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-fp.c
@@ -0,0 +1,139 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2 -mupper-regs-df -mupper-regs-sf -fno-math-errno" } */
+
+float abs_sf (float *p)
+{
+ float f = *p;
+ __asm__ ("# reg %x0" : "+v" (f));
+ return __builtin_fabsf (f);
+}
+
+float nabs_sf (float *p)
+{
+ float f = *p;
+ __asm__ ("# reg %x0" : "+v" (f));
+ return - __builtin_fabsf (f);
+}
+
+float neg_sf (float *p)
+{
+ float f = *p;
+ __asm__ ("# reg %x0" : "+v" (f));
+ return - f;
+}
+
+float add_sf (float *p, float *q)
+{
+ float f1 = *p;
+ float f2 = *q;
+ __asm__ ("# reg %x0, %x1" : "+v" (f1), "+v" (f2));
+ return f1 + f2;
+}
+
+float sub_sf (float *p, float *q)
+{
+ float f1 = *p;
+ float f2 = *q;
+ __asm__ ("# reg %x0, %x1" : "+v" (f1), "+v" (f2));
+ return f1 - f2;
+}
+
+float mul_sf (float *p, float *q)
+{
+ float f1 = *p;
+ float f2 = *q;
+ __asm__ ("# reg %x0, %x1" : "+v" (f1), "+v" (f2));
+ return f1 * f2;
+}
+
+float div_sf (float *p, float *q)
+{
+ float f1 = *p;
+ float f2 = *q;
+ __asm__ ("# reg %x0, %x1" : "+v" (f1), "+v" (f2));
+ return f1 / f2;
+}
+
+float sqrt_sf (float *p)
+{
+ float f = *p;
+ __asm__ ("# reg %x0" : "+v" (f));
+ return __builtin_sqrtf (f);
+}
+
+
+double abs_df (double *p)
+{
+ double d = *p;
+ __asm__ ("# reg %x0" : "+v" (d));
+ return __builtin_fabs (d);
+}
+
+double nabs_df (double *p)
+{
+ double d = *p;
+ __asm__ ("# reg %x0" : "+v" (d));
+ return - __builtin_fabs (d);
+}
+
+double neg_df (double *p)
+{
+ double d = *p;
+ __asm__ ("# reg %x0" : "+v" (d));
+ return - d;
+}
+
+double add_df (double *p, double *q)
+{
+ double d1 = *p;
+ double d2 = *q;
+ __asm__ ("# reg %x0, %x1" : "+v" (d1), "+v" (d2));
+ return d1 + d2;
+}
+
+double sub_df (double *p, double *q)
+{
+ double d1 = *p;
+ double d2 = *q;
+ __asm__ ("# reg %x0, %x1" : "+v" (d1), "+v" (d2));
+ return d1 - d2;
+}
+
+double mul_df (double *p, double *q)
+{
+ double d1 = *p;
+ double d2 = *q;
+ __asm__ ("# reg %x0, %x1" : "+v" (d1), "+v" (d2));
+ return d1 * d2;
+}
+
+double div_df (double *p, double *q)
+{
+ double d1 = *p;
+ double d2 = *q;
+ __asm__ ("# reg %x0, %x1" : "+v" (d1), "+v" (d2));
+ return d1 / d2;
+}
+
+double sqrt_df (float *p)
+{
+ double d = *p;
+ __asm__ ("# reg %x0" : "+v" (d));
+ return __builtin_sqrt (d);
+}
+
+/* { dg-final { scan-assembler "xsabsdp" } } */
+/* { dg-final { scan-assembler "xsadddp" } } */
+/* { dg-final { scan-assembler "xsaddsp" } } */
+/* { dg-final { scan-assembler "xsdivdp" } } */
+/* { dg-final { scan-assembler "xsdivsp" } } */
+/* { dg-final { scan-assembler "xsmuldp" } } */
+/* { dg-final { scan-assembler "xsmulsp" } } */
+/* { dg-final { scan-assembler "xsnabsdp" } } */
+/* { dg-final { scan-assembler "xsnegdp" } } */
+/* { dg-final { scan-assembler "xssqrtdp" } } */
+/* { dg-final { scan-assembler "xssqrtsp" } } */
+/* { dg-final { scan-assembler "xssubdp" } } */
+/* { dg-final { scan-assembler "xssubsp" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c
new file mode 100644
index 000000000..86bde3241
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c
@@ -0,0 +1,85 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O3 -mvsx-timode" } */
+
+#include <altivec.h>
+
+#ifndef TYPE
+#define TYPE vector __int128_t
+#endif
+
+TYPE
+do_addcuq (TYPE p, TYPE q)
+{
+ return __builtin_vec_vaddcuq (p, q);
+}
+
+TYPE
+do_adduqm (TYPE p, TYPE q)
+{
+ return __builtin_vec_add (p, q);
+}
+
+TYPE
+do_addeuqm (TYPE p, TYPE q, TYPE r)
+{
+ return __builtin_vec_vaddeuqm (p, q, r);
+}
+
+TYPE
+do_addecuq (TYPE p, TYPE q, TYPE r)
+{
+ return __builtin_vec_vaddecuq (p, q, r);
+}
+
+TYPE
+do_subeuqm (TYPE p, TYPE q, TYPE r)
+{
+ return __builtin_vec_vsubeuqm (p, q, r);
+}
+
+TYPE
+do_subecuq (TYPE p, TYPE q, TYPE r)
+{
+ return __builtin_vec_vsubecuq (p, q, r);
+}
+
+TYPE
+do_subcuq (TYPE p, TYPE q)
+{
+ return __builtin_vec_vsubcuq (p, q);
+}
+
+TYPE
+do_subuqm (TYPE p, TYPE q)
+{
+ return __builtin_vec_vsubuqm (p, q);
+}
+
+TYPE
+do_zero (void)
+{
+ return (TYPE) { 0 };
+}
+
+TYPE
+do_minus_one (void)
+{
+ return (TYPE) { -1 };
+}
+
+/* { dg-final { scan-assembler "vaddcuq" } } */
+/* { dg-final { scan-assembler "vadduqm" } } */
+/* { dg-final { scan-assembler "vaddecuq" } } */
+/* { dg-final { scan-assembler "vaddeuqm" } } */
+/* { dg-final { scan-assembler "vsubecuq" } } */
+/* { dg-final { scan-assembler "vsubeuqm" } } */
+/* { dg-final { scan-assembler "vsubcuq" } } */
+/* { dg-final { scan-assembler "vsubuqm" } } */
+/* { dg-final { scan-assembler-not "mtvsrd" } } */
+/* { dg-final { scan-assembler-not "mfvsrd" } } */
+/* { dg-final { scan-assembler-not "ori 2,2,0" } } */
+/* { dg-final { scan-assembler-not "xxpermdi" } } */
+/* { dg-final { scan-assembler-not "stxvd2x" } } */
+/* { dg-final { scan-assembler-not "stxvw4x" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-int128-2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-int128-2.c
new file mode 100644
index 000000000..1064894dc
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-int128-2.c
@@ -0,0 +1,177 @@
+/* { dg-do run { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target p8vector_hw } */
+/* { dg-options "-mcpu=power8 -O2" } */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <altivec.h>
+
+#ifdef DEBUG
+#include <stdio.h>
+#define UNUSED
+
+#ifdef __LITTLE_ENDIAN__
+#define HI_WORD 1
+#define LO_WORD 0
+#else
+#define HI_WORD 0
+#define LO_WORD 1
+#endif
+
+#else
+#define UNUSED __attribute__((__unused__))
+#endif
+
+#ifndef S_TYPE
+#define S_TYPE __uint128_t
+#endif
+
+#ifndef V_TYPE
+#define V_TYPE vector S_TYPE
+#endif
+
+static int compare (S_TYPE, V_TYPE, const char *, const char *)
+ __attribute__((__noinline__));
+
+static int
+compare (S_TYPE scalar,
+ V_TYPE vect,
+ const char *nl UNUSED,
+ const char *which UNUSED)
+{
+ unsigned long scalar_lo = (unsigned long) scalar;
+ unsigned long scalar_hi = (unsigned long) (scalar >> 64);
+ unsigned long vect_lo;
+ unsigned long vect_hi;
+ vector long long tmp;
+ int ret;
+
+ __asm__ ("mfvsrd %0,%x3\n\t"
+ "xxpermdi %x2,%x3,%x3,3\n\t"
+ "mfvsrd %1,%x2"
+ : "=r" (vect_hi),
+ "=r" (vect_lo),
+ "=wa" (tmp)
+ : "wa" (vect));
+
+ ret = (scalar_lo != vect_lo) || (scalar_hi != vect_hi);
+
+#ifdef DEBUG
+ printf ("%s%s: 0x%.16lx %.16lx %s 0x%.16lx %.16lx\n",
+ nl, which,
+ scalar_hi, scalar_lo,
+ (ret) ? "!=" : "==",
+ vect_hi, vect_lo);
+
+ fflush (stdout);
+#endif
+
+ return ret;
+}
+
+static void convert_via_mem (V_TYPE *, S_TYPE *)
+ __attribute__((__noinline__));
+
+static void
+convert_via_mem (V_TYPE *v, S_TYPE *s)
+{
+ *v = (V_TYPE) { *s };
+ __asm__ volatile ("nop"
+ : "+m" (*s), "+m" (*v)
+ :
+ : "memory");
+
+}
+
+
+/* Check if vadduqm returns the same values as normal 128-bit add. */
+
+/* Values to add together. */
+const static struct {
+ unsigned long hi_1;
+ unsigned long lo_1;
+ unsigned long hi_2;
+ unsigned long lo_2;
+} values[] = {
+ { 0x0000000000000000UL, 0xfffffffffffffffeUL,
+ 0x0000000000000000UL, 0x0000000000000002UL },
+ { 0x0000000000000000UL, 0x0000000000000002UL,
+ 0x0000000000000000UL, 0xfffffffffffffffeUL },
+ { 0xffffffffffffffffUL, 0xfffffffffffffffeUL,
+ 0x0000000000000000UL, 0x0000000000000002UL },
+ { 0xfffffffffffffff2UL, 0xffffffffffffffffUL,
+ 0x0000000000000002UL, 0x0000000000000000UL },
+ { 0x7fffffffffffffffUL, 0xfffffffffffffffeUL,
+ 0x0000000000000000UL, 0x0000000000000002UL },
+ { 0x7ffffffffffffff2UL, 0xffffffffffffffffUL,
+ 0x0000000000000002UL, 0x0000000000000000UL },
+};
+
+int
+main (void)
+{
+ int reg_errors = 0;
+ int mem_errors = 0;
+ size_t i;
+ const char *nl = "";
+
+ for (i = 0; i < sizeof (values) / sizeof (values[0]); i++)
+ {
+ S_TYPE s_reg_res, s_reg_in1, s_reg_in2, s_mem_res, s_mem_in1, s_mem_in2;
+ V_TYPE v_reg_res, v_reg_in1, v_reg_in2, v_mem_res, v_mem_in1, v_mem_in2;
+
+ s_reg_in1 = ((((S_TYPE)values[i].hi_1 << 64)) + ((S_TYPE)values[i].lo_1));
+ reg_errors += compare (s_reg_in1, (V_TYPE) { s_reg_in1 }, nl, "reg, in1");
+
+ s_reg_in2 = ((((S_TYPE)values[i].hi_2 << 64)) + ((S_TYPE)values[i].lo_2));
+ reg_errors += compare (s_reg_in2, (V_TYPE) { s_reg_in2 }, "", "reg, in2");
+
+ s_reg_res = s_reg_in1 + s_reg_in2;
+
+ v_reg_in1 = (V_TYPE) { s_reg_in1 };
+ v_reg_in2 = (V_TYPE) { s_reg_in2 };
+ v_reg_res = vec_vadduqm (v_reg_in1, v_reg_in2);
+ reg_errors += compare (s_reg_res, v_reg_res, "", "reg, res");
+
+ s_mem_in1 = s_reg_in1;
+ convert_via_mem (&v_mem_in1, &s_mem_in1);
+ mem_errors += compare (s_mem_in1, (V_TYPE) { s_mem_in1 }, "\n", "mem, in1");
+
+ s_mem_in2 = s_reg_in2;
+ convert_via_mem (&v_mem_in2, &s_mem_in2);
+ mem_errors += compare (s_mem_in2, (V_TYPE) { s_mem_in2 }, "", "mem, in2");
+
+ s_mem_res = s_mem_in1 + s_mem_in2;
+ v_mem_res = vec_vadduqm (v_mem_in1, v_mem_in2);
+ mem_errors += compare (s_mem_res, v_mem_res, "", "mem, res");
+
+ nl = "\n";
+ }
+
+#ifdef DEBUG
+ putchar ('\n');
+
+ if (!reg_errors)
+ fputs ("no errors found on register operations\n", stdout);
+ else
+ printf ("%d error%s found on register operations\n",
+ reg_errors,
+ (reg_errors == 1) ? "s" : "");
+
+ if (!mem_errors)
+ fputs ("no errors found on memory operations\n", stdout);
+ else
+ printf ("%d error%s found on memory operations\n",
+ mem_errors,
+ (mem_errors == 1) ? "s" : "");
+
+ fflush (stdout);
+#endif
+
+ if ((reg_errors + mem_errors) != 0)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c
new file mode 100644
index 000000000..33f19991f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c
@@ -0,0 +1,42 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2 -mupper-regs-df -mupper-regs-sf" } */
+
+float load_sf (float *p)
+{
+ float f = *p;
+ __asm__ ("# reg %x0" : "+v" (f));
+ return f;
+}
+
+double load_df (double *p)
+{
+ double d = *p;
+ __asm__ ("# reg %x0" : "+v" (d));
+ return d;
+}
+
+double load_dfsf (float *p)
+{
+ double d = (double) *p;
+ __asm__ ("# reg %x0" : "+v" (d));
+ return d;
+}
+
+void store_sf (float *p, float f)
+{
+ __asm__ ("# reg %x0" : "+v" (f));
+ *p = f;
+}
+
+void store_df (double *p, double d)
+{
+ __asm__ ("# reg %x0" : "+v" (d));
+ *p = d;
+}
+
+/* { dg-final { scan-assembler "lxsspx" } } */
+/* { dg-final { scan-assembler "lxsdx" } } */
+/* { dg-final { scan-assembler "stxsspx" } } */
+/* { dg-final { scan-assembler "stxsdx" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c
new file mode 100644
index 000000000..d1664985a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c
@@ -0,0 +1,27 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-O3 -mcpu=power8" } */
+/* { dg-final { scan-assembler "vbpermq" } } */
+/* { dg-final { scan-assembler "mfvsrd" } } */
+/* { dg-final { scan-assembler-not "stfd" } } */
+/* { dg-final { scan-assembler-not "stxvd2x" } } */
+
+#include <altivec.h>
+
+#if __LITTLE_ENDIAN__
+#define OFFSET 1
+#else
+#define OFFSET 0
+#endif
+
+long foos (vector signed char a, vector signed char b)
+{
+ return vec_extract (vec_vbpermq (a, b), OFFSET);
+}
+
+long foou (vector unsigned char a, vector unsigned char b)
+{
+ return vec_extract (vec_vbpermq (a, b), OFFSET);
+}
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-1.c
new file mode 100644
index 000000000..9a975bd6f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-1.c
@@ -0,0 +1,200 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fvect-cost-model -fno-unroll-loops -fno-unroll-all-loops" } */
+
+#ifndef SIZE
+#define SIZE 1024
+#endif
+
+#ifndef ALIGN
+#define ALIGN 32
+#endif
+
+#ifndef TYPE
+#define TYPE long long
+#endif
+
+#ifndef SIGN_TYPE
+#define SIGN_TYPE signed TYPE
+#endif
+
+#ifndef UNS_TYPE
+#define UNS_TYPE unsigned TYPE
+#endif
+
+#define ALIGN_ATTR __attribute__((__aligned__(ALIGN)))
+
+SIGN_TYPE sa[SIZE] ALIGN_ATTR;
+SIGN_TYPE sb[SIZE] ALIGN_ATTR;
+SIGN_TYPE sc[SIZE] ALIGN_ATTR;
+
+UNS_TYPE ua[SIZE] ALIGN_ATTR;
+UNS_TYPE ub[SIZE] ALIGN_ATTR;
+UNS_TYPE uc[SIZE] ALIGN_ATTR;
+
+void
+sign_add (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ sa[i] = sb[i] + sc[i];
+}
+
+void
+sign_sub (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ sa[i] = sb[i] - sc[i];
+}
+
+void
+sign_shift_left (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ sa[i] = sb[i] << sc[i];
+}
+
+void
+sign_shift_right (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ sa[i] = sb[i] >> sc[i];
+}
+
+void
+sign_max (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ sa[i] = (sb[i] > sc[i]) ? sb[i] : sc[i];
+}
+
+void
+sign_min (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ sa[i] = (sb[i] < sc[i]) ? sb[i] : sc[i];
+}
+
+void
+sign_abs (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ sa[i] = (sb[i] < 0) ? -sb[i] : sb[i]; /* xor, vsubudm, vmaxsd. */
+}
+
+void
+sign_eq (SIGN_TYPE val1, SIGN_TYPE val2)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ sa[i] = (sb[i] == sc[i]) ? val1 : val2;
+}
+
+void
+sign_lt (SIGN_TYPE val1, SIGN_TYPE val2)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ sa[i] = (sb[i] < sc[i]) ? val1 : val2;
+}
+
+void
+uns_add (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ ua[i] = ub[i] + uc[i];
+}
+
+void
+uns_sub (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ ua[i] = ub[i] - uc[i];
+}
+
+void
+uns_shift_left (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ ua[i] = ub[i] << uc[i];
+}
+
+void
+uns_shift_right (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ ua[i] = ub[i] >> uc[i];
+}
+
+void
+uns_max (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ ua[i] = (ub[i] > uc[i]) ? ub[i] : uc[i];
+}
+
+void
+uns_min (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ ua[i] = (ub[i] < uc[i]) ? ub[i] : uc[i];
+}
+
+void
+uns_eq (UNS_TYPE val1, UNS_TYPE val2)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ ua[i] = (ub[i] == uc[i]) ? val1 : val2;
+}
+
+void
+uns_lt (UNS_TYPE val1, UNS_TYPE val2)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ ua[i] = (ub[i] < uc[i]) ? val1 : val2;
+}
+
+/* { dg-final { scan-assembler-times "\[\t \]vaddudm\[\t \]" 2 } } */
+/* { dg-final { scan-assembler-times "\[\t \]vsubudm\[\t \]" 3 } } */
+/* { dg-final { scan-assembler-times "\[\t \]vmaxsd\[\t \]" 2 } } */
+/* { dg-final { scan-assembler-times "\[\t \]vmaxud\[\t \]" 1 } } */
+/* { dg-final { scan-assembler-times "\[\t \]vminsd\[\t \]" 1 } } */
+/* { dg-final { scan-assembler-times "\[\t \]vminud\[\t \]" 1 } } */
+/* { dg-final { scan-assembler-times "\[\t \]vsld\[\t \]" 2 } } */
+/* { dg-final { scan-assembler-times "\[\t \]vsrad\[\t \]" 1 } } */
+/* { dg-final { scan-assembler-times "\[\t \]vsrd\[\t \]" 1 } } */
+/* { dg-final { scan-assembler-times "\[\t \]vcmpequd\[\t \]" 2 } } */
+/* { dg-final { scan-assembler-times "\[\t \]vcmpgtsd\[\t \]" 1 } } */
+/* { dg-final { scan-assembler-times "\[\t \]vcmpgtud\[\t \]" 1 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-2.c
new file mode 100644
index 000000000..8feba0a13
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-2.c
@@ -0,0 +1,30 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fvect-cost-model" } */
+
+#include <stddef.h>
+
+#ifndef SIZE
+#define SIZE 1024
+#endif
+
+#ifndef ALIGN
+#define ALIGN 32
+#endif
+
+#define ALIGN_ATTR __attribute__((__aligned__(ALIGN)))
+
+long long sign_ll[SIZE] ALIGN_ATTR;
+int sign_i [SIZE] ALIGN_ATTR;
+
+void copy_int_to_long_long (void)
+{
+ size_t i;
+
+ for (i = 0; i < SIZE; i++)
+ sign_ll[i] = sign_i[i];
+}
+
+/* { dg-final { scan-assembler "vupkhsw" } } */
+/* { dg-final { scan-assembler "vupklsw" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-3.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-3.c
new file mode 100644
index 000000000..570f2e599
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-3.c
@@ -0,0 +1,29 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fvect-cost-model" } */
+
+#include <stddef.h>
+
+#ifndef SIZE
+#define SIZE 1024
+#endif
+
+#ifndef ALIGN
+#define ALIGN 32
+#endif
+
+#define ALIGN_ATTR __attribute__((__aligned__(ALIGN)))
+
+long long sign_ll[SIZE] ALIGN_ATTR;
+int sign_i [SIZE] ALIGN_ATTR;
+
+void copy_long_long_to_int (void)
+{
+ size_t i;
+
+ for (i = 0; i < SIZE; i++)
+ sign_i[i] = sign_ll[i];
+}
+
+/* { dg-final { scan-assembler "vpkudum" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-4.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-4.c
new file mode 100644
index 000000000..90df88680
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-4.c
@@ -0,0 +1,69 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fvect-cost-model -fno-unroll-loops -fno-unroll-all-loops" } */
+
+#ifndef SIZE
+#define SIZE 1024
+#endif
+
+#ifndef ALIGN
+#define ALIGN 32
+#endif
+
+#define ALIGN_ATTR __attribute__((__aligned__(ALIGN)))
+
+#define DO_BUILTIN(PREFIX, TYPE, CLZ, POPCNT) \
+TYPE PREFIX ## _a[SIZE] ALIGN_ATTR; \
+TYPE PREFIX ## _b[SIZE] ALIGN_ATTR; \
+ \
+void \
+PREFIX ## _clz (void) \
+{ \
+ unsigned long i; \
+ \
+ for (i = 0; i < SIZE; i++) \
+ PREFIX ## _a[i] = CLZ (PREFIX ## _b[i]); \
+} \
+ \
+void \
+PREFIX ## _popcnt (void) \
+{ \
+ unsigned long i; \
+ \
+ for (i = 0; i < SIZE; i++) \
+ PREFIX ## _a[i] = POPCNT (PREFIX ## _b[i]); \
+}
+
+#if !defined(DO_LONG_LONG) && !defined(DO_LONG) && !defined(DO_INT) && !defined(DO_SHORT) && !defined(DO_CHAR)
+#define DO_INT 1
+#endif
+
+#if DO_LONG_LONG
+/* At the moment, only int is auto vectorized. */
+DO_BUILTIN (sll, long long, __builtin_clzll, __builtin_popcountll)
+DO_BUILTIN (ull, unsigned long long, __builtin_clzll, __builtin_popcountll)
+#endif
+
+#if defined(_ARCH_PPC64) && DO_LONG
+DO_BUILTIN (sl, long, __builtin_clzl, __builtin_popcountl)
+DO_BUILTIN (ul, unsigned long, __builtin_clzl, __builtin_popcountl)
+#endif
+
+#if DO_INT
+DO_BUILTIN (si, int, __builtin_clz, __builtin_popcount)
+DO_BUILTIN (ui, unsigned int, __builtin_clz, __builtin_popcount)
+#endif
+
+#if DO_SHORT
+DO_BUILTIN (ss, short, __builtin_clz, __builtin_popcount)
+DO_BUILTIN (us, unsigned short, __builtin_clz, __builtin_popcount)
+#endif
+
+#if DO_CHAR
+DO_BUILTIN (sc, signed char, __builtin_clz, __builtin_popcount)
+DO_BUILTIN (uc, unsigned char, __builtin_clz, __builtin_popcount)
+#endif
+
+/* { dg-final { scan-assembler-times "vclzw" 2 } } */
+/* { dg-final { scan-assembler-times "vpopcntw" 2 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-5.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-5.c
new file mode 100644
index 000000000..17563bf47
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-5.c
@@ -0,0 +1,87 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fvect-cost-model -fno-unroll-loops -fno-unroll-all-loops" } */
+
+#ifndef SIZE
+#define SIZE 1024
+#endif
+
+#ifndef ALIGN
+#define ALIGN 32
+#endif
+
+#ifndef ATTR_ALIGN
+#define ATTR_ALIGN __attribute__((__aligned__(ALIGN)))
+#endif
+
+#ifndef TYPE
+#define TYPE unsigned int
+#endif
+
+TYPE in1 [SIZE] ATTR_ALIGN;
+TYPE in2 [SIZE] ATTR_ALIGN;
+TYPE eqv [SIZE] ATTR_ALIGN;
+TYPE nand1[SIZE] ATTR_ALIGN;
+TYPE nand2[SIZE] ATTR_ALIGN;
+TYPE orc1 [SIZE] ATTR_ALIGN;
+TYPE orc2 [SIZE] ATTR_ALIGN;
+
+void
+do_eqv (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ {
+ eqv[i] = ~(in1[i] ^ in2[i]);
+ }
+}
+
+void
+do_nand1 (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ {
+ nand1[i] = ~(in1[i] & in2[i]);
+ }
+}
+
+void
+do_nand2 (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ {
+ nand2[i] = (~in1[i]) | (~in2[i]);
+ }
+}
+
+void
+do_orc1 (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ {
+ orc1[i] = (~in1[i]) | in2[i];
+ }
+}
+
+void
+do_orc2 (void)
+{
+ unsigned long i;
+
+ for (i = 0; i < SIZE; i++)
+ {
+ orc1[i] = in1[i] | (~in2[i]);
+ }
+}
+
+/* { dg-final { scan-assembler-times "xxleqv" 1 } } */
+/* { dg-final { scan-assembler-times "xxlnand" 2 } } */
+/* { dg-final { scan-assembler-times "xxlorc" 2 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pack01.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pack01.c
new file mode 100644
index 000000000..efac4087c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pack01.c
@@ -0,0 +1,91 @@
+/* { dg-do run { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target p8vector_hw } */
+/* { dg-options "-mcpu=power8 -O2" } */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <altivec.h>
+
+#ifdef DEBUG
+#include <stdio.h>
+#endif
+
+typedef __int128_t __attribute__((__vector_size__(16))) vector_128_t;
+typedef __int128_t scalar_128_t;
+typedef unsigned long long scalar_64_t;
+
+volatile scalar_64_t one = 1;
+volatile scalar_64_t two = 2;
+
+int
+main (void)
+{
+ scalar_128_t a = (((scalar_128_t)one) << 64) | ((scalar_128_t)two);
+ vector_128_t v1 = (vector_128_t) { a };
+ vector_128_t v2 = __builtin_pack_vector_int128 (one, two);
+ scalar_64_t x0 = __builtin_unpack_vector_int128 (v1, 0);
+ scalar_64_t x1 = __builtin_unpack_vector_int128 (v1, 1);
+ vector_128_t v3 = __builtin_pack_vector_int128 (x0, x1);
+
+ size_t i;
+ union {
+ scalar_128_t i128;
+ vector_128_t v128;
+ scalar_64_t u64;
+ unsigned char uc[sizeof (scalar_128_t)];
+ char c[sizeof (scalar_128_t)];
+ } u, u2;
+
+#ifdef DEBUG
+ {
+ printf ("a = 0x");
+ u.i128 = a;
+ for (i = 0; i < sizeof (scalar_128_t); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf ("\nv1 = 0x");
+ u.v128 = v1;
+ for (i = 0; i < sizeof (scalar_128_t); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf ("\nv2 = 0x");
+ u.v128 = v2;
+ for (i = 0; i < sizeof (scalar_128_t); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf ("\nv3 = 0x");
+ u.v128 = v3;
+ for (i = 0; i < sizeof (scalar_128_t); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf ("\nx0 = 0x");
+ u.u64 = x0;
+ for (i = 0; i < sizeof (scalar_64_t); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf ("\nx1 = 0x");
+ u.u64 = x1;
+ for (i = 0; i < sizeof (scalar_64_t); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf ("\n");
+ }
+#endif
+
+ u2.i128 = a;
+ u.v128 = v1;
+ if (memcmp (u.c, u2.c, sizeof (scalar_128_t)) != 0)
+ abort ();
+
+ u.v128 = v2;
+ if (memcmp (u.c, u2.c, sizeof (scalar_128_t)) != 0)
+ abort ();
+
+ u.v128 = v3;
+ if (memcmp (u.c, u2.c, sizeof (scalar_128_t)) != 0)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pack02.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pack02.c
new file mode 100644
index 000000000..584d6c292
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pack02.c
@@ -0,0 +1,95 @@
+/* { dg-do run { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_fprs } */
+/* { dg-options "-O2 -mhard-float" } */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <math.h>
+
+#ifdef DEBUG
+#include <stdio.h>
+#endif
+
+int
+main (void)
+{
+ double high = pow (2.0, 60);
+ double low = 2.0;
+ long double a = ((long double)high) + ((long double)low);
+ double x0 = __builtin_unpack_longdouble (a, 0);
+ double x1 = __builtin_unpack_longdouble (a, 1);
+ long double b = __builtin_pack_longdouble (x0, x1);
+
+#ifdef DEBUG
+ {
+ size_t i;
+ union {
+ long double ld;
+ double d;
+ unsigned char uc[sizeof (long double)];
+ char c[sizeof (long double)];
+ } u;
+
+ printf ("a = 0x");
+ u.ld = a;
+ for (i = 0; i < sizeof (long double); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf (", %Lg\n", a);
+
+ printf ("b = 0x");
+ u.ld = b;
+ for (i = 0; i < sizeof (long double); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf (", %Lg\n", b);
+
+ printf ("hi = 0x");
+ u.d = high;
+ for (i = 0; i < sizeof (double); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf (",%*s %g\n", (int)(2 * (sizeof (long double) - sizeof (double))), "", high);
+
+ printf ("lo = 0x");
+ u.d = low;
+ for (i = 0; i < sizeof (double); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf (",%*s %g\n", (int)(2 * (sizeof (long double) - sizeof (double))), "", low);
+
+ printf ("x0 = 0x");
+ u.d = x0;
+ for (i = 0; i < sizeof (double); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf (",%*s %g\n", (int)(2 * (sizeof (long double) - sizeof (double))), "", x0);
+
+ printf ("x1 = 0x");
+ u.d = x1;
+ for (i = 0; i < sizeof (double); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf (",%*s %g\n", (int)(2 * (sizeof (long double) - sizeof (double))), "", x1);
+ }
+#endif
+
+ if (high != x0)
+ abort ();
+
+ if (low != x1)
+ abort ();
+
+ if (a != b)
+ abort ();
+
+ if (x0 != high)
+ abort ();
+
+ if (x1 != low)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pack03.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pack03.c
new file mode 100644
index 000000000..dfaf2efa0
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pack03.c
@@ -0,0 +1,88 @@
+/* { dg-do run { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target dfp_hw } */
+/* { dg-options "-O2 -mhard-dfp" } */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <math.h>
+
+#ifdef DEBUG
+#include <stdio.h>
+#endif
+
+int
+main (void)
+{
+ _Decimal128 one = (_Decimal128)1.0;
+ _Decimal128 two = (_Decimal128)2.0;
+ _Decimal128 ten = (_Decimal128)10.0;
+ _Decimal128 a = one;
+ _Decimal128 b;
+ _Decimal128 c;
+ unsigned long long x0;
+ unsigned long long x1;
+ size_t i;
+
+ for (i = 0; i < 25; i++)
+ a *= ten;
+
+ a += two;
+
+ x0 = __builtin_unpack_dec128 (a, 0);
+ x1 = __builtin_unpack_dec128 (a, 1);
+ b = __builtin_pack_dec128 (x0, x1);
+ c = __builtin_dscliq (one, 25) + two;
+
+#ifdef DEBUG
+ {
+ union {
+ _Decimal128 d;
+ unsigned long long ull;
+ unsigned char uc[sizeof (_Decimal128)];
+ } u;
+
+ printf ("a = 0x");
+ u.d = a;
+ for (i = 0; i < sizeof (_Decimal128); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf (", %Lg\n", (long double)a);
+
+ printf ("b = 0x");
+ u.d = b;
+ for (i = 0; i < sizeof (_Decimal128); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf (", %Lg\n", (long double)b);
+
+ printf ("c = 0x");
+ u.d = c;
+ for (i = 0; i < sizeof (_Decimal128); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf (", %Lg\n", (long double)c);
+
+ printf ("x0 = 0x");
+ u.ull = x0;
+ for (i = 0; i < sizeof (unsigned long long); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf ("\nx1 = 0x");
+ u.ull = x1;
+ for (i = 0; i < sizeof (unsigned long long); i++)
+ printf ("%.2x", u.uc[i]);
+
+ printf ("\n");
+ }
+#endif
+
+ if (a != b)
+ abort ();
+
+ if (a != c)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-1.c
index 8fcb7fd7f..9dc730e0d 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-1.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-1.c
@@ -89,8 +89,10 @@ typedef struct sf
long a1;
long a2;
long a3;
+#if _CALL_ELF != 2
long a4;
long a5;
+#endif
parm_t slot[100];
} stack_frame_t;
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-2.c
index a9883d9e3..e4825973b 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-2.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-2.c
@@ -107,8 +107,10 @@ typedef struct sf
long a1;
long a2;
long a3;
+#if _CALL_ELF != 2
long a4;
long a5;
+#endif
parm_t slot[100];
} stack_frame_t;
@@ -119,6 +121,12 @@ typedef union
vector int v;
} vector_int_t;
+#ifdef __LITTLE_ENDIAN__
+#define MAKE_SLOT(x, y) ((long)x | ((long)y << 32))
+#else
+#define MAKE_SLOT(x, y) ((long)y | ((long)x << 32))
+#endif
+
/* Paramter passing.
s : gpr 3
v : vpr 2
@@ -226,8 +234,8 @@ fcevv (char *s, ...)
sp = __builtin_frame_address(0);
sp = sp->backchain;
- if (sp->slot[2].l != 0x100000002ULL
- || sp->slot[4].l != 0x500000006ULL)
+ if (sp->slot[2].l != MAKE_SLOT (1, 2)
+ || sp->slot[4].l != MAKE_SLOT (5, 6))
abort();
}
@@ -268,8 +276,8 @@ fciievv (char *s, int i, int j, ...)
sp = __builtin_frame_address(0);
sp = sp->backchain;
- if (sp->slot[4].l != 0x100000002ULL
- || sp->slot[6].l != 0x500000006ULL)
+ if (sp->slot[4].l != MAKE_SLOT (1, 2)
+ || sp->slot[6].l != MAKE_SLOT (5, 6))
abort();
}
@@ -296,8 +304,8 @@ fcvevv (char *s, vector int x, ...)
sp = __builtin_frame_address(0);
sp = sp->backchain;
- if (sp->slot[4].l != 0x100000002ULL
- || sp->slot[6].l != 0x500000006ULL)
+ if (sp->slot[4].l != MAKE_SLOT (1, 2)
+ || sp->slot[6].l != MAKE_SLOT (5, 6))
abort();
}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-dfp-1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-dfp-1.c
index eb54a653b..9bd5e28e0 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-dfp-1.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ppc64-abi-dfp-1.c
@@ -33,15 +33,27 @@ reg_parms_t gparms;
/* Wrapper to save the GPRs and FPRs and then jump to the real function. */
-#define WRAPPER(NAME) \
-__asm__ ("\t.globl\t" #NAME "_asm\n\t" \
+#if _CALL_ELF != 2
+#define FUNC_START(NAME) \
+ "\t.globl\t" NAME "\n\t" \
".section \".opd\",\"aw\"\n\t" \
".align 3\n" \
- #NAME "_asm:\n\t" \
- ".quad .L." #NAME "_asm,.TOC.@tocbase,0\n\t" \
+ NAME ":\n\t" \
+ ".quad .L." NAME ",.TOC.@tocbase,0\n\t" \
+ ".text\n\t" \
+ ".type " NAME ", @function\n" \
+ ".L." NAME ":\n\t"
+#else
+#define FUNC_START(NAME) \
+ "\t.globl\t" NAME "\n\t" \
".text\n\t" \
- ".type " #NAME "_asm, @function\n" \
- ".L." #NAME "_asm:\n\t" \
+ NAME ":\n" \
+ "0:\taddis 2,12,(.TOC.-0b)@ha\n\t" \
+ "addi 2,2,(.TOC.-0b)@l\n\t" \
+ ".localentry " NAME ",.-" NAME "\n\t"
+#endif
+#define WRAPPER(NAME) \
+__asm__ (FUNC_START (#NAME "_asm") \
"ld 11,gparms@got(2)\n\t" \
"std 3,0(11)\n\t" \
"std 4,8(11)\n\t" \
@@ -75,8 +87,10 @@ typedef struct sf
long a1;
long a2;
long a3;
+#if _CALL_ELF != 2
long a4;
long a5;
+#endif
unsigned long slot[100];
} stack_frame_t;
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57744.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57744.c
new file mode 100644
index 000000000..222fd6abd
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57744.c
@@ -0,0 +1,39 @@
+/* { dg-do run { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O3" } */
+
+void abort (void);
+
+typedef unsigned U_16 __attribute__((mode(TI)));
+
+extern int libat_compare_exchange_16 (U_16 *, U_16 *, U_16, int, int)
+ __attribute__((__noinline__));
+
+/* PR 57744: lqarx/stqcx needs even/odd register pairs. The assembler will
+ complain if the compiler gets an odd/even register pair. Create a function
+ which has the 16 byte compare and exchange instructions, but don't actually
+ execute it, so that we can detect these failures on older machines. */
+
+int
+libat_compare_exchange_16 (U_16 *mptr, U_16 *eptr, U_16 newval,
+ int smodel, int fmodel __attribute__((unused)))
+{
+ if (((smodel) == 0))
+ return __atomic_compare_exchange_n (mptr, eptr, newval, 0, 0, 0);
+ else if (((smodel) != 5))
+ return __atomic_compare_exchange_n (mptr, eptr, newval, 0, 4, 0);
+ else
+ return __atomic_compare_exchange_n (mptr, eptr, newval, 0, 5, 0);
+}
+
+U_16 a = 1, b = 1, c = -2;
+volatile int do_test = 0;
+
+int main (void)
+{
+ if (do_test && !libat_compare_exchange_16 (&a, &b, c, 0, 0))
+ abort ();
+
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57949-1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57949-1.c
new file mode 100644
index 000000000..dac305a01
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57949-1.c
@@ -0,0 +1,20 @@
+/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc_elfv2 } { "*" } { "" } } */
+/* { dg-options "-O2 -mcpu=power7 -mno-compat-align-parm" } */
+
+/* Verify that vs is 16-byte aligned with -mcompat-align-parm. */
+
+typedef float v4sf __attribute__ ((vector_size (16)));
+struct s { long m; v4sf v; };
+long n;
+v4sf ve;
+
+void pr57949 (long d1, long d2, long d3, long d4, long d5, long d6,
+ long d7, long d8, long d9, struct s vs) {
+ n = vs.m;
+ ve = vs.v;
+}
+
+/* { dg-final { scan-assembler "li \.\*,144" } } */
+/* { dg-final { scan-assembler "ld \.\*,128\\(1\\)" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57949-2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57949-2.c
new file mode 100644
index 000000000..39a24d9e4
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57949-2.c
@@ -0,0 +1,20 @@
+/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc_elfv2 } { "*" } { "" } } */
+/* { dg-options "-O2 -mcpu=power7" } */
+
+/* Verify that vs is not 16-byte aligned in the absence of -mno-compat-align-parm. */
+
+typedef float v4sf __attribute__ ((vector_size (16)));
+struct s { long m; v4sf v; };
+long n;
+v4sf ve;
+
+void pr57949 (long d1, long d2, long d3, long d4, long d5, long d6,
+ long d7, long d8, long d9, struct s vs) {
+ n = vs.m;
+ ve = vs.v;
+}
+
+/* { dg-final { scan-assembler "ld .\*,136\\(1\\)" } } */
+/* { dg-final { scan-assembler "ld .\*,120\\(1\\)" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr58673-1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr58673-1.c
new file mode 100644
index 000000000..6f7838f8d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr58673-1.c
@@ -0,0 +1,78 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -m64 -O1" } */
+
+enum typecode
+{
+ QIcode, QUcode, HIcode, HUcode, SIcode, SUcode, DIcode, DUcode, SFcode,
+ DFcode, XFcode, Pcode, Tcode, LAST_AND_UNUSED_TYPECODE
+};
+enum bytecode_opcode
+{
+ neverneverland, drop, duplicate, over, setstackSI, adjstackSI, constQI,
+ constHI, constSI, constDI, constSF, constDF, constXF, constP, loadQI,
+ loadHI, loadSI, loadDI, loadSF, loadDF, loadXF, loadP, storeQI, storeHI,
+ storeSI, storeDI, storeSF, storeDF, storeXF, storeP, storeBLK, clearBLK,
+ addconstPSI, newlocalSI, localP, argP, convertQIHI, convertHISI,
+ convertSIDI, convertQISI, convertQUHU, convertHUSU, convertSUDU,
+ convertQUSU, convertSFDF, convertDFXF, convertHIQI, convertSIHI,
+ convertDISI, convertSIQI, convertSUQU, convertDFSF, convertXFDF,
+ convertSISF, convertSIDF, convertSIXF, convertSUSF, convertSUDF,
+ convertSUXF, convertDISF, convertDIDF, convertDIXF, convertDUSF,
+ convertDUDF, convertDUXF, convertSFSI, convertDFSI, convertXFSI,
+ convertSFSU, convertDFSU, convertXFSU, convertSFDI, convertDFDI,
+ convertXFDI, convertSFDU, convertDFDU, convertXFDU, convertPSI,
+ convertSIP, convertSIT, convertDIT, convertSFT, convertDFT, convertXFT,
+ convertPT, zxloadBI, sxloadBI, sstoreBI, addSI, addDI, addSF, addDF,
+ addXF, addPSI, subSI, subDI, subSF, subDF, subXF, subPP, mulSI, mulDI,
+ mulSU, mulDU, mulSF, mulDF, mulXF, divSI, divDI, divSU, divDU, divSF,
+ divDF, divXF, modSI, modDI, modSU, modDU, andSI, andDI, iorSI, iorDI,
+ xorSI, xorDI, lshiftSI, lshiftSU, lshiftDI, lshiftDU, rshiftSI, rshiftSU,
+ rshiftDI, rshiftDU, ltSI, ltSU, ltDI, ltDU, ltSF, ltDF, ltXF, ltP, leSI,
+ leSU, leDI, leDU, leSF, leDF, leXF, leP, geSI, geSU, geDI, geDU, geSF,
+ geDF, geXF, geP, gtSI, gtSU, gtDI, gtDU, gtSF, gtDF, gtXF, gtP, eqSI,
+ eqDI, eqSF, eqDF, eqXF, eqP, neSI, neDI, neSF, neDF, neXF, neP, negSI,
+ negDI, negSF, negDF, negXF, notSI, notDI, notT, predecQI, predecHI,
+ predecSI, predecDI, predecP, predecSF, predecDF, predecXF, predecBI,
+ preincQI, preincHI, preincSI, preincDI, preincP, preincSF, preincDF,
+ preincXF, preincBI, postdecQI, postdecHI, postdecSI, postdecDI, postdecP,
+ postdecSF, postdecDF, postdecXF, postdecBI, postincQI, postincHI,
+ postincSI, postincDI, postincP, postincSF, postincDF, postincXF,
+ postincBI, xjumpif, xjumpifnot, jump, jumpP, caseSI, caseSU, caseDI,
+ caseDU, call, returnP, ret, linenote, LAST_AND_UNUSED_OPCODE
+};
+struct binary_operator
+{
+ enum bytecode_opcode opcode;
+ enum typecode arg0;
+};
+static struct conversion_recipe
+{
+ unsigned char *opcodes;
+ int cost;
+}
+conversion_recipe[((int) LAST_AND_UNUSED_TYPECODE)][((int)
+ LAST_AND_UNUSED_TYPECODE)];
+static struct conversion_recipe
+deduce_conversion (from, to)
+ enum typecode from, to;
+{
+ (conversion_recipe[(int) from][(int) to].
+ opcodes ? 0 : (conversion_recipe[(int) from][(int) to] =
+ deduce_conversion (from, to), 0));
+}
+
+void
+bc_expand_binary_operation (optab, resulttype, arg0, arg1)
+ struct binary_operator optab[];
+{
+ int i, besti, cost, bestcost;
+ enum typecode resultcode, arg0code;
+ for (i = 0; optab[i].opcode != -1; ++i)
+ {
+ (conversion_recipe[(int) arg0code][(int) optab[i].arg0].
+ opcodes ? 0 : (conversion_recipe[(int) arg0code][(int) optab[i].arg0] =
+ deduce_conversion (arg0code, optab[i].arg0), 0));
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr58673-2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr58673-2.c
new file mode 100644
index 000000000..b70d2eed8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr58673-2.c
@@ -0,0 +1,217 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O3 -m64 -funroll-loops" } */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+typedef long unsigned int size_t;
+typedef struct _IO_FILE FILE;
+typedef float real;
+typedef real rvec[3];
+typedef real matrix[3][3];
+typedef real tensor[3][3];
+enum
+{
+ F_BONDS, F_G96BONDS, F_MORSE, F_CUBICBONDS, F_CONNBONDS, F_HARMONIC,
+ F_ANGLES, F_G96ANGLES, F_PDIHS, F_RBDIHS, F_IDIHS, F_LJ14, F_COUL14, F_LJ,
+ F_BHAM, F_LJLR, F_DISPCORR, F_SR, F_LR, F_WPOL, F_POSRES, F_DISRES,
+ F_DISRESVIOL, F_ORIRES, F_ORIRESDEV, F_ANGRES, F_ANGRESZ, F_SHAKE,
+ F_SHAKENC, F_SETTLE, F_DUMMY2, F_DUMMY3, F_DUMMY3FD, F_DUMMY3FAD,
+ F_DUMMY3OUT, F_DUMMY4FD, F_EQM, F_EPOT, F_EKIN, F_ETOT, F_TEMP, F_PRES,
+ F_DVDL, F_DVDLKIN, F_NRE
+};
+typedef union
+{
+ struct
+ {
+ }
+ bham;
+ struct
+ {
+ real rA, krA, rB, krB;
+ }
+ harmonic;
+}
+t_iparams;
+typedef struct
+{
+ t_iparams *iparams;
+}
+t_idef;
+typedef struct
+{
+}
+t_inputrec;
+typedef struct
+{
+}
+t_commrec;
+typedef struct
+{
+}
+t_forcerec;
+typedef struct
+{
+}
+t_mdatoms;
+typedef struct
+{
+}
+t_filenm;
+enum
+{
+ eoPres, eoEpot, eoVir, eoDist, eoMu, eoForce, eoFx, eoFy, eoFz, eoPx, eoPy,
+ eoPz, eoPolarizability, eoDipole, eoObsNR, eoMemory =
+ eoObsNR, eoInter, eoUseVirial, eoNR
+};
+extern char *eoNames[eoNR];
+typedef struct
+{
+ int bPrint;
+}
+t_coupl_LJ;
+typedef struct
+{
+ int eObs;
+ t_iparams xi;
+}
+t_coupl_iparams;
+typedef struct
+{
+ real act_value[eoObsNR];
+ real av_value[eoObsNR];
+ real ref_value[eoObsNR];
+ int bObsUsed[eoObsNR];
+ int nLJ, nBU, nQ, nIP;
+ t_coupl_LJ *tcLJ;
+}
+t_coupl_rec;
+static void
+pr_ff (t_coupl_rec * tcr, real time, t_idef * idef, t_commrec * cr, int nfile,
+ t_filenm fnm[])
+{
+ static FILE *prop;
+ static FILE **out = ((void *) 0);
+ static FILE **qq = ((void *) 0);
+ static FILE **ip = ((void *) 0);
+ char buf[256];
+ char *leg[] = {
+ "C12", "C6"
+ };
+ char **raleg;
+ int i, j, index;
+ if ((prop == ((void *) 0)) && (out == ((void *) 0)) && (qq == ((void *) 0))
+ && (ip == ((void *) 0)))
+ {
+ for (i = j = 0; (i < eoObsNR); i++)
+ {
+ if (tcr->bObsUsed[i])
+ {
+ raleg[j++] =
+ (__extension__
+ (__builtin_constant_p (eoNames[i])
+ && ((size_t) (const void *) ((eoNames[i]) + 1) -
+ (size_t) (const void *) (eoNames[i]) ==
+ 1) ? (((const char *) (eoNames[i]))[0] ==
+ '\0' ? (char *) calloc ((size_t) 1,
+ (size_t) 1) : (
+ {
+ size_t
+ __len
+ =
+ strlen
+ (eoNames
+ [i])
+ +
+ 1;
+ char
+ *__retval
+ =
+ (char
+ *)
+ malloc
+ (__len);
+ __retval;}
+ )): __strdup (eoNames[i])));
+ raleg[j++] =
+ (__extension__
+ (__builtin_constant_p (buf)
+ && ((size_t) (const void *) ((buf) + 1) -
+ (size_t) (const void *) (buf) ==
+ 1) ? (((const char *) (buf))[0] ==
+ '\0' ? (char *) calloc ((size_t) 1,
+ (size_t) 1) : (
+ {
+ size_t
+ __len
+ =
+ strlen
+ (buf)
+ +
+ 1;
+ char
+ *__retval
+ =
+ (char
+ *)
+ malloc
+ (__len);
+ __retval;}
+ )): __strdup (buf)));
+ }
+ }
+ if (tcr->nLJ)
+ {
+ for (i = 0; (i < tcr->nLJ); i++)
+ {
+ if (tcr->tcLJ[i].bPrint)
+ {
+ xvgr_legend (out[i], (sizeof (leg) / sizeof ((leg)[0])),
+ leg);
+ }
+ }
+ }
+ }
+}
+
+void
+do_coupling (FILE * log, int nfile, t_filenm fnm[], t_coupl_rec * tcr, real t,
+ int step, real ener[], t_forcerec * fr, t_inputrec * ir,
+ int bMaster, t_mdatoms * md, t_idef * idef, real mu_aver,
+ int nmols, t_commrec * cr, matrix box, tensor virial,
+ tensor pres, rvec mu_tot, rvec x[], rvec f[], int bDoIt)
+{
+ int i, j, ati, atj, atnr2, type, ftype;
+ real deviation[eoObsNR], prdev[eoObsNR], epot0, dist, rmsf;
+ real ff6, ff12, ffa, ffb, ffc, ffq, factor, dt, mu_ind;
+ int bTest, bPrint;
+ t_coupl_iparams *tip;
+ if (bPrint)
+ {
+ pr_ff (tcr, t, idef, cr, nfile, fnm);
+ }
+ for (i = 0; (i < eoObsNR); i++)
+ {
+ deviation[i] =
+ calc_deviation (tcr->av_value[i], tcr->act_value[i],
+ tcr->ref_value[i]);
+ prdev[i] = tcr->ref_value[i] - tcr->act_value[i];
+ }
+ if (bPrint)
+ pr_dev (tcr, t, prdev, cr, nfile, fnm);
+ for (i = 0; (i < atnr2); i++)
+ {
+ factor = dt * deviation[tip->eObs];
+ switch (ftype)
+ {
+ case F_BONDS:
+ if (fabs (tip->xi.harmonic.krA) > 1.2e-38)
+ idef->iparams[type].harmonic.krA *=
+ (1 + factor / tip->xi.harmonic.krA);
+ }
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr59054.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr59054.c
new file mode 100644
index 000000000..ab2ff6dea
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr59054.c
@@ -0,0 +1,9 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mcpu=power7 -O0 -m64" } */
+
+long foo (void) { return 0; }
+
+/* { dg-final { scan-assembler-not "xxlor" } } */
+/* { dg-final { scan-assembler-not "stfd" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr60137.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr60137.c
new file mode 100644
index 000000000..4777a5382
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr60137.c
@@ -0,0 +1,17 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O3 -mno-vsx" } */
+
+/* target/60137, compiler got a 'could not split insn error'. */
+
+extern int target_flags;
+extern char fixed_regs[53];
+extern char call_used_regs[53];
+
+void init_reg_sets_1(void)
+{
+ int i;
+ for (i = 0; i < 53; i++)
+ fixed_regs[i] = call_used_regs[i] = (call_used_regs[i] &((target_flags & 0x02000000) ? 2 : 1)) != 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr60203.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr60203.c
new file mode 100644
index 000000000..6a4b4fa1d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr60203.c
@@ -0,0 +1,40 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O3" } */
+
+union u_ld { long double ld; double d[2]; };
+
+long double
+pack (double a, double aa)
+{
+ union u_ld u;
+ u.d[0] = a;
+ u.d[1] = aa;
+ return u.ld;
+}
+
+double
+unpack_0 (long double x)
+{
+ union u_ld u;
+ u.ld = x;
+ return u.d[0];
+}
+
+double
+unpack_1 (long double x)
+{
+ union u_ld u;
+ u.ld = x;
+ return u.d[1];
+}
+
+/* { dg-final { scan-assembler-not "stfd" } } */
+/* { dg-final { scan-assembler-not "lfd" } } */
+/* { dg-final { scan-assembler-not "lxsdx" } } */
+/* { dg-final { scan-assembler-not "stxsdx" } } */
+/* { dg-final { scan-assembler-not "mfvsrd" } } */
+/* { dg-final { scan-assembler-not "mtvsrd" } } */
+
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr60735.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr60735.c
new file mode 100644
index 000000000..9bac30b51
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr60735.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-mcpu=8548 -mspe -mabi=spe -O2" } */
+/* { dg-skip-if "not an SPE target" { ! powerpc_spe_nocache } { "*" } { "" } } */
+
+/* In PR60735, the type _Decimal64 generated an insn not found message. */
+
+void
+pr60735 (_Decimal64 *p, _Decimal64 *q)
+{
+ *p = *q;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/quad-atomic.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/quad-atomic.c
new file mode 100644
index 000000000..6cf278852
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/quad-atomic.c
@@ -0,0 +1,67 @@
+/* { dg-do run { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target p8vector_hw } */
+/* { dg-options "-mcpu=power8 -O2" } */
+
+/* Test whether we get the right bits for quad word atomic instructions. */
+#include <stdlib.h>
+
+static __int128_t quad_fetch_and (__int128_t *, __int128_t value) __attribute__((__noinline__));
+static __int128_t quad_fetch_or (__int128_t *, __int128_t value) __attribute__((__noinline__));
+static __int128_t quad_fetch_add (__int128_t *, __int128_t value) __attribute__((__noinline__));
+
+static __int128_t
+quad_fetch_and (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_and (ptr, value, __ATOMIC_ACQUIRE);
+}
+
+static __int128_t
+quad_fetch_or (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_or (ptr, value, __ATOMIC_ACQUIRE);
+}
+
+static __int128_t
+quad_fetch_add (__int128_t *ptr, __int128_t value)
+{
+ return __atomic_fetch_add (ptr, value, __ATOMIC_ACQUIRE);
+}
+
+int
+main (void)
+{
+ __int128_t result;
+ __int128_t value;
+ __int128_t and_input = ((((__int128_t) 0x1234567890abcdefULL) << 64) | ((__int128_t) 0xfedcba0987654321ULL));
+ __int128_t and_value = ((((__int128_t) 0xfffffffffffffff0ULL) << 64) | ((__int128_t) 0xfffffffffffffff0ULL));
+ __int128_t and_exp = ((((__int128_t) 0x1234567890abcde0ULL) << 64) | ((__int128_t) 0xfedcba0987654320ULL));
+
+ __int128_t or_input = ((((__int128_t) 0x1234567890abcdefULL) << 64) | ((__int128_t) 0xfedcba0987654321ULL));
+ __int128_t or_value = ((((__int128_t) 0x0000000000000010ULL) << 64) | ((__int128_t) 0x000000000000000eULL));
+ __int128_t or_exp = ((((__int128_t) 0x1234567890abcdffULL) << 64) | ((__int128_t) 0xfedcba098765432fULL));
+
+ __int128_t add_input = ((((__int128_t) 0x1234567890abcdefULL) << 64) | ((__int128_t) 0xfedcba0987654321ULL));
+ __int128_t add_value = ((((__int128_t) 0x0000000001000000ULL) << 64) | ((__int128_t) 0x0000001000000000ULL));
+ __int128_t add_exp = ((((__int128_t) 0x1234567891abcdefULL) << 64) | ((__int128_t) 0xfedcba1987654321ULL));
+
+
+ value = and_input;
+ result = quad_fetch_and (&value, and_value);
+ if (result != and_input || value != and_exp)
+ abort ();
+
+ value = or_input;
+ result = quad_fetch_or (&value, or_value);
+ if (result != or_input || value != or_exp)
+ abort ();
+
+ value = add_input;
+ result = quad_fetch_add (&value, add_value);
+ if (result != add_input || value != add_exp)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c
new file mode 100644
index 000000000..1c78052e6
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c
@@ -0,0 +1,21 @@
+/* Test accuracy of long double division (glibc bug 15396). */
+/* { dg-do run { target powerpc*-*-linux* powerpc*-*-darwin* powerpc*-*-aix* rs6000-*-* } } */
+/* { dg-options "-mlong-double-128" } */
+
+extern void exit (int);
+extern void abort (void);
+
+volatile long double a = 0x1p-1024L;
+volatile long double b = 0x3p-53L;
+volatile long double r;
+volatile long double expected = 0x1.55555555555555555555555555p-973L;
+
+int
+main (void)
+{
+ r = a / b;
+ /* Allow error up to 2ulp. */
+ if (__builtin_fabsl (r - expected) > 0x1p-1073L)
+ abort ();
+ exit (0);
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/sd-pwr6.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/sd-pwr6.c
new file mode 100644
index 000000000..98f7615da
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/sd-pwr6.c
@@ -0,0 +1,19 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* powerpc-ibm-aix* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O2 -mcpu=power6 -mhard-dfp" } */
+/* { dg-final { scan-assembler-not "lfiwzx" } } */
+/* { dg-final { scan-assembler-times "lfd" 2 } } */
+/* { dg-final { scan-assembler-times "dctdp" 2 } } */
+/* { dg-final { scan-assembler-times "dadd" 1 } } */
+/* { dg-final { scan-assembler-times "drsp" 1 } } */
+
+/* Test that for power6 we need to use a bounce buffer on the stack to load
+ SDmode variables because the power6 does not have a way to directly load
+ 32-bit values from memory. */
+_Decimal32 a;
+
+void inc_dec32 (void)
+{
+ a += (_Decimal32) 1.0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/sd-vsx.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/sd-vsx.c
new file mode 100644
index 000000000..7a3c6d877
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/sd-vsx.c
@@ -0,0 +1,20 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* powerpc-ibm-aix* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O2 -mcpu=power7 -mhard-dfp" } */
+/* { dg-final { scan-assembler-times "lfiwzx" 2 } } */
+/* { dg-final { scan-assembler-times "stfiwx" 1 } } */
+/* { dg-final { scan-assembler-not "lfd" } } */
+/* { dg-final { scan-assembler-not "stfd" } } */
+/* { dg-final { scan-assembler-times "dctdp" 2 } } */
+/* { dg-final { scan-assembler-times "dadd" 1 } } */
+/* { dg-final { scan-assembler-times "drsp" 1 } } */
+
+/* Test that power7 can directly load/store SDmode variables without using a
+ bounce buffer. */
+_Decimal32 a;
+
+void inc_dec32 (void)
+{
+ a += (_Decimal32) 1.0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ti_math1.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ti_math1.c
new file mode 100644
index 000000000..cdf925100
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ti_math1.c
@@ -0,0 +1,20 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-options "-O2" } */
+/* { dg-final { scan-assembler-times "addc" 1 } } */
+/* { dg-final { scan-assembler-times "adde" 1 } } */
+/* { dg-final { scan-assembler-times "subfc" 1 } } */
+/* { dg-final { scan-assembler-times "subfe" 1 } } */
+/* { dg-final { scan-assembler-not "subf " } } */
+
+__int128
+add_128 (__int128 *ptr, __int128 val)
+{
+ return (*ptr + val);
+}
+
+__int128
+sub_128 (__int128 *ptr, __int128 val)
+{
+ return (*ptr - val);
+}
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ti_math2.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ti_math2.c
new file mode 100644
index 000000000..b9c03300d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/ti_math2.c
@@ -0,0 +1,73 @@
+/* { dg-do run { target { powerpc*-*-* && lp64 } } } */
+/* { dg-options "-O2 -fno-inline" } */
+
+union U {
+ __int128 i128;
+ struct {
+ long l1;
+ long l2;
+ } s;
+};
+
+union U u1,u2;
+
+__int128
+create_128 (long most_sig, long least_sig)
+{
+ union U u;
+
+#if __LITTLE_ENDIAN__
+ u.s.l1 = least_sig;
+ u.s.l2 = most_sig;
+#else
+ u.s.l1 = most_sig;
+ u.s.l2 = least_sig;
+#endif
+ return u.i128;
+}
+
+long most_sig (union U * u)
+{
+#if __LITTLE_ENDIAN__
+ return (*u).s.l2;
+#else
+ return (*u).s.l1;
+#endif
+}
+
+long least_sig (union U * u)
+{
+#if __LITTLE_ENDIAN__
+ return (*u).s.l1;
+#else
+ return (*u).s.l2;
+#endif
+}
+
+__int128
+add_128 (__int128 *ptr, __int128 val)
+{
+ return (*ptr + val);
+}
+
+__int128
+sub_128 (__int128 *ptr, __int128 val)
+{
+ return (*ptr - val);
+}
+
+int
+main (void)
+{
+ /* Do a simple add/sub to make sure carry is happening between the dwords
+ and that dwords are in correct endian order. */
+ u1.i128 = create_128 (1, -1);
+ u2.i128 = add_128 (&u1.i128, 1);
+ if ((most_sig (&u2) != 2) || (least_sig (&u2) != 0))
+ __builtin_abort ();
+ u2.i128 = sub_128 (&u2.i128, 1);
+ if ((most_sig (&u2) != 1) || (least_sig (&u2) != -1))
+ __builtin_abort ();
+ return 0;
+}
+
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/vsx-float0.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/vsx-float0.c
new file mode 100644
index 000000000..7e4fea689
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/vsx-float0.c
@@ -0,0 +1,16 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O2 -mcpu=power7" } */
+/* { dg-final { scan-assembler "xxlxor" } } */
+
+/* Test that we generate xxlor to clear a SFmode register. */
+
+float sum (float *p, unsigned long n)
+{
+ float sum = 0.0f; /* generate xxlxor instead of load */
+ while (n-- > 0)
+ sum += *p++;
+
+ return sum;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-1.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-1.c
new file mode 100644
index 000000000..b9d6139b0
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-1.c
@@ -0,0 +1,20 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
+
+#include <stdio.h>
+
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+int main (void)
+{
+ return 0;
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 12 } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-10.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-10.c
new file mode 100644
index 000000000..b91b3478e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-10.c
@@ -0,0 +1,21 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mno-hotpatch --save-temps" } */
+
+#include <stdio.h>
+
+__attribute__ ((hotpatch(2)))
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+int main (void)
+{
+ return 0;
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 2 } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-11.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-11.c
new file mode 100644
index 000000000..491677342
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-11.c
@@ -0,0 +1,20 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mhotpatch -mno-hotpatch --save-temps" } */
+
+#include <stdio.h>
+
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+int main (void)
+{
+ return 0;
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
+/* { dg-final { scan-assembler-not "nop\t0" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-12.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-12.c
new file mode 100644
index 000000000..b3e9427d4
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-12.c
@@ -0,0 +1,20 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mno-hotpatch -mhotpatch=1 --save-temps" } */
+
+#include <stdio.h>
+
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+int main (void)
+{
+ return 0;
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-2.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-2.c
new file mode 100644
index 000000000..6cc29447d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-2.c
@@ -0,0 +1,20 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
+
+#include <stdio.h>
+
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+int main (void)
+{
+ return 0;
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-3.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-3.c
new file mode 100644
index 000000000..9f0b2b756
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-3.c
@@ -0,0 +1,20 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mhotpatch=0 --save-temps" } */
+
+#include <stdio.h>
+
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+int main (void)
+{
+ return 0;
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-4.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-4.c
new file mode 100644
index 000000000..c1dba20a3
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-4.c
@@ -0,0 +1,26 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
+
+#include <stdio.h>
+
+inline void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+__attribute__ ((always_inline))
+void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
+{
+ printf("hello, world!\n");
+} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
+
+int main (void)
+{
+ return 0;
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
+/* { dg-final { scan-assembler-not "nop\t0" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-5.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-5.c
new file mode 100644
index 000000000..ec267d65a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-5.c
@@ -0,0 +1,21 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
+
+#include <stdio.h>
+
+__attribute__ ((hotpatch))
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+int main (void)
+{
+ return 0;
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 12 } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-6.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-6.c
new file mode 100644
index 000000000..5af090d03
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-6.c
@@ -0,0 +1,21 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
+
+#include <stdio.h>
+
+__attribute__ ((hotpatch(1)))
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+int main (void)
+{
+ return 0;
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-7.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-7.c
new file mode 100644
index 000000000..e73a510b4
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-7.c
@@ -0,0 +1,21 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
+
+#include <stdio.h>
+
+__attribute__ ((hotpatch(0)))
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+int main (void)
+{
+ return 0;
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-8.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-8.c
new file mode 100644
index 000000000..399aa7260
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-8.c
@@ -0,0 +1,28 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
+
+#include <stdio.h>
+
+__attribute__ ((hotpatch))
+inline void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch))
+__attribute__ ((always_inline))
+void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
+{
+ printf("hello, world!\n");
+} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
+
+int main (void)
+{
+ return 0;
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
+/* { dg-final { scan-assembler-not "nop\t0" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-9.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-9.c
new file mode 100644
index 000000000..5da675866
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-9.c
@@ -0,0 +1,21 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
+
+#include <stdio.h>
+
+__attribute__ ((hotpatch(2)))
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+int main (void)
+{
+ return 0;
+}
+
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 2 } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c
new file mode 100644
index 000000000..45a2cc5dc
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c
@@ -0,0 +1,27 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mhotpatch" } */
+
+#include <stdio.h>
+
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+inline void hp2(void)
+{
+ printf("hello, world!\n");
+}
+
+__attribute__ ((always_inline))
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
+{
+ printf("hello, world!\n");
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
+
+int main (void)
+{
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c
new file mode 100644
index 000000000..5947f564f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c
@@ -0,0 +1,27 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mhotpatch=0" } */
+
+#include <stdio.h>
+
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+inline void hp2(void)
+{
+ printf("hello, world!\n");
+}
+
+__attribute__ ((always_inline))
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
+{
+ printf("hello, world!\n");
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
+
+int main (void)
+{
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c
new file mode 100644
index 000000000..e0c7f6f52
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c
@@ -0,0 +1,27 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mhotpatch=1" } */
+
+#include <stdio.h>
+
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+inline void hp2(void)
+{
+ printf("hello, world!\n");
+}
+
+__attribute__ ((always_inline))
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
+{
+ printf("hello, world!\n");
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
+
+int main (void)
+{
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c
new file mode 100644
index 000000000..d9f13425a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c
@@ -0,0 +1,11 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=-1" } */
+
+int main (void)
+{
+ return 0;
+}
+
+/* { dg-excess-errors "argument to '-mhotpatch=' should be a non-negative integer" } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c
new file mode 100644
index 000000000..53f7eac9e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c
@@ -0,0 +1,28 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=1000000" } */
+
+#include <stdio.h>
+
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch(1000000)))
+void hp2(void)
+{
+ printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch(1000001)))
+void hp3(void)
+{ /* { dg-error "requested 'hotpatch' attribute is not a non-negative integer constant or too large .max. 1000000." } */
+ printf("hello, world!\n");
+}
+
+int main (void)
+{
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c
new file mode 100644
index 000000000..cb10b66f0
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c
@@ -0,0 +1,11 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=1000001" } */
+
+int main (void)
+{
+ return 0;
+}
+
+/* { dg-excess-errors "argument to '-mhotpatch=' is too large .max. 1000000." } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c
new file mode 100644
index 000000000..98ccb42c0
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c
@@ -0,0 +1,68 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mno-hotpatch" } */
+
+#include <stdio.h>
+
+__attribute__ ((hotpatch))
+void hp1(void)
+{
+ printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch))
+inline void hp2(void)
+{
+ printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch))
+__attribute__ ((always_inline))
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
+{
+ printf("hello, world!\n");
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
+
+__attribute__ ((hotpatch(0)))
+void hp4(void)
+{
+ printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch(0)))
+inline void hp5(void)
+{
+ printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch(0)))
+__attribute__ ((always_inline))
+void hp6(void) /* { dg-warning "always_inline function might not be inlinable" } */
+{
+ printf("hello, world!\n");
+} /* { dg-warning "function 'hp6' with the 'always_inline' attribute is not hotpatchable" } */
+
+__attribute__ ((hotpatch(1)))
+void hp7(void)
+{
+ printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch(1)))
+inline void hp8(void)
+{
+ printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch(1)))
+__attribute__ ((always_inline))
+void hp9(void) /* { dg-warning "always_inline function might not be inlinable" } */
+{
+ printf("hello, world!\n");
+} /* { dg-warning "function 'hp9' with the 'always_inline' attribute is not hotpatchable" } */
+
+int main (void)
+{
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c
new file mode 100644
index 000000000..489fc5dd9
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c
@@ -0,0 +1,23 @@
+/* Functional tests for the function hotpatching feature. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -mhotpatch" } */
+
+#include <stdio.h>
+
+int hp1(void)
+{
+ int nested1(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
+ { return 1; }
+
+ __attribute__ ((hotpatch))
+ int nested2(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
+ { return 1; }
+
+ return nested1() - nested2();
+}
+
+int main (void)
+{
+ return hp1();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-1.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-1.c
deleted file mode 100644
index 245ba2c7e..000000000
--- a/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-1.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* This checks the availability of the low-level builtins introduced
- for transactional execution. */
-
-/* { dg-do compile } */
-/* { dg-options "-O3 -march=zEC12 -mzarch" } */
-
-#include <stdint.h>
-#include <htmintrin.h>
-
-int global = 0;
-uint64_t g;
-struct __htm_tdb global_tdb;
-
-int
-foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
-{
-
- int cc;
- int n;
-
- cc = __builtin_tbegin (0);
- cc = __builtin_tbegin (tdb);
- cc = __builtin_tbegin (&global_tdb);
-
- cc = __builtin_tbegin_nofloat (0);
- cc = __builtin_tbegin_nofloat (&global_tdb);
-
- cc = __builtin_tbegin_retry (0, 42);
- cc = __builtin_tbegin_retry (0, reg);
- cc = __builtin_tbegin_retry (0, *mem);
- cc = __builtin_tbegin_retry (0, global);
- cc = __builtin_tbegin_retry (tdb, 42);
- cc = __builtin_tbegin_retry (&global_tdb, 42);
-
- cc = __builtin_tbegin_retry_nofloat (0, 42);
- cc = __builtin_tbegin_retry_nofloat (0, reg);
- cc = __builtin_tbegin_retry_nofloat (0, *mem);
- cc = __builtin_tbegin_retry_nofloat (0, global);
- cc = __builtin_tbegin_retry_nofloat (&global_tdb, 42);
-
- __builtin_tbeginc ();
-
- n = __builtin_tx_nesting_depth();
-
- __builtin_non_tx_store(&g, 23);
- __builtin_non_tx_store(mem64, 23);
- __builtin_non_tx_store(&g, reg);
- __builtin_non_tx_store(&g, *mem);
- __builtin_non_tx_store(&g, global);
-
- __builtin_tabort (42 + 255);
- __builtin_tabort (reg);
- /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */
- __builtin_tabort (reg + 255);
- __builtin_tabort (*mem);
- __builtin_tabort (global);
- /* Here global + 255 gets reloaded into a reg. Better would be to
- just reload global or *mem and get the +255 for free as address
- arithmetic. */
- __builtin_tabort (*mem + 255);
- __builtin_tabort (global + 255);
-
- __builtin_tend();
-
- __builtin_tx_assist (23);
- __builtin_tx_assist (reg);
- __builtin_tx_assist (*mem);
- __builtin_tx_assist (global);
-}
-
-/* Make sure the tdb NULL argument ends up as immediate value in the
- instruction. */
-/* { dg-final { scan-assembler-times "tbegin\t0," 10 } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-1.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-1.c
new file mode 100644
index 000000000..c90490faa
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-1.c
@@ -0,0 +1,1073 @@
+/* Functional tests of the htm __builtin_... macros. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target htm } */
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
+
+/* ---------------------------- included header files ---------------------- */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+#include <htmintrin.h>
+
+/* ---------------------------- local definitions -------------------------- */
+
+#define DEFAULT_MAX_REPETITIONS 5
+#define DEFAULT_REQUIRED_QUORUM ((DEFAULT_MAX_REPETITIONS) - 1)
+#define NUM_WARMUP_RUNS 10
+
+/* ---------------------------- local macros ------------------------------- */
+
+#define TEST_DF_REP(name) \
+ { #name, name, DEFAULT_MAX_REPETITIONS, DEFAULT_REQUIRED_QUORUM }
+#define TEST_NO_REP(name) { #name, name, 1, 1 }
+
+/* ---------------------------- local types -------------------------------- */
+
+typedef int (*test_func_t)(void);
+
+typedef struct
+{
+ const char *name;
+ test_func_t test_func;
+ int max_repetitions;
+ int required_quorum;
+} test_table_entry_t;
+
+/* ---------------------------- local variables ---------------------------- */
+
+__attribute__ ((aligned(256))) static struct __htm_tdb local_tdb256;
+static struct __htm_tdb local_tdb;
+static int do_dump_tdb = 0;
+
+/* ---------------------------- exported variables (globals) --------------- */
+
+__attribute__ ((aligned(256))) struct
+{
+ float float_1;
+ float float_2;
+ float float_3;
+} global = { 1.0, 2.5, 0.0 };
+
+__attribute__ ((aligned(256))) struct
+{
+ volatile uint64_t c1;
+ volatile uint64_t c2;
+ volatile uint64_t c3;
+} counters = { 0, 0, 0 };
+
+/* ---------------------------- local helper functions --------------------- */
+
+static void dump_tdb (struct __htm_tdb *tdb)
+{
+ unsigned char *p;
+ int i;
+ int j;
+
+ if (do_dump_tdb == 0)
+ {
+ return;
+ }
+ p = (unsigned char *)tdb;
+ for (i = 0; i < 16; i++)
+ {
+ fprintf (stderr, "0x%02x ", i * 16);
+ for (j = 0; j < 16; j++)
+ {
+ fprintf (stderr, "%02x", (int)p[i * 16 + j]);
+ if (j < 15)
+ {
+ fprintf (stderr, " ");
+ }
+ if (j == 7)
+ {
+ fprintf (stderr, " ");
+ }
+ }
+ fprintf (stderr, "\n");
+ }
+
+ return;
+}
+
+/* ---------------------------- local test functions ----------------------- */
+
+/* Check values of the constants defined in htmintrin.h. */
+static int test_constants (void)
+{
+ if (_HTM_TBEGIN_STARTED != 0)
+ {
+ return 100 * _HTM_TBEGIN_STARTED + 1;
+ }
+ if (_HTM_TBEGIN_INDETERMINATE != 1)
+ {
+ return 100 * _HTM_TBEGIN_INDETERMINATE + 2;
+ }
+ if (_HTM_TBEGIN_TRANSIENT != 2)
+ {
+ return 100 * _HTM_TBEGIN_TRANSIENT + 3;
+ }
+ if (_HTM_TBEGIN_PERSISTENT != 3)
+ {
+ return 100 * _HTM_TBEGIN_PERSISTENT + 4;
+ }
+
+ return 0;
+}
+
+static int test_tbegin_ntstg_tend (void)
+{
+ int rc;
+
+ counters.c1 = 0;
+ counters.c2 = 0;
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
+ {
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
+ counters.c2 = 2;
+ rc = __builtin_tend ();
+ if (rc != 0)
+ {
+ return 100 * rc + 5;
+ }
+ if (counters.c1 != 1)
+ {
+ return 100 * counters.c1 + 2;
+ }
+ if (counters.c2 != 2)
+ {
+ return 100 * counters.c2 + 3;
+ }
+ }
+ else
+ {
+ return 100 * rc + 4;
+ }
+
+ return 0;
+}
+
+static int test_tbegin_ntstg_tabort (void)
+{
+ float f;
+
+ counters.c1 = 0;
+ counters.c2 = 0;
+ f = 0;
+ if (__builtin_tbegin ((void *)0) == 0)
+ {
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
+ counters.c2 = 2;
+ f = 1;
+ __builtin_tabort (256);
+ return 1;
+ }
+ if (counters.c1 != 1)
+ {
+ return 100 * counters.c1 + 2;
+ }
+ if (counters.c2 != 0)
+ {
+ return 100 * counters.c2 + 3;
+ }
+ if (f != 0)
+ {
+ return 100 * f + 4;
+ }
+
+ return 0;
+}
+
+static int test_tbegin_nofloat (void)
+{
+ int rc;
+
+ counters.c1 = 0;
+ counters.c2 = 0;
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
+ {
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
+ counters.c2 = 2;
+ rc = __builtin_tend ();
+ if (rc != 0)
+ {
+ return 100 * rc + 5;
+ }
+ if (counters.c1 != 1)
+ {
+ return 100 * counters.c1 + 2;
+ }
+ if (counters.c2 != 2)
+ {
+ return 100 * counters.c2 + 3;
+ }
+ }
+ else
+ {
+ return 100 * rc + 4;
+ }
+
+ return 0;
+}
+
+static int test_tbegin_retry (void)
+{
+ int rc;
+
+ counters.c1 = 0;
+ counters.c2 = 0;
+ counters.c3 = 0;
+ if ((rc = __builtin_tbegin_retry ((void *)0, 5)) == 0)
+ {
+ int do_abort;
+
+ do_abort = (counters.c1 == 0) ? 1 : 0;
+ __builtin_non_tx_store (
+ (uint64_t *)&counters.c1, counters.c1 + 1);
+ if (do_abort == 1)
+ {
+ __builtin_tabort (256);
+ }
+ counters.c2 = counters.c2 + 10;
+ __builtin_non_tx_store ((uint64_t *)&counters.c3, 3);
+ rc = __builtin_tend ();
+ if (rc != 0)
+ {
+ return 100 * rc + 5;
+ }
+ if (counters.c1 != 2)
+ {
+ return 100 * counters.c1 + 2;
+ }
+ if (counters.c2 != 10)
+ {
+ return 100 * counters.c2 + 3;
+ }
+ if (counters.c3 != 3)
+ {
+ return 100 * counters.c3 + 6;
+ }
+ }
+ else
+ {
+ return 100 * rc + 4;
+ }
+
+ return 0;
+}
+
+static int test_tbegin_retry_nofloat (void)
+{
+ int rc;
+
+ counters.c1 = 0;
+ counters.c2 = 0;
+ counters.c3 = 0;
+ if ((rc = __builtin_tbegin_retry_nofloat ((void *)0, 5)) == 0)
+ {
+ int do_abort;
+
+ do_abort = (counters.c1 == 0) ? 1 : 0;
+ __builtin_non_tx_store (
+ (uint64_t *)&counters.c1, counters.c1 + 1);
+ if (do_abort == 1)
+ {
+ __builtin_tabort (256);
+ }
+ counters.c2 = counters.c2 + 10;
+ __builtin_non_tx_store ((uint64_t *)&counters.c3, 3);
+ rc = __builtin_tend ();
+ if (rc != 0)
+ {
+ return 100 * rc + 5;
+ }
+ if (counters.c1 != 2)
+ {
+ return 100 * counters.c1 + 2;
+ }
+ if (counters.c2 != 10)
+ {
+ return 100 * counters.c2 + 3;
+ }
+ if (counters.c3 != 3)
+ {
+ return 100 * counters.c3 + 6;
+ }
+ }
+ else
+ {
+ return 100 * rc + 4;
+ }
+
+ return 0;
+}
+
+static int test_tbegin_aborts (void)
+{
+ float f;
+ int rc;
+
+ f = 77;
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
+ {
+ f = 88;
+ __builtin_tabort (256);
+ return 2;
+ }
+ else if (rc != 2)
+ {
+ return 3;
+ }
+ if (f != 77)
+ {
+ return 4;
+ }
+ f = 66;
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
+ {
+ f = 99;
+ __builtin_tabort (257);
+ return 5;
+ }
+ else if (rc != 3)
+ {
+ return 100 * rc + 6;
+ }
+ if (f != 66)
+ {
+ return 100 * f + 7;
+ }
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
+ {
+ global.float_3 = global.float_1 + global.float_2;
+ rc = __builtin_tend ();
+ if (rc != 0)
+ {
+ return 100 * rc + 8;
+ }
+ }
+ else
+ {
+ return 100 * rc + 9;
+ }
+ if (global.float_3 != global.float_1 + global.float_2)
+ {
+ return 100 * rc + 10;
+ }
+
+ return 0;
+}
+
+static __attribute__((noinline)) void indirect_abort(int abort_code)
+{
+ __builtin_tabort (abort_code);
+
+ return;
+}
+
+static int test_tbegin_indirect_aborts (void)
+{
+ float f;
+ int rc;
+
+ f = 77;
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
+ {
+ f = 88;
+ indirect_abort(256);
+ return 2;
+ }
+ else if (rc != 2)
+ {
+ return 100 * rc + 3;
+ }
+ if (f != 77)
+ {
+ return 100 * rc + 4;
+ }
+ f = 66;
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
+ {
+ f = 99;
+ indirect_abort(257);
+ return 5;
+ }
+ else if (rc != 3)
+ {
+ return 100 * rc + 6;
+ }
+ if (f != 66)
+ {
+ return 100 * f + 7;
+ }
+
+ return 0;
+}
+
+static int test_tbegin_nofloat_aborts (void)
+{
+ int rc;
+
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
+ {
+ __builtin_tabort (256);
+ return 2;
+ }
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
+ {
+ __builtin_tabort (257);
+ return 1005;
+ }
+ else if (rc != 3)
+ {
+ return 1000 * rc + 6;
+ }
+
+ return 0;
+}
+
+static int test_tbegin_nofloat_indirect_aborts (void)
+{
+ int rc;
+
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
+ {
+ indirect_abort (256);
+ return 2;
+ }
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
+ {
+ indirect_abort (257);
+ return 1005;
+ }
+ else if (rc != 3)
+ {
+ return 1000 * rc + 6;
+ }
+
+ return 0;
+}
+
+static
+int _test_tbegin_retry_aborts (int retries, uint64_t abort_code)
+{
+ int rc;
+
+ counters.c1 = 0;
+ if ((rc = __builtin_tbegin_retry ((void *)0, retries)) == 0)
+ {
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, counters.c1 + 1);
+ __builtin_tabort (abort_code);
+ return 2;
+ }
+ else
+ {
+ if ((abort_code & 1) == 0)
+ {
+ if (rc != 2)
+ {
+ return 100 * rc + 2003;
+ }
+ else if (counters.c1 != (uint64_t)retries + 1)
+ {
+ return 1000 * counters.c1 + 100 * retries + 4;
+ }
+ }
+ else
+ {
+ if (rc != 3)
+ {
+ return 100 * rc + 3005;
+ }
+ else if (counters.c1 != 1)
+ {
+ return 1000 * counters.c1 + 100 * retries + 6;
+ }
+ }
+ }
+
+ return 0;
+}
+
+static int test_tbegin_retry_aborts (void)
+{
+ int rc;
+ int retries;
+
+ for (retries = 1; retries <= 3; retries++)
+ {
+ rc = _test_tbegin_retry_aborts (retries, 256);
+ if (rc != 0)
+ {
+ return 10000 + rc;
+ }
+ }
+ for (retries = 1; retries <= 3; retries++)
+ {
+ rc = _test_tbegin_retry_aborts (retries, 257);
+ if (rc != 0)
+ {
+ return 20000 + rc;
+ }
+ }
+ if ((rc = __builtin_tbegin_retry ((void *)0, 5)) == 0)
+ {
+ global.float_3 = global.float_1 + global.float_2;
+ rc = __builtin_tend ();
+ if (rc != 0)
+ {
+ return 30000 + 100 * rc + 6;
+ }
+ }
+ else
+ {
+ return 30000 + 100 * rc + 7;
+ }
+
+ return 0;
+}
+
+static int _test_tbegin_retry_nofloat_aborts (int retries, uint64_t abort_code)
+{
+ int rc;
+
+ counters.c1 = 0;
+ if ((rc = __builtin_tbegin_retry_nofloat ((void *)0, retries)) == 0)
+ {
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, counters.c1 + 1);
+ __builtin_tabort (abort_code);
+ return 2;
+ }
+ else
+ {
+ if ((abort_code & 1) == 0)
+ {
+ if (rc != 2)
+ {
+ return 100 * rc + 2003;
+ }
+ else if (counters.c1 != (uint64_t)retries + 1)
+ {
+ return 1000 * counters.c1 + 100 * retries + 4;
+ }
+ }
+ else
+ {
+ if (rc != 3)
+ {
+ return 100 * rc + 3005;
+ }
+ else if (counters.c1 != 1)
+ {
+ return 1000 * counters.c1 + 100 * retries + 6;
+ }
+ }
+ }
+
+ return 0;
+}
+
+static int test_tbegin_retry_nofloat_aborts (void)
+{
+ int rc;
+ int retries;
+
+ for (retries = 1; retries <= 3; retries++)
+ {
+ rc = _test_tbegin_retry_nofloat_aborts (retries, 256);
+ if (rc != 0)
+ {
+ return 10 * retries + rc;
+ }
+ }
+ for (retries = 1; retries <= 3; retries++)
+ {
+ rc = _test_tbegin_retry_nofloat_aborts (retries, 257);
+ if (rc != 0)
+ {
+ return 10000 + 10 * retries + rc;
+ }
+ }
+
+ return 0;
+}
+
+static int test_tbegin_tdb (void)
+{
+ int rc;
+
+ local_tdb.format = 0;
+ if ((rc = __builtin_tbegin (&local_tdb)) == 0)
+ {
+ rc = __builtin_tend ();
+ if (rc != 0)
+ {
+ return 100 * rc + 1;
+ }
+ if (local_tdb.format != 0)
+ {
+ dump_tdb (&local_tdb);
+ return 100 * local_tdb.format + 2;
+ }
+ }
+ else
+ {
+ return 100 * rc + 3;
+ }
+ local_tdb.format = 0;
+ if ((rc = __builtin_tbegin (&local_tdb)) == 0)
+ {
+ __builtin_tabort (257);
+ return 4;
+ }
+ else
+ {
+ if (rc != 3)
+ {
+ return 100 * rc + 5;
+ }
+ if (local_tdb.format != 1)
+ {
+ dump_tdb (&local_tdb);
+ return 100 * local_tdb.format + 6;
+ }
+ }
+ local_tdb256.format = 0;
+ if ((rc = __builtin_tbegin (&local_tdb256)) == 0)
+ {
+ rc = __builtin_tend ();
+ if (rc != 0)
+ {
+ return 1100 * rc + 1;
+ }
+ if (local_tdb256.format != 0)
+ {
+ dump_tdb (&local_tdb256);
+ return 1100 * local_tdb256.format + 2;
+ }
+ }
+ else
+ {
+ return 1100 * rc + 3;
+ }
+ local_tdb256.format = 0;
+ if ((rc = __builtin_tbegin (&local_tdb256)) == 0)
+ {
+ __builtin_tabort (257);
+ return 2004;
+ }
+ else
+ {
+ if (rc != 3)
+ {
+ return 2100 * rc + 5;
+ }
+ if (local_tdb256.format != 1)
+ {
+ dump_tdb (&local_tdb256);
+ return 2100 * local_tdb256.format + 6;
+ }
+ }
+
+ return 0;
+}
+
+static int test_tbegin_nofloat_tdb (void)
+{
+ int rc;
+
+ local_tdb.format = 0;
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb)) == 0)
+ {
+ rc = __builtin_tend ();
+ if (rc != 0)
+ {
+ return 100 * rc + 1;
+ }
+ if (local_tdb.format != 0)
+ {
+ dump_tdb (&local_tdb);
+ return 100 * local_tdb.format + 2;
+ }
+ }
+ else
+ {
+ return 3;
+ }
+ local_tdb.format = 0;
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb)) == 0)
+ {
+ __builtin_tabort (257);
+ return 4;
+ }
+ else
+ {
+ if (rc != 3)
+ {
+ return 100 * rc + 5;
+ }
+ if (local_tdb.format != 1)
+ {
+ dump_tdb (&local_tdb);
+ return 100 * local_tdb.format + 6;
+ }
+ }
+ local_tdb256.format = 0;
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb256)) == 0)
+ {
+ rc = __builtin_tend ();
+ if (rc != 0)
+ {
+ return 1100 * rc + 1;
+ }
+ if (local_tdb256.format != 0)
+ {
+ dump_tdb (&local_tdb256);
+ return 1100 * local_tdb256.format + 2;
+ }
+ }
+ else
+ {
+ return 1003;
+ }
+ local_tdb256.format = 0;
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb256)) == 0)
+ {
+ __builtin_tabort (257);
+ return 2004;
+ }
+ else
+ {
+ if (rc != 3)
+ {
+ return 2100 * rc + 5;
+ }
+ if (local_tdb256.format != 1)
+ {
+ dump_tdb (&local_tdb256);
+ return 2100 * local_tdb256.format + 6;
+ }
+ }
+
+ return 0;
+}
+
+static int test_tbegin_retry_tdb (void)
+{
+ int rc;
+
+ local_tdb256.format = 0;
+ if ((rc = __builtin_tbegin_retry (&local_tdb256, 2)) == 0)
+ {
+ rc = __builtin_tend ();
+ if (rc != 0)
+ {
+ return 1100 * rc + 1;
+ }
+ if (local_tdb256.format != 0)
+ {
+ dump_tdb (&local_tdb256);
+ return 1100 * local_tdb256.format + 2;
+ }
+ }
+ else
+ {
+ return 1003;
+ }
+ local_tdb256.format = 0;
+ if ((rc = __builtin_tbegin_retry (&local_tdb256, 2)) == 0)
+ {
+ __builtin_tabort (257);
+ return 2004;
+ }
+ else
+ {
+ if (rc != 3)
+ {
+ return 2100 * rc + 5;
+ }
+ if (local_tdb256.format != 1)
+ {
+ dump_tdb (&local_tdb256);
+ return 2100 * local_tdb256.format + 6;
+ }
+ }
+
+ return 0;
+}
+
+static int test_tbegin_retry_nofloat_tdb (void)
+{
+ int rc;
+
+ local_tdb.format = 0;
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb, 2)) == 0)
+ {
+ rc = __builtin_tend ();
+ if (rc != 0)
+ {
+ return 100 * rc + 1;
+ }
+ if (local_tdb.format != 0)
+ {
+ dump_tdb (&local_tdb);
+ return 100 * local_tdb.format + 2;
+ }
+ }
+ else
+ {
+ return 100 * rc + 3;
+ }
+ local_tdb.format = 0;
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb, 2)) == 0)
+ {
+ __builtin_tabort (257);
+ return 4;
+ }
+ else
+ {
+ if (rc != 3)
+ {
+ return 100 * rc + 5;
+ }
+ if (local_tdb.format != 1)
+ {
+ dump_tdb (&local_tdb);
+ return 100 * local_tdb.format + 6;
+ }
+ }
+ local_tdb256.format = 0;
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb256, 2)) == 0)
+ {
+ rc = __builtin_tend ();
+ if (rc != 0)
+ {
+ return 1100 * rc + 1;
+ }
+ if (local_tdb256.format != 0)
+ {
+ dump_tdb (&local_tdb256);
+ return 1100 * local_tdb256.format + 2;
+ }
+ }
+ else
+ {
+ return 1100 * rc + 3;
+ }
+ local_tdb256.format = 0;
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb256, 2)) == 0)
+ {
+ __builtin_tabort (257);
+ return 2004;
+ }
+ else
+ {
+ if (rc != 3)
+ {
+ return 2100 * rc + 5;
+ }
+ if (local_tdb256.format != 1)
+ {
+ dump_tdb (&local_tdb256);
+ return 2100 * local_tdb256.format + 6;
+ }
+ }
+
+ return 0;
+}
+
+static int test_etnd (void)
+{
+ int rc;
+
+ counters.c1 = 0;
+ counters.c2 = 0;
+ counters.c3 = 0;
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
+ {
+ counters.c1 = __builtin_tx_nesting_depth ();
+ if (__builtin_tbegin ((void *)0) == 0)
+ {
+ counters.c2 = __builtin_tx_nesting_depth ();
+ if (__builtin_tbegin ((void *)0) == 0)
+ {
+ counters.c3 = __builtin_tx_nesting_depth ();
+ __builtin_tend ();
+ }
+ __builtin_tend ();
+ }
+ __builtin_tend ();
+ }
+ else
+ {
+ return 100 * rc + 1;
+ }
+ if (counters.c1 != 1)
+ {
+ return 100 * counters.c1 + 2;
+ }
+ if (counters.c2 != 2)
+ {
+ return 100 * counters.c2 + 3;
+ }
+ if (counters.c3 != 3)
+ {
+ return 100 * counters.c3 + 4;
+ }
+
+ return 0;
+}
+
+static int test_tbeginc (void)
+{
+ int rc;
+
+ counters.c1 = 0;
+ __builtin_tbeginc ();
+ counters.c1 = 1;
+ rc = __builtin_tend ();
+ if (rc != 0)
+ {
+ return 10000 * rc + 1;
+ }
+ if (counters.c1 != 1)
+ {
+ return 100000 * counters.c1 + 3;
+ }
+
+ return 0;
+}
+
+/* ---------------------------- local testing framework functions ---------- */
+
+static int run_one_test (const test_table_entry_t *test_entry)
+{
+ int do_print_passes;
+ int succeeded;
+ int rc;
+ int i;
+
+ /* Warmup run to get all necessary data and instruction pages into the page
+ * tables. */
+ {
+ int run;
+
+ do_dump_tdb = 0;
+ for (run = 0; run < NUM_WARMUP_RUNS; run++)
+ {
+ test_entry->test_func ();
+ }
+ do_dump_tdb = 1;
+ }
+ do_print_passes = (
+ test_entry->required_quorum != 1 ||
+ test_entry->max_repetitions != 1);
+ printf ("RRR RUN %s\n", test_entry->name);
+ if (do_print_passes == 1)
+ {
+ printf (
+ " (requires %d successful out of %d runs)\n",
+ test_entry->required_quorum,
+ test_entry->max_repetitions);
+ }
+ succeeded = 0;
+ rc = 0;
+ for (rc = 0, i = 0; i < test_entry->max_repetitions; i++)
+ {
+ if (do_print_passes == 1)
+ {
+ if (i == 0)
+ {
+ printf (" ");
+ }
+ else
+ {
+ printf (",");
+ }
+ }
+ rc = test_entry->test_func ();
+ if (rc == 0)
+ {
+ if (do_print_passes == 1)
+ {
+ printf (" success");
+ }
+ succeeded++;
+ if (succeeded >= test_entry->required_quorum)
+ {
+ break;
+ }
+ }
+ else
+ {
+ printf (" failed (rc = %d)", rc);
+ }
+ }
+ if (do_print_passes == 1 || rc != 0)
+ {
+ printf ("\n");
+ }
+ if (succeeded >= test_entry->required_quorum)
+ {
+ printf ("+++ OK %s\n", test_entry->name);
+
+ return 0;
+ }
+ else
+ {
+ printf ("--- FAIL %s\n", test_entry->name);
+
+ return (rc != 0) ? rc : -1;
+ }
+}
+
+static int run_all_tests (const test_table_entry_t *test_table)
+{
+ const test_table_entry_t *test;
+ int rc;
+
+ for (
+ rc = 0, test = &test_table[0];
+ test->test_func != NULL && rc == 0; test++)
+ {
+ rc = run_one_test (test);
+ }
+
+ return rc;
+}
+
+/* ---------------------------- interface functions ------------------------ */
+
+int main (void)
+{
+ const test_table_entry_t test_table[] = {
+ TEST_NO_REP (test_constants),
+ TEST_DF_REP (test_tbegin_ntstg_tend),
+ TEST_DF_REP (test_tbegin_ntstg_tabort),
+ TEST_DF_REP (test_tbegin_nofloat),
+ TEST_NO_REP (test_tbegin_retry),
+ TEST_NO_REP (test_tbegin_retry_nofloat),
+ TEST_DF_REP (test_tbegin_aborts),
+ TEST_DF_REP (test_tbegin_indirect_aborts),
+ TEST_DF_REP (test_tbegin_nofloat_aborts),
+ TEST_DF_REP (test_tbegin_nofloat_indirect_aborts),
+ TEST_NO_REP (test_tbegin_retry_aborts),
+ TEST_NO_REP (test_tbegin_retry_nofloat_aborts),
+ TEST_DF_REP (test_tbegin_tdb),
+ TEST_DF_REP (test_tbegin_nofloat_tdb),
+ TEST_NO_REP (test_tbegin_retry_tdb),
+ TEST_NO_REP (test_tbegin_retry_nofloat_tdb),
+ TEST_DF_REP (test_etnd),
+ TEST_DF_REP (test_tbeginc),
+ { (void *)0, 0, 0 }
+ };
+
+ {
+ int rc;
+
+ rc = run_all_tests (test_table);
+
+ return rc;
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-2.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-2.c
new file mode 100644
index 000000000..15b0d12ae
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-2.c
@@ -0,0 +1,682 @@
+/* Functional tests of the htm __TM_... macros. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target htm } */
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
+
+/* ---------------------------- included header files ---------------------- */
+
+#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include <htmxlintrin.h>
+
+/* ---------------------------- local definitions -------------------------- */
+
+#define DEFAULT_MAX_REPETITIONS 5
+#define DEFAULT_REQUIRED_QUORUM ((DEFAULT_MAX_REPETITIONS) - 1)
+#define DEFAULT_ABORT_ADDRESS (0x12345678u)
+
+/* ---------------------------- local macros ------------------------------- */
+
+#define TEST_DF_REP(name) \
+ { #name, name, DEFAULT_MAX_REPETITIONS, DEFAULT_REQUIRED_QUORUM }
+#define TEST_NO_REP(name) { #name, name, 1, 1 }
+
+/* ---------------------------- local types -------------------------------- */
+
+typedef int (*test_func_t)(void);
+
+typedef struct
+{
+ const char *name;
+ test_func_t test_func;
+ int max_repetitions;
+ int required_quorum;
+} test_table_entry_t;
+
+typedef enum
+{
+ ABORT_T_SYSTEM = 0,
+ ABORT_T_USER = 1,
+} abort_user_t;
+
+typedef enum
+{
+ ABORT_T_NONE = 0,
+ ABORT_T_ILLEGAL,
+ ABORT_T_FOOTPRINT_EXCEEDED,
+ ABORT_T_NESTED_TOO_DEEP,
+ ABORT_T_CONFLICT,
+
+ ABORT_T_INVALID_ABORT_CODE
+} abort_t;
+
+/* ---------------------------- local variables ---------------------------- */
+
+__attribute__ ((aligned(256))) static struct __htm_tdb local_tdb256;
+static struct __htm_tdb local_tdb;
+
+static abort_t const abort_classes[] =
+{
+ ABORT_T_INVALID_ABORT_CODE,
+ ABORT_T_NONE,
+ ABORT_T_NONE,
+ ABORT_T_NONE,
+
+ ABORT_T_ILLEGAL,
+ ABORT_T_NONE,
+ ABORT_T_NONE,
+ ABORT_T_FOOTPRINT_EXCEEDED,
+
+ ABORT_T_FOOTPRINT_EXCEEDED,
+ ABORT_T_CONFLICT,
+ ABORT_T_CONFLICT,
+ ABORT_T_ILLEGAL,
+
+ ABORT_T_NONE,
+ ABORT_T_NESTED_TOO_DEEP,
+ ABORT_T_NONE,
+ ABORT_T_NONE,
+
+ ABORT_T_NONE
+};
+
+static size_t num_abort_classes = sizeof(abort_classes) / sizeof(abort_t);
+
+/* ---------------------------- exported variables (globals) --------------- */
+
+int global_int = 0;
+uint64_t global_u64 = 0;
+float global_float_1 = 1.0;
+float global_float_2 = 2.5;
+float global_float_3 = 0.0;
+__attribute__ ((aligned(256))) struct
+{
+ volatile uint64_t c1;
+ volatile uint64_t c2;
+ volatile uint64_t c3;
+} counters = { 0, 0, 0 };
+
+/* ---------------------------- local helper functions --------------------- */
+
+static void dump_tdb(struct __htm_tdb *tdb)
+{
+ unsigned char *p;
+ int i;
+ int j;
+
+ p = (unsigned char *)tdb;
+ for (i = 0; i < 16; i++)
+ {
+ fprintf(stderr, "0x%02x ", i * 16);
+ for (j = 0; j < 16; j++)
+ {
+ fprintf(stderr, "%02x", (int)p[i * 16 + j]);
+ if (j < 15)
+ {
+ fprintf(stderr, " ");
+ }
+ if (j == 7)
+ {
+ fprintf(stderr, " ");
+ }
+ }
+ fprintf(stderr, "\n");
+ }
+
+ return;
+}
+
+static void make_fake_tdb(struct __htm_tdb *tdb)
+{
+ memset(tdb, 0, sizeof(*tdb));
+ tdb->format = 1;
+ tdb->nesting_depth = 1;
+ tdb->atia = DEFAULT_ABORT_ADDRESS;
+ tdb->abort_code = 11;
+
+ return;
+}
+
+static int check_abort_code_in_tdb(struct __htm_tdb *tdb, uint64_t abort_code)
+{
+ long expect_rc;
+ long rc;
+
+ if (abort_code != 0)
+ {
+ long addr;
+
+ addr = __TM_failure_address(&local_tdb);
+ if (addr != DEFAULT_ABORT_ADDRESS)
+ {
+ return 11;
+ }
+ }
+ {
+ long long tdb_abort_code;
+
+ tdb_abort_code = __TM_failure_code(tdb);
+ if ((uint64_t)tdb_abort_code != abort_code)
+ {
+ fprintf(
+ stderr, "tm_ac %" PRIu64 ", ac %" PRIu64
+ ", tdb_ac %" PRIu64 "\n",
+ (uint64_t)tdb_abort_code, abort_code,
+ (uint64_t)tdb->abort_code);
+ return 10;
+ }
+ }
+ expect_rc = (abort_code >= 256) ? 1 : 0;
+ rc = __TM_is_user_abort(tdb);
+ if (rc != expect_rc)
+ {
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
+ return 1;
+ }
+ {
+ unsigned char code;
+
+ code = 0xffu;
+ rc = __TM_is_named_user_abort(tdb, &code);
+ if (rc != expect_rc)
+ {
+ fprintf(
+ stderr, "rc %ld, expect_rc %ld\n", rc,
+ expect_rc);
+ return 2;
+ }
+ if (expect_rc == 1 && code != abort_code - 256)
+ {
+ return 3;
+ }
+ }
+ if (abort_code > (uint64_t)num_abort_classes)
+ {
+ abort_code = (uint64_t)num_abort_classes;
+ }
+ expect_rc = (abort_classes[abort_code] == ABORT_T_ILLEGAL) ? 1 : 0;
+ rc = __TM_is_illegal(tdb);
+ if (rc != expect_rc)
+ {
+ dump_tdb(tdb);
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
+ return 4;
+ }
+ expect_rc =
+ (abort_classes[abort_code] == ABORT_T_FOOTPRINT_EXCEEDED) ?
+ 1 : 0;
+ rc = __TM_is_footprint_exceeded(tdb);
+ if (rc != expect_rc)
+ {
+ dump_tdb(tdb);
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
+ return 5;
+ }
+ expect_rc =
+ (abort_classes[abort_code] == ABORT_T_NESTED_TOO_DEEP) ? 1 : 0;
+ rc = __TM_is_nested_too_deep(tdb);
+ if (rc != expect_rc)
+ {
+ dump_tdb(tdb);
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
+ return 6;
+ }
+ expect_rc = (abort_classes[abort_code] == ABORT_T_CONFLICT) ? 1 : 0;
+ rc = __TM_is_conflict(tdb);
+ if (rc != expect_rc)
+ {
+ dump_tdb(tdb);
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
+ return 7;
+ }
+
+ return 0;
+}
+
+/* ---------------------------- local test functions ----------------------- */
+
+/* Not a test; make sure that the involved global cachelines are reserved for
+ * writing. */
+static int init_cache(void)
+{
+ make_fake_tdb(&local_tdb);
+ make_fake_tdb(&local_tdb256);
+ global_int = 0;
+ global_u64 = 0;
+ global_float_1 = 1.0;
+ global_float_2 = 2.5;
+ global_float_3 = 0.0;
+ counters.c1 = 0;
+ counters.c2 = 0;
+ counters.c3 = 0;
+
+ return 0;
+}
+
+static int test_abort_classification(void)
+{
+ int i;
+
+ make_fake_tdb(&local_tdb);
+ for (i = 0; i <= 256; i++)
+ {
+ int rc;
+
+ local_tdb.abort_code = (uint64_t)i;
+ rc = check_abort_code_in_tdb(&local_tdb, (uint64_t)i);
+ if (rc != 0)
+ {
+ return 100 * i + rc;
+ }
+ }
+
+ return 0;
+}
+
+static int test_cc_classification(void)
+{
+ long rc;
+
+ rc = __TM_is_failure_persistent(0);
+ if (rc != 0)
+ {
+ return 1;
+ }
+ rc = __TM_is_failure_persistent(1);
+ if (rc != 0)
+ {
+ return 2;
+ }
+ rc = __TM_is_failure_persistent(2);
+ if (rc != 0)
+ {
+ return 3;
+ }
+ rc = __TM_is_failure_persistent(3);
+ if (rc != 1)
+ {
+ return 4;
+ }
+
+ return 0;
+}
+
+static int test_tbegin_ntstg_tend(void)
+{
+ long rc;
+
+ counters.c1 = 0;
+ counters.c2 = 0;
+ if ((rc = __TM_simple_begin()) == 0)
+ {
+ __TM_non_transactional_store((uint64_t *)&counters.c1, 1);
+ counters.c2 = 2;
+ rc = __TM_end();
+ if (rc != 0)
+ {
+ return 100 * rc + 5;
+ }
+ if (counters.c1 != 1)
+ {
+ return 100 * counters.c1 + 2;
+ }
+ if (counters.c2 != 2)
+ {
+ return 100 * counters.c2 + 3;
+ }
+ }
+ else
+ {
+ return 100 * rc + 4;
+ }
+
+ return 0;
+}
+
+static int test_tbegin_ntstg_tabort(void)
+{
+ register float f;
+
+ counters.c1 = 0;
+ counters.c2 = 0;
+ f = 0;
+ if (__TM_simple_begin() == 0)
+ {
+ __TM_non_transactional_store((uint64_t *)&counters.c1, 1);
+ counters.c2 = 2;
+ f = 1;
+ __TM_named_abort(0);
+ return 1;
+ }
+ if (counters.c1 != 1)
+ {
+ return 100 * counters.c1 + 2;
+ }
+ if (counters.c2 != 0)
+ {
+ return 100 * counters.c2 + 3;
+ }
+ if (f != 0)
+ {
+ return 100 * f + 4;
+ }
+
+ return 0;
+}
+
+static int test_tbegin_aborts(void)
+{
+ float f;
+ long rc;
+
+ f = 77;
+ if ((rc = __TM_simple_begin()) == 0)
+ {
+ f = 88;
+ __TM_abort();
+ return 2;
+ }
+ else if (rc != 2)
+ {
+ return 3;
+ }
+ if (f != 77)
+ {
+ return 4;
+ }
+ f = 66;
+ if ((rc = __TM_simple_begin()) == 0)
+ {
+ f = 99;
+ __TM_named_abort(3);
+ return 5;
+ }
+ else if (rc != 3)
+ {
+ return 100 * rc + 6;
+ }
+ if (f != 66)
+ {
+ return 100 * f + 7;
+ }
+ if ((rc = __TM_simple_begin()) == 0)
+ {
+ global_float_3 = global_float_1 + global_float_2;
+ rc = __TM_end();
+ if (rc != 0)
+ {
+ return 100 * rc + 8;
+ }
+ }
+ else
+ {
+ return 100 * rc + 9;
+ }
+ if (global_float_3 != global_float_1 + global_float_2)
+ {
+ return 100 * rc + 10;
+ }
+
+ return 0;
+}
+
+static int test_tbegin_tdb(void)
+{
+ long rc;
+
+ local_tdb.format = 0;
+ if ((rc = __TM_begin(&local_tdb)) == 0)
+ {
+ rc = __TM_end();
+ if (rc != 0)
+ {
+ return 100 * rc + 1;
+ }
+ if (local_tdb.format != 0)
+ {
+ dump_tdb(&local_tdb);
+ return 100 * local_tdb.format + 2;
+ }
+ }
+ else
+ {
+ return 100 * rc + 3;
+ }
+ local_tdb.format = 0;
+ if ((rc = __TM_begin(&local_tdb)) == 0)
+ {
+ __TM_named_abort(1);
+ return 4;
+ }
+ else
+ {
+ if (rc != 3)
+ {
+ return 100 * rc + 5;
+ }
+ if (local_tdb.format != 1)
+ {
+ dump_tdb(&local_tdb);
+ return 100 * local_tdb.format + 6;
+ }
+ }
+ local_tdb256.format = 0;
+ if ((rc = __TM_begin(&local_tdb256)) == 0)
+ {
+ rc = __TM_end();
+ if (rc != 0)
+ {
+ return 1100 * rc + 1;
+ }
+ if (local_tdb256.format != 0)
+ {
+ dump_tdb(&local_tdb256);
+ return 1100 * local_tdb256.format + 2;
+ }
+ }
+ else
+ {
+ return 1100 * rc + 3;
+ }
+#if 1 /*!!!does not work*/
+ local_tdb256.format = 0;
+ if ((rc = __TM_begin(&local_tdb256)) == 0)
+ {
+ __TM_named_abort(1);
+ return 2004;
+ }
+ else
+ {
+ if (rc != 3)
+ {
+ return 2100 * rc + 5;
+ }
+ if (local_tdb256.format != 1)
+ {
+ dump_tdb(&local_tdb256);
+ return 2100 * local_tdb256.format + 6;
+ }
+ }
+#endif
+
+ return 0;
+}
+
+static int test_etnd(void)
+{
+ long rc;
+
+ {
+ long nd;
+
+ make_fake_tdb(&local_tdb);
+ local_tdb.nesting_depth = 0;
+ nd = __TM_nesting_depth(&local_tdb);
+ if (nd != 0)
+ {
+ return 1;
+ }
+ local_tdb.nesting_depth = 7;
+ nd = __TM_nesting_depth(&local_tdb);
+ if (nd != 7)
+ {
+ return 7;
+ }
+ local_tdb.format = 0;
+ nd = __TM_nesting_depth(&local_tdb);
+ if (nd != 0)
+ {
+ return 2;
+ }
+ }
+ counters.c1 = 0;
+ counters.c1 = 0;
+ counters.c2 = 0;
+ counters.c3 = 0;
+ if ((rc = __TM_simple_begin()) == 0)
+ {
+ counters.c1 = __TM_nesting_depth(0);
+ if (__TM_simple_begin() == 0)
+ {
+ counters.c2 = __TM_nesting_depth(0);
+ if (__TM_simple_begin() == 0)
+ {
+ counters.c3 = __TM_nesting_depth(0);
+ __TM_end();
+ }
+ __TM_end();
+ }
+ __TM_end();
+ }
+ else
+ {
+ return 100 * rc + 1;
+ }
+ if (counters.c1 != 1)
+ {
+ return 100 * counters.c1 + 2;
+ }
+ if (counters.c2 != 2)
+ {
+ return 100 * counters.c2 + 3;
+ }
+ if (counters.c3 != 3)
+ {
+ return 100 * counters.c3 + 4;
+ }
+
+ return 0;
+}
+
+/* ---------------------------- local testing framework functions ---------- */
+
+static int run_one_test(const test_table_entry_t *test_entry)
+{
+ int do_print_passes;
+ int succeeded;
+ int rc;
+ int i;
+
+ do_print_passes = (
+ test_entry->required_quorum != 1 ||
+ test_entry->max_repetitions != 1);
+ printf("RRR RUN %s\n", test_entry->name);
+ if (do_print_passes == 1)
+ {
+ printf(
+ " (requires %d successful out of %d runs)\n",
+ test_entry->required_quorum,
+ test_entry->max_repetitions);
+ }
+ succeeded = 0;
+ rc = 0;
+ for (rc = 0, i = 0; i < test_entry->max_repetitions; i++)
+ {
+ if (do_print_passes == 1)
+ {
+ if (i == 0)
+ {
+ printf(" ");
+ }
+ else
+ {
+ printf(",");
+ }
+ }
+ rc = test_entry->test_func();
+ if (rc == 0)
+ {
+ if (do_print_passes == 1)
+ {
+ printf(" success");
+ }
+ succeeded++;
+ if (succeeded >= test_entry->required_quorum)
+ {
+ break;
+ }
+ }
+ else
+ {
+ printf(" failed (rc = %d)", rc);
+ }
+ }
+ if (do_print_passes == 1 || rc != 0)
+ {
+ printf("\n");
+ }
+ if (succeeded >= test_entry->required_quorum)
+ {
+ printf("+++ OK %s\n", test_entry->name);
+
+ return 0;
+ }
+ else
+ {
+ printf("--- FAIL %s\n", test_entry->name);
+
+ return (rc != 0) ? rc : -1;
+ }
+}
+
+static int run_all_tests(const test_table_entry_t *test_table)
+{
+ const test_table_entry_t *test;
+ int rc;
+
+ for (
+ rc = 0, test = &test_table[0];
+ test->test_func != NULL && rc == 0; test++)
+ {
+ rc = run_one_test(test);
+ }
+
+ return rc;
+}
+
+/* ---------------------------- interface functions ------------------------ */
+
+int main(void)
+{
+ const test_table_entry_t test_table[] = {
+ TEST_NO_REP(init_cache),
+ TEST_NO_REP(test_abort_classification),
+ TEST_NO_REP(test_cc_classification),
+ TEST_DF_REP(test_tbegin_ntstg_tend),
+ TEST_DF_REP(test_tbegin_ntstg_tabort),
+ TEST_DF_REP(test_tbegin_aborts),
+ TEST_DF_REP(test_tbegin_tdb),
+ TEST_DF_REP(test_etnd),
+ { (void *)0, 0, 0 }
+ };
+
+ {
+ int rc;
+
+ rc = run_all_tests(test_table);
+
+ return rc;
+ }
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c
new file mode 100644
index 000000000..982a7483d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c
@@ -0,0 +1,164 @@
+/* This checks the availability of the low-level builtins introduced
+ for transactional execution. */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
+
+#include <stdint.h>
+#include <htmintrin.h>
+
+int global = 0;
+uint64_t g;
+struct __htm_tdb global_tdb;
+
+int
+foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
+{
+
+ int cc;
+ int n;
+
+ __builtin_tbegin ((void *)0);
+ __builtin_tbegin ((void *)-99999);
+ __builtin_tbegin ((void *)99999);
+ while (__builtin_tbegin ((void *)0) != 0)
+ {
+ }
+ cc = __builtin_tbegin ((void *)0x12345678);
+ cc = __builtin_tbegin (tdb);
+ cc = __builtin_tbegin (&global_tdb);
+ cc = __builtin_tbegin ((void *)(long)(reg + 0x12345678));
+ cc = __builtin_tbegin ((void *)(long)(reg));
+
+ __builtin_tbegin_nofloat ((void *)0);
+ __builtin_tbegin_nofloat ((void *)-99999);
+ __builtin_tbegin_nofloat ((void *)99999);
+ cc = __builtin_tbegin_nofloat ((void *)0x12345678);
+ cc = __builtin_tbegin_nofloat (tdb);
+ cc = __builtin_tbegin_nofloat (&global_tdb);
+ cc = __builtin_tbegin_nofloat ((void *)(long)(reg + 0x12345678));
+ cc = __builtin_tbegin_nofloat ((void *)(long)(reg));
+
+ __builtin_tbegin_retry ((void *)0, 0);
+ cc = __builtin_tbegin_retry ((void *)0, 1);
+ cc = __builtin_tbegin_retry ((void *)0, -1);
+ cc = __builtin_tbegin_retry ((void *)0, 42);
+ cc = __builtin_tbegin_retry ((void *)0, reg);
+ cc = __builtin_tbegin_retry ((void *)0, *mem);
+ cc = __builtin_tbegin_retry ((void *)0, global);
+ cc = __builtin_tbegin_retry (tdb, 42);
+ cc = __builtin_tbegin_retry (&global_tdb, 42);
+ cc = __builtin_tbegin_retry ((void *)0x12345678, global);
+ cc = __builtin_tbegin_retry (
+ (void *)(long) (reg + 0x12345678), global + 1);
+ cc = __builtin_tbegin_retry (
+ (void *)(long)(reg), global - 1);
+
+ __builtin_tbegin_retry_nofloat ((void *)0, 0);
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, 1);
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, -1);
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, 42);
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, reg);
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, *mem);
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, global);
+ cc = __builtin_tbegin_retry_nofloat (tdb, 42);
+ cc = __builtin_tbegin_retry_nofloat (&global_tdb, 42);
+ cc = __builtin_tbegin_retry_nofloat ((void *)0x12345678, global);
+ cc = __builtin_tbegin_retry_nofloat (
+ (void *)(long) (reg + 0x12345678), global + 1);
+ cc = __builtin_tbegin_retry_nofloat (
+ (void *)(long)(reg), global - 1);
+
+ __builtin_tbeginc ();
+
+ __builtin_tx_nesting_depth ();
+ n = __builtin_tx_nesting_depth ();
+
+ __builtin_non_tx_store (mem64, 0);
+ {
+ const uint64_t val_var = 0x1122334455667788;
+
+ __builtin_non_tx_store (mem64, val_var);
+ }
+ __builtin_non_tx_store (mem64, (uint64_t)reg);
+ __builtin_non_tx_store (mem64, g);
+ __builtin_non_tx_store ((uint64_t *)0, 0);
+ __builtin_non_tx_store ((uint64_t *)0x12345678, 0);
+ __builtin_non_tx_store (&g, 23);
+ __builtin_non_tx_store (&g, reg);
+ __builtin_non_tx_store (&g, *mem);
+ __builtin_non_tx_store (&g, global);
+
+ __builtin_tend();
+
+ __builtin_tx_assist (0);
+ __builtin_tx_assist (1);
+ __builtin_tx_assist (reg);
+ __builtin_tx_assist (*mem);
+ __builtin_tx_assist (global);
+}
+
+/* The taborts must go into separate function since they are
+ "noreturn". */
+
+void
+tabort1 ()
+{
+ __builtin_tabort (256);
+}
+
+void
+tabort2 (int reg)
+{
+ __builtin_tabort (reg);
+}
+
+void
+tabort3 (int reg)
+{
+ /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */
+ __builtin_tabort (reg + 255);
+}
+
+void
+tabort4 (int *mem)
+{
+ __builtin_tabort (*mem);
+}
+
+void
+tabort5 ()
+{
+ __builtin_tabort (global);
+}
+
+void
+tabort6 (int *mem)
+{
+ /* Here global + 255 gets reloaded into a reg. Better would be to
+ just reload global or *mem and get the +255 for free as address
+ arithmetic. */
+ __builtin_tabort (*mem + 255);
+}
+
+void
+tabort7 ()
+{
+ __builtin_tabort (global + 255);
+}
+
+void
+tabort8 ()
+{
+ __builtin_tabort (-1);
+}
+
+
+/* Make sure the tdb NULL argument ends up as immediate value in the
+ instruction. */
+/* { dg-final { scan-assembler-times "tbegin\t0," 17 } } */
+/* { dg-final { scan-assembler-times "tbegin\t" 41 } } */
+/* Check number of occurences of certain instructions. */
+/* { dg-final { scan-assembler-times "tbeginc\t" 1 } } */
+/* { dg-final { scan-assembler-times "tabort\t" 8 } } */
+/* { dg-final { scan-assembler "ppa\t" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c
new file mode 100644
index 000000000..67d76a6d3
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
+
+void must_not_compile1 (void)
+{
+ __builtin_tabort (0); /* { dg-error "Invalid transaction abort code:" } */
+}
+
+void must_not_compile2 (void)
+{
+ __builtin_tabort (255); /* { dg-error "Invalid transaction abort code:" } */
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c
index 77ceeb770..77ceeb770 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-nofloat-1.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-nofloat-1.c
index df7e2bac8..6022efb97 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-nofloat-1.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-nofloat-1.c
@@ -1,12 +1,50 @@
-/* { dg-do compile } */
-/* { dg-options "-O3 -march=zEC12 -mzarch" } */
+/* { dg-do run } */
+/* { dg-require-effective-target htm } */
+/* { dg-options "-O3 -march=zEC12 -mzarch --save-temps" } */
-int
-foo ()
+/* __builtin_tbegin has to emit clobbers for all FPRs since the tbegin
+ instruction does not automatically preserves them. If the
+ transaction body is fully contained in a function the backend tries
+ after reload to get rid of the FPR save/restore operations
+ triggered by the clobbers. This testcase failed since the backend
+ was able to get rid of all FPR saves/restores and since these were
+ the only stack operations also of the entire stack space. So even
+ the save/restore of the stack pointer was omitted in the end.
+ However, since the frame layout has been fixed before, the prologue
+ still generated the stack pointer decrement making foo return with
+ a modified stack pointer. */
+
+void abort(void);
+
+void __attribute__((noinline))
+foo (int a)
+{
+ if (__builtin_tbegin (0) == 0)
+ __builtin_tend ();
+}
+
+#ifdef __s390x__
+#define GET_STACK_POINTER(SP) \
+ asm volatile ("stg %%r15, %0" : "=QRST" (SP));
+#else
+#define GET_STACK_POINTER(SP) \
+ asm volatile ("st %%r15, %0" : "=QR" (SP));
+#endif
+
+int main(void)
{
- __builtin_tbegin_nofloat (0);
- __builtin_tbegin_retry_nofloat (0, 42);
+ unsigned long new_sp, old_sp;
+
+ GET_STACK_POINTER (old_sp);
+ foo(42);
+ GET_STACK_POINTER (new_sp);
+
+ if (old_sp != new_sp)
+ abort ();
+
+ return 0;
}
+
/* Make sure no FPR saves/restores are emitted. */
-/* { dg-final { scan-assembler-not "std" } } */
-/* { dg-final { scan-assembler-not "ld" } } */
+/* { dg-final { scan-assembler-not "\tstd\t" } } */
+/* { dg-final { scan-assembler-not "\tld\t" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-nofloat-2.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-nofloat-2.c
deleted file mode 100644
index 59621a4c1..000000000
--- a/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-nofloat-2.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* { dg-do run } */
-/* { dg-options "-O3 -mhtm -Wa,-march=zEC12,-mzarch --save-temps" } */
-
-/* __builtin_tbegin has to emit clobbers for all FPRs since the tbegin
- instruction does not automatically preserves them. If the
- transaction body is fully contained in a function the backend tries
- after reload to get rid of the FPR save/restore operations
- triggered by the clobbers. This testcase failed since the backend
- was able to get rid of all FPR saves/restores and since these were
- the only stack operations also of the entire stack space. So even
- the save/restore of the stack pointer was omitted in the end.
- However, since the frame layout has been fixed before, the prologue
- still generated the stack pointer decrement making foo return with
- a modified stack pointer. */
-
-void abort(void);
-
-void __attribute__((noinline))
-foo (int a)
-{
- /* This is just to prevent the tbegin code from actually being
- executed. That way the test may even run on machines prior to
- zEC12. */
- if (a == 42)
- return;
-
- if (__builtin_tbegin (0) == 0)
- __builtin_tend ();
-}
-
-#ifdef __s390x__
-#define GET_STACK_POINTER(SP) \
- asm volatile ("stg %%r15, %0" : "=QRST" (SP));
-#else
-#define GET_STACK_POINTER(SP) \
- asm volatile ("st %%r15, %0" : "=QR" (SP));
-#endif
-
-int main(void)
-{
- unsigned long new_sp, old_sp;
-
- GET_STACK_POINTER (old_sp);
- foo(42);
- GET_STACK_POINTER (new_sp);
-
- if (old_sp != new_sp)
- abort ();
-
- return 0;
-}
-
-/* Make sure no FPR saves/restores are emitted. */
-/* { dg-final { scan-assembler-not "\tstd\t" } } */
-/* { dg-final { scan-assembler-not "\tld\t" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-nofloat-compile-1.c b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-nofloat-compile-1.c
new file mode 100644
index 000000000..df7e2bac8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/htm-nofloat-compile-1.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
+
+int
+foo ()
+{
+ __builtin_tbegin_nofloat (0);
+ __builtin_tbegin_retry_nofloat (0, 42);
+}
+/* Make sure no FPR saves/restores are emitted. */
+/* { dg-final { scan-assembler-not "std" } } */
+/* { dg-final { scan-assembler-not "ld" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/s390/s390.exp b/gcc-4.8/gcc/testsuite/gcc.target/s390/s390.exp
index a4a6609cb..141c0eef2 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/s390/s390.exp
+++ b/gcc-4.8/gcc/testsuite/gcc.target/s390/s390.exp
@@ -24,6 +24,19 @@ if ![istarget s390*-*-*] then {
# Load support procs.
load_lib gcc-dg.exp
+# Return 1 if htm (etnd - extract nesting depth) instructions are
+# understood by the assembler and can be executed.
+proc check_effective_target_htm { } {
+ if { ![check_runtime s390_check_htm [subst {
+ int main (void)
+ {
+ unsigned int nd;
+ asm ("etnd %0" : "=d" (nd));
+ return nd;
+ }
+ }] "-march=zEC12 -mzarch" ] } { return 0 } else { return 1 }
+}
+
# If a testcase doesn't have special options, use these.
global DEFAULT_CFLAGS
if ![info exists DEFAULT_CFLAGS] then {
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/allocate_class_3.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/allocate_class_3.f90
new file mode 100644
index 000000000..ddc7e2328
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/allocate_class_3.f90
@@ -0,0 +1,107 @@
+! { dg-do run }
+! Tests the fix for PR59414, comment #3, in which the allocate
+! expressions were not correctly being stripped to provide the
+! vpointer as an lhs to the pointer assignment of the vptr from
+! the SOURCE expression.
+!
+! Contributed by Antony Lewis <antony@cosmologist.info>
+!
+module ObjectLists
+ implicit none
+
+ type :: t
+ integer :: i
+ end type
+
+ type Object_array_pointer
+ class(t), pointer :: p(:)
+ end type
+
+contains
+
+ subroutine AddArray1 (P, Pt)
+ class(t) :: P(:)
+ class(Object_array_pointer) :: Pt
+
+ select type (Pt)
+ class is (Object_array_pointer)
+ if (associated (Pt%P)) deallocate (Pt%P)
+ allocate(Pt%P(1:SIZE(P)), source=P)
+ end select
+ end subroutine
+
+ subroutine AddArray2 (P, Pt)
+ class(t) :: P(:)
+ class(Object_array_pointer) :: Pt
+
+ select type (Pt)
+ type is (Object_array_pointer)
+ if (associated (Pt%P)) deallocate (Pt%P)
+ allocate(Pt%P(1:SIZE(P)), source=P)
+ end select
+ end subroutine
+
+ subroutine AddArray3 (P, Pt)
+ class(t) :: P
+ class(Object_array_pointer) :: Pt
+
+ select type (Pt)
+ class is (Object_array_pointer)
+ if (associated (Pt%P)) deallocate (Pt%P)
+ allocate(Pt%P(1:4), source=P)
+ end select
+ end subroutine
+
+ subroutine AddArray4 (P, Pt)
+ type(t) :: P(:)
+ class(Object_array_pointer) :: Pt
+
+ select type (Pt)
+ class is (Object_array_pointer)
+ if (associated (Pt%P)) deallocate (Pt%P)
+ allocate(Pt%P(1:SIZE(P)), source=P)
+ end select
+ end subroutine
+end module
+
+ use ObjectLists
+ type(Object_array_pointer), pointer :: Pt
+ class(t), pointer :: P(:)
+
+ allocate (P(2), source = [t(1),t(2)])
+ allocate (Pt, source = Object_array_pointer(NULL()))
+ call AddArray1 (P, Pt)
+ select type (x => Pt%p)
+ type is (t)
+ if (any (x%i .ne. [1,2])) call abort
+ end select
+ deallocate (P)
+ deallocate (pt)
+
+ allocate (P(3), source = [t(3),t(4),t(5)])
+ allocate (Pt, source = Object_array_pointer(NULL()))
+ call AddArray2 (P, Pt)
+ select type (x => Pt%p)
+ type is (t)
+ if (any (x%i .ne. [3,4,5])) call abort
+ end select
+ deallocate (P)
+ deallocate (pt)
+
+ allocate (Pt, source = Object_array_pointer(NULL()))
+ call AddArray3 (t(6), Pt)
+ select type (x => Pt%p)
+ type is (t)
+ if (any (x%i .ne. [6,6,6,6])) call abort
+ end select
+ deallocate (pt)
+
+ allocate (Pt, source = Object_array_pointer(NULL()))
+ call AddArray4 ([t(7), t(8)], Pt)
+ select type (x => Pt%p)
+ type is (t)
+ if (any (x%i .ne. [7,8])) call abort
+ end select
+ deallocate (pt)
+ end
+
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/arrayio_13.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/arrayio_13.f90
new file mode 100644
index 000000000..92a856bc8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/arrayio_13.f90
@@ -0,0 +1,14 @@
+! { dg-do run }
+! PR60810 Bogus end-of-file
+program readstrlist
+ character(len=80), dimension(2) :: ver
+ integer :: a, b, c
+ a = 1
+ b = 2
+ c = 3
+ ver(1) = '285 383'
+ ver(2) = '985'
+ read( ver, *) a, b, c
+ if (a /= 285 .or. b /= 383 .or. c /= 985) call abort
+ !write ( *, *) a, b, c
+end
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/constructor_9.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/constructor_9.f90
new file mode 100644
index 000000000..519670303
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/constructor_9.f90
@@ -0,0 +1,22 @@
+! { dg-do compile }
+! { dg-options "-Wall" }
+!
+! PR 58471: [4.8/4.9 Regression] ICE on invalid with missing type constructor and -Wall
+!
+! Contributed by Andrew Benson <abensonca@gmail.com>
+
+module cf
+ implicit none
+ type :: cfmde
+ end type
+ interface cfmde
+ module procedure mdedc ! { dg-error "is neither function nor subroutine" }
+ end interface
+contains
+ subroutine cfi()
+ type(cfmde), pointer :: cfd
+ cfd=cfmde() ! { dg-error "Can't convert" }
+ end subroutine
+end module
+
+! { dg-final { cleanup-modules "cf" } }
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/default_initialization_7.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/default_initialization_7.f90
new file mode 100644
index 000000000..fc8be98b1
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/default_initialization_7.f90
@@ -0,0 +1,22 @@
+! { dg-do compile }
+!
+! PR fortran/57033
+! ICE on a structure constructor of an extended derived type whose parent
+! type last component has a default initializer
+!
+! Contributed by Tilo Schwarz <tilo@tilo-schwarz.de>
+
+program ice
+
+type m
+ integer i
+ logical :: f = .false.
+end type m
+
+type, extends(m) :: me
+end type me
+
+type(me) meo
+
+meo = me(1) ! ICE
+end program ice
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/derived_external_function_1.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/derived_external_function_1.f90
new file mode 100644
index 000000000..7421c4c0f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/derived_external_function_1.f90
@@ -0,0 +1,27 @@
+! { dg-do run }
+!
+! PR fortran/58771
+!
+! Contributed by Vittorio Secca <zeccav@gmail.com>
+!
+! ICEd on the write statement with f() because the derived type backend
+! declaration not built.
+!
+module m
+ type t
+ integer(4) g
+ end type
+end
+
+type(t) function f() result(ff)
+ use m
+ ff%g = 42
+end
+
+ use m
+ character (20) :: line1, line2
+ type(t) f
+ write (line1, *) f()
+ write (line2, *) 42_4
+ if (line1 .ne. line2) call abort
+end
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90
new file mode 100644
index 000000000..d37e1f6a9
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90
@@ -0,0 +1,74 @@
+! { dg-do run }
+!
+! PR 59654: [4.8/4.9 Regression] [OOP] Broken function table with complex OO use case
+!
+! Contributed by Thomas Clune <Thomas.L.Clune@nasa.gov>
+
+module TestResult_mod
+ implicit none
+
+ type TestResult
+ integer :: numRun = 0
+ contains
+ procedure :: run
+ procedure, nopass :: getNumRun
+ end type
+
+contains
+
+ subroutine run (this)
+ class (TestResult) :: this
+ this%numRun = this%numRun + 1
+ end subroutine
+
+ subroutine getNumRun()
+ end subroutine
+
+end module
+
+
+module BaseTestRunner_mod
+ implicit none
+
+ type :: BaseTestRunner
+ contains
+ procedure, nopass :: norun
+ end type
+
+contains
+
+ function norun () result(result)
+ use TestResult_mod, only: TestResult
+ type (TestResult) :: result
+ end function
+
+end module
+
+
+module TestRunner_mod
+ use BaseTestRunner_mod, only: BaseTestRunner
+ implicit none
+end module
+
+
+program main
+ use TestRunner_mod, only: BaseTestRunner
+ use TestResult_mod, only: TestResult
+ implicit none
+
+ type (TestResult) :: result
+
+ call runtest (result)
+
+contains
+
+ subroutine runtest (result)
+ use TestResult_mod, only: TestResult
+ class (TestResult) :: result
+ call result%run()
+ if (result%numRun /= 1) call abort()
+ end subroutine
+
+end
+
+! { dg-final { cleanup-modules "TestResult_mod BaseTestRunner_mod TestRunner_mod" } }
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90
new file mode 100644
index 000000000..8f574bf59
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90
@@ -0,0 +1,39 @@
+! { dg-do run }
+!
+! PR fortran/59906
+!
+! Contributed by H Anlauf <anlauf@gmx.de>
+!
+! Failed generate character scalar for scalarized loop for elemantal call.
+!
+program x
+ implicit none
+ call y('bbb')
+contains
+
+ subroutine y(str)
+ character(len=*), intent(in) :: str
+ character(len=len_trim(str)) :: str_aux
+ character(len=3) :: str3 = 'abc'
+
+ str_aux = str
+
+ ! Compiled but did not give correct result
+ if (any (str_cmp((/'aaa','bbb'/), str) .neqv. [.FALSE.,.TRUE.])) call abort
+
+ ! Did not compile
+ if (any (str_cmp((/'bbb', 'aaa'/), str_aux) .neqv. [.TRUE.,.FALSE.])) call abort
+
+ ! Verify patch
+ if (any (str_cmp((/'bbb', 'aaa'/), str3) .neqv. [.FALSE.,.FALSE.])) call abort
+ if (any (str_cmp((/'bbb', 'aaa'/), 'aaa') .neqv. [.FALSE.,.TRUE.])) call abort
+
+ end subroutine y
+
+ elemental logical function str_cmp(str1, str2)
+ character(len=*), intent(in) :: str1
+ character(len=*), intent(in) :: str2
+ str_cmp = (str1 == str2)
+ end function str_cmp
+
+end program x
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/extends_15.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/extends_15.f90
new file mode 100644
index 000000000..06c31799a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/extends_15.f90
@@ -0,0 +1,16 @@
+! { dg-do compile }
+!
+! PR 58355: [4.7/4.8/4.9 Regression] [F03] ICE with TYPE, EXTENDS before parent TYPE defined
+!
+! Contributed by Andrew Benson <abensonca@gmail.com>
+
+module ct
+ public :: t1
+
+ type, extends(t1) :: t2 ! { dg-error "has not been previously defined" }
+
+ type :: t1
+ end type
+end
+
+! { dg-final { cleanup-modules "ct" } }
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/fmt_en.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/fmt_en.f90
new file mode 100644
index 000000000..d0aed23d8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/fmt_en.f90
@@ -0,0 +1,186 @@
+! { dg-do run { target fd_truncate } }
+! PR60128 Invalid outputs with EN descriptors
+! Test case provided by Walt Brainerd.
+program pr60128
+use ISO_FORTRAN_ENV
+ implicit none
+ integer, parameter :: j(size(real_kinds)+4)=[REAL_KINDS, [4, 4, 4, 4]]
+ logical :: l_skip(4) = .false.
+ integer :: i
+ integer :: n_tst = 0, n_cnt = 0, n_skip = 0
+ character(len=20) :: s, s1
+
+ open (unit = 10, file = 'fmt_en.res')
+! Check that the default rounding mode is to nearest and to even on tie.
+ do i=1,size(real_kinds)
+ if (i == 1) then
+ write(s, '(2F4.1,2F4.0)') real(-9.49999905,kind=j(1)), &
+ real(9.49999905,kind=j(1)), &
+ real(9.5,kind=j(1)), real(8.5,kind=j(1))
+ write(s1, '(3PE10.3,2PE10.3)') real(987350.,kind=j(1)), &
+ real(98765.0,kind=j(1))
+ else if (i == 2) then
+ write(s, '(2F4.1,2F4.0)') real(-9.49999905,kind=j(2)), &
+ real(9.49999905,kind=j(2)), &
+ real(9.5,kind=j(2)), real(8.5,kind=j(2))
+ write(s1, '(3PE10.3,2PE10.3)') real(987350.,kind=j(2)), &
+ real(98765.0,kind=j(2))
+ else if (i == 3) then
+ write(s, '(2F4.1,2F4.0)') real(-9.49999905,kind=j(3)), &
+ real(9.49999905,kind=j(3)), &
+ real(9.5,kind=j(3)), real(8.5,kind=j(3))
+ write(s1, '(3PE10.3,2PE10.3)') real(987350.,kind=j(3)), &
+ real(98765.0,kind=j(3))
+ else if (i == 4) then
+ write(s, '(2F4.1,2F4.0)') real(-9.49999905,kind=j(4)), &
+ real(9.49999905,kind=j(4)), &
+ real(9.5,kind=j(4)), real(8.5,kind=j(4))
+ write(s1, '(3PE10.3,2PE10.3)') real(987350.,kind=j(4)), &
+ real(98765.0,kind=j(4))
+ end if
+ if (s /= '-9.5 9.5 10. 8.' .or. s1 /= ' 987.4E+03 98.76E+03') then
+ l_skip(i) = .true.
+! print "('Unsupported rounding for real(',i0,')')", j(i)
+ end if
+ end do
+
+
+! Original test.
+ call checkfmt("(en15.2)", -.44444, " -444.44E-03")
+
+! Test for the bug in comment 6.
+ call checkfmt("(en15.0)", 1.0, " 1.E+00")
+ call checkfmt("(en15.0)", 1.00000012, " 1.E+00")
+ call checkfmt("(en15.0)", 0.99999994, " 1.E+00")
+ call checkfmt("(en15.0)", 10.0, " 10.E+00")
+ call checkfmt("(en15.0)", 10.0000010, " 10.E+00")
+ call checkfmt("(en15.0)", 9.99999905, " 10.E+00")
+ call checkfmt("(en15.0)", 100.0, " 100.E+00")
+ call checkfmt("(en15.0)", 100.000008, " 100.E+00")
+ call checkfmt("(en15.0)", 99.9999924, " 100.E+00")
+ call checkfmt("(en15.0)", 1000.0, " 1.E+03")
+ call checkfmt("(en15.0)", 1000.00006, " 1.E+03")
+ call checkfmt("(en15.0)", 999.999939, " 1.E+03")
+ call checkfmt("(en15.0)", 9.5, " 10.E+00")
+ call checkfmt("(en15.0)", 9.50000095, " 10.E+00")
+ call checkfmt("(en15.0)", 9.49999905, " 9.E+00")
+ call checkfmt("(en15.0)", 99.5, " 100.E+00")
+ call checkfmt("(en15.0)", 99.5000076, " 100.E+00")
+ call checkfmt("(en15.0)", 99.4999924, " 99.E+00")
+ call checkfmt("(en15.0)", 999.5, " 1.E+03")
+ call checkfmt("(en15.0)", 999.500061, " 1.E+03")
+ call checkfmt("(en15.0)", 999.499939, " 999.E+00")
+ call checkfmt("(en15.0)", 9500.0, " 10.E+03")
+ call checkfmt("(en15.0)", 9500.00098, " 10.E+03")
+ call checkfmt("(en15.0)", 9499.99902, " 9.E+03")
+ call checkfmt("(en15.1)", 9950.0, " 10.0E+03")
+ call checkfmt("(en15.2)", 9995.0, " 10.00E+03")
+ call checkfmt("(en15.3)", 9999.5, " 10.000E+03")
+ call checkfmt("(en15.1)", 9.5, " 9.5E+00")
+ call checkfmt("(en15.1)", 9.50000095, " 9.5E+00")
+ call checkfmt("(en15.1)", 9.49999905, " 9.5E+00")
+ call checkfmt("(en15.1)", 0.099951, " 100.0E-03")
+ call checkfmt("(en15.1)", 0.009951, " 10.0E-03")
+ call checkfmt("(en15.1)", 0.000999951," 1.0E-03")
+
+ call checkfmt("(en15.0)", -1.0, " -1.E+00")
+ call checkfmt("(en15.0)", -1.00000012, " -1.E+00")
+ call checkfmt("(en15.0)", -0.99999994, " -1.E+00")
+ call checkfmt("(en15.0)", -10.0, " -10.E+00")
+ call checkfmt("(en15.0)", -10.0000010, " -10.E+00")
+ call checkfmt("(en15.0)", -9.99999905, " -10.E+00")
+ call checkfmt("(en15.0)", -100.0, " -100.E+00")
+ call checkfmt("(en15.0)", -100.000008, " -100.E+00")
+ call checkfmt("(en15.0)", -99.9999924, " -100.E+00")
+ call checkfmt("(en15.0)", -1000.0, " -1.E+03")
+ call checkfmt("(en15.0)", -1000.00006, " -1.E+03")
+ call checkfmt("(en15.0)", -999.999939, " -1.E+03")
+ call checkfmt("(en15.0)", -9.5, " -10.E+00")
+ call checkfmt("(en15.0)", -9.50000095, " -10.E+00")
+ call checkfmt("(en15.0)", -9.49999905, " -9.E+00")
+ call checkfmt("(en15.0)", -99.5, " -100.E+00")
+ call checkfmt("(en15.0)", -99.5000076, " -100.E+00")
+ call checkfmt("(en15.0)", -99.4999924, " -99.E+00")
+ call checkfmt("(en15.0)", -999.5, " -1.E+03")
+ call checkfmt("(en15.0)", -999.500061, " -1.E+03")
+ call checkfmt("(en15.0)", -999.499939, " -999.E+00")
+ call checkfmt("(en15.0)", -9500.0, " -10.E+03")
+ call checkfmt("(en15.0)", -9500.00098, " -10.E+03")
+ call checkfmt("(en15.0)", -9499.99902, " -9.E+03")
+ call checkfmt("(en15.1)", -9950.0, " -10.0E+03")
+ call checkfmt("(en15.2)", -9995.0, " -10.00E+03")
+ call checkfmt("(en15.3)", -9999.5, " -10.000E+03")
+ call checkfmt("(en15.1)", -9.5, " -9.5E+00")
+ call checkfmt("(en15.1)", -9.50000095, " -9.5E+00")
+ call checkfmt("(en15.1)", -9.49999905, " -9.5E+00")
+ call checkfmt("(en15.1)", -0.099951, " -100.0E-03")
+ call checkfmt("(en15.1)", -0.009951, " -10.0E-03")
+ call checkfmt("(en15.1)", -0.000999951," -1.0E-03")
+
+ call checkfmt("(en15.1)", 987350., " 987.4E+03")
+ call checkfmt("(en15.2)", 98735., " 98.74E+03")
+ call checkfmt("(en15.3)", 9873.5, " 9.874E+03")
+ call checkfmt("(en15.1)", 987650., " 987.6E+03")
+ call checkfmt("(en15.2)", 98765., " 98.76E+03")
+ call checkfmt("(en15.3)", 9876.5, " 9.876E+03")
+ call checkfmt("(en15.1)", 3.125E-02, " 31.2E-03")
+ call checkfmt("(en15.1)", 9.375E-02, " 93.8E-03")
+ call checkfmt("(en15.2)", 1.5625E-02, " 15.62E-03")
+ call checkfmt("(en15.2)", 4.6875E-02, " 46.88E-03")
+ call checkfmt("(en15.3)", 7.8125E-03, " 7.812E-03")
+ call checkfmt("(en15.3)", 2.34375E-02, " 23.438E-03")
+ call checkfmt("(en15.3)", 9.765625E-04," 976.562E-06")
+ call checkfmt("(en15.6)", 2.9296875E-03," 2.929688E-03")
+
+ call checkfmt("(en15.1)", -987350., " -987.4E+03")
+ call checkfmt("(en15.2)", -98735., " -98.74E+03")
+ call checkfmt("(en15.3)", -9873.5, " -9.874E+03")
+ call checkfmt("(en15.1)", -987650., " -987.6E+03")
+ call checkfmt("(en15.2)", -98765., " -98.76E+03")
+ call checkfmt("(en15.3)", -9876.5, " -9.876E+03")
+ call checkfmt("(en15.1)", -3.125E-02, " -31.2E-03")
+ call checkfmt("(en15.1)", -9.375E-02, " -93.8E-03")
+ call checkfmt("(en15.2)", -1.5625E-02, " -15.62E-03")
+ call checkfmt("(en15.2)", -4.6875E-02, " -46.88E-03")
+ call checkfmt("(en15.3)", -7.8125E-03, " -7.812E-03")
+ call checkfmt("(en15.3)", -2.34375E-02, " -23.438E-03")
+ call checkfmt("(en15.3)", -9.765625E-04," -976.562E-06")
+ call checkfmt("(en15.6)", -2.9296875E-03," -2.929688E-03")
+
+ ! print *, n_tst, n_cnt, n_skip
+ if (n_cnt /= 0) call abort
+ if (all(.not. l_skip)) write (10, *) "All kinds rounded to nearest"
+ close (10)
+
+contains
+ subroutine checkfmt(fmt, x, cmp)
+ implicit none
+ integer :: i
+ character(len=*), intent(in) :: fmt
+ real, intent(in) :: x
+ character(len=*), intent(in) :: cmp
+ do i=1,size(real_kinds)
+ if (i == 1) then
+ write(s, fmt) real(x,kind=j(1))
+ else if (i == 2) then
+ write(s, fmt) real(x,kind=j(2))
+ else if (i == 3) then
+ write(s, fmt) real(x,kind=j(3))
+ else if (i == 4) then
+ write(s, fmt) real(x,kind=j(4))
+ end if
+ n_tst = n_tst + 1
+ if (s /= cmp) then
+ if (l_skip(i)) then
+ n_skip = n_skip + 1
+ else
+ print "(a,1x,a,' expected: ',1x,a)", fmt, s, cmp
+ n_cnt = n_cnt + 1
+ end if
+ end if
+ end do
+
+ end subroutine
+end program
+! { dg-final { scan-file fmt_en.res "All kinds rounded to nearest" { xfail { i?86-*-solaris2.9* hppa*-*-hpux* } } } }
+! { dg-final { cleanup-saved-temps } }
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/fmt_g_1.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/fmt_g_1.f90
new file mode 100644
index 000000000..715df0dfc
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/fmt_g_1.f90
@@ -0,0 +1,11 @@
+! { dg-do run }
+! PR59771 Cleanup handling of Gw.0 and Gw.0Ee format
+! Test case prepared by Dominique d'Humieres <dominiq@lps.ens.fr>
+ PROGRAM FOO
+ character(len=60) :: buffer, buffer1
+
+ write (buffer ,'(6(1X,1PG9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
+ write (buffer1,'(6(1X,1PE9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
+
+ if (buffer /= buffer1) call abort
+ end
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/generic_28.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/generic_28.f90
new file mode 100644
index 000000000..5ddc9798f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/generic_28.f90
@@ -0,0 +1,18 @@
+! { dg-do compile }
+!
+! PR 58998: [4.8/4.9 Regression] Generic interface problem with gfortran
+!
+! Contributed by Paul van Delst
+
+ interface iargc
+ procedure iargc_8
+ end interface
+
+contains
+
+ integer(8) function iargc_8()
+ integer(4) iargc
+ iargc_8 = iargc()
+ end function
+
+end
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/gomp/pr59467.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/gomp/pr59467.f90
new file mode 100644
index 000000000..e69c9eb49
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/gomp/pr59467.f90
@@ -0,0 +1,24 @@
+! PR libgomp/59467
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+ FUNCTION t()
+ INTEGER :: a, b, t
+ a = 0
+ b = 0
+ !$OMP PARALLEL REDUCTION(+:b)
+ !$OMP SINGLE ! { dg-error "is not threadprivate or private in outer context" }
+ !$OMP ATOMIC WRITE
+ a = 6
+ !$OMP END SINGLE COPYPRIVATE (a)
+ b = a
+ !$OMP END PARALLEL
+ t = b
+ b = 0
+ !$OMP PARALLEL REDUCTION(+:b)
+ !$OMP SINGLE
+ !$OMP ATOMIC WRITE
+ b = 6
+ !$OMP END SINGLE COPYPRIVATE (b)
+ !$OMP END PARALLEL
+ t = t + b
+ END FUNCTION
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/graphite/pr59817.f b/gcc-4.8/gcc/testsuite/gfortran.dg/graphite/pr59817.f
new file mode 100644
index 000000000..a9ee8f19d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/graphite/pr59817.f
@@ -0,0 +1,14 @@
+! { dg-do compile }
+! { dg-options "-O2 -floop-interchange" }
+ SUBROUTINE PREPD(ICAST,ICAS,ICASX,ICAS1,ICAS2,NDET,NM,III,IMP,
+ * CASMIN)
+ LOGICAL CASMIN
+ DIMENSION ICAST(NDET,NM),IMP(NM)
+ IF(CASMIN) THEN
+ DO K=1,NDET
+ DO L=1,NM
+ IF(L.EQ.K-1) ICAST(K,L) = 1
+ END DO
+ END DO
+ END IF
+ END SUBROUTINE
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/ichar_3.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/ichar_3.f90
new file mode 100644
index 000000000..d0f5c8b8c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/ichar_3.f90
@@ -0,0 +1,13 @@
+! { dg-do compile }
+!
+! PR fortran/59599
+! The call to ichar was triggering an ICE.
+!
+! Original testcase from Fran Martinez Fadrique <fmartinez@gmv.com>
+
+character(1) cpk(2)
+integer res(2)
+cpk = 'a'
+res = ichar( cpk, kind=1 )
+print *, ichar( cpk, kind=1 )
+end
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/implicit_pure_4.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/implicit_pure_4.f90
new file mode 100644
index 000000000..8563dd721
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/implicit_pure_4.f90
@@ -0,0 +1,22 @@
+! { dg-do compile }
+!
+! PR fortran/60543
+! PR fortran/60283
+!
+module m
+contains
+ REAL(8) FUNCTION random()
+ CALL RANDOM_NUMBER(random)
+ END FUNCTION random
+ REAL(8) FUNCTION random2()
+ block
+ block
+ block
+ CALL RANDOM_NUMBER(random2)
+ end block
+ end block
+ end block
+ END FUNCTION random2
+end module m
+
+! { dg-final { scan-module-absence "m" "IMPLICIT_PURE" } }
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/init_flag_12.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/init_flag_12.f90
new file mode 100644
index 000000000..5844398d5
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/init_flag_12.f90
@@ -0,0 +1,13 @@
+! { dg-do compile }
+! { dg-options "-fno-automatic -finit-local-zero" }
+!
+! PR 55907: [4.7/4.8/4.9 Regression] ICE with -fno-automatic -finit-local-zero
+!
+! Contributed by J.R. Garcia <garcia.espinosa.jr@gmail.com>
+
+subroutine cchaine (i)
+ implicit none
+ integer :: i
+ character(len=i) :: chaine
+ write(*,*) chaine
+end subroutine
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/list_read_12.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/list_read_12.f90
new file mode 100644
index 000000000..811ef152a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/list_read_12.f90
@@ -0,0 +1,11 @@
+! { dg-do run }
+! PR58324 Bogus end of file condition
+integer :: i, ios
+open(99, access='stream', form='unformatted')
+write(99) "5 a"
+close(99)
+
+open(99, access='sequential', form='formatted')
+read(99, *, iostat=ios) i
+if (ios /= 0) call abort
+end
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/lto/pr60635_0.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/lto/pr60635_0.f90
new file mode 100644
index 000000000..e12187985
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/lto/pr60635_0.f90
@@ -0,0 +1,16 @@
+! { dg-lto-do link }
+program test
+ use iso_fortran_env
+
+ interface
+ integer(int16) function bigendc16(x) bind(C)
+ import
+ integer(int16), intent(in) :: x
+ end function
+ end interface
+
+ integer(int16) :: x16 = 12345
+ x16 = bigendc16(x16)
+ print *,x16
+end program
+
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/lto/pr60635_1.c b/gcc-4.8/gcc/testsuite/gfortran.dg/lto/pr60635_1.c
new file mode 100644
index 000000000..eddc569e6
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/lto/pr60635_1.c
@@ -0,0 +1,14 @@
+#include <stdint.h>
+#include <stdbool.h>
+
+static bool littleendian=true;
+
+uint16_t bigendc16(union{uint16_t * n;uint8_t* b;}x){
+
+ if (!littleendian) return *x.n;
+
+ uint16_t res = ((uint16_t)(x.b[1])<<0) |
+ ((uint16_t)(x.b[0])<<8);
+ return res;
+}
+
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/nan_7.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/nan_7.f90
index 12c7b3ce4..4c2f62eea 100644
--- a/gcc-4.8/gcc/testsuite/gfortran.dg/nan_7.f90
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/nan_7.f90
@@ -2,6 +2,7 @@
! { dg-options "-fno-range-check" }
! { dg-require-effective-target fortran_real_16 }
! { dg-require-effective-target fortran_integer_16 }
+! { dg-skip-if "" { "powerpc*le-*-*" } { "*" } { "" } }
! PR47293 NAN not correctly read
character(len=200) :: str
real(16) :: r
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/null_5.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/null_5.f90
index 886a6a1ff..50b41c3e8 100644
--- a/gcc-4.8/gcc/testsuite/gfortran.dg/null_5.f90
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/null_5.f90
@@ -34,7 +34,7 @@ subroutine test_PR34547_1 ()
end subroutine test_PR34547_1
subroutine test_PR34547_2 ()
- print *, null () ! { dg-error "in data transfer statement requires MOLD" }
+ print *, null () ! { dg-error "Invalid context" }
end subroutine test_PR34547_2
subroutine test_PR34547_3 ()
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/null_6.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/null_6.f90
index dd517cfa3..6b8f21e63 100644
--- a/gcc-4.8/gcc/testsuite/gfortran.dg/null_6.f90
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/null_6.f90
@@ -30,5 +30,5 @@ end subroutine test_PR50375_2
subroutine test_PR34547_3 ()
integer, allocatable :: i(:)
- print *, NULL(i)
+ print *, NULL(i) ! { dg-error "Invalid context for NULL" }
end subroutine test_PR34547_3
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/optional_class_1.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/optional_class_1.f90
new file mode 100644
index 000000000..589fc6023
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/optional_class_1.f90
@@ -0,0 +1,45 @@
+! { dg-do run }
+!
+! PR fortran/57445
+!
+! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
+!
+! Spurious assert was added at revision 192495
+!
+module m
+ implicit none
+ type t
+ integer :: i
+ end type t
+contains
+ subroutine opt(xa, xc, xaa, xca)
+ type(t), allocatable, intent(out), optional :: xa
+ class(t), allocatable, intent(out), optional :: xc
+ type(t), allocatable, intent(out), optional :: xaa(:)
+ class(t), allocatable, intent(out), optional :: xca(:)
+ if (present (xca)) call foo_opt(xca=xca)
+ end subroutine opt
+ subroutine foo_opt(xa, xc, xaa, xca)
+ type(t), allocatable, intent(out), optional :: xa
+ class(t), allocatable, intent(out), optional :: xc
+ type(t), allocatable, intent(out), optional :: xaa(:)
+ class(t), allocatable, intent(out), optional :: xca(:)
+ if (present (xca)) then
+ if (allocated (xca)) deallocate (xca)
+ allocate (xca(3), source = [t(9),t(99),t(999)])
+ end if
+ end subroutine foo_opt
+end module m
+ use m
+ class(t), allocatable :: xca(:)
+ allocate (xca(1), source = t(42))
+ select type (xca)
+ type is (t)
+ if (any (xca%i .ne. [42])) call abort
+ end select
+ call opt (xca = xca)
+ select type (xca)
+ type is (t)
+ if (any (xca%i .ne. [9,99,999])) call abort
+ end select
+end
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/pr52370.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/pr52370.f90
new file mode 100644
index 000000000..66a6fe2b8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/pr52370.f90
@@ -0,0 +1,21 @@
+! PR fortran/52370
+! { dg-do compile }
+! { dg-options "-O1 -Wall" }
+
+module pr52370
+contains
+ subroutine foo(a,b)
+ real, intent(out) :: a
+ real, dimension(:), optional, intent(out) :: b
+ a=0.5
+ if (present(b)) then
+ b=1.0
+ end if
+ end subroutine foo
+end module pr52370
+
+program prg52370
+ use pr52370
+ real :: a
+ call foo(a)
+end program prg52370
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/pr59700.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/pr59700.f90
new file mode 100644
index 000000000..579d8a48c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/pr59700.f90
@@ -0,0 +1,40 @@
+! { dg-do run }
+! PR59700 Test case by Steve Kargl
+program foo
+
+ implicit none
+
+ character(len=80) msg
+ integer, parameter :: fd = 10
+ integer i1, i2, i3, i4
+ real x1, x2, x3, x4
+ complex c1, c2
+ logical a
+
+ open(unit=fd, status='scratch')
+ write(fd, '(A)') '1 2 3.4 q'
+
+ rewind(fd)
+ msg = 'ok'
+ read(fd, *, err=10, iomsg=msg) i1, i2, i3, i4
+10 if (msg /= 'Bad integer for item 3 in list input') call abort
+ rewind(fd)
+ msg = 'ok'
+ read(fd, *, err=20, iomsg=msg) x1, x2, x3, x4
+20 if (msg /= 'Bad real number in item 4 of list input') call abort
+ rewind(fd)
+ msg = 'ok'
+ read(fd, *, err=30, iomsg=msg) i1, x2, x1, a
+30 if (msg /= 'Bad logical value while reading item 4') call abort
+ rewind(fd)
+ read(fd, *, err=31, iomsg=msg) i1, x2, a, x1
+31 if (msg /= 'Bad repeat count in item 3 of list input') call abort
+ close(fd)
+ open(unit=fd, status='scratch')
+ write(fd, '(A)') '(1, 2) (3.4, q)'
+ rewind(fd)
+ msg = 'ok'
+ read(fd, *, err=40, iomsg=msg) c1, c2
+40 if (msg /= 'Bad floating point number for item 2') call abort
+ close(fd)
+end program foo
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_43.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_43.f90
new file mode 100644
index 000000000..b1f77a06e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_43.f90
@@ -0,0 +1,19 @@
+! { dg-do compile }
+!
+! PR 58099: [4.8/4.9 Regression] [F03] over-zealous procedure-pointer error checking
+!
+! Contributed by Daniel Price <daniel.price@monash.edu>
+
+ implicit none
+ procedure(real), pointer :: wfunc
+
+ wfunc => w_cubic
+
+contains
+
+ pure real function w_cubic(q2)
+ real, intent(in) :: q2
+ w_cubic = 0.
+ end function
+
+end
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_45.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_45.f90
new file mode 100644
index 000000000..a506473ad
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_45.f90
@@ -0,0 +1,24 @@
+! { dg-do compile }
+!
+! PR fortran/49397
+!
+! Valid per IR F08/0060 and F2008Corr2, C729
+!
+Program m5
+ Print *,f()
+Contains
+ Subroutine s
+ Procedure(Real),Pointer :: p
+ Print *,g()
+ p => f ! (1)
+ Print *,p()
+ p => g ! (2)
+ Print *,p()
+ End Subroutine
+End Program
+Function f()
+ f = 1
+End Function
+Function g()
+ g = 2
+End Function
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_46.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_46.f90
new file mode 100644
index 000000000..2c05f59d8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_46.f90
@@ -0,0 +1,14 @@
+! { dg-do compile }
+!
+! PR fortran/49397
+!
+! Invalid per IR F08/0060 and F2008Corr2, C729
+!
+
+! Print *,f() ! << Valid when uncommented
+Contains
+ Subroutine s
+ Procedure(Real),Pointer :: p
+ p => f ! { dg-error "Procedure pointer target 'f' at .1. must be either an intrinsic, host or use associated, referenced or have the EXTERNAL attribute" }
+ End Subroutine
+End
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90
new file mode 100644
index 000000000..2a71ca052
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90
@@ -0,0 +1,12 @@
+! { dg-do compile }
+!
+! PR fortran/58803
+!
+! Contributed by Vittorio Zecca
+!
+! Was before ICEing due to a double free
+!
+ type t
+ procedure(real), pointer, nopass :: f1, f2
+ end type
+ end
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/reshape_6.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/reshape_6.f90
new file mode 100644
index 000000000..149f31efe
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/reshape_6.f90
@@ -0,0 +1,19 @@
+! { dg-do compile }
+! PR fortran/58989
+!
+program test
+
+ real(8), dimension(4,4) :: fluxes
+ real(8), dimension(2,2,2,2) :: f
+ integer, dimension(3) :: dmmy
+ integer, parameter :: indx(4)=(/2,2,2,2/)
+
+ fluxes = 1
+
+ dmmy = (/2,2,2/)
+
+ f = reshape(fluxes,(/dmmy,2/)) ! Caused an ICE
+ f = reshape(fluxes,(/2,2,2,2/)) ! Works as expected
+ f = reshape(fluxes,indx) ! Works as expected
+
+end program test
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/round_3.f08 b/gcc-4.8/gcc/testsuite/gfortran.dg/round_3.f08
index 8b03ce562..62da1eae6 100644
--- a/gcc-4.8/gcc/testsuite/gfortran.dg/round_3.f08
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/round_3.f08
@@ -16,8 +16,33 @@ program pr48615
call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00")
call checkfmt("(RU,1P,G10.4E2)", 2.3456e5, "2.3456E+05")
+ call checkfmt("(RC,G10.2)", 99.5, " 0.10E+03") ! pr59774
+ call checkfmt("(RC,G10.2)", 995., " 0.10E+04") ! pr59774
+ call checkfmt("(RC,G10.3)", 999.5, " 0.100E+04") ! pr59774
+ call checkfmt("(RC,G10.3)", 9995., " 0.100E+05") ! pr59774
+ call checkfmt("(RU,G10.2)", .099, " 0.10 ") ! pr59774
+ call checkfmt("(RC,G10.1)", .095, " 0.1 ") ! pr59774
+ call checkfmt("(RU,G10.3)", .0999, " 0.100 ") ! pr59774
+ call checkfmt("(RC,G10.2)", .0995, " 0.10 ") ! pr59774
+
+ call checkfmt("(RU,G9.3)", 891.1, " 892.") ! pr59836
+ call checkfmt("(RD,G9.3)", -891.1, "-892.") ! pr59836
+
+ call checkfmt("(RU,F6.4)", 0.00006, "0.0001")! 0.
+ call checkfmt("(RU,F5.3)", 0.0007, "0.001") ! 0.
+ call checkfmt("(RU,F4.2)", 0.008, "0.01") ! 0.
+ call checkfmt("(RU,F3.1)", 0.09, "0.1") ! 0.
+
call checkfmt("(RU,F2.0)", 0.09, "1.") ! 0.
call checkfmt("(RD,F3.0)", -0.09, "-1.") ! -0.
+ call checkfmt("(RU,F2.0)", 0.9, "1.") ! pr59836
+ call checkfmt("(RC,F2.0)", 0.4, "0.") ! pr59836
+ call checkfmt("(RC,F2.0)", 0.5, "1.") ! pr59836
+ call checkfmt("(RC,F2.0)", 0.6, "1.") ! pr59836
+ call checkfmt("(RD,F3.0)", -0.9, "-1.") ! pr59836
+ call checkfmt("(RC,F3.0)", -0.4, "-0.") ! pr59836
+ call checkfmt("(RC,F3.0)", -0.5, "-1.") ! pr59836
+ call checkfmt("(RC,F3.0)", -0.6, "-1.") ! pr59836
call checkfmt("(RU,F2.0)", 2.0, "2.") ! 3.
call checkfmt("(RD,F3.0)", -2.0, "-2.") ! -3.
call checkfmt("(RU,F6.4)", 2.0, "2.0000") ! 2.0001
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/shape_8.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/shape_8.f90
new file mode 100644
index 000000000..edeb5fd8e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/shape_8.f90
@@ -0,0 +1,10 @@
+! { dg-do compile }
+!
+! PR 60450: [4.7/4.8 Regression] ICE with SHAPE intrinsic
+!
+! Contributed by Dave Allured <dave.allured@noaa.gov>
+
+ real, allocatable :: x(:,:)
+ allocate (x(3,2), source=99.)
+ print *, shape (x / 10.0)
+end
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90
new file mode 100644
index 000000000..84287b475
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90
@@ -0,0 +1,22 @@
+! { dg-do compile }
+! { dg-options "-ffrontend-optimize" }
+!
+! PR fortran/60341
+! An unguarded union access was wrongly enabling a frontend optimization on a
+! string comparison, leading to an ICE.
+!
+! Original testcase from Steve Chapel <steve.chapel@a2pg.com>.
+! Reduced by Steven G. Kargl <kargl@gcc.gnu.org>.
+!
+
+ subroutine modelg(ncm)
+ implicit none
+ integer, parameter :: pc = 30, pm = pc - 1
+ integer i
+ character*4 catt(pm,2)
+ integer ncm,iatt(pm,pc)
+ do i=1,ncm
+ if (catt(i,1)//catt(i,2).eq.'central') exit
+ end do
+ iatt(i,4)=1
+ end
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/typebound_generic_15.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/typebound_generic_15.f90
new file mode 100644
index 000000000..f71ffd9e8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/typebound_generic_15.f90
@@ -0,0 +1,18 @@
+! { dg-do compile }
+!
+! PR 60231: [4.8/4.9 Regression] ICE on undefined generic
+!
+! Contributed by Antony Lewis <antony@cosmologist.info>
+
+module Objects
+
+ Type TObjectList
+ contains
+ procedure :: Add1 ! { dg-error "must be a module procedure" }
+ procedure :: Add2 ! { dg-error "must be a module procedure" }
+ generic :: Add => Add1, Add2 ! { dg-error "are ambiguous" }
+ end Type
+
+end module
+
+! { dg-final { cleanup-modules "Objects" } }
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90
new file mode 100644
index 000000000..1dfebdce3
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90
@@ -0,0 +1,17 @@
+! { dg-do compile }
+!
+! PR 59493: [OOP] ICE: Segfault on Class(*) pointer association
+!
+! Contributed by Hossein Talebi <talebi.hossein@gmail.com>
+
+ implicit none
+
+ type ty_mytype1
+ end type
+
+ class(ty_mytype1), allocatable, target:: cla1
+ class(*), pointer :: ptr
+
+ ptr => cla1
+
+end
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90
new file mode 100644
index 000000000..07fbce3d5
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90
@@ -0,0 +1,44 @@
+! { dg-do compile }
+!
+! PR fortran/58007
+! Unresolved fixup while loading a module.
+!
+! This tests that the specification expression A%MAX_DEGREE in module BSR is
+! correctly loaded and resolved in program MAIN.
+!
+! Original testcase from Daniel Shapiro <shapero@uw.edu>
+! Reduced by Tobias Burnus <burnus@net-b.de> and Janus Weil <janus@gcc.gnu.org>
+
+module matrix
+ type :: sparse_matrix
+ integer :: max_degree
+ end type
+contains
+ subroutine init_interface (A)
+ class(sparse_matrix), intent(in) :: A
+ end subroutine
+ real function get_value_interface()
+ end function
+end module
+
+module ellpack
+ use matrix
+end module
+
+module bsr
+ use matrix
+ type, extends(sparse_matrix) :: bsr_matrix
+ contains
+ procedure :: get_neighbors
+ end type
+contains
+ function get_neighbors (A)
+ class(bsr_matrix), intent(in) :: A
+ integer :: get_neighbors(A%max_degree)
+ end function
+end module
+
+program main
+ use ellpack
+ use bsr
+end
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90
new file mode 100644
index 000000000..ca0a05a62
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90
@@ -0,0 +1,36 @@
+! { dg-do compile }
+!
+! PR fortran/58007
+! Unresolved fiixup while loading a module.
+!
+! This tests that the specification expression A%MAX_DEGREE in module BSR is
+! correctly loaded and resolved in program MAIN.
+!
+! Original testcase from Daniel Shapiro <shapero@uw.edu>
+
+module matrix
+ type :: sparse_matrix
+ integer :: max_degree
+ end type
+end module
+
+module bsr
+ use matrix
+
+ type, extends(sparse_matrix) :: bsr_matrix
+ end type
+
+ integer :: i1
+ integer :: i2
+ integer :: i3
+contains
+ function get_neighbors (A)
+ type(bsr_matrix), intent(in) :: A
+ integer :: get_neighbors(A%max_degree)
+ end function
+end module
+
+program main
+ use matrix
+ use bsr
+end
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/where_4.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/where_4.f90
new file mode 100644
index 000000000..1ff2e4ca3
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/where_4.f90
@@ -0,0 +1,18 @@
+! { dg-do compile }
+! PR 60522 - this used to ICE.
+! Original test case Roger Ferrer Ibanez
+subroutine foo(a, b)
+ implicit none
+ integer, dimension(:), intent(inout) :: a
+ integer, dimension(:), intent(in) :: b
+
+ where (b(:) > 0)
+ where (b(:) > 100)
+ a(lbound(a, 1):ubound(a, 1)) = b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1)) - 100
+ elsewhere
+ a(lbound(a, 1):ubound(a, 1)) = b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1))
+ end where
+ elsewhere
+ a(lbound(a, 1):ubound(a, 1)) = - b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1))
+ end where
+end subroutine foo
diff --git a/gcc-4.8/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90 b/gcc-4.8/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90
new file mode 100644
index 000000000..f32698aa3
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90
@@ -0,0 +1,13 @@
+SUBROUTINE cal_helicity (uh, ph, phb, wavg, ims, ime, its, ite)
+ INTEGER, INTENT( IN ) :: ims, ime, its, ite
+ REAL, DIMENSION( ims:ime), INTENT( IN ) :: ph, phb, wavg
+ REAL, DIMENSION( ims:ime), INTENT( INOUT ) :: uh
+ INTEGER :: i
+ REAL :: zu
+ DO i = its, ite
+ zu = (ph(i ) + phb(i)) + (ph(i-1) + phb(i-1))
+ IF (wavg(i) .GT. 0) THEN
+ uh(i) = uh(i) + zu
+ ENDIF
+ END DO
+END SUBROUTINE cal_helicity
diff --git a/gcc-4.8/gcc/testsuite/gnat.dg/opt32.adb b/gcc-4.8/gcc/testsuite/gnat.dg/opt32.adb
new file mode 100644
index 000000000..93f31c2ca
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gnat.dg/opt32.adb
@@ -0,0 +1,37 @@
+-- { dg-do compile }
+-- { dg-options "-O2" }
+
+with Ada.Containers; use Ada.Containers;
+with Ada.Containers.Vectors;
+
+function Opt32 return Natural is
+
+ package My_Vectors
+ is new Vectors (Index_Type => Natural, Element_Type => Integer);
+ use My_Vectors;
+
+ V : Vector;
+
+ function Sign_Changes return Natural is
+ Cur : Cursor := To_Cursor (V, 0);
+ R : Natural := 0;
+ Negative : Boolean;
+ begin
+ Negative := Element (Cur) < 0;
+
+ loop
+ Cur := Next (Cur);
+ exit when R > 100;
+
+ if (Element (Cur) < 0) /= Negative then
+ Negative := not Negative;
+ R := R + 1;
+ end if;
+ end loop;
+
+ return R;
+ end;
+
+begin
+ return Sign_Changes;
+end;
diff --git a/gcc-4.8/gcc/testsuite/go.test/go-test.exp b/gcc-4.8/gcc/testsuite/go.test/go-test.exp
index 6f397343e..4c8c36e3e 100644
--- a/gcc-4.8/gcc/testsuite/go.test/go-test.exp
+++ b/gcc-4.8/gcc/testsuite/go.test/go-test.exp
@@ -333,17 +333,16 @@ proc go-gc-tests { } {
}
if { ( [file tail $test] == "select2.go" \
- || [file tail $test] == "stack.go" ) \
+ || [file tail $test] == "stack.go" \
+ || [file tail $test] == "peano.go" ) \
&& ! [check_effective_target_split_stack] } {
- # chan/select2.go fails on targets without split stack,
- # because they allocate a large stack segment that blows
- # out the memory calculations.
+ # These tests fails on targets without split stack.
untested $name
continue
}
- if { [file tail $test] == "rotate.go" } {
- # This test produces a temporary file that takes too long
+ if [string match "*go.test/test/rotate\[0123\].go" $test] {
+ # These tests produces a temporary file that takes too long
# to compile--5 minutes on my laptop without optimization.
# When compiling without optimization it tests nothing
# useful, since the point of the test is to see whether
diff --git a/gcc-4.8/gcc/testsuite/lib/target-supports.exp b/gcc-4.8/gcc/testsuite/lib/target-supports.exp
index a146f1732..f32cd0483 100644
--- a/gcc-4.8/gcc/testsuite/lib/target-supports.exp
+++ b/gcc-4.8/gcc/testsuite/lib/target-supports.exp
@@ -1311,6 +1311,32 @@ proc check_effective_target_avx_runtime { } {
return 0
}
+# Return 1 if the target supports executing power8 vector instructions, 0
+# otherwise. Cache the result.
+
+proc check_p8vector_hw_available { } {
+ return [check_cached_effective_target p8vector_hw_available {
+ # Some simulators are known to not support VSX/power8 instructions.
+ # For now, disable on Darwin
+ if { [istarget powerpc-*-eabi] || [istarget powerpc*-*-eabispe] || [istarget *-*-darwin*]} {
+ expr 0
+ } else {
+ set options "-mpower8-vector"
+ check_runtime_nocache p8vector_hw_available {
+ int main()
+ {
+ #ifdef __MACH__
+ asm volatile ("xxlorc vs0,vs0,vs0");
+ #else
+ asm volatile ("xxlorc 0,0,0");
+ #endif
+ return 0;
+ }
+ } $options
+ }
+ }]
+}
+
# Return 1 if the target supports executing VSX instructions, 0
# otherwise. Cache the result.
@@ -1858,6 +1884,32 @@ proc check_effective_target_dfprt { } {
}]
}
+# Return 1 if the target supports executing DFP hardware instructions,
+# 0 otherwise. Cache the result.
+
+proc check_dfp_hw_available { } {
+ return [check_cached_effective_target dfp_hw_available {
+ # For now, disable on Darwin
+ if { [istarget powerpc-*-eabi] || [istarget powerpc*-*-eabispe] || [istarget *-*-darwin*]} {
+ expr 0
+ } else {
+ check_runtime_nocache dfp_hw_available {
+ volatile _Decimal64 r;
+ volatile _Decimal64 a = 4.0DD;
+ volatile _Decimal64 b = 2.0DD;
+ int main()
+ {
+ asm volatile ("dadd %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
+ asm volatile ("dsub %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
+ asm volatile ("dmul %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
+ asm volatile ("ddiv %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
+ return 0;
+ }
+ } "-mcpu=power6 -mhard-float"
+ }
+ }]
+}
+
# Return 1 if the target supports compiling and assembling UCN, 0 otherwise.
proc check_effective_target_ucn_nocache { } {
@@ -2672,6 +2724,33 @@ proc check_effective_target_powerpc_altivec_ok { } {
}
}
+# Return 1 if this is a PowerPC target supporting -mpower8-vector
+
+proc check_effective_target_powerpc_p8vector_ok { } {
+ if { ([istarget powerpc*-*-*]
+ && ![istarget powerpc-*-linux*paired*])
+ || [istarget rs6000-*-*] } {
+ # AltiVec is not supported on AIX before 5.3.
+ if { [istarget powerpc*-*-aix4*]
+ || [istarget powerpc*-*-aix5.1*]
+ || [istarget powerpc*-*-aix5.2*] } {
+ return 0
+ }
+ return [check_no_compiler_messages powerpc_p8vector_ok object {
+ int main (void) {
+#ifdef __MACH__
+ asm volatile ("xxlorc vs0,vs0,vs0");
+#else
+ asm volatile ("xxlorc 0,0,0");
+#endif
+ return 0;
+ }
+ } "-mpower8-vector"]
+ } else {
+ return 0
+ }
+}
+
# Return 1 if this is a PowerPC target supporting -mvsx
proc check_effective_target_powerpc_vsx_ok { } {
@@ -2699,6 +2778,27 @@ proc check_effective_target_powerpc_vsx_ok { } {
}
}
+# Return 1 if this is a PowerPC target supporting -mhtm
+
+proc check_effective_target_powerpc_htm_ok { } {
+ if { ([istarget powerpc*-*-*]
+ && ![istarget powerpc-*-linux*paired*])
+ || [istarget rs6000-*-*] } {
+ # HTM is not supported on AIX yet.
+ if { [istarget powerpc*-*-aix*] } {
+ return 0
+ }
+ return [check_no_compiler_messages powerpc_htm_ok object {
+ int main (void) {
+ asm volatile ("tbegin. 0");
+ return 0;
+ }
+ } "-mhtm"]
+ } else {
+ return 0
+ }
+}
+
# Return 1 if this is a PowerPC target supporting -mcpu=cell.
proc check_effective_target_powerpc_ppu_ok { } {
@@ -2794,6 +2894,22 @@ proc check_effective_target_powerpc_405_nocache { } {
}
}
+# Return 1 if this is a PowerPC target using the ELFv2 ABI.
+
+proc check_effective_target_powerpc_elfv2 { } {
+ if { [istarget powerpc*-*-*] } {
+ return [check_no_compiler_messages powerpc_elfv2 object {
+ #if _CALL_ELF != 2
+ #error not ELF v2 ABI
+ #else
+ int dummy;
+ #endif
+ }]
+ } else {
+ return 0
+ }
+}
+
# Return 1 if this is a SPU target with a toolchain that
# supports automatic overlay generation.
@@ -4499,7 +4615,9 @@ proc is-effective-target { arg } {
switch $arg {
"vmx_hw" { set selected [check_vmx_hw_available] }
"vsx_hw" { set selected [check_vsx_hw_available] }
+ "p8vector_hw" { set selected [check_p8vector_hw_available] }
"ppc_recip_hw" { set selected [check_ppc_recip_hw_available] }
+ "dfp_hw" { set selected [check_dfp_hw_available] }
"named_sections" { set selected [check_named_sections_available] }
"gc_sections" { set selected [check_gc_sections_available] }
"cxa_atexit" { set selected [check_cxa_atexit_available] }
@@ -4520,7 +4638,9 @@ proc is-effective-target-keyword { arg } {
switch $arg {
"vmx_hw" { return 1 }
"vsx_hw" { return 1 }
+ "p8vector_hw" { return 1 }
"ppc_recip_hw" { return 1 }
+ "dfp_hw" { return 1 }
"named_sections" { return 1 }
"gc_sections" { return 1 }
"cxa_atexit" { return 1 }
@@ -5077,7 +5197,9 @@ proc check_vect_support_and_set_flags { } {
}
lappend DEFAULT_VECTCFLAGS "-maltivec"
- if [check_vsx_hw_available] {
+ if [check_p8vector_hw_available] {
+ lappend DEFAULT_VECTCFLAGS "-mpower8-vector" "-mno-allow-movmisalign"
+ } elseif [check_vsx_hw_available] {
lappend DEFAULT_VECTCFLAGS "-mvsx" "-mno-allow-movmisalign"
}
diff --git a/gcc-4.8/gcc/tree-cfg.c b/gcc-4.8/gcc/tree-cfg.c
index 28f05a589..b32da2ef6 100644
--- a/gcc-4.8/gcc/tree-cfg.c
+++ b/gcc-4.8/gcc/tree-cfg.c
@@ -104,7 +104,6 @@ static int locus_map_eq (const void *, const void *);
static void assign_discriminator (location_t, basic_block);
static edge gimple_redirect_edge_and_branch (edge, basic_block);
static edge gimple_try_redirect_by_replacing_jump (edge, basic_block);
-static unsigned int split_critical_edges (void);
/* Various helpers. */
static inline bool stmt_starts_bb_p (gimple, gimple);
@@ -1535,6 +1534,11 @@ replace_uses_by (tree name, tree val)
FOR_EACH_IMM_USE_STMT (stmt, imm_iter, name)
{
+ /* Mark the block if we change the last stmt in it. */
+ if (cfgcleanup_altered_bbs
+ && stmt_ends_bb_p (stmt))
+ bitmap_set_bit (cfgcleanup_altered_bbs, gimple_bb (stmt)->index);
+
FOR_EACH_IMM_USE_ON_STMT (use, imm_iter)
{
replace_exp (use, val);
@@ -1559,11 +1563,6 @@ replace_uses_by (tree name, tree val)
gimple orig_stmt = stmt;
size_t i;
- /* Mark the block if we changed the last stmt in it. */
- if (cfgcleanup_altered_bbs
- && stmt_ends_bb_p (stmt))
- bitmap_set_bit (cfgcleanup_altered_bbs, gimple_bb (stmt)->index);
-
/* FIXME. It shouldn't be required to keep TREE_CONSTANT
on ADDR_EXPRs up-to-date on GIMPLE. Propagation will
only change sth from non-invariant to invariant, and only
@@ -3513,11 +3512,10 @@ verify_gimple_assign_binary (gimple stmt)
case PLUS_EXPR:
case MINUS_EXPR:
{
- /* We use regular PLUS_EXPR and MINUS_EXPR for vectors.
- ??? This just makes the checker happy and may not be what is
- intended. */
- if (TREE_CODE (lhs_type) == VECTOR_TYPE
- && POINTER_TYPE_P (TREE_TYPE (lhs_type)))
+ tree lhs_etype = lhs_type;
+ tree rhs1_etype = rhs1_type;
+ tree rhs2_etype = rhs2_type;
+ if (TREE_CODE (lhs_type) == VECTOR_TYPE)
{
if (TREE_CODE (rhs1_type) != VECTOR_TYPE
|| TREE_CODE (rhs2_type) != VECTOR_TYPE)
@@ -3525,22 +3523,13 @@ verify_gimple_assign_binary (gimple stmt)
error ("invalid non-vector operands to vector valued plus");
return true;
}
- lhs_type = TREE_TYPE (lhs_type);
- rhs1_type = TREE_TYPE (rhs1_type);
- rhs2_type = TREE_TYPE (rhs2_type);
- /* PLUS_EXPR is commutative, so we might end up canonicalizing
- the pointer to 2nd place. */
- if (POINTER_TYPE_P (rhs2_type))
- {
- tree tem = rhs1_type;
- rhs1_type = rhs2_type;
- rhs2_type = tem;
- }
- goto do_pointer_plus_expr_check;
+ lhs_etype = TREE_TYPE (lhs_type);
+ rhs1_etype = TREE_TYPE (rhs1_type);
+ rhs2_etype = TREE_TYPE (rhs2_type);
}
- if (POINTER_TYPE_P (lhs_type)
- || POINTER_TYPE_P (rhs1_type)
- || POINTER_TYPE_P (rhs2_type))
+ if (POINTER_TYPE_P (lhs_etype)
+ || POINTER_TYPE_P (rhs1_etype)
+ || POINTER_TYPE_P (rhs2_etype))
{
error ("invalid (pointer) operands to plus/minus");
return true;
@@ -3552,7 +3541,6 @@ verify_gimple_assign_binary (gimple stmt)
case POINTER_PLUS_EXPR:
{
-do_pointer_plus_expr_check:
if (!POINTER_TYPE_P (rhs1_type)
|| !useless_type_conversion_p (lhs_type, rhs1_type)
|| !ptrofftype_p (rhs2_type))
@@ -7658,7 +7646,7 @@ struct cfg_hooks gimple_cfg_hooks = {
/* Split all critical edges. */
-static unsigned int
+unsigned int
split_critical_edges (void)
{
basic_block bb;
diff --git a/gcc-4.8/gcc/tree-cfgcleanup.c b/gcc-4.8/gcc/tree-cfgcleanup.c
index 064d994ad..aeb5e4e8c 100644
--- a/gcc-4.8/gcc/tree-cfgcleanup.c
+++ b/gcc-4.8/gcc/tree-cfgcleanup.c
@@ -539,9 +539,6 @@ fixup_noreturn_call (gimple stmt)
update_stmt (stmt);
changed = true;
}
- /* Similarly remove VDEF if there is any. */
- else if (gimple_vdef (stmt))
- update_stmt (stmt);
return changed;
}
diff --git a/gcc-4.8/gcc/tree-dfa.c b/gcc-4.8/gcc/tree-dfa.c
index 23fae4f2d..28233b252 100644
--- a/gcc-4.8/gcc/tree-dfa.c
+++ b/gcc-4.8/gcc/tree-dfa.c
@@ -386,7 +386,6 @@ get_ref_base_and_extent (tree exp, HOST_WIDE_INT *poffset,
double_int bit_offset = double_int_zero;
HOST_WIDE_INT hbit_offset;
bool seen_variable_array_ref = false;
- tree base_type;
/* First get the final access size from just the outermost expression. */
if (TREE_CODE (exp) == COMPONENT_REF)
@@ -417,8 +416,6 @@ get_ref_base_and_extent (tree exp, HOST_WIDE_INT *poffset,
and find the ultimate containing object. */
while (1)
{
- base_type = TREE_TYPE (exp);
-
switch (TREE_CODE (exp))
{
case BIT_FIELD_REF:
@@ -543,54 +540,54 @@ get_ref_base_and_extent (tree exp, HOST_WIDE_INT *poffset,
case VIEW_CONVERT_EXPR:
break;
- case MEM_REF:
- /* Hand back the decl for MEM[&decl, off]. */
- if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR)
- {
- if (integer_zerop (TREE_OPERAND (exp, 1)))
- exp = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
- else
- {
- double_int off = mem_ref_offset (exp);
- off = off.alshift (BITS_PER_UNIT == 8
- ? 3 : exact_log2 (BITS_PER_UNIT),
- HOST_BITS_PER_DOUBLE_INT);
- off = off + bit_offset;
- if (off.fits_shwi ())
- {
- bit_offset = off;
- exp = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
- }
- }
- }
- goto done;
-
case TARGET_MEM_REF:
- /* Hand back the decl for MEM[&decl, off]. */
- if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR)
- {
/* Via the variable index or index2 we can reach the
- whole object. */
- if (TMR_INDEX (exp) || TMR_INDEX2 (exp))
+ whole object. Still hand back the decl here. */
+ if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR
+ && (TMR_INDEX (exp) || TMR_INDEX2 (exp)))
{
exp = TREE_OPERAND (TMR_BASE (exp), 0);
bit_offset = double_int_zero;
maxsize = -1;
goto done;
}
- if (integer_zerop (TMR_OFFSET (exp)))
- exp = TREE_OPERAND (TMR_BASE (exp), 0);
+ /* Fallthru. */
+ case MEM_REF:
+ /* We need to deal with variable arrays ending structures such as
+ struct { int length; int a[1]; } x; x.a[d]
+ struct { struct { int a; int b; } a[1]; } x; x.a[d].a
+ struct { struct { int a[1]; } a[1]; } x; x.a[0][d], x.a[d][0]
+ struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
+ where we do not know maxsize for variable index accesses to
+ the array. The simplest way to conservatively deal with this
+ is to punt in the case that offset + maxsize reaches the
+ base type boundary. This needs to include possible trailing
+ padding that is there for alignment purposes. */
+ if (seen_variable_array_ref
+ && maxsize != -1
+ && (!bit_offset.fits_shwi ()
+ || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
+ || (bit_offset.to_shwi () + maxsize
+ == (HOST_WIDE_INT) TREE_INT_CST_LOW
+ (TYPE_SIZE (TREE_TYPE (exp))))))
+ maxsize = -1;
+
+ /* Hand back the decl for MEM[&decl, off]. */
+ if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR)
+ {
+ if (integer_zerop (TREE_OPERAND (exp, 1)))
+ exp = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
else
{
double_int off = mem_ref_offset (exp);
off = off.alshift (BITS_PER_UNIT == 8
? 3 : exact_log2 (BITS_PER_UNIT),
HOST_BITS_PER_DOUBLE_INT);
- off += bit_offset;
+ off = off + bit_offset;
if (off.fits_shwi ())
{
bit_offset = off;
- exp = TREE_OPERAND (TMR_BASE (exp), 0);
+ exp = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
}
}
}
@@ -602,8 +599,18 @@ get_ref_base_and_extent (tree exp, HOST_WIDE_INT *poffset,
exp = TREE_OPERAND (exp, 0);
}
- done:
+ /* We need to deal with variable arrays ending structures. */
+ if (seen_variable_array_ref
+ && maxsize != -1
+ && (!bit_offset.fits_shwi ()
+ || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
+ || (bit_offset.to_shwi () + maxsize
+ == (HOST_WIDE_INT)
+ TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (exp))))))
+ maxsize = -1;
+
+ done:
if (!bit_offset.fits_shwi ())
{
*poffset = 0;
@@ -615,24 +622,6 @@ get_ref_base_and_extent (tree exp, HOST_WIDE_INT *poffset,
hbit_offset = bit_offset.to_shwi ();
- /* We need to deal with variable arrays ending structures such as
- struct { int length; int a[1]; } x; x.a[d]
- struct { struct { int a; int b; } a[1]; } x; x.a[d].a
- struct { struct { int a[1]; } a[1]; } x; x.a[0][d], x.a[d][0]
- struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
- where we do not know maxsize for variable index accesses to
- the array. The simplest way to conservatively deal with this
- is to punt in the case that offset + maxsize reaches the
- base type boundary. This needs to include possible trailing padding
- that is there for alignment purposes. */
-
- if (seen_variable_array_ref
- && maxsize != -1
- && (!host_integerp (TYPE_SIZE (base_type), 1)
- || (hbit_offset + maxsize
- == (signed) TREE_INT_CST_LOW (TYPE_SIZE (base_type)))))
- maxsize = -1;
-
/* In case of a decl or constant base object we can do better. */
if (DECL_P (exp))
diff --git a/gcc-4.8/gcc/tree-eh.c b/gcc-4.8/gcc/tree-eh.c
index 973782ba5..f139d38c4 100644
--- a/gcc-4.8/gcc/tree-eh.c
+++ b/gcc-4.8/gcc/tree-eh.c
@@ -1357,9 +1357,6 @@ lower_try_finally_switch (struct leh_state *state, struct leh_tf_state *tf)
x = gimple_seq_last_stmt (finally);
finally_loc = x ? gimple_location (x) : tf_loc;
- /* Lower the finally block itself. */
- lower_eh_constructs_1 (state, &finally);
-
/* Prepare for switch statement generation. */
nlabels = tf->dest_array.length ();
return_index = nlabels;
@@ -1445,6 +1442,7 @@ lower_try_finally_switch (struct leh_state *state, struct leh_tf_state *tf)
x = gimple_build_label (finally_label);
gimple_seq_add_stmt (&tf->top_p_seq, x);
+ lower_eh_constructs_1 (state, &finally);
gimple_seq_add_seq (&tf->top_p_seq, finally);
/* Redirect each incoming goto edge. */
@@ -2502,12 +2500,6 @@ tree_could_trap_p (tree expr)
restart:
switch (code)
{
- case TARGET_MEM_REF:
- if (TREE_CODE (TMR_BASE (expr)) == ADDR_EXPR
- && !TMR_INDEX (expr) && !TMR_INDEX2 (expr))
- return false;
- return !TREE_THIS_NOTRAP (expr);
-
case COMPONENT_REF:
case REALPART_EXPR:
case IMAGPART_EXPR:
@@ -2534,10 +2526,36 @@ tree_could_trap_p (tree expr)
return false;
return !in_array_bounds_p (expr);
+ case TARGET_MEM_REF:
case MEM_REF:
+ if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR
+ && tree_could_trap_p (TREE_OPERAND (TREE_OPERAND (expr, 0), 0)))
+ return true;
+ if (TREE_THIS_NOTRAP (expr))
+ return false;
+ /* We cannot prove that the access is in-bounds when we have
+ variable-index TARGET_MEM_REFs. */
+ if (code == TARGET_MEM_REF
+ && (TMR_INDEX (expr) || TMR_INDEX2 (expr)))
+ return true;
if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR)
+ {
+ tree base = TREE_OPERAND (TREE_OPERAND (expr, 0), 0);
+ double_int off = mem_ref_offset (expr);
+ if (off.is_negative ())
+ return true;
+ if (TREE_CODE (base) == STRING_CST)
+ return double_int::from_uhwi (TREE_STRING_LENGTH (base)).ule (off);
+ else if (DECL_SIZE_UNIT (base) == NULL_TREE
+ || TREE_CODE (DECL_SIZE_UNIT (base)) != INTEGER_CST
+ || tree_to_double_int (DECL_SIZE_UNIT (base)).ule (off))
+ return true;
+ /* Now we are sure the first byte of the access is inside
+ the object. */
return false;
- /* Fallthru. */
+ }
+ return true;
+
case INDIRECT_REF:
return !TREE_THIS_NOTRAP (expr);
@@ -4166,8 +4184,11 @@ cleanup_empty_eh (eh_landing_pad lp)
/* If the block is totally empty, look for more unsplitting cases. */
if (gsi_end_p (gsi))
{
- /* For the degenerate case of an infinite loop bail out. */
- if (infinite_empty_loop_p (e_out))
+ /* For the degenerate case of an infinite loop bail out.
+ If bb has no successors and is totally empty, which can happen e.g.
+ because of incorrect noreturn attribute, bail out too. */
+ if (e_out == NULL
+ || infinite_empty_loop_p (e_out))
return ret;
return ret | cleanup_empty_eh_unsplit (bb, e_out, lp);
@@ -4304,10 +4325,11 @@ execute_cleanup_eh_1 (void)
remove_unreachable_handlers ();
/* Watch out for the region tree vanishing due to all unreachable. */
- if (cfun->eh->region_tree && optimize)
+ if (cfun->eh->region_tree)
{
bool changed = false;
+ if (optimize)
changed |= unsplit_all_eh ();
changed |= cleanup_all_empty_eh ();
diff --git a/gcc-4.8/gcc/tree-flow.h b/gcc-4.8/gcc/tree-flow.h
index 20584b8c6..e0aef5b92 100644
--- a/gcc-4.8/gcc/tree-flow.h
+++ b/gcc-4.8/gcc/tree-flow.h
@@ -425,6 +425,7 @@ extern basic_block move_sese_region_to_fn (struct function *, basic_block,
basic_block, tree);
void remove_edge_and_dominated_blocks (edge);
bool tree_node_can_be_shared (tree);
+extern unsigned int split_critical_edges (void);
/* In tree-cfgcleanup.c */
extern bitmap cfgcleanup_altered_bbs;
diff --git a/gcc-4.8/gcc/tree-inline.c b/gcc-4.8/gcc/tree-inline.c
index 5121765fd..d2dfc438a 100644
--- a/gcc-4.8/gcc/tree-inline.c
+++ b/gcc-4.8/gcc/tree-inline.c
@@ -2841,7 +2841,8 @@ declare_return_variable (copy_body_data *id, tree return_slot, tree modify_dest,
{
var = return_slot;
gcc_assert (TREE_CODE (var) != SSA_NAME);
- TREE_ADDRESSABLE (var) |= TREE_ADDRESSABLE (result);
+ if (TREE_ADDRESSABLE (result))
+ mark_addressable (var);
}
if ((TREE_CODE (TREE_TYPE (result)) == COMPLEX_TYPE
|| TREE_CODE (TREE_TYPE (result)) == VECTOR_TYPE)
diff --git a/gcc-4.8/gcc/tree-object-size.c b/gcc-4.8/gcc/tree-object-size.c
index 2b8311a6c..6dc971a85 100644
--- a/gcc-4.8/gcc/tree-object-size.c
+++ b/gcc-4.8/gcc/tree-object-size.c
@@ -64,7 +64,7 @@ static void check_for_plus_in_loops_1 (struct object_size_info *, tree,
the subobject (innermost array or field with address taken).
object_sizes[2] is lower bound for number of bytes till the end of
the object and object_sizes[3] lower bound for subobject. */
-static unsigned HOST_WIDE_INT *object_sizes[4];
+static vec<unsigned HOST_WIDE_INT> object_sizes[4];
/* Bitmaps what object sizes have been computed already. */
static bitmap computed[4];
@@ -493,7 +493,7 @@ compute_builtin_object_size (tree ptr, int object_size_type)
if (TREE_CODE (ptr) == SSA_NAME
&& POINTER_TYPE_P (TREE_TYPE (ptr))
- && object_sizes[object_size_type] != NULL)
+ && computed[object_size_type] != NULL)
{
if (!bitmap_bit_p (computed[object_size_type], SSA_NAME_VERSION (ptr)))
{
@@ -501,6 +501,8 @@ compute_builtin_object_size (tree ptr, int object_size_type)
bitmap_iterator bi;
unsigned int i;
+ if (num_ssa_names > object_sizes[object_size_type].length ())
+ object_sizes[object_size_type].safe_grow (num_ssa_names);
if (dump_file)
{
fprintf (dump_file, "Computing %s %sobject size for ",
@@ -1162,12 +1164,12 @@ init_object_sizes (void)
{
int object_size_type;
- if (object_sizes[0])
+ if (computed[0])
return;
for (object_size_type = 0; object_size_type <= 3; object_size_type++)
{
- object_sizes[object_size_type] = XNEWVEC (unsigned HOST_WIDE_INT, num_ssa_names);
+ object_sizes[object_size_type].safe_grow (num_ssa_names);
computed[object_size_type] = BITMAP_ALLOC (NULL);
}
@@ -1184,9 +1186,8 @@ fini_object_sizes (void)
for (object_size_type = 0; object_size_type <= 3; object_size_type++)
{
- free (object_sizes[object_size_type]);
+ object_sizes[object_size_type].release ();
BITMAP_FREE (computed[object_size_type]);
- object_sizes[object_size_type] = NULL;
}
}
@@ -1202,16 +1203,9 @@ compute_object_sizes (void)
gimple_stmt_iterator i;
for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
{
- tree callee, result;
+ tree result;
gimple call = gsi_stmt (i);
-
- if (gimple_code (call) != GIMPLE_CALL)
- continue;
-
- callee = gimple_call_fndecl (call);
- if (!callee
- || DECL_BUILT_IN_CLASS (callee) != BUILT_IN_NORMAL
- || DECL_FUNCTION_CODE (callee) != BUILT_IN_OBJECT_SIZE)
+ if (!gimple_call_builtin_p (call, BUILT_IN_OBJECT_SIZE))
continue;
init_object_sizes ();
@@ -1240,20 +1234,32 @@ compute_object_sizes (void)
continue;
}
+ gcc_assert (TREE_CODE (result) == INTEGER_CST);
+
if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, "Simplified\n ");
print_gimple_stmt (dump_file, call, 0, dump_flags);
+ fprintf (dump_file, " to ");
+ print_generic_expr (dump_file, result, 0);
+ fprintf (dump_file, "\n");
}
- if (!update_call_from_tree (&i, result))
- gcc_unreachable ();
+ tree lhs = gimple_call_lhs (call);
+ if (!lhs)
+ continue;
- if (dump_file && (dump_flags & TDF_DETAILS))
+ /* Propagate into all uses and fold those stmts. */
+ gimple use_stmt;
+ imm_use_iterator iter;
+ FOR_EACH_IMM_USE_STMT (use_stmt, iter, lhs)
{
- fprintf (dump_file, "to\n ");
- print_gimple_stmt (dump_file, gsi_stmt (i), 0, dump_flags);
- fprintf (dump_file, "\n");
+ use_operand_p use_p;
+ FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
+ SET_USE (use_p, result);
+ gimple_stmt_iterator gsi = gsi_for_stmt (use_stmt);
+ fold_stmt (&gsi);
+ update_stmt (gsi_stmt (gsi));
}
}
}
diff --git a/gcc-4.8/gcc/tree-predcom.c b/gcc-4.8/gcc/tree-predcom.c
index dceea8cc8..ef24d5e21 100644
--- a/gcc-4.8/gcc/tree-predcom.c
+++ b/gcc-4.8/gcc/tree-predcom.c
@@ -1323,90 +1323,43 @@ replace_ref_with (gimple stmt, tree new_tree, bool set, bool in_lhs)
gsi_insert_after (&bsi, new_stmt, GSI_NEW_STMT);
}
-/* Returns the reference to the address of REF in the ITER-th iteration of
- LOOP, or NULL if we fail to determine it (ITER may be negative). We
- try to preserve the original shape of the reference (not rewrite it
- as an indirect ref to the address), to make tree_could_trap_p in
- prepare_initializers_chain return false more often. */
+/* Returns a memory reference to DR in the ITER-th iteration of
+ the loop it was analyzed in. Append init stmts to STMTS. */
static tree
-ref_at_iteration (struct loop *loop, tree ref, int iter)
-{
- tree idx, *idx_p, type, val, op0 = NULL_TREE, ret;
- affine_iv iv;
- bool ok;
-
- if (handled_component_p (ref))
- {
- op0 = ref_at_iteration (loop, TREE_OPERAND (ref, 0), iter);
- if (!op0)
- return NULL_TREE;
- }
- else if (!INDIRECT_REF_P (ref)
- && TREE_CODE (ref) != MEM_REF)
- return unshare_expr (ref);
-
- if (TREE_CODE (ref) == MEM_REF)
- {
- ret = unshare_expr (ref);
- idx = TREE_OPERAND (ref, 0);
- idx_p = &TREE_OPERAND (ret, 0);
- }
- else if (TREE_CODE (ref) == COMPONENT_REF)
- {
- /* Check that the offset is loop invariant. */
- if (TREE_OPERAND (ref, 2)
- && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 2)))
- return NULL_TREE;
-
- return build3 (COMPONENT_REF, TREE_TYPE (ref), op0,
- unshare_expr (TREE_OPERAND (ref, 1)),
- unshare_expr (TREE_OPERAND (ref, 2)));
- }
- else if (TREE_CODE (ref) == ARRAY_REF)
- {
- /* Check that the lower bound and the step are loop invariant. */
- if (TREE_OPERAND (ref, 2)
- && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 2)))
- return NULL_TREE;
- if (TREE_OPERAND (ref, 3)
- && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 3)))
- return NULL_TREE;
-
- ret = build4 (ARRAY_REF, TREE_TYPE (ref), op0, NULL_TREE,
- unshare_expr (TREE_OPERAND (ref, 2)),
- unshare_expr (TREE_OPERAND (ref, 3)));
- idx = TREE_OPERAND (ref, 1);
- idx_p = &TREE_OPERAND (ret, 1);
- }
- else
- return NULL_TREE;
-
- ok = simple_iv (loop, loop, idx, &iv, true);
- if (!ok)
- return NULL_TREE;
- iv.base = expand_simple_operations (iv.base);
- if (integer_zerop (iv.step))
- *idx_p = unshare_expr (iv.base);
+ref_at_iteration (data_reference_p dr, int iter, gimple_seq *stmts)
+{
+ tree off = DR_OFFSET (dr);
+ tree coff = DR_INIT (dr);
+ if (iter == 0)
+ ;
+ else if (TREE_CODE (DR_STEP (dr)) == INTEGER_CST)
+ coff = size_binop (PLUS_EXPR, coff,
+ size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
else
- {
- type = TREE_TYPE (iv.base);
- if (POINTER_TYPE_P (type))
- {
- val = fold_build2 (MULT_EXPR, sizetype, iv.step,
- size_int (iter));
- val = fold_build_pointer_plus (iv.base, val);
+ off = size_binop (PLUS_EXPR, off,
+ size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
+ tree addr = fold_build_pointer_plus (DR_BASE_ADDRESS (dr), off);
+ addr = force_gimple_operand_1 (addr, stmts, is_gimple_mem_ref_addr,
+ NULL_TREE);
+ tree alias_ptr = fold_convert (reference_alias_ptr_type (DR_REF (dr)), coff);
+ /* While data-ref analysis punts on bit offsets it still handles
+ bitfield accesses at byte boundaries. Cope with that. Note that
+ we cannot simply re-apply the outer COMPONENT_REF because the
+ byte-granular portion of it is already applied via DR_INIT and
+ DR_OFFSET, so simply build a BIT_FIELD_REF knowing that the bits
+ start at offset zero. */
+ if (TREE_CODE (DR_REF (dr)) == COMPONENT_REF
+ && DECL_BIT_FIELD (TREE_OPERAND (DR_REF (dr), 1)))
+ {
+ tree field = TREE_OPERAND (DR_REF (dr), 1);
+ return build3 (BIT_FIELD_REF, TREE_TYPE (DR_REF (dr)),
+ build2 (MEM_REF, DECL_BIT_FIELD_TYPE (field),
+ addr, alias_ptr),
+ DECL_SIZE (field), bitsize_zero_node);
}
else
- {
- val = fold_build2 (MULT_EXPR, type, iv.step,
- build_int_cst_type (type, iter));
- val = fold_build2 (PLUS_EXPR, type, iv.base, val);
- }
- *idx_p = unshare_expr (val);
- }
-
- return ret;
+ return fold_build2 (MEM_REF, TREE_TYPE (DR_REF (dr)), addr, alias_ptr);
}
/* Get the initialization expression for the INDEX-th temporary variable
@@ -2068,7 +2021,11 @@ combinable_refs_p (dref r1, dref r2,
stmt = find_common_use_stmt (&name1, &name2);
- if (!stmt)
+ if (!stmt
+ /* A simple post-dominance check - make sure the combination
+ is executed under the same condition as the references. */
+ || (gimple_bb (stmt) != gimple_bb (r1->stmt)
+ && gimple_bb (stmt) != gimple_bb (r2->stmt)))
return false;
acode = gimple_assign_rhs_code (stmt);
@@ -2365,14 +2322,10 @@ prepare_initializers_chain (struct loop *loop, chain_p chain)
if (chain->inits[i] != NULL_TREE)
continue;
- init = ref_at_iteration (loop, DR_REF (dr), (int) i - n);
- if (!init)
- return false;
-
+ init = ref_at_iteration (dr, (int) i - n, &stmts);
if (!chain->all_always_accessed && tree_could_trap_p (init))
return false;
- init = force_gimple_operand (init, &stmts, false, NULL_TREE);
if (stmts)
gsi_insert_seq_on_edge_immediate (entry, stmts);
@@ -2449,6 +2402,7 @@ tree_predictive_commoning_loop (struct loop *loop)
if (!components)
{
free_data_refs (datarefs);
+ free_affine_expand_cache (&name_expansions);
return false;
}
diff --git a/gcc-4.8/gcc/tree-sra.c b/gcc-4.8/gcc/tree-sra.c
index 627fadc66..43b2ce683 100644
--- a/gcc-4.8/gcc/tree-sra.c
+++ b/gcc-4.8/gcc/tree-sra.c
@@ -1161,8 +1161,7 @@ build_accesses_from_assign (gimple stmt)
GIMPLE_ASM operands with memory constrains which cannot be scalarized. */
static bool
-asm_visit_addr (gimple stmt ATTRIBUTE_UNUSED, tree op,
- void *data ATTRIBUTE_UNUSED)
+asm_visit_addr (gimple, tree op, tree, void *)
{
op = get_base_address (op);
if (op
@@ -2890,6 +2889,10 @@ load_assign_lhs_subreplacements (struct access *lacc, struct access *top_racc,
lacc);
else
drhs = NULL_TREE;
+ if (drhs
+ && !useless_type_conversion_p (lacc->type, TREE_TYPE (drhs)))
+ drhs = fold_build1_loc (loc, VIEW_CONVERT_EXPR,
+ lacc->type, drhs);
ds = gimple_build_debug_bind (get_access_replacement (lacc),
drhs, gsi_stmt (*old_gsi));
gsi_insert_after (new_gsi, ds, GSI_NEW_STMT);
@@ -4868,6 +4871,14 @@ ipa_sra_preliminary_function_checks (struct cgraph_node *node)
return false;
}
+ if (!opt_for_fn (node->symbol.decl, optimize)
+ || !opt_for_fn (node->symbol.decl, flag_ipa_sra))
+ {
+ if (dump_file)
+ fprintf (dump_file, "Function not optimized.\n");
+ return false;
+ }
+
if (DECL_VIRTUAL_P (current_function_decl))
{
if (dump_file)
diff --git a/gcc-4.8/gcc/tree-ssa-dce.c b/gcc-4.8/gcc/tree-ssa-dce.c
index 24e2db29a..04810e095 100644
--- a/gcc-4.8/gcc/tree-ssa-dce.c
+++ b/gcc-4.8/gcc/tree-ssa-dce.c
@@ -1307,27 +1307,20 @@ eliminate_unnecessary_stmts (void)
stats.total++;
/* We can mark a call to free as not necessary if the
- defining statement of its argument is an allocation
- function and that is not necessary itself. */
- if (gimple_call_builtin_p (stmt, BUILT_IN_FREE))
+ defining statement of its argument is not necessary
+ (and thus is getting removed). */
+ if (gimple_plf (stmt, STMT_NECESSARY)
+ && gimple_call_builtin_p (stmt, BUILT_IN_FREE))
{
tree ptr = gimple_call_arg (stmt, 0);
- tree callee2;
- gimple def_stmt;
- if (TREE_CODE (ptr) != SSA_NAME)
- continue;
- def_stmt = SSA_NAME_DEF_STMT (ptr);
- if (!is_gimple_call (def_stmt)
- || gimple_plf (def_stmt, STMT_NECESSARY))
- continue;
- callee2 = gimple_call_fndecl (def_stmt);
- if (callee2 == NULL_TREE
- || DECL_BUILT_IN_CLASS (callee2) != BUILT_IN_NORMAL
- || (DECL_FUNCTION_CODE (callee2) != BUILT_IN_MALLOC
- && DECL_FUNCTION_CODE (callee2) != BUILT_IN_CALLOC))
- continue;
+ if (TREE_CODE (ptr) == SSA_NAME)
+ {
+ gimple def_stmt = SSA_NAME_DEF_STMT (ptr);
+ if (!gimple_nop_p (def_stmt)
+ && !gimple_plf (def_stmt, STMT_NECESSARY))
gimple_set_plf (stmt, STMT_NECESSARY, false);
}
+ }
/* If GSI is not necessary then remove it. */
if (!gimple_plf (stmt, STMT_NECESSARY))
diff --git a/gcc-4.8/gcc/tree-ssa-live.c b/gcc-4.8/gcc/tree-ssa-live.c
index a72e9d5a6..8456d7a09 100644
--- a/gcc-4.8/gcc/tree-ssa-live.c
+++ b/gcc-4.8/gcc/tree-ssa-live.c
@@ -394,7 +394,8 @@ mark_all_vars_used_1 (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
{
/* When a global var becomes used for the first time also walk its
initializer (non global ones don't have any). */
- if (set_is_used (t) && is_global_var (t))
+ if (set_is_used (t) && is_global_var (t)
+ && DECL_CONTEXT (t) == current_function_decl)
mark_all_vars_used (&DECL_INITIAL (t));
}
/* remove_unused_scope_block_p requires information about labels
diff --git a/gcc-4.8/gcc/tree-ssa-loop-im.c b/gcc-4.8/gcc/tree-ssa-loop-im.c
index 78ad07330..0ae6cdb7e 100644
--- a/gcc-4.8/gcc/tree-ssa-loop-im.c
+++ b/gcc-4.8/gcc/tree-ssa-loop-im.c
@@ -1190,6 +1190,67 @@ determine_invariantness (void)
fini_walk_dominator_tree (&walk_data);
}
+/* Return true if CODE is an operation that when operating on signed
+ integer types involves undefined behavior on overflow and the
+ operation can be expressed with unsigned arithmetic. */
+
+static bool
+arith_code_with_undefined_signed_overflow (tree_code code)
+{
+ switch (code)
+ {
+ case PLUS_EXPR:
+ case MINUS_EXPR:
+ case MULT_EXPR:
+ case NEGATE_EXPR:
+ case POINTER_PLUS_EXPR:
+ return true;
+ default:
+ return false;
+ }
+}
+
+/* Rewrite STMT, an assignment with a signed integer or pointer arithmetic
+ operation that can be transformed to unsigned arithmetic by converting
+ its operand, carrying out the operation in the corresponding unsigned
+ type and converting the result back to the original type.
+
+ Returns a sequence of statements that replace STMT and also contain
+ a modified form of STMT itself. */
+
+static gimple_seq
+rewrite_to_defined_overflow (gimple stmt)
+{
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "rewriting stmt with undefined signed "
+ "overflow ");
+ print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
+ }
+
+ tree lhs = gimple_assign_lhs (stmt);
+ tree type = unsigned_type_for (TREE_TYPE (lhs));
+ gimple_seq stmts = NULL;
+ for (unsigned i = 1; i < gimple_num_ops (stmt); ++i)
+ {
+ gimple_seq stmts2 = NULL;
+ gimple_set_op (stmt, i,
+ force_gimple_operand (fold_convert (type,
+ gimple_op (stmt, i)),
+ &stmts2, true, NULL_TREE));
+ gimple_seq_add_seq (&stmts, stmts2);
+ }
+ gimple_assign_set_lhs (stmt, make_ssa_name (type, stmt));
+ if (gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR)
+ gimple_assign_set_rhs_code (stmt, PLUS_EXPR);
+ gimple_seq_add_stmt (&stmts, stmt);
+ gimple cvt = gimple_build_assign_with_ops
+ (NOP_EXPR, lhs, gimple_assign_lhs (stmt), NULL_TREE);
+ gimple_seq_add_stmt (&stmts, cvt);
+
+ return stmts;
+}
+
/* Hoist the statements in basic block BB out of the loops prescribed by
data stored in LIM_DATA structures associated with each statement. Callback
for walk_dominator_tree. */
@@ -1321,6 +1382,20 @@ move_computations_stmt (struct dom_walk_data *dw_data,
}
}
gsi_remove (&bsi, false);
+ /* In case this is a stmt that is not unconditionally executed
+ when the target loop header is executed and the stmt may
+ invoke undefined integer or pointer overflow rewrite it to
+ unsigned arithmetic. */
+ if (is_gimple_assign (stmt)
+ && INTEGRAL_TYPE_P (TREE_TYPE (gimple_assign_lhs (stmt)))
+ && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (gimple_assign_lhs (stmt)))
+ && arith_code_with_undefined_signed_overflow
+ (gimple_assign_rhs_code (stmt))
+ && (!ALWAYS_EXECUTED_IN (bb)
+ || !(ALWAYS_EXECUTED_IN (bb) == level
+ || flow_loop_nested_p (ALWAYS_EXECUTED_IN (bb), level))))
+ gsi_insert_seq_on_edge (e, rewrite_to_defined_overflow (stmt));
+ else
gsi_insert_on_edge (e, stmt);
}
}
@@ -1992,6 +2067,7 @@ execute_sm_if_changed (edge ex, tree mem, tree tmp_var, tree flag)
gimple_stmt_iterator gsi;
gimple stmt;
struct prev_flag_edges *prev_edges = (struct prev_flag_edges *) ex->aux;
+ bool irr = ex->flags & EDGE_IRREDUCIBLE_LOOP;
/* ?? Insert store after previous store if applicable. See note
below. */
@@ -2006,7 +2082,8 @@ execute_sm_if_changed (edge ex, tree mem, tree tmp_var, tree flag)
old_dest = ex->dest;
new_bb = split_edge (ex);
then_bb = create_empty_bb (new_bb);
- if (current_loops && new_bb->loop_father)
+ if (irr)
+ then_bb->flags = BB_IRREDUCIBLE_LOOP;
add_bb_to_loop (then_bb, new_bb->loop_father);
gsi = gsi_start_bb (new_bb);
@@ -2019,9 +2096,12 @@ execute_sm_if_changed (edge ex, tree mem, tree tmp_var, tree flag)
stmt = gimple_build_assign (unshare_expr (mem), tmp_var);
gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
- make_edge (new_bb, then_bb, EDGE_TRUE_VALUE);
- make_edge (new_bb, old_dest, EDGE_FALSE_VALUE);
- then_old_edge = make_edge (then_bb, old_dest, EDGE_FALLTHRU);
+ make_edge (new_bb, then_bb,
+ EDGE_TRUE_VALUE | (irr ? EDGE_IRREDUCIBLE_LOOP : 0));
+ make_edge (new_bb, old_dest,
+ EDGE_FALSE_VALUE | (irr ? EDGE_IRREDUCIBLE_LOOP : 0));
+ then_old_edge = make_edge (then_bb, old_dest,
+ EDGE_FALLTHRU | (irr ? EDGE_IRREDUCIBLE_LOOP : 0));
set_immediate_dominator (CDI_DOMINATORS, then_bb, new_bb);
diff --git a/gcc-4.8/gcc/tree-ssa-loop-ivopts.c b/gcc-4.8/gcc/tree-ssa-loop-ivopts.c
index 2940bf100..17dd478a6 100644
--- a/gcc-4.8/gcc/tree-ssa-loop-ivopts.c
+++ b/gcc-4.8/gcc/tree-ssa-loop-ivopts.c
@@ -4236,8 +4236,10 @@ cand_value_at (struct loop *loop, struct iv_cand *cand, gimple at, tree niter,
tree steptype = type;
if (POINTER_TYPE_P (type))
steptype = sizetype;
+ steptype = unsigned_type_for (type);
- tree_to_aff_combination (iv->step, steptype, &step);
+ tree_to_aff_combination (iv->step, TREE_TYPE (iv->step), &step);
+ aff_combination_convert (&step, steptype);
tree_to_aff_combination (niter, TREE_TYPE (niter), &nit);
aff_combination_convert (&nit, steptype);
aff_combination_mult (&nit, &step, &delta);
@@ -4245,6 +4247,8 @@ cand_value_at (struct loop *loop, struct iv_cand *cand, gimple at, tree niter,
aff_combination_add (&delta, &step);
tree_to_aff_combination (iv->base, type, val);
+ if (!POINTER_TYPE_P (type))
+ aff_combination_convert (val, steptype);
aff_combination_add (val, &delta);
}
@@ -4623,7 +4627,8 @@ may_eliminate_iv (struct ivopts_data *data,
cand_value_at (loop, cand, use->stmt, desc->niter, &bnd);
- *bound = aff_combination_to_tree (&bnd);
+ *bound = fold_convert (TREE_TYPE (cand->iv->base),
+ aff_combination_to_tree (&bnd));
*comp = iv_elimination_compare (data, use);
/* It is unlikely that computing the number of iterations using division
diff --git a/gcc-4.8/gcc/tree-ssa-loop-niter.c b/gcc-4.8/gcc/tree-ssa-loop-niter.c
index f5629306e..76a64e578 100644
--- a/gcc-4.8/gcc/tree-ssa-loop-niter.c
+++ b/gcc-4.8/gcc/tree-ssa-loop-niter.c
@@ -2075,7 +2075,8 @@ chain_of_csts_start (struct loop *loop, tree x)
return NULL;
}
- if (gimple_code (stmt) != GIMPLE_ASSIGN)
+ if (gimple_code (stmt) != GIMPLE_ASSIGN
+ || gimple_assign_rhs_class (stmt) == GIMPLE_TERNARY_RHS)
return NULL;
code = gimple_assign_rhs_code (stmt);
@@ -2143,7 +2144,7 @@ get_val_for (tree x, tree base)
{
gimple stmt;
- gcc_assert (is_gimple_min_invariant (base));
+ gcc_checking_assert (is_gimple_min_invariant (base));
if (!x)
return base;
@@ -2152,7 +2153,7 @@ get_val_for (tree x, tree base)
if (gimple_code (stmt) == GIMPLE_PHI)
return base;
- gcc_assert (is_gimple_assign (stmt));
+ gcc_checking_assert (is_gimple_assign (stmt));
/* STMT must be either an assignment of a single SSA name or an
expression involving an SSA name and a constant. Try to fold that
diff --git a/gcc-4.8/gcc/tree-ssa-math-opts.c b/gcc-4.8/gcc/tree-ssa-math-opts.c
index 2140ced49..508a240bf 100644
--- a/gcc-4.8/gcc/tree-ssa-math-opts.c
+++ b/gcc-4.8/gcc/tree-ssa-math-opts.c
@@ -1718,7 +1718,9 @@ find_bswap_1 (gimple stmt, struct symbolic_number *n, int limit)
if (rhs_class == GIMPLE_BINARY_RHS)
{
+ int i;
struct symbolic_number n1, n2;
+ unsigned HOST_WIDEST_INT mask;
tree source_expr2;
if (code != BIT_IOR_EXPR)
@@ -1744,6 +1746,15 @@ find_bswap_1 (gimple stmt, struct symbolic_number *n, int limit)
return NULL_TREE;
n->size = n1.size;
+ for (i = 0, mask = 0xff; i < n->size; i++, mask <<= BITS_PER_UNIT)
+ {
+ unsigned HOST_WIDEST_INT masked1, masked2;
+
+ masked1 = n1.n & mask;
+ masked2 = n2.n & mask;
+ if (masked1 && masked2 && masked1 != masked2)
+ return NULL_TREE;
+ }
n->n = n1.n | n2.n;
if (!verify_symbolic_number_p (n, stmt))
diff --git a/gcc-4.8/gcc/tree-ssa-operands.c b/gcc-4.8/gcc/tree-ssa-operands.c
index 0915080c7..a4ddb6e81 100644
--- a/gcc-4.8/gcc/tree-ssa-operands.c
+++ b/gcc-4.8/gcc/tree-ssa-operands.c
@@ -626,10 +626,8 @@ maybe_add_call_vops (gimple stmt)
call-clobbered. */
if (!(call_flags & ECF_NOVOPS))
{
- /* A 'pure' or a 'const' function never call-clobbers anything.
- A 'noreturn' function might, but since we don't return anyway
- there is no point in recording that. */
- if (!(call_flags & (ECF_PURE | ECF_CONST | ECF_NORETURN)))
+ /* A 'pure' or a 'const' function never call-clobbers anything. */
+ if (!(call_flags & (ECF_PURE | ECF_CONST)))
add_virtual_operand (stmt, opf_def);
else if (!(call_flags & ECF_CONST))
add_virtual_operand (stmt, opf_use);
diff --git a/gcc-4.8/gcc/tree-ssa-phiprop.c b/gcc-4.8/gcc/tree-ssa-phiprop.c
index 4da181487..36b47d7f0 100644
--- a/gcc-4.8/gcc/tree-ssa-phiprop.c
+++ b/gcc-4.8/gcc/tree-ssa-phiprop.c
@@ -307,6 +307,12 @@ propagate_with_phi (basic_block bb, gimple phi, struct phiprop_d *phivn,
gimple def_stmt;
tree vuse;
+ /* Only replace loads in blocks that post-dominate the PHI node. That
+ makes sure we don't end up speculating loads. */
+ if (!dominated_by_p (CDI_POST_DOMINATORS,
+ bb, gimple_bb (use_stmt)))
+ continue;
+
/* Check whether this is a load of *ptr. */
if (!(is_gimple_assign (use_stmt)
&& TREE_CODE (gimple_assign_lhs (use_stmt)) == SSA_NAME
@@ -378,6 +384,7 @@ tree_ssa_phiprop (void)
size_t n;
calculate_dominance_info (CDI_DOMINATORS);
+ calculate_dominance_info (CDI_POST_DOMINATORS);
n = num_ssa_names;
phivn = XCNEWVEC (struct phiprop_d, n);
@@ -395,6 +402,8 @@ tree_ssa_phiprop (void)
bbs.release ();
free (phivn);
+ free_dominance_info (CDI_POST_DOMINATORS);
+
return 0;
}
diff --git a/gcc-4.8/gcc/tree-ssa-pre.c b/gcc-4.8/gcc/tree-ssa-pre.c
index 10c809175..3e6a82e24 100644
--- a/gcc-4.8/gcc/tree-ssa-pre.c
+++ b/gcc-4.8/gcc/tree-ssa-pre.c
@@ -3664,6 +3664,12 @@ insert (void)
if (dump_file && dump_flags & TDF_DETAILS)
fprintf (dump_file, "Starting insert iteration %d\n", num_iterations);
new_stuff = insert_aux (ENTRY_BLOCK_PTR);
+
+ /* Clear the NEW sets before the next iteration. We have already
+ fully propagated its contents. */
+ if (new_stuff)
+ FOR_ALL_BB (bb)
+ bitmap_set_free (NEW_SETS (bb));
}
statistics_histogram_event (cfun, "insert iterations", num_iterations);
}
diff --git a/gcc-4.8/gcc/tree-ssa-propagate.c b/gcc-4.8/gcc/tree-ssa-propagate.c
index afd7233c2..d39d97a17 100644
--- a/gcc-4.8/gcc/tree-ssa-propagate.c
+++ b/gcc-4.8/gcc/tree-ssa-propagate.c
@@ -556,8 +556,18 @@ valid_gimple_rhs_p (tree expr)
/* All constants are ok. */
break;
- case tcc_binary:
case tcc_comparison:
+ /* GENERIC allows comparisons with non-boolean types, reject
+ those for GIMPLE. Let vector-typed comparisons pass - rules
+ for GENERIC and GIMPLE are the same here. */
+ if (!(INTEGRAL_TYPE_P (TREE_TYPE (expr))
+ && (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
+ || TYPE_PRECISION (TREE_TYPE (expr)) == 1))
+ && TREE_CODE (TREE_TYPE (expr)) != VECTOR_TYPE)
+ return false;
+
+ /* Fallthru. */
+ case tcc_binary:
if (!is_gimple_val (TREE_OPERAND (expr, 0))
|| !is_gimple_val (TREE_OPERAND (expr, 1)))
return false;
diff --git a/gcc-4.8/gcc/tree-ssa-reassoc.c b/gcc-4.8/gcc/tree-ssa-reassoc.c
index a1a9a7319..e724e181c 100644
--- a/gcc-4.8/gcc/tree-ssa-reassoc.c
+++ b/gcc-4.8/gcc/tree-ssa-reassoc.c
@@ -785,8 +785,7 @@ eliminate_not_pairs (enum tree_code opcode,
if (opcode == BIT_AND_EXPR)
oe->op = build_zero_cst (TREE_TYPE (oe->op));
else if (opcode == BIT_IOR_EXPR)
- oe->op = build_low_bits_mask (TREE_TYPE (oe->op),
- TYPE_PRECISION (TREE_TYPE (oe->op)));
+ oe->op = build_all_ones_cst (TREE_TYPE (oe->op));
reassociate_stats.ops_eliminated += ops->length () - 1;
ops->truncate (0);
@@ -1980,6 +1979,13 @@ update_range_test (struct range_entry *range, struct range_entry *otherrange,
tem = fold_convert_loc (loc, optype, tem);
gsi = gsi_for_stmt (stmt);
+ /* In rare cases range->exp can be equal to lhs of stmt.
+ In that case we have to insert after the stmt rather then before
+ it. */
+ if (op == range->exp)
+ tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, false,
+ GSI_SAME_STMT);
+ else
tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, true,
GSI_SAME_STMT);
diff --git a/gcc-4.8/gcc/tree-ssa-sccvn.c b/gcc-4.8/gcc/tree-ssa-sccvn.c
index 016a5d1ba..5dce65afe 100644
--- a/gcc-4.8/gcc/tree-ssa-sccvn.c
+++ b/gcc-4.8/gcc/tree-ssa-sccvn.c
@@ -660,7 +660,7 @@ copy_reference_ops_from_ref (tree ref, vec<vn_reference_op_s> *result)
}
/* For non-calls, store the information that makes up the address. */
-
+ tree orig = ref;
while (ref)
{
vn_reference_op_s temp;
@@ -711,7 +711,15 @@ copy_reference_ops_from_ref (tree ref, vec<vn_reference_op_s> *result)
.arshift (BITS_PER_UNIT == 8
? 3 : exact_log2 (BITS_PER_UNIT),
HOST_BITS_PER_DOUBLE_INT);
- if (off.fits_shwi ())
+ if (off.fits_shwi ()
+ /* Probibit value-numbering zero offset components
+ of addresses the same before the pass folding
+ __builtin_object_size had a chance to run
+ (checking cfun->after_inlining does the
+ trick here). */
+ && (TREE_CODE (orig) != ADDR_EXPR
+ || !off.is_zero ()
+ || cfun->after_inlining))
temp.off = off.low;
}
}
diff --git a/gcc-4.8/gcc/tree-ssa-sink.c b/gcc-4.8/gcc/tree-ssa-sink.c
index 9f091748e..3df200ea3 100644
--- a/gcc-4.8/gcc/tree-ssa-sink.c
+++ b/gcc-4.8/gcc/tree-ssa-sink.c
@@ -559,7 +559,7 @@ static void
execute_sink_code (void)
{
loop_optimizer_init (LOOPS_NORMAL);
-
+ split_critical_edges ();
connect_infinite_loops_to_exit ();
memset (&sink_stats, 0, sizeof (sink_stats));
calculate_dominance_info (CDI_DOMINATORS);
diff --git a/gcc-4.8/gcc/tree-ssa-structalias.c b/gcc-4.8/gcc/tree-ssa-structalias.c
index d4b140011..6b52ae961 100644
--- a/gcc-4.8/gcc/tree-ssa-structalias.c
+++ b/gcc-4.8/gcc/tree-ssa-structalias.c
@@ -949,24 +949,27 @@ solution_set_add (bitmap set, HOST_WIDE_INT offset)
bitmap_set_bit (result, i);
else
{
- unsigned HOST_WIDE_INT fieldoffset = vi->offset + offset;
+ HOST_WIDE_INT fieldoffset = vi->offset + offset;
+ unsigned HOST_WIDE_INT size = vi->size;
/* If the offset makes the pointer point to before the
variable use offset zero for the field lookup. */
- if (offset < 0
- && fieldoffset > vi->offset)
- fieldoffset = 0;
-
- if (offset != 0)
+ if (fieldoffset < 0)
+ vi = lookup_vi_for_tree (vi->decl);
+ else
vi = first_or_preceding_vi_for_offset (vi, fieldoffset);
+ do
+ {
bitmap_set_bit (result, vi->id);
- /* If the result is not exactly at fieldoffset include the next
- field as well. See get_constraint_for_ptr_offset for more
- rationale. */
- if (vi->offset != fieldoffset
- && vi->next != NULL)
- bitmap_set_bit (result, vi->next->id);
+ if (!vi->next)
+ break;
+
+ /* We have to include all fields that overlap the current field
+ shifted by offset. */
+ vi = vi->next;
+ }
+ while (vi->offset < fieldoffset + size);
}
}
@@ -1607,16 +1610,21 @@ do_sd_constraint (constraint_graph_t graph, constraint_t c,
{
varinfo_t v = get_varinfo (j);
HOST_WIDE_INT fieldoffset = v->offset + roffset;
+ unsigned HOST_WIDE_INT size = v->size;
unsigned int t;
if (v->is_full_var)
- fieldoffset = v->offset;
+ ;
else if (roffset != 0)
- v = first_vi_for_offset (v, fieldoffset);
- /* If the access is outside of the variable we can ignore it. */
- if (!v)
- continue;
+ {
+ if (fieldoffset < 0)
+ v = lookup_vi_for_tree (v->decl);
+ else
+ v = first_or_preceding_vi_for_offset (v, fieldoffset);
+ }
+ /* We have to include all fields that overlap the current field
+ shifted by roffset. */
do
{
t = find (v->id);
@@ -1633,16 +1641,13 @@ do_sd_constraint (constraint_graph_t graph, constraint_t c,
&& add_graph_edge (graph, lhs, t))
flag |= bitmap_ior_into (sol, get_varinfo (t)->solution);
- /* If the variable is not exactly at the requested offset
- we have to include the next one. */
- if (v->offset == (unsigned HOST_WIDE_INT)fieldoffset
+ if (v->is_full_var
|| v->next == NULL)
break;
v = v->next;
- fieldoffset = v->offset;
}
- while (1);
+ while (v->offset < fieldoffset + size);
}
done:
@@ -1705,15 +1710,20 @@ do_ds_constraint (constraint_t c, bitmap delta)
varinfo_t v = get_varinfo (j);
unsigned int t;
HOST_WIDE_INT fieldoffset = v->offset + loff;
+ unsigned HOST_WIDE_INT size = v->size;
if (v->is_full_var)
- fieldoffset = v->offset;
+ ;
else if (loff != 0)
- v = first_vi_for_offset (v, fieldoffset);
- /* If the access is outside of the variable we can ignore it. */
- if (!v)
- continue;
+ {
+ if (fieldoffset < 0)
+ v = lookup_vi_for_tree (v->decl);
+ else
+ v = first_or_preceding_vi_for_offset (v, fieldoffset);
+ }
+ /* We have to include all fields that overlap the current field
+ shifted by loff. */
do
{
if (v->may_have_pointers)
@@ -1739,16 +1749,13 @@ do_ds_constraint (constraint_t c, bitmap delta)
bitmap_set_bit (changed, t);
}
- /* If the variable is not exactly at the requested offset
- we have to include the next one. */
- if (v->offset == (unsigned HOST_WIDE_INT)fieldoffset
+ if (v->is_full_var
|| v->next == NULL)
break;
v = v->next;
- fieldoffset = v->offset;
}
- while (1);
+ while (v->offset < fieldoffset + size);
}
}
@@ -2997,35 +3004,30 @@ get_constraint_for_ptr_offset (tree ptr, tree offset,
varinfo_t temp;
unsigned HOST_WIDE_INT offset = curr->offset + rhsoffset;
- /* Search the sub-field which overlaps with the
- pointed-to offset. If the result is outside of the variable
- we have to provide a conservative result, as the variable is
- still reachable from the resulting pointer (even though it
- technically cannot point to anything). The last and first
- sub-fields are such conservative results.
- ??? If we always had a sub-field for &object + 1 then
- we could represent this in a more precise way. */
+ /* If curr->offset + rhsoffset is less than zero adjust it. */
if (rhsoffset < 0
&& curr->offset < offset)
offset = 0;
- temp = first_or_preceding_vi_for_offset (curr, offset);
- /* If the found variable is not exactly at the pointed to
- result, we have to include the next variable in the
- solution as well. Otherwise two increments by offset / 2
- do not result in the same or a conservative superset
- solution. */
- if (temp->offset != offset
- && temp->next != NULL)
+ /* We have to include all fields that overlap the current
+ field shifted by rhsoffset. And we include at least
+ the last or the first field of the variable to represent
+ reachability of off-bound addresses, in particular &object + 1,
+ conservatively correct. */
+ temp = first_or_preceding_vi_for_offset (curr, offset);
+ c.var = temp->id;
+ c.offset = 0;
+ temp = temp->next;
+ while (temp
+ && temp->offset < offset + curr->size)
{
struct constraint_expr c2;
- c2.var = temp->next->id;
+ c2.var = temp->id;
c2.type = ADDRESSOF;
c2.offset = 0;
results->safe_push (c2);
+ temp = temp->next;
}
- c.var = temp->id;
- c.offset = 0;
}
else
c.offset = rhsoffset;
diff --git a/gcc-4.8/gcc/tree-ssa-tail-merge.c b/gcc-4.8/gcc/tree-ssa-tail-merge.c
index b20d3067d..419b4ec02 100644
--- a/gcc-4.8/gcc/tree-ssa-tail-merge.c
+++ b/gcc-4.8/gcc/tree-ssa-tail-merge.c
@@ -297,7 +297,8 @@ stmt_local_def (gimple stmt)
tree val;
def_operand_p def_p;
- if (gimple_has_side_effects (stmt))
+ if (gimple_has_side_effects (stmt)
+ || gimple_vdef (stmt) != NULL_TREE)
return false;
def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF);
diff --git a/gcc-4.8/gcc/tree-ssa-ter.c b/gcc-4.8/gcc/tree-ssa-ter.c
index 2a2e143de..8f27d374b 100644
--- a/gcc-4.8/gcc/tree-ssa-ter.c
+++ b/gcc-4.8/gcc/tree-ssa-ter.c
@@ -590,6 +590,30 @@ mark_replaceable (temp_expr_table_p tab, tree var, bool more_replacing)
}
+/* Helper function for find_ssaname_in_stores. Called via walk_tree to
+ find a SSA_NAME DATA somewhere in *TP. */
+
+static tree
+find_ssaname (tree *tp, int *walk_subtrees, void *data)
+{
+ tree var = (tree) data;
+ if (*tp == var)
+ return var;
+ else if (IS_TYPE_OR_DECL_P (*tp))
+ *walk_subtrees = 0;
+ return NULL_TREE;
+}
+
+/* Helper function for find_replaceable_in_bb. Return true if SSA_NAME DATA
+ is used somewhere in T, which is a store in the statement. Called via
+ walk_stmt_load_store_addr_ops. */
+
+static bool
+find_ssaname_in_store (gimple, tree, tree t, void *data)
+{
+ return walk_tree (&t, find_ssaname, data, NULL) != NULL_TREE;
+}
+
/* This function processes basic block BB, and looks for variables which can
be replaced by their expressions. Results are stored in the table TAB. */
@@ -643,8 +667,7 @@ find_replaceable_in_bb (temp_expr_table_p tab, basic_block bb)
/* If the stmt does a memory store and the replacement
is a load aliasing it avoid creating overlapping
assignments which we cannot expand correctly. */
- if (gimple_vdef (stmt)
- && gimple_assign_single_p (stmt))
+ if (gimple_vdef (stmt))
{
gimple def_stmt = SSA_NAME_DEF_STMT (use);
while (is_gimple_assign (def_stmt)
@@ -653,10 +676,30 @@ find_replaceable_in_bb (temp_expr_table_p tab, basic_block bb)
= SSA_NAME_DEF_STMT (gimple_assign_rhs1 (def_stmt));
if (gimple_vuse (def_stmt)
&& gimple_assign_single_p (def_stmt)
- && refs_may_alias_p (gimple_assign_lhs (stmt),
+ && stmt_may_clobber_ref_p (stmt,
gimple_assign_rhs1 (def_stmt)))
+ {
+ /* For calls, it is not a problem if USE is among
+ call's arguments or say OBJ_TYPE_REF argument,
+ all those necessarily need to be evaluated before
+ the call that may clobber the memory. But if
+ LHS of the call refers to USE, expansion might
+ evaluate it after the call, prevent TER in that
+ case.
+ For inline asm, allow TER of loads into input
+ arguments, but disallow TER for USEs that occur
+ somewhere in outputs. */
+ if (is_gimple_call (stmt)
+ || gimple_code (stmt) == GIMPLE_ASM)
+ {
+ if (walk_stmt_load_store_ops (stmt, use, NULL,
+ find_ssaname_in_store))
same_root_var = true;
}
+ else
+ same_root_var = true;
+ }
+ }
/* Mark expression as replaceable unless stmt is volatile, or the
def variable has the same root variable as something in the
diff --git a/gcc-4.8/gcc/tree-ssa-uninit.c b/gcc-4.8/gcc/tree-ssa-uninit.c
index 2c47fe90b..3fef1794d 100644
--- a/gcc-4.8/gcc/tree-ssa-uninit.c
+++ b/gcc-4.8/gcc/tree-ssa-uninit.c
@@ -36,6 +36,7 @@ along with GCC; see the file COPYING3. If not see
#include "hashtab.h"
#include "tree-pass.h"
#include "diagnostic-core.h"
+#include "params.h"
/* This implements the pass that does predicate aware warning on uses of
possibly uninitialized variables. The pass first collects the set of
@@ -246,8 +247,8 @@ find_control_equiv_block (basic_block bb)
/* Computes the control dependence chains (paths of edges)
for DEP_BB up to the dominating basic block BB (the head node of a
- chain should be dominated by it). CD_CHAINS is pointer to a
- dynamic array holding the result chains. CUR_CD_CHAIN is the current
+ chain should be dominated by it). CD_CHAINS is pointer to an
+ array holding the result chains. CUR_CD_CHAIN is the current
chain being computed. *NUM_CHAINS is total number of chains. The
function returns true if the information is successfully computed,
return false if there is no control dependence or not computed. */
@@ -256,7 +257,8 @@ static bool
compute_control_dep_chain (basic_block bb, basic_block dep_bb,
vec<edge> *cd_chains,
size_t *num_chains,
- vec<edge> *cur_cd_chain)
+ vec<edge> *cur_cd_chain,
+ int *num_calls)
{
edge_iterator ei;
edge e;
@@ -267,6 +269,10 @@ compute_control_dep_chain (basic_block bb, basic_block dep_bb,
if (EDGE_COUNT (bb->succs) < 2)
return false;
+ if (*num_calls > PARAM_VALUE (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS))
+ return false;
+ ++*num_calls;
+
/* Could use a set instead. */
cur_chain_len = cur_cd_chain->length ();
if (cur_chain_len > MAX_CHAIN_LEN)
@@ -306,7 +312,7 @@ compute_control_dep_chain (basic_block bb, basic_block dep_bb,
/* Now check if DEP_BB is indirectly control dependent on BB. */
if (compute_control_dep_chain (cd_bb, dep_bb, cd_chains,
- num_chains, cur_cd_chain))
+ num_chains, cur_cd_chain, num_calls))
{
found_cd_chain = true;
break;
@@ -438,14 +444,12 @@ find_predicates (vec<use_pred_info_t> **preds,
basic_block use_bb)
{
size_t num_chains = 0, i;
- vec<edge> *dep_chains = 0;
+ int num_calls = 0;
+ vec<edge> dep_chains[MAX_NUM_CHAINS];
vec<edge> cur_chain = vNULL;
bool has_valid_pred = false;
basic_block cd_root = 0;
- typedef vec<edge> vec_edge_heap;
- dep_chains = XCNEWVEC (vec_edge_heap, MAX_NUM_CHAINS);
-
/* First find the closest bb that is control equivalent to PHI_BB
that also dominates USE_BB. */
cd_root = phi_bb;
@@ -458,20 +462,16 @@ find_predicates (vec<use_pred_info_t> **preds,
break;
}
- compute_control_dep_chain (cd_root, use_bb,
- dep_chains, &num_chains,
- &cur_chain);
+ compute_control_dep_chain (cd_root, use_bb, dep_chains, &num_chains,
+ &cur_chain, &num_calls);
has_valid_pred
- = convert_control_dep_chain_into_preds (dep_chains,
- num_chains,
- preds,
+ = convert_control_dep_chain_into_preds (dep_chains, num_chains, preds,
num_preds);
/* Free individual chain */
cur_chain.release ();
for (i = 0; i < num_chains; i++)
dep_chains[i].release ();
- free (dep_chains);
return has_valid_pred;
}
@@ -539,16 +539,13 @@ find_def_preds (vec<use_pred_info_t> **preds,
size_t *num_preds, gimple phi)
{
size_t num_chains = 0, i, n;
- vec<edge> *dep_chains = 0;
+ vec<edge> dep_chains[MAX_NUM_CHAINS];
vec<edge> cur_chain = vNULL;
vec<edge> def_edges = vNULL;
bool has_valid_pred = false;
basic_block phi_bb, cd_root = 0;
struct pointer_set_t *visited_phis;
- typedef vec<edge> vec_edge_heap;
- dep_chains = XCNEWVEC (vec_edge_heap, MAX_NUM_CHAINS);
-
phi_bb = gimple_bb (phi);
/* First find the closest dominating bb to be
the control dependence root */
@@ -567,38 +564,33 @@ find_def_preds (vec<use_pred_info_t> **preds,
for (i = 0; i < n; i++)
{
size_t prev_nc, j;
+ int num_calls = 0;
edge opnd_edge;
opnd_edge = def_edges[i];
prev_nc = num_chains;
- compute_control_dep_chain (cd_root, opnd_edge->src,
- dep_chains, &num_chains,
- &cur_chain);
- /* Free individual chain */
- cur_chain.release ();
+ compute_control_dep_chain (cd_root, opnd_edge->src, dep_chains,
+ &num_chains, &cur_chain, &num_calls);
/* Now update the newly added chains with
the phi operand edge: */
if (EDGE_COUNT (opnd_edge->src->succs) > 1)
{
- if (prev_nc == num_chains
- && num_chains < MAX_NUM_CHAINS)
- num_chains++;
+ if (prev_nc == num_chains && num_chains < MAX_NUM_CHAINS)
+ dep_chains[num_chains++] = vNULL;
for (j = prev_nc; j < num_chains; j++)
- {
dep_chains[j].safe_push (opnd_edge);
}
}
- }
+
+ /* Free individual chain */
+ cur_chain.release ();
has_valid_pred
- = convert_control_dep_chain_into_preds (dep_chains,
- num_chains,
- preds,
+ = convert_control_dep_chain_into_preds (dep_chains, num_chains, preds,
num_preds);
for (i = 0; i < num_chains; i++)
dep_chains[i].release ();
- free (dep_chains);
return has_valid_pred;
}
diff --git a/gcc-4.8/gcc/tree-ssanames.c b/gcc-4.8/gcc/tree-ssanames.c
index 0a405ce2a..c910f2edc 100644
--- a/gcc-4.8/gcc/tree-ssanames.c
+++ b/gcc-4.8/gcc/tree-ssanames.c
@@ -128,7 +128,7 @@ make_ssa_name_fn (struct function *fn, tree var, gimple stmt)
/* The node was cleared out when we put it on the free list, so
there is no need to do so again here. */
- gcc_assert (ssa_name (SSA_NAME_VERSION (t)) == NULL);
+ gcc_assert ((*SSANAMES (fn))[SSA_NAME_VERSION (t)] == NULL);
(*SSANAMES (fn))[SSA_NAME_VERSION (t)] = t;
}
else
diff --git a/gcc-4.8/gcc/tree-vect-data-refs.c b/gcc-4.8/gcc/tree-vect-data-refs.c
index 1d5d02275..d8d1435c3 100644
--- a/gcc-4.8/gcc/tree-vect-data-refs.c
+++ b/gcc-4.8/gcc/tree-vect-data-refs.c
@@ -739,6 +739,13 @@ vect_analyze_data_ref_dependence (struct data_dependence_relation *ddr,
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"dependence distance negative.");
+ /* Record a negative dependence distance to later limit the
+ amount of stmt copying / unrolling we can perform.
+ Only need to handle read-after-write dependence. */
+ if (DR_IS_READ (drb)
+ && (STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) == 0
+ || STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) > (unsigned)dist))
+ STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) = dist;
continue;
}
diff --git a/gcc-4.8/gcc/tree-vect-generic.c b/gcc-4.8/gcc/tree-vect-generic.c
index b53ccd1c8..2aed6f1fd 100644
--- a/gcc-4.8/gcc/tree-vect-generic.c
+++ b/gcc-4.8/gcc/tree-vect-generic.c
@@ -1006,7 +1006,8 @@ expand_vector_operation (gimple_stmt_iterator *gsi, tree type, tree compute_type
if (!optimize
|| !VECTOR_INTEGER_TYPE_P (type)
- || TREE_CODE (rhs2) != VECTOR_CST)
+ || TREE_CODE (rhs2) != VECTOR_CST
+ || !VECTOR_MODE_P (TYPE_MODE (type)))
break;
ret = expand_vector_divmod (gsi, type, rhs1, rhs2, code);
diff --git a/gcc-4.8/gcc/tree-vect-loop.c b/gcc-4.8/gcc/tree-vect-loop.c
index ce531e137..7daa8c133 100644
--- a/gcc-4.8/gcc/tree-vect-loop.c
+++ b/gcc-4.8/gcc/tree-vect-loop.c
@@ -1537,7 +1537,7 @@ vect_analyze_loop_operations (loop_vec_info loop_vinfo, bool slp)
if (!LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)
|| LOOP_VINFO_INT_NITERS (loop_vinfo) % vectorization_factor != 0
- || LOOP_PEELING_FOR_ALIGNMENT (loop_vinfo))
+ || LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo))
{
if (dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location, "epilog loop required.");
@@ -2097,6 +2097,12 @@ vect_is_simple_reduction_1 (loop_vec_info loop_info, gimple phi,
|| (!check_reduction && flow_loop_nested_p (vect_loop, loop)));
name = PHI_RESULT (phi);
+ /* ??? If there are no uses of the PHI result the inner loop reduction
+ won't be detected as possibly double-reduction by vectorizable_reduction
+ because that tries to walk the PHI arg from the preheader edge which
+ can be constant. See PR60382. */
+ if (has_zero_uses (name))
+ return NULL;
nloop_uses = 0;
FOR_EACH_IMM_USE_FAST (use_p, imm_iter, name)
{
@@ -3115,14 +3121,12 @@ get_initial_def_for_induction (gimple iv_phi)
stmt_vec_info stmt_vinfo = vinfo_for_stmt (iv_phi);
loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
- tree scalar_type;
tree vectype;
int nunits;
edge pe = loop_preheader_edge (loop);
struct loop *iv_loop;
basic_block new_bb;
tree new_vec, vec_init, vec_step, t;
- tree access_fn;
tree new_var;
tree new_name;
gimple init_stmt, induction_phi, new_stmt;
@@ -3130,7 +3134,6 @@ get_initial_def_for_induction (gimple iv_phi)
tree init_expr, step_expr;
int vf = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
int i;
- bool ok;
int ncopies;
tree expr;
stmt_vec_info phi_info = vinfo_for_stmt (iv_phi);
@@ -3159,16 +3162,14 @@ get_initial_def_for_induction (gimple iv_phi)
latch_e = loop_latch_edge (iv_loop);
loop_arg = PHI_ARG_DEF_FROM_EDGE (iv_phi, latch_e);
- access_fn = analyze_scalar_evolution (iv_loop, PHI_RESULT (iv_phi));
- gcc_assert (access_fn);
- STRIP_NOPS (access_fn);
- ok = vect_is_simple_iv_evolution (iv_loop->num, access_fn,
- &init_expr, &step_expr);
- gcc_assert (ok);
+ step_expr = STMT_VINFO_LOOP_PHI_EVOLUTION_PART (phi_info);
+ gcc_assert (step_expr != NULL_TREE);
+
pe = loop_preheader_edge (iv_loop);
+ init_expr = PHI_ARG_DEF_FROM_EDGE (iv_phi,
+ loop_preheader_edge (iv_loop));
- scalar_type = TREE_TYPE (init_expr);
- vectype = get_vectype_for_scalar_type (scalar_type);
+ vectype = get_vectype_for_scalar_type (TREE_TYPE (init_expr));
resvectype = get_vectype_for_scalar_type (TREE_TYPE (PHI_RESULT (iv_phi)));
gcc_assert (vectype);
nunits = TYPE_VECTOR_SUBPARTS (vectype);
@@ -3177,6 +3178,16 @@ get_initial_def_for_induction (gimple iv_phi)
gcc_assert (phi_info);
gcc_assert (ncopies >= 1);
+ /* Convert the step to the desired type. */
+ step_expr = force_gimple_operand (fold_convert (TREE_TYPE (vectype),
+ step_expr),
+ &stmts, true, NULL_TREE);
+ if (stmts)
+ {
+ new_bb = gsi_insert_seq_on_edge_immediate (pe, stmts);
+ gcc_assert (!new_bb);
+ }
+
/* Find the first insertion point in the BB. */
si = gsi_after_labels (bb);
@@ -3186,9 +3197,7 @@ get_initial_def_for_induction (gimple iv_phi)
/* iv_loop is nested in the loop to be vectorized. init_expr had already
been created during vectorization of previous stmts. We obtain it
from the STMT_VINFO_VEC_STMT of the defining stmt. */
- tree iv_def = PHI_ARG_DEF_FROM_EDGE (iv_phi,
- loop_preheader_edge (iv_loop));
- vec_init = vect_get_vec_def_for_operand (iv_def, iv_phi, NULL);
+ vec_init = vect_get_vec_def_for_operand (init_expr, iv_phi, NULL);
/* If the initial value is not of proper type, convert it. */
if (!useless_type_conversion_p (vectype, TREE_TYPE (vec_init)))
{
@@ -3211,8 +3220,11 @@ get_initial_def_for_induction (gimple iv_phi)
/* iv_loop is the loop to be vectorized. Create:
vec_init = [X, X+S, X+2*S, X+3*S] (S = step_expr, X = init_expr) */
- new_var = vect_get_new_vect_var (scalar_type, vect_scalar_var, "var_");
- new_name = force_gimple_operand (init_expr, &stmts, false, new_var);
+ new_var = vect_get_new_vect_var (TREE_TYPE (vectype),
+ vect_scalar_var, "var_");
+ new_name = force_gimple_operand (fold_convert (TREE_TYPE (vectype),
+ init_expr),
+ &stmts, false, new_var);
if (stmts)
{
new_bb = gsi_insert_seq_on_edge_immediate (pe, stmts);
@@ -3224,9 +3236,7 @@ get_initial_def_for_induction (gimple iv_phi)
for (i = 1; i < nunits; i++)
{
/* Create: new_name_i = new_name + step_expr */
- enum tree_code code = POINTER_TYPE_P (scalar_type)
- ? POINTER_PLUS_EXPR : PLUS_EXPR;
- init_stmt = gimple_build_assign_with_ops (code, new_var,
+ init_stmt = gimple_build_assign_with_ops (PLUS_EXPR, new_var,
new_name, step_expr);
new_name = make_ssa_name (new_var, init_stmt);
gimple_assign_set_lhs (init_stmt, new_name);
@@ -3781,8 +3791,12 @@ vect_create_epilog_for_reduction (vec<tree> vect_defs, gimple stmt,
/* Set phi nodes arguments. */
FOR_EACH_VEC_ELT (reduction_phis, i, phi)
{
- tree vec_init_def = vec_initial_defs[i];
- tree def = vect_defs[i];
+ tree vec_init_def, def;
+ gimple_seq stmts;
+ vec_init_def = force_gimple_operand (vec_initial_defs[i], &stmts,
+ true, NULL_TREE);
+ gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts);
+ def = vect_defs[i];
for (j = 0; j < ncopies; j++)
{
/* Set the loop-entry arg of the reduction-phi. */
@@ -5564,7 +5578,8 @@ vect_transform_loop (loop_vec_info loop_vinfo)
&& !STMT_VINFO_LIVE_P (stmt_info))
continue;
- if ((TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info))
+ if (STMT_VINFO_VECTYPE (stmt_info)
+ && (TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info))
!= (unsigned HOST_WIDE_INT) vectorization_factor)
&& dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location, "multiple-types.");
diff --git a/gcc-4.8/gcc/tree-vect-stmts.c b/gcc-4.8/gcc/tree-vect-stmts.c
index 6f3de12c1..361c312d8 100644
--- a/gcc-4.8/gcc/tree-vect-stmts.c
+++ b/gcc-4.8/gcc/tree-vect-stmts.c
@@ -4369,6 +4369,20 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
return false;
}
+ /* Invalidate assumptions made by dependence analysis when vectorization
+ on the unrolled body effectively re-orders stmts. */
+ if (ncopies > 1
+ && STMT_VINFO_MIN_NEG_DIST (stmt_info) != 0
+ && ((unsigned)LOOP_VINFO_VECT_FACTOR (loop_vinfo)
+ > STMT_VINFO_MIN_NEG_DIST (stmt_info)))
+ {
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ "cannot perform implicit CSE when unrolling "
+ "with negative dependence distance\n");
+ return false;
+ }
+
if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo)
return false;
@@ -4425,6 +4439,20 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
else if (!vect_grouped_load_supported (vectype, group_size))
return false;
}
+
+ /* Invalidate assumptions made by dependence analysis when vectorization
+ on the unrolled body effectively re-orders stmts. */
+ if (!PURE_SLP_STMT (stmt_info)
+ && STMT_VINFO_MIN_NEG_DIST (stmt_info) != 0
+ && ((unsigned)LOOP_VINFO_VECT_FACTOR (loop_vinfo)
+ > STMT_VINFO_MIN_NEG_DIST (stmt_info)))
+ {
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ "cannot perform implicit CSE when performing "
+ "group loads with negative dependence distance\n");
+ return false;
+ }
}
@@ -6054,8 +6082,7 @@ get_vectype_for_scalar_type_and_size (tree scalar_type, unsigned size)
corresponding to that mode. The theory is that any use that
would cause problems with this will disable vectorization anyway. */
else if (!SCALAR_FLOAT_TYPE_P (scalar_type)
- && !INTEGRAL_TYPE_P (scalar_type)
- && !POINTER_TYPE_P (scalar_type))
+ && !INTEGRAL_TYPE_P (scalar_type))
scalar_type = lang_hooks.types.type_for_mode (inner_mode, 1);
/* We can't build a vector type of elements with alignment bigger than
diff --git a/gcc-4.8/gcc/tree-vectorizer.h b/gcc-4.8/gcc/tree-vectorizer.h
index f2ec7135a..e4ef9934c 100644
--- a/gcc-4.8/gcc/tree-vectorizer.h
+++ b/gcc-4.8/gcc/tree-vectorizer.h
@@ -542,6 +542,10 @@ typedef struct _stmt_vec_info {
is 1. */
unsigned int gap;
+ /* The minimum negative dependence distance this stmt participates in
+ or zero if none. */
+ unsigned int min_neg_dist;
+
/* Not all stmts in the loop need to be vectorized. e.g, the increment
of the loop induction variable and computation of array indexes. relevant
indicates whether the stmt needs to be vectorized. */
@@ -593,6 +597,7 @@ typedef struct _stmt_vec_info {
#define STMT_VINFO_GROUP_READ_WRITE_DEPENDENCE(S) (S)->read_write_dep
#define STMT_VINFO_GROUPED_ACCESS(S) ((S)->first_element != NULL && (S)->data_ref_info)
#define STMT_VINFO_LOOP_PHI_EVOLUTION_PART(S) (S)->loop_phi_evolution_part
+#define STMT_VINFO_MIN_NEG_DIST(S) (S)->min_neg_dist
#define GROUP_FIRST_ELEMENT(S) (S)->first_element
#define GROUP_NEXT_ELEMENT(S) (S)->next_element
diff --git a/gcc-4.8/gcc/tree-vrp.c b/gcc-4.8/gcc/tree-vrp.c
index a8caed603..96a439a9b 100644
--- a/gcc-4.8/gcc/tree-vrp.c
+++ b/gcc-4.8/gcc/tree-vrp.c
@@ -5271,9 +5271,13 @@ register_edge_assert_for_1 (tree op, enum tree_code code,
}
else if (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (op_def)))
{
- /* Recurse through the type conversion. */
- retval |= register_edge_assert_for_1 (gimple_assign_rhs1 (op_def),
- code, e, bsi);
+ /* Recurse through the type conversion, unless it is a narrowing
+ conversion or conversion from non-integral type. */
+ tree rhs = gimple_assign_rhs1 (op_def);
+ if (INTEGRAL_TYPE_P (TREE_TYPE (rhs))
+ && (TYPE_PRECISION (TREE_TYPE (rhs))
+ <= TYPE_PRECISION (TREE_TYPE (op))))
+ retval |= register_edge_assert_for_1 (rhs, code, e, bsi);
}
return retval;
@@ -7453,7 +7457,8 @@ union_ranges (enum value_range_type *vr0type,
}
else if ((operand_less_p (vr1min, *vr0max) == 1
|| operand_equal_p (vr1min, *vr0max, 0))
- && operand_less_p (*vr0min, vr1min) == 1)
+ && operand_less_p (*vr0min, vr1min) == 1
+ && operand_less_p (*vr0max, vr1max) == 1)
{
/* [ ( ] ) or [ ]( ) */
if (*vr0type == VR_RANGE
@@ -7487,7 +7492,8 @@ union_ranges (enum value_range_type *vr0type,
}
else if ((operand_less_p (*vr0min, vr1max) == 1
|| operand_equal_p (*vr0min, vr1max, 0))
- && operand_less_p (vr1min, *vr0min) == 1)
+ && operand_less_p (vr1min, *vr0min) == 1
+ && operand_less_p (vr1max, *vr0max) == 1)
{
/* ( [ ) ] or ( )[ ] */
if (*vr0type == VR_RANGE
diff --git a/gcc-4.8/gcc/tree.c b/gcc-4.8/gcc/tree.c
index 9c4ddfe50..6d272d095 100644
--- a/gcc-4.8/gcc/tree.c
+++ b/gcc-4.8/gcc/tree.c
@@ -1619,6 +1619,60 @@ build_one_cst (tree type)
}
}
+/* Return an integer of type TYPE containing all 1's in as much precision as
+ it contains, or a complex or vector whose subparts are such integers. */
+
+tree
+build_all_ones_cst (tree type)
+{
+ if (TREE_CODE (type) == COMPLEX_TYPE)
+ {
+ tree scalar = build_all_ones_cst (TREE_TYPE (type));
+ return build_complex (type, scalar, scalar);
+ }
+ else
+ return build_minus_one_cst (type);
+}
+
+/* Return a constant of arithmetic type TYPE which is the
+ opposite of the multiplicative identity of the set TYPE. */
+
+tree
+build_minus_one_cst (tree type)
+{
+ switch (TREE_CODE (type))
+ {
+ case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
+ case POINTER_TYPE: case REFERENCE_TYPE:
+ case OFFSET_TYPE:
+ return build_int_cst (type, -1);
+
+ case REAL_TYPE:
+ return build_real (type, dconstm1);
+
+ case FIXED_POINT_TYPE:
+ /* We can only generate 1 for accum types. */
+ gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
+ return build_fixed (type, fixed_from_double_int (double_int_minus_one,
+ TYPE_MODE (type)));
+
+ case VECTOR_TYPE:
+ {
+ tree scalar = build_minus_one_cst (TREE_TYPE (type));
+
+ return build_vector_from_val (type, scalar);
+ }
+
+ case COMPLEX_TYPE:
+ return build_complex (type,
+ build_minus_one_cst (TREE_TYPE (type)),
+ build_zero_cst (TREE_TYPE (type)));
+
+ default:
+ gcc_unreachable ();
+ }
+}
+
/* Build 0 constant of type TYPE. This is used by constructor folding
and thus the constant should be represented in memory by
zero(es). */
diff --git a/gcc-4.8/gcc/tree.h b/gcc-4.8/gcc/tree.h
index d6414faf1..33d8c5d8b 100644
--- a/gcc-4.8/gcc/tree.h
+++ b/gcc-4.8/gcc/tree.h
@@ -3589,7 +3589,7 @@ struct GTY(()) tree_optimization_option {
/* Target optabs for this set of optimization options. This is of
type `struct target_optabs *'. */
- unsigned char *GTY ((atomic)) optabs;
+ void *GTY ((atomic)) optabs;
/* The value of this_target_optabs against which the optabs above were
generated. */
@@ -4760,6 +4760,8 @@ extern tree build_constructor_from_list (tree, tree);
extern tree build_real_from_int_cst (tree, const_tree);
extern tree build_complex (tree, tree, tree);
extern tree build_one_cst (tree);
+extern tree build_minus_one_cst (tree);
+extern tree build_all_ones_cst (tree);
extern tree build_zero_cst (tree);
extern tree build_string (int, const char *);
extern tree build_tree_list_stat (tree, tree MEM_STAT_DECL);
@@ -5854,6 +5856,7 @@ extern tree fold_call_expr (location_t, tree, bool);
extern tree fold_builtin_fputs (location_t, tree, tree, bool, bool, tree);
extern tree fold_builtin_strcpy (location_t, tree, tree, tree, tree);
extern tree fold_builtin_strncpy (location_t, tree, tree, tree, tree, tree);
+extern tree fold_builtin_strcat (location_t, tree, tree, tree);
extern tree fold_builtin_memory_chk (location_t, tree, tree, tree, tree, tree, tree, bool,
enum built_in_function);
extern tree fold_builtin_stxcpy_chk (location_t, tree, tree, tree, tree, tree, bool,
@@ -6545,4 +6548,18 @@ builtin_decl_implicit_p (enum built_in_function fncode)
&& builtin_info.implicit_p[uns_fncode]);
}
+/* Return pointer to optimization flags of FNDECL. */
+static inline struct cl_optimization *
+opts_for_fn (const_tree fndecl)
+{
+ tree fn_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (fndecl);
+ if (fn_opts == NULL_TREE)
+ fn_opts = optimization_default_node;
+ return TREE_OPTIMIZATION (fn_opts);
+}
+
+/* opt flag for function FNDECL, e.g. opts_for_fn (fndecl, optimize) is
+ the optimization level of function fndecl. */
+#define opt_for_fn(fndecl, opt) (opts_for_fn (fndecl)->x_##opt)
+
#endif /* GCC_TREE_H */
diff --git a/gcc-4.8/gcc/value-prof.c b/gcc-4.8/gcc/value-prof.c
index c120c82ad..c319d3464 100644
--- a/gcc-4.8/gcc/value-prof.c
+++ b/gcc-4.8/gcc/value-prof.c
@@ -1270,8 +1270,7 @@ gimple_ic (gimple icall_stmt, struct cgraph_node *direct_call,
/* Build an EH edge for the direct call if necessary. */
lp_nr = lookup_stmt_eh_lp (icall_stmt);
- if (lp_nr != 0
- && stmt_could_throw_p (dcall_stmt))
+ if (lp_nr > 0 && stmt_could_throw_p (dcall_stmt))
{
edge e_eh, e;
edge_iterator ei;
diff --git a/gcc-4.8/gnattools/ChangeLog b/gcc-4.8/gnattools/ChangeLog
index 9d32bb0f5..82a8a0304 100644
--- a/gcc-4.8/gnattools/ChangeLog
+++ b/gcc-4.8/gnattools/ChangeLog
@@ -1,3 +1,27 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2013-12-12 Eric Botcazou <ebotcazou@adacore.com>
+ Iain Sandoe <iain@codesourcery.com>
+
+ PR ada/55946
+ * Makefile.in (host): Define.
+ (host_alias): Likewise.
+ (TOOLS_FLAGS_TO_PASS_RE): Add LDFLAGS.
+ (GNATMAKE_FOR_HOST): Define.
+ (GNATLINK_FOR_HOST): Likewise.
+ (GNATBIND_FOR_HOST): Likewise.
+ (GNATLS_FOR_HOST): Likewise.
+ (RTS_DIR): Move around and use GNATLS_FOR_HOST.
+ (TOOLS_FLAGS_TO_PASS_CROSS): Use the other *_HOST variables.
+
+2013-12-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR ada/59382
+ * configure.ac (target parameterization): Rewrite.
+ * configure: Regenerate.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/gnattools/Makefile.in b/gcc-4.8/gnattools/Makefile.in
index 794d374e7..7d590e5f6 100644
--- a/gcc-4.8/gnattools/Makefile.in
+++ b/gcc-4.8/gnattools/Makefile.in
@@ -24,6 +24,8 @@ srcdir = @srcdir@
libdir = @libdir@
build = @build@
target = @target@
+host = @host@
+host_alias = @host_alias@
prefix = @prefix@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -84,6 +86,7 @@ TOOLS_FLAGS_TO_PASS_NATIVE= \
TOOLS_FLAGS_TO_PASS_RE= \
"CC=../../xgcc -B../../" \
"CFLAGS=$(CFLAGS)" \
+ "LDFLAGS=$(LDFLAGS)" \
"ADAFLAGS=$(ADAFLAGS)" \
"ADA_CFLAGS=$(ADA_CFLAGS)" \
"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
@@ -97,6 +100,22 @@ TOOLS_FLAGS_TO_PASS_RE= \
"TOOLSCASE=cross"
# Variables for gnattools, cross
+ifeq ($(build), $(host))
+ GNATMAKE_FOR_HOST=gnatmake
+ GNATLINK_FOR_HOST=gnatlink
+ GNATBIND_FOR_HOST=gnatbind
+ GNATLS_FOR_HOST=gnatls
+else
+ GNATMAKE_FOR_HOST=$(host_alias)-gnatmake
+ GNATLINK_FOR_HOST=$(host_alias)-gnatlink
+ GNATBIND_FOR_HOST=$(host_alias)-gnatbind
+ GNATLS_FOR_HOST=$(host_alias)-gnatls
+endif
+
+# Put the host RTS dir first in the PATH to hide the default runtime
+# files that are among the sources
+RTS_DIR:=$(strip $(subst \,/,$(shell $(GNATLS_FOR_HOST) -v | grep adalib )))
+
TOOLS_FLAGS_TO_PASS_CROSS= \
"CC=$(CC)" \
"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
@@ -108,9 +127,9 @@ TOOLS_FLAGS_TO_PASS_CROSS= \
"exeext=$(exeext)" \
"fsrcdir=$(fsrcdir)" \
"srcdir=$(fsrcdir)" \
- "GNATMAKE=gnatmake" \
- "GNATLINK=gnatlink" \
- "GNATBIND=gnatbind" \
+ "GNATMAKE=$(GNATMAKE_FOR_HOST)" \
+ "GNATLINK=$(GNATLINK_FOR_HOST)" \
+ "GNATBIND=$(GNATBIND_FOR_HOST)" \
"TOOLSCASE=cross" \
"LIBGNAT="
@@ -179,11 +198,6 @@ regnattools: $(GCC_DIR)/stamp-gnatlib-rts
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
$(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
-# For cross builds of gnattools,
-# put the host RTS dir first in the PATH to hide the default runtime
-# files that are among the sources
-# FIXME: This should be done in configure.
-RTS_DIR:=$(strip $(subst \,/,$(shell gnatls -v | grep adalib )))
gnattools-cross: $(GCC_DIR)/stamp-tools
# gnattools1-re
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
diff --git a/gcc-4.8/gnattools/configure b/gcc-4.8/gnattools/configure
index 54a2be6c2..883b705f6 100755
--- a/gcc-4.8/gnattools/configure
+++ b/gcc-4.8/gnattools/configure
@@ -2029,66 +2029,59 @@ EXTRA_GNATTOOLS=
# Per-target case statement
# -------------------------
case "${target}" in
- alpha*-dec-vx*) # Unlike all other Vxworks
- ;;
- m68k*-wrs-vx* \
- | powerpc*-wrs-vxworks \
- | sparc*-wrs-vx* \
- | *86-wrs-vxworks \
- | mips*-wrs-vx*)
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
+ *-*-aix*)
+ TOOLS_TARGET_PAIRS="\
+ mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
+ indepsw.adb<indepsw-aix.adb"
;;
- sparc-sun-solaris*)
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
+ *-*-darwin*)
+ TOOLS_TARGET_PAIRS="\
+ mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
+ indepsw.adb<indepsw-darwin.adb"
;;
- *86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
+ *-*-freebsd*)
+ TOOLS_TARGET_PAIRS="\
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
+ indepsw.adb<indepsw-gnu.adb"
;;
- *86-*-linux* \
- | powerpc*-*-linux* \
- | *ia64-*-linux* \
- | alpha*-*-linux* \
- | sparc*-*-linux* \
- | hppa*-*-linux* \
- | *x86_64-*-linux*)
+ *-*-linux*)
TOOLS_TARGET_PAIRS="\
mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
indepsw.adb<indepsw-gnu.adb"
;;
- s390*-*-linux*)
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
+ *-*-lynxos*)
+ TOOLS_TARGET_PAIRS="\
+ mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
+ indepsw.adb<indepsw-gnu.adb"
+ ;;
+ *-*-solaris*)
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
;;
- *86-*-freebsd*)
+ *-*-vxworks*)
TOOLS_TARGET_PAIRS="\
- mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
+ mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb \
indepsw.adb<indepsw-gnu.adb"
;;
- hppa*-hp-hpux10*) # Unlike hpux11
+ hppa*-hp-hpux10*)
;;
hppa*-hp-hpux11*)
TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
;;
- *-ibm-aix*)
- TOOLS_TARGET_PAIRS="\
- mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
- indepsw.adb<indepsw-aix.adb"
+ ia64-hp-hpux11*)
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-ia64-hpux.adb"
;;
- alpha*-dec-vms* | alpha*-dec-openvms* | alpha*-dec-vms* \
- | alpha*-hp-vms* | alpha*-hp-openvms* | alpha*-hp-vms*)
+ alpha*-*-vms* | alpha*-*-openvms*)
TOOLS_TARGET_PAIRS="\
mlib-tgt-specific.adb<mlib-tgt-specific-vms-alpha.adb \
symbols.adb<symbols-vms.adb \
symbols-processing.adb<symbols-processing-vms-alpha.adb"
-
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
;;
- ia64*-dec-vms* | ia64*-dec-openvms* | ia64*-dec-vms* \
- | ia64*-hp-vms* | ia64*-hp-openvms* | ia64*-hp-vms*)
+ ia64-*-vms* | ia64-*-openvms*)
TOOLS_TARGET_PAIRS="\
mlib-tgt-specific.adb<mlib-tgt-specific-vms-ia64.adb \
symbols.adb<symbols-vms.adb \
symbols-processing.adb<symbols-processing-vms-ia64.adb"
-
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
;;
*-*-cygwin32* | *-*-mingw32* | *-*-pe)
@@ -2097,14 +2090,6 @@ case "${target}" in
indepsw.adb<indepsw-mingw.adb"
EXTRA_GNATTOOLS='../../gnatdll$(exeext)'
;;
- *-*-darwin*)
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
- ;;
- *-*-lynxos)
- TOOLS_TARGET_PAIRS="\
- mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
- indepsw.adb<indepsw-gnu.adb"
- ;;
esac
# From user or toplevel makefile.
diff --git a/gcc-4.8/gnattools/configure.ac b/gcc-4.8/gnattools/configure.ac
index 4305e6bd5..5edaadfcf 100644
--- a/gcc-4.8/gnattools/configure.ac
+++ b/gcc-4.8/gnattools/configure.ac
@@ -69,66 +69,59 @@ AC_SUBST(EXTRA_GNATTOOLS)
# Per-target case statement
# -------------------------
case "${target}" in
- alpha*-dec-vx*) # Unlike all other Vxworks
- ;;
- m68k*-wrs-vx* \
- | powerpc*-wrs-vxworks \
- | sparc*-wrs-vx* \
- | *86-wrs-vxworks \
- | mips*-wrs-vx*)
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
+ *-*-aix*)
+ TOOLS_TARGET_PAIRS="\
+ mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
+ indepsw.adb<indepsw-aix.adb"
;;
- sparc-sun-solaris*)
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
+ *-*-darwin*)
+ TOOLS_TARGET_PAIRS="\
+ mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
+ indepsw.adb<indepsw-darwin.adb"
;;
- *86-*-solaris2* | x86_64-*-solaris2.1[[0-9]]*)
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
+ *-*-freebsd*)
+ TOOLS_TARGET_PAIRS="\
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
+ indepsw.adb<indepsw-gnu.adb"
;;
- *86-*-linux* \
- | powerpc*-*-linux* \
- | *ia64-*-linux* \
- | alpha*-*-linux* \
- | sparc*-*-linux* \
- | hppa*-*-linux* \
- | *x86_64-*-linux*)
+ *-*-linux*)
TOOLS_TARGET_PAIRS="\
mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
indepsw.adb<indepsw-gnu.adb"
;;
- s390*-*-linux*)
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
+ *-*-lynxos*)
+ TOOLS_TARGET_PAIRS="\
+ mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
+ indepsw.adb<indepsw-gnu.adb"
+ ;;
+ *-*-solaris*)
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
;;
- *86-*-freebsd*)
+ *-*-vxworks*)
TOOLS_TARGET_PAIRS="\
- mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
+ mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb \
indepsw.adb<indepsw-gnu.adb"
;;
- hppa*-hp-hpux10*) # Unlike hpux11
+ hppa*-hp-hpux10*)
;;
hppa*-hp-hpux11*)
TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
;;
- *-ibm-aix*)
- TOOLS_TARGET_PAIRS="\
- mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
- indepsw.adb<indepsw-aix.adb"
+ ia64-hp-hpux11*)
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-ia64-hpux.adb"
;;
- alpha*-dec-vms* | alpha*-dec-openvms* | alpha*-dec-vms* \
- | alpha*-hp-vms* | alpha*-hp-openvms* | alpha*-hp-vms*)
+ alpha*-*-vms* | alpha*-*-openvms*)
TOOLS_TARGET_PAIRS="\
mlib-tgt-specific.adb<mlib-tgt-specific-vms-alpha.adb \
symbols.adb<symbols-vms.adb \
symbols-processing.adb<symbols-processing-vms-alpha.adb"
-
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
;;
- ia64*-dec-vms* | ia64*-dec-openvms* | ia64*-dec-vms* \
- | ia64*-hp-vms* | ia64*-hp-openvms* | ia64*-hp-vms*)
+ ia64-*-vms* | ia64-*-openvms*)
TOOLS_TARGET_PAIRS="\
mlib-tgt-specific.adb<mlib-tgt-specific-vms-ia64.adb \
symbols.adb<symbols-vms.adb \
symbols-processing.adb<symbols-processing-vms-ia64.adb"
-
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
;;
*-*-cygwin32* | *-*-mingw32* | *-*-pe)
@@ -137,14 +130,6 @@ case "${target}" in
indepsw.adb<indepsw-mingw.adb"
EXTRA_GNATTOOLS='../../gnatdll$(exeext)'
;;
- *-*-darwin*)
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
- ;;
- *-*-lynxos)
- TOOLS_TARGET_PAIRS="\
- mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
- indepsw.adb<indepsw-gnu.adb"
- ;;
esac
# From user or toplevel makefile.
diff --git a/gcc-4.8/include/ChangeLog b/gcc-4.8/include/ChangeLog
index e854fd3d0..87119a0e8 100644
--- a/gcc-4.8/include/ChangeLog
+++ b/gcc-4.8/include/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/intl/ChangeLog b/gcc-4.8/intl/ChangeLog
index 2a0c54724..6ff04d244 100644
--- a/gcc-4.8/intl/ChangeLog
+++ b/gcc-4.8/intl/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libada/ChangeLog b/gcc-4.8/libada/ChangeLog
index 5ea5f1cd9..5ecdfc92d 100644
--- a/gcc-4.8/libada/ChangeLog
+++ b/gcc-4.8/libada/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libatomic/ChangeLog b/gcc-4.8/libatomic/ChangeLog
index b4492695b..82a336217 100644
--- a/gcc-4.8/libatomic/ChangeLog
+++ b/gcc-4.8/libatomic/ChangeLog
@@ -1,3 +1,20 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * configure: Regenerate.
+
+2014-02-20 Richard Henderson <rth@redhat.com>
+
+ PR c++/60272
+ * cas_n.c (libat_compare_exchange): Conditionalize on failure
+ the store back to EPTR.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libatomic/cas_n.c b/gcc-4.8/libatomic/cas_n.c
index a47026838..857c5563f 100644
--- a/gcc-4.8/libatomic/cas_n.c
+++ b/gcc-4.8/libatomic/cas_n.c
@@ -51,10 +51,9 @@ SIZE(libat_compare_exchange) (UTYPE *mptr, UTYPE *eptr, UTYPE newval,
#if !DONE && N <= WORDSIZE && defined(atomic_compare_exchange_w)
bool
SIZE(libat_compare_exchange) (UTYPE *mptr, UTYPE *eptr, UTYPE newval,
- int smodel, int fmodel UNUSED)
+ int smodel, int fmodel)
{
UWORD mask, shift, weval, woldval, wnewval, t, *wptr;
- bool ret = false;
pre_barrier (smodel);
@@ -82,12 +81,13 @@ SIZE(libat_compare_exchange) (UTYPE *mptr, UTYPE *eptr, UTYPE newval,
}
while (!atomic_compare_exchange_w (wptr, &woldval, t, true,
__ATOMIC_RELAXED, __ATOMIC_RELAXED));
- ret = true;
+ post_barrier (smodel);
+ return true;
+
failure:
*eptr = woldval >> shift;
-
- post_barrier (smodel);
- return ret;
+ post_barrier (fmodel);
+ return false;
}
#define DONE 1
@@ -102,17 +102,16 @@ SIZE(libat_compare_exchange) (UTYPE *mptr, UTYPE *eptr, UTYPE newval,
{
UTYPE oldval;
UWORD magic;
- bool ret = false;
+ bool ret;
pre_seq_barrier (smodel);
magic = protect_start (mptr);
oldval = *mptr;
- if (oldval == *eptr)
- {
+ ret = (oldval == *eptr);
+ if (ret)
*mptr = newval;
- ret = true;
- }
+ else
*eptr = oldval;
protect_end (mptr, magic);
diff --git a/gcc-4.8/libatomic/configure b/gcc-4.8/libatomic/configure
index a9dfa03bb..6a27ebdad 100755
--- a/gcc-4.8/libatomic/configure
+++ b/gcc-4.8/libatomic/configure
@@ -6505,7 +6505,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -6530,7 +6530,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -6549,7 +6552,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -11013,7 +11019,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11016 "configure"
+#line 11022 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11119,7 +11125,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11122 "configure"
+#line 11128 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/gcc-4.8/libbacktrace/ChangeLog b/gcc-4.8/libbacktrace/ChangeLog
index 5046ccbe1..ec6bcf406 100644
--- a/gcc-4.8/libbacktrace/ChangeLog
+++ b/gcc-4.8/libbacktrace/ChangeLog
@@ -1,3 +1,39 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * configure: Regenerate.
+
+2014-02-07 Misty De Meo <misty@brew.sh>
+
+ PR target/58710
+ * configure.ac: Use AC_LINK_IFELSE in check for
+ _Unwind_GetIPInfo.
+ * configure: Regenerate.
+
+2013-12-05 Ian Lance Taylor <iant@google.com>
+
+ * alloc.c (backtrace_vector_finish): Add error_callback and data
+ parameters. Call backtrace_vector_release. Return address base.
+ * mmap.c (backtrace_vector_finish): Add error_callback and data
+ parameters. Return address base.
+ * dwarf.c (read_function_info): Get new address base from
+ backtrace_vector_finish.
+ * internal.h (backtrace_vector_finish): Update declaration.
+
+2013-11-30 Ian Lance Taylor <iant@google.com>
+
+ Backport from mainline:
+ 2013-10-17 Ian Lance Taylor <iant@google.com>
+
+ * elf.c (elf_add): Don't get the wrong offsets if a debug section
+ is missing.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libbacktrace/Makefile.in b/gcc-4.8/libbacktrace/Makefile.in
index 971406bf6..eff3ba974 100644
--- a/gcc-4.8/libbacktrace/Makefile.in
+++ b/gcc-4.8/libbacktrace/Makefile.in
@@ -16,7 +16,7 @@
@SET_MAKE@
# Makefile.am -- Backtrace Makefile.
-# Copyright (C) 2012 Free Software Foundation, Inc.
+# Copyright (C) 2012-2013 Free Software Foundation, Inc.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
diff --git a/gcc-4.8/libbacktrace/alloc.c b/gcc-4.8/libbacktrace/alloc.c
index d07967377..b2c31fabc 100644
--- a/gcc-4.8/libbacktrace/alloc.c
+++ b/gcc-4.8/libbacktrace/alloc.c
@@ -113,12 +113,24 @@ backtrace_vector_grow (struct backtrace_state *state ATTRIBUTE_UNUSED,
/* Finish the current allocation on VEC. */
-void
-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
- struct backtrace_vector *vec)
+void *
+backtrace_vector_finish (struct backtrace_state *state,
+ struct backtrace_vector *vec,
+ backtrace_error_callback error_callback,
+ void *data)
{
- vec->base = (char *) vec->base + vec->size;
+ void *ret;
+
+ /* With this allocator we call realloc in backtrace_vector_grow,
+ which means we can't easily reuse the memory here. So just
+ release it. */
+ if (!backtrace_vector_release (state, vec, error_callback, data))
+ return NULL;
+ ret = vec->base;
+ vec->base = NULL;
vec->size = 0;
+ vec->alc = 0;
+ return ret;
}
/* Release any extra space allocated for VEC. */
diff --git a/gcc-4.8/libbacktrace/configure b/gcc-4.8/libbacktrace/configure
index 46ad9eec9..737f83005 100755
--- a/gcc-4.8/libbacktrace/configure
+++ b/gcc-4.8/libbacktrace/configure
@@ -6842,7 +6842,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -6867,7 +6867,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -6886,7 +6889,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -11081,7 +11087,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11084 "configure"
+#line 11090 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11187,7 +11193,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11190 "configure"
+#line 11196 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11667,12 +11673,13 @@ return _Unwind_GetIPInfo (context, &ip_before_insn);
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"; then :
have_unwind_getipinfo=yes
else
have_unwind_getipinfo=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
CFLAGS="$ac_save_CFLAGS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_unwind_getipinfo" >&5
$as_echo "$have_unwind_getipinfo" >&6; }
diff --git a/gcc-4.8/libbacktrace/configure.ac b/gcc-4.8/libbacktrace/configure.ac
index 28b2a1cd5..e0e0e0888 100644
--- a/gcc-4.8/libbacktrace/configure.ac
+++ b/gcc-4.8/libbacktrace/configure.ac
@@ -144,7 +144,7 @@ else
ac_save_CFFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
AC_MSG_CHECKING([for _Unwind_GetIPInfo])
- AC_COMPILE_IFELSE(
+ AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[#include "unwind.h"
struct _Unwind_Context *context;
diff --git a/gcc-4.8/libbacktrace/dwarf.c b/gcc-4.8/libbacktrace/dwarf.c
index 501afe553..c75c917bd 100644
--- a/gcc-4.8/libbacktrace/dwarf.c
+++ b/gcc-4.8/libbacktrace/dwarf.c
@@ -2507,19 +2507,23 @@ read_function_info (struct backtrace_state *state, struct dwarf_data *ddata,
if (pfvec->count == 0)
return;
- addrs = (struct function_addrs *) pfvec->vec.base;
addrs_count = pfvec->count;
if (fvec == NULL)
{
if (!backtrace_vector_release (state, &lvec.vec, error_callback, data))
return;
+ addrs = (struct function_addrs *) pfvec->vec.base;
}
else
{
/* Finish this list of addresses, but leave the remaining space in
the vector available for the next function unit. */
- backtrace_vector_finish (state, &fvec->vec);
+ addrs = ((struct function_addrs *)
+ backtrace_vector_finish (state, &fvec->vec,
+ error_callback, data));
+ if (addrs == NULL)
+ return;
fvec->count = 0;
}
diff --git a/gcc-4.8/libbacktrace/elf.c b/gcc-4.8/libbacktrace/elf.c
index ef9bcdfb4..9d2dfd3fe 100644
--- a/gcc-4.8/libbacktrace/elf.c
+++ b/gcc-4.8/libbacktrace/elf.c
@@ -725,6 +725,8 @@ elf_add (struct backtrace_state *state, int descriptor, uintptr_t base_address,
{
off_t end;
+ if (sections[i].size == 0)
+ continue;
if (min_offset == 0 || sections[i].offset < min_offset)
min_offset = sections[i].offset;
end = sections[i].offset + sections[i].size;
@@ -751,8 +753,13 @@ elf_add (struct backtrace_state *state, int descriptor, uintptr_t base_address,
descriptor = -1;
for (i = 0; i < (int) DEBUG_MAX; ++i)
+ {
+ if (sections[i].size == 0)
+ sections[i].data = NULL;
+ else
sections[i].data = ((const unsigned char *) debug_view.data
+ (sections[i].offset - min_offset));
+ }
if (!backtrace_dwarf_add (state, base_address,
sections[DEBUG_INFO].data,
diff --git a/gcc-4.8/libbacktrace/internal.h b/gcc-4.8/libbacktrace/internal.h
index 1ea664a0b..ef9a2fed4 100644
--- a/gcc-4.8/libbacktrace/internal.h
+++ b/gcc-4.8/libbacktrace/internal.h
@@ -192,13 +192,17 @@ extern void *backtrace_vector_grow (struct backtrace_state *state, size_t size,
struct backtrace_vector *vec);
/* Finish the current allocation on VEC. Prepare to start a new
- allocation. The finished allocation will never be freed. */
+ allocation. The finished allocation will never be freed. Returns
+ a pointer to the base of the finished entries, or NULL on
+ failure. */
-extern void backtrace_vector_finish (struct backtrace_state *state,
- struct backtrace_vector *vec);
+extern void* backtrace_vector_finish (struct backtrace_state *state,
+ struct backtrace_vector *vec,
+ backtrace_error_callback error_callback,
+ void *data);
-/* Release any extra space allocated for VEC. Returns 1 on success, 0
- on failure. */
+/* Release any extra space allocated for VEC. This may change
+ VEC->base. Returns 1 on success, 0 on failure. */
extern int backtrace_vector_release (struct backtrace_state *state,
struct backtrace_vector *vec,
diff --git a/gcc-4.8/libbacktrace/mmap.c b/gcc-4.8/libbacktrace/mmap.c
index 04aae85e5..dc94b29a3 100644
--- a/gcc-4.8/libbacktrace/mmap.c
+++ b/gcc-4.8/libbacktrace/mmap.c
@@ -230,12 +230,19 @@ backtrace_vector_grow (struct backtrace_state *state,size_t size,
/* Finish the current allocation on VEC. */
-void
-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
- struct backtrace_vector *vec)
+void *
+backtrace_vector_finish (
+ struct backtrace_state *state ATTRIBUTE_UNUSED,
+ struct backtrace_vector *vec,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data ATTRIBUTE_UNUSED)
{
+ void *ret;
+
+ ret = vec->base;
vec->base = (char *) vec->base + vec->size;
vec->size = 0;
+ return ret;
}
/* Release any extra space allocated for VEC. */
diff --git a/gcc-4.8/libcpp/ChangeLog b/gcc-4.8/libcpp/ChangeLog
index c50f73cc1..de755ce75 100644
--- a/gcc-4.8/libcpp/ChangeLog
+++ b/gcc-4.8/libcpp/ChangeLog
@@ -1,3 +1,40 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-18 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * lex.c (search_line_fast): Correct for little endian.
+
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
+
+ Backport from mainline
+ 2014-02-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR preprocessor/58844
+ * macro.c (enter_macro_context): Only push
+ macro_real_token_count (macro) tokens rather than
+ macro->count tokens, regardless of
+ CPP_OPTION (pfile, track-macro-expansion).
+
+ 2014-02-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR preprocessor/56824
+ * line-map.c (linemap_compare_locations): Look through adhoc locations
+ for both l0 and l1.
+
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR preprocessor/60400
+ Backport from mainline
+ 2013-06-24 Dehao Chen <dehao@google.com>
+
+ * files.c (_cpp_stack_include): Fix the highest_location when header
+ file is guarded by #ifndef and is included twice.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libcpp/files.c b/gcc-4.8/libcpp/files.c
index 5c5a0b9b5..ea91b0204 100644
--- a/gcc-4.8/libcpp/files.c
+++ b/gcc-4.8/libcpp/files.c
@@ -983,6 +983,7 @@ _cpp_stack_include (cpp_reader *pfile, const char *fname, int angle_brackets,
{
struct cpp_dir *dir;
_cpp_file *file;
+ bool stacked;
dir = search_path_head (pfile, fname, angle_brackets, type);
if (!dir)
@@ -993,19 +994,26 @@ _cpp_stack_include (cpp_reader *pfile, const char *fname, int angle_brackets,
if (type == IT_DEFAULT && file == NULL)
return false;
- /* Compensate for the increment in linemap_add that occurs in
- _cpp_stack_file. In the case of a normal #include, we're
- currently at the start of the line *following* the #include. A
- separate source_location for this location makes no sense (until
- we do the LC_LEAVE), and complicates LAST_SOURCE_LINE_LOCATION.
- This does not apply if we found a PCH file (in which case
- linemap_add is not called) or we were included from the
- command-line. */
+ /* Compensate for the increment in linemap_add that occurs if
+ _cpp_stack_file actually stacks the file. In the case of a
+ normal #include, we're currently at the start of the line
+ *following* the #include. A separate source_location for this
+ location makes no sense (until we do the LC_LEAVE), and
+ complicates LAST_SOURCE_LINE_LOCATION. This does not apply if we
+ found a PCH file (in which case linemap_add is not called) or we
+ were included from the command-line. */
if (file->pchname == NULL && file->err_no == 0
&& type != IT_CMDLINE && type != IT_DEFAULT)
pfile->line_table->highest_location--;
- return _cpp_stack_file (pfile, file, type == IT_IMPORT);
+ stacked = _cpp_stack_file (pfile, file, type == IT_IMPORT);
+
+ if (!stacked)
+ /* _cpp_stack_file didn't stack the file, so let's rollback the
+ compensation dance we performed above. */
+ pfile->line_table->highest_location++;
+
+ return stacked;
}
/* Could not open FILE. The complication is dependency output. */
diff --git a/gcc-4.8/libcpp/lex.c b/gcc-4.8/libcpp/lex.c
index 570c00733..335d2b3e4 100644
--- a/gcc-4.8/libcpp/lex.c
+++ b/gcc-4.8/libcpp/lex.c
@@ -559,8 +559,13 @@ search_line_fast (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
beginning with all ones and shifting in zeros according to the
mis-alignment. The LVSR instruction pulls the exact shift we
want from the address. */
+#ifdef __BIG_ENDIAN__
mask = __builtin_vec_lvsr(0, s);
mask = __builtin_vec_perm(zero, ones, mask);
+#else
+ mask = __builtin_vec_lvsl(0, s);
+ mask = __builtin_vec_perm(ones, zero, mask);
+#endif
data &= mask;
/* While altivec loads mask addresses, we still need to align S so
@@ -624,7 +629,11 @@ search_line_fast (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
/* L now contains 0xff in bytes for which we matched one of the
relevant characters. We can find the byte index by finding
its bit index and dividing by 8. */
+#ifdef __BIG_ENDIAN__
l = __builtin_clzl(l) >> 3;
+#else
+ l = __builtin_ctzl(l) >> 3;
+#endif
return s + l;
#undef N
diff --git a/gcc-4.8/libcpp/line-map.c b/gcc-4.8/libcpp/line-map.c
index 2ad7ad239..125f08706 100644
--- a/gcc-4.8/libcpp/line-map.c
+++ b/gcc-4.8/libcpp/line-map.c
@@ -1024,6 +1024,11 @@ linemap_compare_locations (struct line_maps *set,
bool pre_virtual_p, post_virtual_p;
source_location l0 = pre, l1 = post;
+ if (IS_ADHOC_LOC (l0))
+ l0 = set->location_adhoc_data_map.data[l0 & MAX_SOURCE_LOCATION].locus;
+ if (IS_ADHOC_LOC (l1))
+ l1 = set->location_adhoc_data_map.data[l1 & MAX_SOURCE_LOCATION].locus;
+
if (l0 == l1)
return 0;
diff --git a/gcc-4.8/libcpp/macro.c b/gcc-4.8/libcpp/macro.c
index 6d46027e4..77e8acc70 100644
--- a/gcc-4.8/libcpp/macro.c
+++ b/gcc-4.8/libcpp/macro.c
@@ -1108,21 +1108,22 @@ enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
if (macro->paramc == 0)
{
+ unsigned tokens_count = macro_real_token_count (macro);
if (CPP_OPTION (pfile, track_macro_expansion))
{
- unsigned int i, count = macro->count;
+ unsigned int i;
const cpp_token *src = macro->exp.tokens;
const struct line_map *map;
source_location *virt_locs = NULL;
- _cpp_buff *macro_tokens =
- tokens_buff_new (pfile, count, &virt_locs);
+ _cpp_buff *macro_tokens
+ = tokens_buff_new (pfile, tokens_count, &virt_locs);
/* Create a macro map to record the locations of the
tokens that are involved in the expansion. LOCATION
is the location of the macro expansion point. */
map = linemap_enter_macro (pfile->line_table,
- node, location, count);
- for (i = 0; i < count; ++i)
+ node, location, tokens_count);
+ for (i = 0; i < tokens_count; ++i)
{
tokens_buff_add_token (macro_tokens, virt_locs,
src, src->src_loc,
@@ -1134,17 +1135,13 @@ enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
virt_locs,
(const cpp_token **)
macro_tokens->base,
- count);
- num_macro_tokens_counter += count;
+ tokens_count);
}
else
- {
- unsigned tokens_count = macro_real_token_count (macro);
_cpp_push_token_context (pfile, node, macro->exp.tokens,
tokens_count);
num_macro_tokens_counter += tokens_count;
}
- }
if (pragma_buff)
{
diff --git a/gcc-4.8/libcpp/po/ChangeLog b/gcc-4.8/libcpp/po/ChangeLog
index fab19320d..1f4ff43d4 100644
--- a/gcc-4.8/libcpp/po/ChangeLog
+++ b/gcc-4.8/libcpp/po/ChangeLog
@@ -1,3 +1,15 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2013-12-18 Joseph Myers <joseph@codesourcery.com>
+
+ * pt_BR.po: New.
+
+2013-11-01 Joseph Myers <joseph@codesourcery.com>
+
+ * tr.po: Update.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libcpp/po/pt_BR.gmo b/gcc-4.8/libcpp/po/pt_BR.gmo
new file mode 100644
index 000000000..474c9b9f4
--- /dev/null
+++ b/gcc-4.8/libcpp/po/pt_BR.gmo
Binary files differ
diff --git a/gcc-4.8/libcpp/po/pt_BR.po b/gcc-4.8/libcpp/po/pt_BR.po
new file mode 100644
index 000000000..6b3d92a63
--- /dev/null
+++ b/gcc-4.8/libcpp/po/pt_BR.po
@@ -0,0 +1,908 @@
+# Brazilian Portuguese translation for cpplib
+# Copyright (C) 2013 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gcc package.
+# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: cpplib 4.8.0\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2013-03-15 17:42+0000\n"
+"PO-Revision-Date: 2013-12-18 03:12-0300\n"
+"Last-Translator: Rafael Ferreira <rafael.f.f1@gmail.com>\n"
+"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.7\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: charset.c:673
+#, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "sem suporte a conversão de %s para %s por iconv"
+
+#: charset.c:676
+msgid "iconv_open"
+msgstr "iconv_open"
+
+#: charset.c:684
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr "nenhuma implementação iconv, não foi possível converter de %s para %s"
+
+#: charset.c:780
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr "caractere 0x%lx não está no conjunto de caracteres fonte básico\n"
+
+#: charset.c:797 charset.c:1443
+msgid "converting to execution character set"
+msgstr "convertendo para conjunto de caracteres da execução"
+
+#: charset.c:803
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr "caractere 0x%lx não é unibyte no conjunto de caracteres de execução"
+
+#: charset.c:927
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr "Caractere %x pode não ser NFKC"
+
+#: charset.c:993
+msgid "universal character names are only valid in C++ and C99"
+msgstr "nomes de caractere universais são válidos apenas em C++ e C99"
+
+#: charset.c:996
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "o significado de \"\\%c\" é diferente em C tradicional"
+
+#: charset.c:1005
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr "Em _cpp_valid_ucn, mas não é um UCN"
+
+#: charset.c:1030
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "nome de caractere universal incompleto %.*s"
+
+#: charset.c:1045
+#, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "%.*s não é um caractere universal válido"
+
+#: charset.c:1055 lex.c:1117
+msgid "'$' in identifier or number"
+msgstr "\"$\" em identificador ou número"
+
+#: charset.c:1065
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "caractere universal %.*s não é válido em um identificador"
+
+#: charset.c:1069
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "caractere universal %.*s não é válido no começo de um identificador"
+
+#: charset.c:1101 charset.c:1673
+msgid "converting UCN to source character set"
+msgstr "convertendo UCN para conjunto de caracteres fonte"
+
+#: charset.c:1105
+msgid "converting UCN to execution character set"
+msgstr "convertendo UCN para conjunto de caracteres de execução"
+
+#: charset.c:1177
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "o significado de \"\\x\" é diferente em C tradicional"
+
+#: charset.c:1194
+msgid "\\x used with no following hex digits"
+msgstr "\\x usado com nenhum dígito hexa"
+
+#: charset.c:1201
+msgid "hex escape sequence out of range"
+msgstr "sequência de escape hexa fora de alcance"
+
+#: charset.c:1239
+msgid "octal escape sequence out of range"
+msgstr "sequência de escape octal fora de alcance"
+
+#: charset.c:1305
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "o significado de \"\\a\" é diferente em C tradicional"
+
+#: charset.c:1312
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "sequência de escape não padrão ISO, \"\\%c\""
+
+#: charset.c:1320
+#, c-format
+msgid "unknown escape sequence: '\\%c'"
+msgstr "sequência de escape desconhecida: \"\\%c\""
+
+#: charset.c:1328
+#, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "sequência de escape desconhecida: \"\\%s\""
+
+#: charset.c:1335
+msgid "converting escape sequence to execution character set"
+msgstr "convertendo sequência de escape para conjunto de caracteres de execução"
+
+#: charset.c:1508 charset.c:1572
+msgid "character constant too long for its type"
+msgstr "constante caractere muito longa para seu tipo"
+
+#: charset.c:1511
+msgid "multi-character character constant"
+msgstr "constante de caractere multi-caractere"
+
+#: charset.c:1611
+msgid "empty character constant"
+msgstr "constante caractere vazia"
+
+#: charset.c:1720
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr "falha ao converter %s para %s"
+
+#: directives.c:224 directives.c:250
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr "tokens extras ao final da diretiva %#s"
+
+#: directives.c:357
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%s é uma extensão GCC"
+
+#: directives.c:362
+#, c-format
+msgid "#%s is a deprecated GCC extension"
+msgstr "#%s é uma extensão GCC obsoleta"
+
+#: directives.c:375
+msgid "suggest not using #elif in traditional C"
+msgstr "sugere-se não usar #elif em C tradicional"
+
+#: directives.c:378
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "C tradicional ignora #%s com o # com recuo"
+
+#: directives.c:382
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "sugere-se ocultar #%s do C tradicional com um # com recuo"
+
+#: directives.c:408
+msgid "embedding a directive within macro arguments is not portable"
+msgstr "embutir uma diretiva dentro de argumentos macro não é portátil"
+
+#: directives.c:428
+msgid "style of line directive is a GCC extension"
+msgstr "estilo de diretiva de linha é uma extensão GCC"
+
+#: directives.c:483
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "diretiva de preprocessamento inválida #%s"
+
+#: directives.c:551
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "\"defined\" não pode ser usado como um nome de macro"
+
+#: directives.c:557
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "\"%s\" não pode ser usado como um nome de macro, pois é um operador em C++"
+
+#: directives.c:560
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr "nenhum nome de macro fornecido na diretiva #%s"
+
+#: directives.c:563
+msgid "macro names must be identifiers"
+msgstr "nomes de macro devem ser identificadores"
+
+#: directives.c:612
+#, c-format
+msgid "undefining \"%s\""
+msgstr "removendo definição de \"%s\""
+
+#: directives.c:667
+msgid "missing terminating > character"
+msgstr "faltando caractere terminador >"
+
+#: directives.c:726
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%s espera \"NOME DE ARQUIVO\" OU <NOME DE ARQUIVO>"
+
+#: directives.c:772
+#, c-format
+msgid "empty filename in #%s"
+msgstr "nome de arquivo vazio em #%s"
+
+#: directives.c:782
+msgid "#include nested too deeply"
+msgstr "#include aninhado profundo demais"
+
+#: directives.c:823
+msgid "#include_next in primary source file"
+msgstr "#include_next no arquivo fonte primário"
+
+#: directives.c:849
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "opção inválida \"%s\" na diretiva line"
+
+#: directives.c:909
+msgid "unexpected end of file after #line"
+msgstr "fim de arquivo inesperado após #line"
+
+#: directives.c:912
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "\"%s\" após #line não é um inteiro positivo"
+
+#: directives.c:918 directives.c:920
+msgid "line number out of range"
+msgstr "número da linha fora de alcance"
+
+#: directives.c:933 directives.c:1013
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "\"%s\" não é um nome de arquivo válido"
+
+#: directives.c:973
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "\"%s\" após # não é um inteiro positivo"
+
+#: directives.c:1068 directives.c:1070 directives.c:1072 directives.c:1658
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: directives.c:1096
+#, c-format
+msgid "invalid #%s directive"
+msgstr "diretiva inválida #%s"
+
+#: directives.c:1159
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr "registrando pragmas em espaço de nomes \"%s\" com expansão de nome incompatível"
+
+#: directives.c:1168
+#, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr "registrando pragma \"%s\" com expansão de nome e nenhum espaço de nomes"
+
+#: directives.c:1186
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr "registrando \"%s\" como tanto um pragma e um espaço de nomes de pragma"
+
+#: directives.c:1189
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "#pragma %s %s já está registrado"
+
+#: directives.c:1192
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr "#pragma %s já está registrado"
+
+#: directives.c:1222
+msgid "registering pragma with NULL handler"
+msgstr "registrando pragma com manipulador NULO"
+
+#: directives.c:1439
+msgid "#pragma once in main file"
+msgstr "#pragma ocorre uma vez no arquivo principal"
+
+#: directives.c:1462
+msgid "invalid #pragma push_macro directive"
+msgstr "diretiva inválida #pragma push_macro"
+
+#: directives.c:1517
+msgid "invalid #pragma pop_macro directive"
+msgstr "diretiva inválida #pragma pop_macro"
+
+#: directives.c:1572
+msgid "invalid #pragma GCC poison directive"
+msgstr "diretiva inválida #pragma GCC poison"
+
+#: directives.c:1581
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "envenenando macro existente \"%s\""
+
+#: directives.c:1600
+msgid "#pragma system_header ignored outside include file"
+msgstr "#pragma system_header ignorado fora do arquivo include"
+
+#: directives.c:1625
+#, c-format
+msgid "cannot find source file %s"
+msgstr "não foi possível localizar o arquivo fonte %s"
+
+#: directives.c:1629
+#, c-format
+msgid "current file is older than %s"
+msgstr "arquivo atual é mais velho do que %s"
+
+#: directives.c:1653
+#, c-format
+msgid "invalid \"#pragma GCC %s\" directive"
+msgstr "diretiva inválida \"#pragma GCC %s\""
+
+#: directives.c:1847
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "_Pragma leva uma literal de string entre parenteses"
+
+#: directives.c:1968
+msgid "#else without #if"
+msgstr "#else sem #if"
+
+#: directives.c:1973
+msgid "#else after #else"
+msgstr "#else após #else"
+
+#: directives.c:1975 directives.c:2008
+msgid "the conditional began here"
+msgstr "a condicional começou aqui"
+
+#: directives.c:2001
+msgid "#elif without #if"
+msgstr "#elif sem #if"
+
+#: directives.c:2006
+msgid "#elif after #else"
+msgstr "#elif após #else"
+
+#: directives.c:2044
+msgid "#endif without #if"
+msgstr "#endif sem #if"
+
+#: directives.c:2124
+msgid "missing '(' after predicate"
+msgstr "faltando \"(\" após predicado"
+
+#: directives.c:2139
+msgid "missing ')' to complete answer"
+msgstr "faltando \")\" para uma resposta completa"
+
+#: directives.c:2159
+msgid "predicate's answer is empty"
+msgstr "resposta do predicado está vazia"
+
+#: directives.c:2186
+msgid "assertion without predicate"
+msgstr "asserção sem predicado"
+
+#: directives.c:2189
+msgid "predicate must be an identifier"
+msgstr "predicado deve ser um identificador"
+
+#: directives.c:2275
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr "\"%s\" re-assertado"
+
+#: directives.c:2567
+#, c-format
+msgid "unterminated #%s"
+msgstr "#%s não terminado"
+
+#: directives-only.c:221 lex.c:2234 traditional.c:162
+msgid "unterminated comment"
+msgstr "comentário não terminado"
+
+#: errors.c:234
+msgid "stdout"
+msgstr "saída padrão"
+
+#: errors.c:236
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: expr.c:479 expr.c:577
+msgid "fixed-point constants are a GCC extension"
+msgstr "constantes de ponto fixo (fixed-point constants) é uma extensão GCC"
+
+#: expr.c:504
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "prefixo inválido \"0b\" para constante flutuante"
+
+#: expr.c:514
+msgid "use of C99 hexadecimal floating constant"
+msgstr "uso de constante flutuante hexadecimal de C99"
+
+#: expr.c:545
+#, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "sufixo inválido \"%.*s\" na constante flutuante"
+
+#: expr.c:556 expr.c:616
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "C tradicional rejeita o sufixo \"%.*s\""
+
+#: expr.c:564
+msgid "suffix for double constant is a GCC extension"
+msgstr "sufixo para constante dupla (suffix for double constant) é uma extensão GCC"
+
+#: expr.c:570
+#, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "sufixo inválido \"%.*s\" com constante flutuante hexadecimal"
+
+#: expr.c:581
+msgid "decimal float constants are a GCC extension"
+msgstr "constantes flutuante decimais (decimal float constants) é uma extensão GCC"
+
+#: expr.c:599
+#, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "sufixo inválido \"%.*s\" em constante inteiro"
+
+#: expr.c:624
+msgid "use of C++0x long long integer constant"
+msgstr "uso de constante longo longo inteiro de C++0x"
+
+#: expr.c:625
+msgid "use of C99 long long integer constant"
+msgstr "uso de constante longo longo inteiro de C99"
+
+#: expr.c:641
+msgid "imaginary constants are a GCC extension"
+msgstr "constantes imaginárias (imaginary constants) é uma extensão GCC"
+
+#: expr.c:644
+msgid "binary constants are a GCC extension"
+msgstr "constantes binárias (binary constants) é uma extensão GCC"
+
+#: expr.c:737
+msgid "integer constant is too large for its type"
+msgstr "constante inteira é muito grande para seu tipo"
+
+#: expr.c:768
+msgid "integer constant is so large that it is unsigned"
+msgstr "constante inteira é tão grande que não está assinada"
+
+#: expr.c:863
+msgid "missing ')' after \"defined\""
+msgstr "faltando \")\" após \"defined\""
+
+#: expr.c:870
+msgid "operator \"defined\" requires an identifier"
+msgstr "operador \"defined\" requer um identificador"
+
+#: expr.c:878
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "(\"%s\" é um token alternativo para \"%s\" em C++)"
+
+#: expr.c:888
+msgid "this use of \"defined\" may not be portable"
+msgstr "esse uso de \"defined\" pode não ser portátil"
+
+#: expr.c:948
+msgid "user-defined literal in preprocessor expression"
+msgstr "literal definida pelo usuário em expressão do preprocessador"
+
+#: expr.c:953
+msgid "floating constant in preprocessor expression"
+msgstr "constante flutuante em expressão do preprocessador"
+
+#: expr.c:959
+msgid "imaginary number in preprocessor expression"
+msgstr "número imaginário em expressão do preprocessador"
+
+#: expr.c:1007
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr "\"%s\" não está definido"
+
+#: expr.c:1020
+msgid "assertions are a GCC extension"
+msgstr "asserções (assertions) é uma extensão GCC"
+
+#: expr.c:1023
+msgid "assertions are a deprecated extension"
+msgstr "asserções (assertions) é uma extensão obsoleta"
+
+#: expr.c:1268
+#, c-format
+msgid "unbalanced stack in %s"
+msgstr "pilha não balanceada em %s"
+
+#: expr.c:1288
+#, c-format
+msgid "impossible operator '%u'"
+msgstr "operador impossível \"%u\""
+
+#: expr.c:1389
+msgid "missing ')' in expression"
+msgstr "faltando \")\" na expressão"
+
+#: expr.c:1418
+msgid "'?' without following ':'"
+msgstr "\"?\" sem estar seguido por \":\""
+
+#: expr.c:1428
+msgid "integer overflow in preprocessor expression"
+msgstr "estouro de inteiro em expressão do preprocessador"
+
+#: expr.c:1433
+msgid "missing '(' in expression"
+msgstr "faltando \"(\" na expressão"
+
+#: expr.c:1465
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr "o operador à esquerda de \"%s\" altera o sinal quando promovido"
+
+#: expr.c:1470
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr "o operador à direita de \"%s\" altera o sinal quando promovido"
+
+#: expr.c:1729
+msgid "traditional C rejects the unary plus operator"
+msgstr "C tradicional rejeita o operador unário mais"
+
+#: expr.c:1812
+msgid "comma operator in operand of #if"
+msgstr "operador vírgula em operando de #if"
+
+#: expr.c:1948
+msgid "division by zero in #if"
+msgstr "divisão por zero em #if"
+
+#: files.c:505
+msgid "NULL directory in find_file"
+msgstr "diretório NULO em find_file"
+
+#: files.c:553
+msgid "one or more PCH files were found, but they were invalid"
+msgstr "um ou mais arquivos PCH foram encontrados, mas são inválidos"
+
+#: files.c:556
+msgid "use -Winvalid-pch for more information"
+msgstr "use -Winvalid-pch para mais informações"
+
+#: files.c:660
+#, c-format
+msgid "%s is a block device"
+msgstr "%s é um dispositivo de bloco"
+
+#: files.c:677
+#, c-format
+msgid "%s is too large"
+msgstr "%s é muito grande"
+
+#: files.c:717
+#, c-format
+msgid "%s is shorter than expected"
+msgstr "%s é muito menor do que esperado"
+
+#: files.c:953
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr "não foi incluído nenhum caminho no qual se possa procurar por %s"
+
+#: files.c:1381
+msgid "Multiple include guards may be useful for:\n"
+msgstr "Múltiplos include guards podem ser úteis para:\n"
+
+#: init.c:524
+msgid "cppchar_t must be an unsigned type"
+msgstr "cppchar_t deve ser um tipo não assinado"
+
+#: init.c:528
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr "aritmética do preprocessador possui uma precisão máxima de %lu bits; o alvo requer %lu bits"
+
+#: init.c:535
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr "aritmética do CPP deve ser pelo menos tão precisa quanto um int alvo"
+
+#: init.c:538
+msgid "target char is less than 8 bits wide"
+msgstr "char alvo é menor do que 8 bits"
+
+#: init.c:542
+msgid "target wchar_t is narrower than target char"
+msgstr "wchar_t alvo é mais estreito do que o char alvo"
+
+#: init.c:546
+msgid "target int is narrower than target char"
+msgstr "int alvo é mais estreito do que o char alvo"
+
+#: init.c:551
+msgid "CPP half-integer narrower than CPP character"
+msgstr "meio-inteiro do CPP é mais estreito do que o caractere do CPP"
+
+#: init.c:555
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr "CPP nesta máquina não consegue manipular constantes de wide character acima de %lu bits, mas o alvo requer %lu bits"
+
+#: lex.c:910
+msgid "backslash and newline separated by space"
+msgstr "barra invertida e nova linha separadas por espaço"
+
+#: lex.c:915
+msgid "backslash-newline at end of file"
+msgstr "barra invertida e nova linha no final do arquivo"
+
+#: lex.c:931
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr "trígrafo ??%c convertido para %c"
+
+#: lex.c:939
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr "trígrafo ??%c ignorado, use -trigraphs para habilitá-lo"
+
+#: lex.c:988
+msgid "\"/*\" within comment"
+msgstr "\"/*\" dentro de comentário"
+
+#: lex.c:1046
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr "%s em diretiva de preprocessamento"
+
+#: lex.c:1055
+msgid "null character(s) ignored"
+msgstr "um ou mais caracteres nulos ignorados"
+
+#: lex.c:1092
+#, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "\"%.*s\" não está em NFKC"
+
+#: lex.c:1095
+#, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "\"%.*s\" não está em NFC"
+
+#: lex.c:1164 lex.c:1241
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "tentativa de usar \"%s\" envenenado"
+
+#: lex.c:1172 lex.c:1249
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "__VA_ARGS__ pode aparecer apenas na expansão de uma macro variádica C99"
+
+#: lex.c:1178 lex.c:1255
+#, c-format
+msgid "identifier \"%s\" is a special operator name in C++"
+msgstr "identificador \"%s\" é o nome de um operador especial em C++"
+
+#: lex.c:1399
+msgid "raw string delimiter longer than 16 characters"
+msgstr "delimitador de string não tratada (raw) maior do que 16 caracteres"
+
+#: lex.c:1402
+#, c-format
+msgid "invalid character '%c' in raw string delimiter"
+msgstr "caractere inválido \"%c\" em delimitador de string não tratada (raw)"
+
+#: lex.c:1525 lex.c:1547
+msgid "unterminated raw string"
+msgstr "string não tratada (raw) não terminada"
+
+#: lex.c:1573 lex.c:1706
+msgid "invalid suffix on literal; C++11 requires a space between literal and identifier"
+msgstr "sufixo inválido em literal; C++11 requer um espaço entre literal e identificador"
+
+#: lex.c:1684
+msgid "null character(s) preserved in literal"
+msgstr "um ou mais caracteres nulos preservados em literal"
+
+#: lex.c:1687
+#, c-format
+msgid "missing terminating %c character"
+msgstr "faltando o caractere de terminação %c"
+
+#: lex.c:2245
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "comentários no estilo C++ não são permitidos em ISO C90"
+
+#: lex.c:2247
+msgid "(this will be reported only once per input file)"
+msgstr "(isso será relatado apenas uma vez por arquivo de entrada)"
+
+#: lex.c:2252
+msgid "multi-line comment"
+msgstr "comentário multilinha"
+
+#: lex.c:2583
+#, c-format
+msgid "unspellable token %s"
+msgstr "token %s impronunciável"
+
+#: macro.c:191
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr "macro \"%s\" não é usada"
+
+#: macro.c:229 macro.c:426
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "macro interna inválida \"%s\""
+
+#: macro.c:263
+msgid "could not determine file timestamp"
+msgstr "não foi possível determinar o arquivo de marca de tempo"
+
+#: macro.c:361
+msgid "could not determine date and time"
+msgstr "não foi possível determinar a data e a hora"
+
+#: macro.c:377
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr "__COUNTER__ expandido dentro diretiva com -fdirectives-only"
+
+#: macro.c:535
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "literal de string inválida, ignorando final \"\\\""
+
+#: macro.c:597
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "colar \"%s\" em \"%s\" não resulta em nenhum token de preprocessamento válido"
+
+#: macro.c:719
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ISO C99 requer que argumentos restantes sejam usados"
+
+#: macro.c:724
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "macro \"%s\" requer %u argumentos, mas apenas %u foram fornecidos"
+
+#: macro.c:729
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "macro \"%s\" passou %u argumentos, mas usa apenas %u"
+
+#: macro.c:923 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "lista de argumentos interminável chamando macro \"%s\""
+
+#: macro.c:1074
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "macro \"%s\" do tipo função deve ser usada com argumento em C tradicional"
+
+# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33305
+#: macro.c:1746
+#, c-format
+msgid "invoking macro %s argument %d: empty macro arguments are undefined in ISO C90 and ISO C++98"
+msgstr "chamando macro %s argumento %d: argumentos de macro vazios estão indefinidos em ISO C90 e ISO C++98"
+
+#: macro.c:2708
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "parâmetro de macro \"%s\" duplicado"
+
+#: macro.c:2754
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "\"%s\" não pode aparecer na lista de parâmetros de macro"
+
+#: macro.c:2762
+msgid "macro parameters must be comma-separated"
+msgstr "parâmetros de macro devem ser separados por vírgula"
+
+#: macro.c:2779
+msgid "parameter name missing"
+msgstr "faltando nome de parâmetro"
+
+#: macro.c:2797
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "macros variádicas anônimas foram introduzidas em C99"
+
+#: macro.c:2802
+msgid "ISO C does not permit named variadic macros"
+msgstr "ISO C não permite macros variádicas nomeadas"
+
+#: macro.c:2811
+msgid "missing ')' in macro parameter list"
+msgstr "faltando \")\" na lista de parâmetros de macro"
+
+#: macro.c:2860
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "\"##\" não pode aparecer no final da expansão de macro"
+
+#: macro.c:2895
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "ISO C99 requer espaço em branco após o nome de macro"
+
+#: macro.c:2919
+msgid "missing whitespace after the macro name"
+msgstr "faltando espaço em branco após o nome de macro"
+
+#: macro.c:2953
+msgid "'#' is not followed by a macro parameter"
+msgstr "\"#\" não está seguido por um parâmetro de macro"
+
+#: macro.c:3111
+#, c-format
+msgid "\"%s\" redefined"
+msgstr "\"%s\" re-definido"
+
+#: macro.c:3117
+msgid "this is the location of the previous definition"
+msgstr "essa é a localização da definição anterior"
+
+#: macro.c:3178
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "argumento de macro \"%s\" estaria em uma string no C tradicional"
+
+#: macro.c:3205
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "tipo de hash inválido %d em cpp_macro_definition"
+
+#: pch.c:87 pch.c:345 pch.c:359 pch.c:377 pch.c:383 pch.c:392 pch.c:399
+msgid "while writing precompiled header"
+msgstr "enquanto realizava escrita de header pré-compilado"
+
+#: pch.c:619
+#, c-format
+msgid "%s: not used because `%.*s' is poisoned"
+msgstr "%s: não usado porque \"%.*s\" está envenenado"
+
+#: pch.c:641
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "%s: não usado porque \"%.*s\" não está definido"
+
+#: pch.c:653
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr "%s: não usado porque \"%.*s\" está definido como \"%s\", e não \"%.*s\""
+
+#: pch.c:694
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "%s: não usado porque \"%s\" está definido"
+
+#: pch.c:714
+#, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr "%s: não usado porque \"__COUNTER__\" é inválido"
+
+#: pch.c:723 pch.c:898
+msgid "while reading precompiled header"
+msgstr "enquanto realizava leitura de header pré-compilado"
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "detectada recursão enquanto expandia macro \"%s\""
+
+#: traditional.c:968
+msgid "syntax error in macro parameter list"
+msgstr "erro de sintaxe na lista de parâmetros de macro"
diff --git a/gcc-4.8/libcpp/po/tr.gmo b/gcc-4.8/libcpp/po/tr.gmo
index cd4d421e7..556c614a5 100644
--- a/gcc-4.8/libcpp/po/tr.gmo
+++ b/gcc-4.8/libcpp/po/tr.gmo
Binary files differ
diff --git a/gcc-4.8/libcpp/po/tr.po b/gcc-4.8/libcpp/po/tr.po
index a25bc8ff7..7e63bd1d9 100644
--- a/gcc-4.8/libcpp/po/tr.po
+++ b/gcc-4.8/libcpp/po/tr.po
@@ -1,20 +1,22 @@
# Turkish translations for cpplib messages.
# Copyright (C) 2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gcc package.
#
# Nilgün Belma Bugüner <nilgun@buguner.name.tr>, 2001, ..., 2007.
+# Volkan Gezer <vlkngzr@gmail.com>, 2013.
msgid ""
msgstr ""
-"Project-Id-Version: cpplib 4.2.0\n"
+"Project-Id-Version: cpplib 4.8.0\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
-"POT-Creation-Date: 2013-02-24 01:05+0000\n"
-"PO-Revision-Date: 2007-05-23 01:17+0300\n"
-"Last-Translator: Nilgün Belma Bugüner <nilgun@buguner.name.tr>\n"
+"POT-Creation-Date: 2013-03-15 17:42+0000\n"
+"PO-Revision-Date: 2013-11-01 22:29+0100\n"
+"Last-Translator: Volkan Gezer <vlkngzr@gmail.com>\n"
"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
+"X-Generator: Lokalize 1.5\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: charset.c:673
@@ -121,10 +123,9 @@ msgid "non-ISO-standard escape sequence, '\\%c'"
msgstr "ISO standardı olmayan önceleme dizgesi, '\\%c'"
#: charset.c:1320
-#, fuzzy, c-format
-#| msgid "unknown escape sequence '\\%c'"
+#, c-format
msgid "unknown escape sequence: '\\%c'"
-msgstr "bilinmeyen önceleme dizgesi '\\%c'"
+msgstr "bilinmeyen kaçış dizgesi: '\\%c'"
#: charset.c:1328
#, c-format
@@ -163,10 +164,9 @@ msgid "#%s is a GCC extension"
msgstr "#%s bir GCC uzantısıdır"
#: directives.c:362
-#, fuzzy, c-format
-#| msgid "#%s is a GCC extension"
+#, c-format
msgid "#%s is a deprecated GCC extension"
-msgstr "#%s bir GCC uzantısıdır"
+msgstr "#%s eskimiş bir GCC uzantısıdır"
#: directives.c:375
msgid "suggest not using #elif in traditional C"
@@ -247,7 +247,7 @@ msgstr "satır yönergesinde geçersiz \"%s\" seçeneği"
#: directives.c:909
msgid "unexpected end of file after #line"
-msgstr ""
+msgstr "#line satırından sonra beklenmeyen dosya sonu"
#: directives.c:912
#, c-format
@@ -271,7 +271,7 @@ msgstr "#'dan sonraki \"%s\" bir pozitif tamsayı değil"
#: directives.c:1068 directives.c:1070 directives.c:1072 directives.c:1658
#, c-format
msgid "%s"
-msgstr ""
+msgstr "%s"
#: directives.c:1096
#, c-format
@@ -312,16 +312,12 @@ msgid "#pragma once in main file"
msgstr "main dosyasında '#pragma once'"
#: directives.c:1462
-#, fuzzy
-#| msgid "invalid #pragma GCC poison directive"
msgid "invalid #pragma push_macro directive"
-msgstr "geçersiz #pragma GCC poison yönergesi"
+msgstr "geçersiz #pragma güdümlü_makro yönergesi"
#: directives.c:1517
-#, fuzzy
-#| msgid "invalid #pragma GCC poison directive"
msgid "invalid #pragma pop_macro directive"
-msgstr "geçersiz #pragma GCC poison yönergesi"
+msgstr "geçersiz #pragma güdümlü_makro yönergesi"
#: directives.c:1572
msgid "invalid #pragma GCC poison directive"
@@ -347,10 +343,9 @@ msgid "current file is older than %s"
msgstr "mevcut dosya %s den daha eski"
#: directives.c:1653
-#, fuzzy, c-format
-#| msgid "invalid #pragma GCC poison directive"
+#, c-format
msgid "invalid \"#pragma GCC %s\" directive"
-msgstr "geçersiz #pragma GCC poison yönergesi"
+msgstr "geçersiz \"#pragma GCC %s\" yönergesi"
#: directives.c:1847
msgid "_Pragma takes a parenthesized string literal"
@@ -405,7 +400,7 @@ msgstr "dayanak bir tanımlayıcı olmalı"
msgid "\"%s\" re-asserted"
msgstr "\"%s\" tekrar olumlanmış"
-#: directives.c:2566
+#: directives.c:2567
#, c-format
msgid "unterminated #%s"
msgstr "sonlandırılmamış #%s"
@@ -424,16 +419,12 @@ msgid "%s: %s"
msgstr "%s: %s"
#: expr.c:479 expr.c:577
-#, fuzzy
-#| msgid "imaginary constants are a GCC extension"
msgid "fixed-point constants are a GCC extension"
-msgstr "sanal sabitler bir GCC genişletmesidir"
+msgstr "sabit noktalı sabitler bir GCC uzantısıdır"
#: expr.c:504
-#, fuzzy
-#| msgid "invalid suffix \"%.*s\" on floating constant"
msgid "invalid prefix \"0b\" for floating constant"
-msgstr "gerçel sabitin \"%.*s\" soneki geçersiz"
+msgstr "kayan nokta için geçerisz \"0b\" öntakısı"
#: expr.c:514
msgid "use of C99 hexadecimal floating constant"
@@ -450,10 +441,8 @@ msgid "traditional C rejects the \"%.*s\" suffix"
msgstr "geleneksel C \"%.*s\" sonekini kullanmaz"
#: expr.c:564
-#, fuzzy
-#| msgid "imaginary constants are a GCC extension"
msgid "suffix for double constant is a GCC extension"
-msgstr "sanal sabitler bir GCC genişletmesidir"
+msgstr "çift sabit için öntakı bir GCC uzantısıdır"
#: expr.c:570
#, c-format
@@ -461,10 +450,8 @@ msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
msgstr "onaltılık kayan sabitli \"%.*s\" soneki geçersiz"
#: expr.c:581
-#, fuzzy
-#| msgid "imaginary constants are a GCC extension"
msgid "decimal float constants are a GCC extension"
-msgstr "sanal sabitler bir GCC genişletmesidir"
+msgstr "onluk kayan sabitler bir GCC uzantısıdır"
#: expr.c:599
#, c-format
@@ -472,10 +459,8 @@ msgid "invalid suffix \"%.*s\" on integer constant"
msgstr "tamsayı sabitte sonek \"%.*s\" soneki geçersiz"
#: expr.c:624
-#, fuzzy
-#| msgid "use of C99 long long integer constant"
msgid "use of C++0x long long integer constant"
-msgstr "ISO C99 long long tamsayı sabitleri yasaklar"
+msgstr "ISO C++0x long long tamsayı sabitlerinin kullanımı"
#: expr.c:625
msgid "use of C99 long long integer constant"
@@ -486,10 +471,8 @@ msgid "imaginary constants are a GCC extension"
msgstr "sanal sabitler bir GCC genişletmesidir"
#: expr.c:644
-#, fuzzy
-#| msgid "imaginary constants are a GCC extension"
msgid "binary constants are a GCC extension"
-msgstr "sanal sabitler bir GCC genişletmesidir"
+msgstr "ikili sabitler bir GCC uzantısıdır"
#: expr.c:737
msgid "integer constant is too large for its type"
@@ -517,10 +500,8 @@ msgid "this use of \"defined\" may not be portable"
msgstr "\"defined\" bu kullanımıyla uyarlanabilir olmayabilir"
#: expr.c:948
-#, fuzzy
-#| msgid "integer overflow in preprocessor expression"
msgid "user-defined literal in preprocessor expression"
-msgstr "önişlemci ifadesinde tamsayı taşması"
+msgstr "önişleyici ifadesinde kullanıcı tanımlı bağımlı"
#: expr.c:953
msgid "floating constant in preprocessor expression"
@@ -536,20 +517,17 @@ msgid "\"%s\" is not defined"
msgstr "\"%s\" tanımlı değil"
#: expr.c:1020
-#, fuzzy
-#| msgid "#%s is a GCC extension"
msgid "assertions are a GCC extension"
-msgstr "#%s bir GCC uzantısıdır"
+msgstr "belirteçler bir GCC uzantısıdır"
#: expr.c:1023
msgid "assertions are a deprecated extension"
-msgstr ""
+msgstr "belirteçler artık kullanılmayan bir ifadedir"
#: expr.c:1268
-#, fuzzy, c-format
-#| msgid "unbalanced stack in #if"
+#, c-format
msgid "unbalanced stack in %s"
-msgstr "#if ifadesinde karşılıksız yığın"
+msgstr "%s içinde dengelenmemiş yığın"
#: expr.c:1288
#, c-format
@@ -594,39 +572,39 @@ msgstr "#if'in teriminde virgül"
msgid "division by zero in #if"
msgstr "#if içinde sıfırla bölme"
-#: files.c:504
+#: files.c:505
msgid "NULL directory in find_file"
msgstr "find_file içinde boş dizin"
-#: files.c:542
+#: files.c:553
msgid "one or more PCH files were found, but they were invalid"
msgstr "bir veya daha fazla PCH dosyası bulundu ama bunlar geçersiz"
-#: files.c:545
+#: files.c:556
msgid "use -Winvalid-pch for more information"
msgstr "daha fazla bilgi almak için -Winvalid-pch kullanın"
-#: files.c:643
+#: files.c:660
#, c-format
msgid "%s is a block device"
msgstr "%s bir blok aygıtıdır"
-#: files.c:660
+#: files.c:677
#, c-format
msgid "%s is too large"
msgstr "%s çok büyük"
-#: files.c:700
+#: files.c:717
#, c-format
msgid "%s is shorter than expected"
msgstr "%s beklenenden daha kısa"
-#: files.c:935
+#: files.c:953
#, c-format
msgid "no include path in which to search for %s"
msgstr "%s için aranacaklar içinde başlık dosyaları yolu yok"
-#: files.c:1363
+#: files.c:1381
msgid "Multiple include guards may be useful for:\n"
msgstr "Çoklu include önlemleri aşağıdakiler için kullanışlı olabilir:\n"
@@ -717,27 +695,24 @@ msgstr "__VA_ARGS__ sadece argümanlarının sayısı değişebilen bir C99 mak
#: lex.c:1178 lex.c:1255
#, c-format
msgid "identifier \"%s\" is a special operator name in C++"
-msgstr ""
+msgstr "\"%s\" belirteci, C++'da özel bir işleç adıdır"
#: lex.c:1399
msgid "raw string delimiter longer than 16 characters"
-msgstr ""
+msgstr "ham dizge ayracı 16 karakterden uzun"
#: lex.c:1402
-#, fuzzy, c-format
-#| msgid "universal character %.*s is not valid in an identifier"
+#, c-format
msgid "invalid character '%c' in raw string delimiter"
-msgstr "evrensel karakter %.*s bir belirteç içinde geçerli değil"
+msgstr "ham dizge ayracında geçersiz karakter '%c'"
#: lex.c:1525 lex.c:1547
-#, fuzzy
-#| msgid "unterminated #%s"
msgid "unterminated raw string"
-msgstr "sonlandırılmamış #%s"
+msgstr "bitirilmemiş ham dizge"
#: lex.c:1573 lex.c:1706
msgid "invalid suffix on literal; C++11 requires a space between literal and identifier"
-msgstr ""
+msgstr "geçersiz ifade soneki; C++11 ifade ve tanımlayıcı arasında bir boşluk gerektirir"
#: lex.c:1684
msgid "null character(s) preserved in literal"
@@ -785,7 +760,7 @@ msgstr "tarih ve saat saptanamadı"
#: macro.c:377
msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
-msgstr ""
+msgstr "__COUNTER__ -fdirectives-only ile talimat içerisinde genişletildi"
#: macro.c:535
msgid "invalid string literal, ignoring final '\\'"
@@ -823,7 +798,7 @@ msgstr "işlev benzeri makro \"%s\" geleneksel C'de argümanlarla kullanılmalı
#: macro.c:1746
#, c-format
msgid "invoking macro %s argument %d: empty macro arguments are undefined in ISO C90 and ISO C++98"
-msgstr ""
+msgstr "%s makrosu %d argümanı uygulanıyor: ISO C90 ve ISO C++98 içerisinde boş makro argümanları tanımsızdır"
#: macro.c:2708
#, c-format
@@ -890,38 +865,36 @@ msgstr "makro argümanı \"%s\" geleneksel C'de dizgelenmiş olmalıydı"
msgid "invalid hash type %d in cpp_macro_definition"
msgstr "cpp_macro_definition içindeki isimli yapı türü %d geçersiz"
-#: pch.c:87 pch.c:335 pch.c:347 pch.c:365 pch.c:371 pch.c:380 pch.c:387
+#: pch.c:87 pch.c:345 pch.c:359 pch.c:377 pch.c:383 pch.c:392 pch.c:399
msgid "while writing precompiled header"
msgstr "önderlemeli başlık yazılırken"
-#: pch.c:607
-#, fuzzy, c-format
-#| msgid "%s: not used because `%s' is defined"
+#: pch.c:619
+#, c-format
msgid "%s: not used because `%.*s' is poisoned"
-msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
+msgstr "%s: `%.*s' zehirli olduğu için kullanılmadı"
-#: pch.c:629
+#: pch.c:641
#, c-format
msgid "%s: not used because `%.*s' not defined"
msgstr "%s: `%.*s' tanımlı olmadığından kullanılmadı"
-#: pch.c:641
+#: pch.c:653
#, c-format
msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
msgstr "%s: `%.*s' kullanılmadı çünkü `%s' olarak tanımlı, `%.*s' değil"
-#: pch.c:682
+#: pch.c:694
#, c-format
msgid "%s: not used because `%s' is defined"
msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
-#: pch.c:702
-#, fuzzy, c-format
-#| msgid "%s: not used because `%s' is defined"
+#: pch.c:714
+#, c-format
msgid "%s: not used because `__COUNTER__' is invalid"
-msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
+msgstr "%s: `__COUNTER__' geçersiz olduğundan kullanılmadı"
-#: pch.c:711 pch.c:886
+#: pch.c:723 pch.c:898
msgid "while reading precompiled header"
msgstr "önderlemeli başlık okunurken"
diff --git a/gcc-4.8/libdecnumber/ChangeLog b/gcc-4.8/libdecnumber/ChangeLog
index 0d20380aa..43b15ddd9 100644
--- a/gcc-4.8/libdecnumber/ChangeLog
+++ b/gcc-4.8/libdecnumber/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libffi/ChangeLog b/gcc-4.8/libffi/ChangeLog
index 048d1fc9f..ffab7e632 100644
--- a/gcc-4.8/libffi/ChangeLog
+++ b/gcc-4.8/libffi/ChangeLog
@@ -1,3 +1,43 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport mainline r205844.
+ 2013-11-18 Alan Modra <amodra@gmail.com>
+ * src/powerpc/ffitarget.h: Import from upstream.
+ * src/powerpc/ffi_powerpc.h: Likewise.
+ * src/powerpc/ffi.c: Likewise.
+ * src/powerpc/ffi_sysv.c: Likewise.
+ * src/powerpc/ffi_linux64.c: Likewise.
+ * src/powerpc/sysv.S: Likewise.
+ * src/powerpc/ppc_closure.S: Likewise.
+ * src/powerpc/linux64.S: Likewise.
+ * src/powerpc/linux64_closure.S: Likewise.
+ * src/types.c: Likewise.
+ * Makefile.am (EXTRA_DIST): Add new src/powerpc files.
+ (nodist_libffi_la_SOURCES <POWERPC, POWERPC_FREEBSD>): Likewise.
+ * configure.ac (HAVE_LONG_DOUBLE_VARIANT): Define for powerpc.
+ * include/ffi.h.in (ffi_prep_types): Declare.
+ * src/prep_cif.c (ffi_prep_cif_core): Call ffi_prep_types.
+ * configure: Regenerate.
+ * fficonfig.h.in: Regenerate.
+ * Makefile.in: Regenerate.
+ * man/Makefile.in: Regenerate.
+ * include/Makefile.in: Regenerate.
+ * testsuite/Makefile.in: Regenerate.
+
+ * src/powerpc/ppc_closure.S: Don't bl .Luint128.
+
+ * src/powerpc/ffitarget.h: Import from upstream.
+ * src/powerpc/ffi.c: Likewise.
+ * src/powerpc/linux64.S: Likewise.
+ * src/powerpc/linux64_closure.S: Likewise.
+ * doc/libffi.texi: Likewise.
+ * testsuite/libffi.call/cls_double_va.c: Likewise.
+ * testsuite/libffi.call/cls_longdouble_va.c: Likewise.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libffi/Makefile.am b/gcc-4.8/libffi/Makefile.am
index 287f28e88..645dc1243 100644
--- a/gcc-4.8/libffi/Makefile.am
+++ b/gcc-4.8/libffi/Makefile.am
@@ -15,10 +15,12 @@ EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj configure.host \
src/ia64/unix.S src/mips/ffi.c src/mips/n32.S src/mips/o32.S \
src/mips/ffitarget.h src/m32r/ffi.c src/m32r/sysv.S \
src/m32r/ffitarget.h src/m68k/ffi.c src/m68k/sysv.S \
- src/m68k/ffitarget.h src/powerpc/ffi.c src/powerpc/sysv.S \
- src/powerpc/linux64.S src/powerpc/linux64_closure.S \
- src/powerpc/ppc_closure.S src/powerpc/asm.h \
- src/powerpc/aix.S src/powerpc/darwin.S \
+ src/m68k/ffitarget.h \
+ src/powerpc/ffi.c src/powerpc/ffi_powerpc.h \
+ src/powerpc/ffi_sysv.c src/powerpc/ffi_linux64.c \
+ src/powerpc/sysv.S src/powerpc/linux64.S \
+ src/powerpc/linux64_closure.S src/powerpc/ppc_closure.S \
+ src/powerpc/asm.h src/powerpc/aix.S src/powerpc/darwin.S \
src/powerpc/aix_closure.S src/powerpc/darwin_closure.S \
src/powerpc/ffi_darwin.c src/powerpc/ffitarget.h \
src/s390/ffi.c src/s390/sysv.S src/s390/ffitarget.h \
@@ -179,7 +181,7 @@ if M68K
nodist_libffi_la_SOURCES += src/m68k/ffi.c src/m68k/sysv.S
endif
if POWERPC
-nodist_libffi_la_SOURCES += src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S
+nodist_libffi_la_SOURCES += src/powerpc/ffi.c src/powerpc/ffi_sysv.c src/powerpc/ffi_linux64.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S
endif
if POWERPC_AIX
nodist_libffi_la_SOURCES += src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S
@@ -188,7 +190,7 @@ if POWERPC_DARWIN
nodist_libffi_la_SOURCES += src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S
endif
if POWERPC_FREEBSD
-nodist_libffi_la_SOURCES += src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S
+nodist_libffi_la_SOURCES += src/powerpc/ffi.c src/powerpc/ffi_sysv.c src/powerpc/sysv.S src/powerpc/ppc_closure.S
endif
if AARCH64
nodist_libffi_la_SOURCES += src/aarch64/sysv.S src/aarch64/ffi.c
diff --git a/gcc-4.8/libffi/Makefile.in b/gcc-4.8/libffi/Makefile.in
index 19121d903..2a04e0b3b 100644
--- a/gcc-4.8/libffi/Makefile.in
+++ b/gcc-4.8/libffi/Makefile.in
@@ -48,10 +48,10 @@ target_triplet = @target@
@IA64_TRUE@am__append_11 = src/ia64/ffi.c src/ia64/unix.S
@M32R_TRUE@am__append_12 = src/m32r/sysv.S src/m32r/ffi.c
@M68K_TRUE@am__append_13 = src/m68k/ffi.c src/m68k/sysv.S
-@POWERPC_TRUE@am__append_14 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S
+@POWERPC_TRUE@am__append_14 = src/powerpc/ffi.c src/powerpc/ffi_sysv.c src/powerpc/ffi_linux64.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S
@POWERPC_AIX_TRUE@am__append_15 = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S
@POWERPC_DARWIN_TRUE@am__append_16 = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S
-@POWERPC_FREEBSD_TRUE@am__append_17 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S
+@POWERPC_FREEBSD_TRUE@am__append_17 = src/powerpc/ffi.c src/powerpc/ffi_sysv.c src/powerpc/sysv.S src/powerpc/ppc_closure.S
@AARCH64_TRUE@am__append_18 = src/aarch64/sysv.S src/aarch64/ffi.c
@ARM_TRUE@am__append_19 = src/arm/sysv.S src/arm/ffi.c
@ARM_TRUE@@FFI_EXEC_TRAMPOLINE_TABLE_TRUE@am__append_20 = src/arm/trampoline.S
@@ -133,7 +133,9 @@ am_libffi_la_OBJECTS = src/prep_cif.lo src/types.lo src/raw_api.lo \
@IA64_TRUE@am__objects_11 = src/ia64/ffi.lo src/ia64/unix.lo
@M32R_TRUE@am__objects_12 = src/m32r/sysv.lo src/m32r/ffi.lo
@M68K_TRUE@am__objects_13 = src/m68k/ffi.lo src/m68k/sysv.lo
-@POWERPC_TRUE@am__objects_14 = src/powerpc/ffi.lo src/powerpc/sysv.lo \
+@POWERPC_TRUE@am__objects_14 = src/powerpc/ffi.lo \
+@POWERPC_TRUE@ src/powerpc/ffi_sysv.lo \
+@POWERPC_TRUE@ src/powerpc/ffi_linux64.lo src/powerpc/sysv.lo \
@POWERPC_TRUE@ src/powerpc/ppc_closure.lo \
@POWERPC_TRUE@ src/powerpc/linux64.lo \
@POWERPC_TRUE@ src/powerpc/linux64_closure.lo
@@ -144,6 +146,7 @@ am_libffi_la_OBJECTS = src/prep_cif.lo src/types.lo src/raw_api.lo \
@POWERPC_DARWIN_TRUE@ src/powerpc/darwin.lo \
@POWERPC_DARWIN_TRUE@ src/powerpc/darwin_closure.lo
@POWERPC_FREEBSD_TRUE@am__objects_17 = src/powerpc/ffi.lo \
+@POWERPC_FREEBSD_TRUE@ src/powerpc/ffi_sysv.lo \
@POWERPC_FREEBSD_TRUE@ src/powerpc/sysv.lo \
@POWERPC_FREEBSD_TRUE@ src/powerpc/ppc_closure.lo
@AARCH64_TRUE@am__objects_18 = src/aarch64/sysv.lo src/aarch64/ffi.lo
@@ -278,6 +281,7 @@ FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@
FGREP = @FGREP@
GREP = @GREP@
HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
+HAVE_LONG_DOUBLE_VARIANT = @HAVE_LONG_DOUBLE_VARIANT@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -387,10 +391,12 @@ EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj configure.host \
src/ia64/unix.S src/mips/ffi.c src/mips/n32.S src/mips/o32.S \
src/mips/ffitarget.h src/m32r/ffi.c src/m32r/sysv.S \
src/m32r/ffitarget.h src/m68k/ffi.c src/m68k/sysv.S \
- src/m68k/ffitarget.h src/powerpc/ffi.c src/powerpc/sysv.S \
- src/powerpc/linux64.S src/powerpc/linux64_closure.S \
- src/powerpc/ppc_closure.S src/powerpc/asm.h \
- src/powerpc/aix.S src/powerpc/darwin.S \
+ src/m68k/ffitarget.h \
+ src/powerpc/ffi.c src/powerpc/ffi_powerpc.h \
+ src/powerpc/ffi_sysv.c src/powerpc/ffi_linux64.c \
+ src/powerpc/sysv.S src/powerpc/linux64.S \
+ src/powerpc/linux64_closure.S src/powerpc/ppc_closure.S \
+ src/powerpc/asm.h src/powerpc/aix.S src/powerpc/darwin.S \
src/powerpc/aix_closure.S src/powerpc/darwin_closure.S \
src/powerpc/ffi_darwin.c src/powerpc/ffitarget.h \
src/s390/ffi.c src/s390/sysv.S src/s390/ffitarget.h \
@@ -711,6 +717,10 @@ src/powerpc/$(DEPDIR)/$(am__dirstamp):
@: > src/powerpc/$(DEPDIR)/$(am__dirstamp)
src/powerpc/ffi.lo: src/powerpc/$(am__dirstamp) \
src/powerpc/$(DEPDIR)/$(am__dirstamp)
+src/powerpc/ffi_sysv.lo: src/powerpc/$(am__dirstamp) \
+ src/powerpc/$(DEPDIR)/$(am__dirstamp)
+src/powerpc/ffi_linux64.lo: src/powerpc/$(am__dirstamp) \
+ src/powerpc/$(DEPDIR)/$(am__dirstamp)
src/powerpc/sysv.lo: src/powerpc/$(am__dirstamp) \
src/powerpc/$(DEPDIR)/$(am__dirstamp)
src/powerpc/ppc_closure.lo: src/powerpc/$(am__dirstamp) \
@@ -912,6 +922,10 @@ mostlyclean-compile:
-rm -f src/powerpc/ffi.lo
-rm -f src/powerpc/ffi_darwin.$(OBJEXT)
-rm -f src/powerpc/ffi_darwin.lo
+ -rm -f src/powerpc/ffi_linux64.$(OBJEXT)
+ -rm -f src/powerpc/ffi_linux64.lo
+ -rm -f src/powerpc/ffi_sysv.$(OBJEXT)
+ -rm -f src/powerpc/ffi_sysv.lo
-rm -f src/powerpc/linux64.$(OBJEXT)
-rm -f src/powerpc/linux64.lo
-rm -f src/powerpc/linux64_closure.$(OBJEXT)
@@ -1009,6 +1023,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/darwin_closure.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi_darwin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi_linux64.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi_sysv.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/linux64.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/linux64_closure.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ppc_closure.Plo@am__quote@
diff --git a/gcc-4.8/libffi/configure b/gcc-4.8/libffi/configure
index ce6c8adce..9ee6ab069 100755
--- a/gcc-4.8/libffi/configure
+++ b/gcc-4.8/libffi/configure
@@ -613,6 +613,7 @@ TARGET
FFI_EXEC_TRAMPOLINE_TABLE
FFI_EXEC_TRAMPOLINE_TABLE_FALSE
FFI_EXEC_TRAMPOLINE_TABLE_TRUE
+HAVE_LONG_DOUBLE_VARIANT
HAVE_LONG_DOUBLE
ALLOCA
TILE_FALSE
@@ -6392,7 +6393,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -6417,7 +6418,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -6436,7 +6440,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -10900,7 +10907,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10903 "configure"
+#line 10910 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11006,7 +11013,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11009 "configure"
+#line 11016 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11443,6 +11450,7 @@ fi
TARGETDIR="unknown"
+HAVE_LONG_DOUBLE_VARIANT=0
case "$host" in
aarch64*-*-*)
TARGET=AARCH64; TARGETDIR=aarch64
@@ -11540,6 +11548,7 @@ case "$host" in
powerpc*-*-linux* | powerpc-*-sysv*)
TARGET=POWERPC; TARGETDIR=powerpc
+ HAVE_LONG_DOUBLE_VARIANT=1
;;
powerpc-*-amigaos*)
TARGET=POWERPC; TARGETDIR=powerpc
@@ -11555,6 +11564,7 @@ case "$host" in
;;
powerpc-*-freebsd* | powerpc-*-openbsd*)
TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
+ HAVE_LONG_DOUBLE_VARIANT=1
;;
powerpc64-*-freebsd*)
TARGET=POWERPC; TARGETDIR=powerpc
@@ -12230,17 +12240,25 @@ _ACEOF
# Also AC_SUBST this variable for ffi.h.
if test -z "$HAVE_LONG_DOUBLE"; then
HAVE_LONG_DOUBLE=0
- if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
if test $ac_cv_sizeof_long_double != 0; then
+ if test $HAVE_LONG_DOUBLE_VARIANT != 0; then
+
+$as_echo "#define HAVE_LONG_DOUBLE_VARIANT 1" >>confdefs.h
+
+ HAVE_LONG_DOUBLE=1
+ else
+ if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
HAVE_LONG_DOUBLE=1
$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
fi
fi
+ fi
fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
if test "${ac_cv_c_bigendian+set}" = set; then :
diff --git a/gcc-4.8/libffi/configure.ac b/gcc-4.8/libffi/configure.ac
index 896502657..240907cd3 100644
--- a/gcc-4.8/libffi/configure.ac
+++ b/gcc-4.8/libffi/configure.ac
@@ -65,6 +65,7 @@ dnl The -no-testsuite modules omit the test subdir.
AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite)
TARGETDIR="unknown"
+HAVE_LONG_DOUBLE_VARIANT=0
case "$host" in
aarch64*-*-*)
TARGET=AARCH64; TARGETDIR=aarch64
@@ -162,6 +163,7 @@ case "$host" in
powerpc*-*-linux* | powerpc-*-sysv*)
TARGET=POWERPC; TARGETDIR=powerpc
+ HAVE_LONG_DOUBLE_VARIANT=1
;;
powerpc-*-amigaos*)
TARGET=POWERPC; TARGETDIR=powerpc
@@ -177,6 +179,7 @@ case "$host" in
;;
powerpc-*-freebsd* | powerpc-*-openbsd*)
TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
+ HAVE_LONG_DOUBLE_VARIANT=1
;;
powerpc64-*-freebsd*)
TARGET=POWERPC; TARGETDIR=powerpc
@@ -273,14 +276,20 @@ AC_CHECK_SIZEOF(long double)
# Also AC_SUBST this variable for ffi.h.
if test -z "$HAVE_LONG_DOUBLE"; then
HAVE_LONG_DOUBLE=0
- if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
if test $ac_cv_sizeof_long_double != 0; then
+ if test $HAVE_LONG_DOUBLE_VARIANT != 0; then
+ AC_DEFINE(HAVE_LONG_DOUBLE_VARIANT, 1, [Define if you support more than one size of the long double type])
+ HAVE_LONG_DOUBLE=1
+ else
+ if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
HAVE_LONG_DOUBLE=1
AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the long double type and it is bigger than a double])
fi
fi
+ fi
fi
AC_SUBST(HAVE_LONG_DOUBLE)
+AC_SUBST(HAVE_LONG_DOUBLE_VARIANT)
AC_C_BIGENDIAN
diff --git a/gcc-4.8/libffi/doc/libffi.info b/gcc-4.8/libffi/doc/libffi.info
index 110e94574..5fe3d5aff 100644
--- a/gcc-4.8/libffi/doc/libffi.info
+++ b/gcc-4.8/libffi/doc/libffi.info
@@ -1,5 +1,5 @@
-This is doc/libffi.info, produced by makeinfo version 4.13 from
-/d/gcc-4.8.1/gcc-4.8.1/libffi/doc/libffi.texi.
+This is doc/libffi.info, produced by makeinfo version 4.12 from
+/space/rguenther/gcc-4.8.3/gcc-4.8.3/libffi/doc/libffi.texi.
This manual is for Libffi, a portable foreign-function interface
library.
@@ -56,7 +56,7 @@ The calling convention is a set of assumptions made by the compiler
about where function arguments will be found on entry to a function. A
calling convention also specifies where the return value for a function
is found. The calling convention is also sometimes called the "ABI" or
-"Application Binary Interface".
+"Application Binary Interface".
Some programs may not know at the time of compilation what arguments
are to be passed to a function. For instance, an interpreter may be
@@ -161,10 +161,10 @@ To prepare a call interface object, use the function `ffi_prep_cif'.
RVALUE is a pointer to a chunk of memory that will hold the result
of the function call. This must be large enough to hold the
- result and must be suitably aligned; it is the caller's
+ result, no smaller than the system register size (generally 32 or
+ 64 bits), and must be suitably aligned; it is the caller's
responsibility to ensure this. If CIF declares that the function
returns `void' (using `ffi_type_void'), then RVALUE is ignored.
- If RVALUE is `NULL', then the return value is discarded.
AVALUES is a vector of `void *' pointers that point to the memory
locations holding the argument values for a call. If CIF declares
@@ -190,7 +190,7 @@ Here is a trivial example that calls `puts' a few times.
ffi_type *args[1];
void *values[1];
char *s;
- int rc;
+ ffi_arg rc;
/* Initialize the argument info vectors */
args[0] = &ffi_type_pointer;
@@ -198,7 +198,7 @@ Here is a trivial example that calls `puts' a few times.
/* Initialize the cif */
if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
- &ffi_type_uint, args) == FFI_OK)
+ &ffi_type_sint, args) == FFI_OK)
{
s = "Hello World!";
ffi_call(&cif, puts, &rc, values);
@@ -318,7 +318,7 @@ is perfectly happy passing structures back and forth. You must first
describe the structure to `libffi' by creating a new `ffi_type' object
for it.
- -- ffi_type:
+ -- Data type: ffi_type
The `ffi_type' has the following members:
`size_t size'
This is set by `libffi'; you should initialize it to zero.
@@ -367,6 +367,7 @@ The following example initializes a `ffi_type' object representing the
int i;
tm_type.size = tm_type.alignment = 0;
+ tm_type.type = FFI_TYPE_STRUCT;
tm_type.elements = &tm_type_elements;
for (i = 0; i < 9; i++)
@@ -443,19 +444,19 @@ closure function:
FUN is the function which will be called when the closure is
invoked. It is called with the arguments:
- CIF
+ CIF
The `ffi_cif' passed to `ffi_prep_closure_loc'.
- RET
+ RET
A pointer to the memory used for the function's return value.
FUN must fill this, unless the function is declared as
returning `void'.
- ARGS
+ ARGS
A vector of pointers to memory holding the arguments to the
function.
- USER_DATA
+ USER_DATA
The same USER_DATA that was passed to `ffi_prep_closure_loc'.
`ffi_prep_closure_loc' will return `FFI_OK' if everything went ok,
@@ -481,19 +482,21 @@ A trivial example that creates a new `puts' by binding `fputs' with
#include <ffi.h>
/* Acts like puts with the file given at time of enclosure. */
- void puts_binding(ffi_cif *cif, unsigned int *ret, void* args[],
- FILE *stream)
+ void puts_binding(ffi_cif *cif, void *ret, void* args[],
+ void *stream)
{
- *ret = fputs(*(char **)args[0], stream);
+ *(ffi_arg *)ret = fputs(*(char **)args[0], (FILE *)stream);
}
+ typedef int (*puts_t)(char *);
+
int main()
{
ffi_cif cif;
ffi_type *args[1];
ffi_closure *closure;
- int (*bound_puts)(char *);
+ void *bound_puts;
int rc;
/* Allocate closure and bound_puts */
@@ -506,13 +509,13 @@ A trivial example that creates a new `puts' by binding `fputs' with
/* Initialize the cif */
if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
- &ffi_type_uint, args) == FFI_OK)
+ &ffi_type_sint, args) == FFI_OK)
{
/* Initialize the closure, setting stream to stdout */
if (ffi_prep_closure_loc(closure, &cif, puts_binding,
stdout, bound_puts) == FFI_OK)
{
- rc = bound_puts("Hello World!");
+ rc = ((puts_t)bound_puts)("Hello World!");
/* rc now holds the result of the call to fputs */
}
}
@@ -553,7 +556,6 @@ Index
* Menu:
-* : Structures. (line 12)
* ABI: Introduction. (line 13)
* Application Binary Interface: Introduction. (line 13)
* calling convention: Introduction. (line 13)
@@ -599,19 +601,19 @@ Index

Tag Table:
-Node: Top722
-Node: Introduction1470
-Node: Using libffi3106
-Node: The Basics3592
-Node: Simple Example7234
-Node: Types8261
-Node: Primitive Types8544
-Node: Structures10364
-Node: Type Example11224
-Node: Multiple ABIs12447
-Node: The Closure API12818
-Node: Closure Example15762
-Node: Missing Features17321
-Node: Index17774
+Node: Top736
+Node: Introduction1484
+Node: Using libffi3120
+Node: The Basics3606
+Node: Simple Example7260
+Node: Types8291
+Node: Primitive Types8574
+Node: Structures10394
+Node: Type Example11264
+Node: Multiple ABIs12530
+Node: The Closure API12901
+Node: Closure Example15845
+Node: Missing Features17453
+Node: Index17906

End Tag Table
diff --git a/gcc-4.8/libffi/doc/libffi.texi b/gcc-4.8/libffi/doc/libffi.texi
index f0e6517de..b03f98332 100644
--- a/gcc-4.8/libffi/doc/libffi.texi
+++ b/gcc-4.8/libffi/doc/libffi.texi
@@ -184,11 +184,11 @@ This calls the function @var{fn} according to the description given in
@var{rvalue} is a pointer to a chunk of memory that will hold the
result of the function call. This must be large enough to hold the
-result and must be suitably aligned; it is the caller's responsibility
+result, no smaller than the system register size (generally 32 or 64
+bits), and must be suitably aligned; it is the caller's responsibility
to ensure this. If @var{cif} declares that the function returns
@code{void} (using @code{ffi_type_void}), then @var{rvalue} is
-ignored. If @var{rvalue} is @samp{NULL}, then the return value is
-discarded.
+ignored.
@var{avalues} is a vector of @code{void *} pointers that point to the
memory locations holding the argument values for a call. If @var{cif}
@@ -214,7 +214,7 @@ int main()
ffi_type *args[1];
void *values[1];
char *s;
- int rc;
+ ffi_arg rc;
/* Initialize the argument info vectors */
args[0] = &ffi_type_pointer;
@@ -222,7 +222,7 @@ int main()
/* Initialize the cif */
if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
- &ffi_type_uint, args) == FFI_OK)
+ &ffi_type_sint, args) == FFI_OK)
@{
s = "Hello World!";
ffi_call(&cif, puts, &rc, values);
@@ -360,7 +360,7 @@ You must first describe the structure to @samp{libffi} by creating a
new @code{ffi_type} object for it.
@tindex ffi_type
-@deftp ffi_type
+@deftp {Data type} ffi_type
The @code{ffi_type} has the following members:
@table @code
@item size_t size
@@ -414,6 +414,7 @@ Here is the corresponding code to describe this struct to
int i;
tm_type.size = tm_type.alignment = 0;
+ tm_type.type = FFI_TYPE_STRUCT;
tm_type.elements = &tm_type_elements;
for (i = 0; i < 9; i++)
@@ -540,19 +541,21 @@ A trivial example that creates a new @code{puts} by binding
#include <ffi.h>
/* Acts like puts with the file given at time of enclosure. */
-void puts_binding(ffi_cif *cif, unsigned int *ret, void* args[],
- FILE *stream)
+void puts_binding(ffi_cif *cif, void *ret, void* args[],
+ void *stream)
@{
- *ret = fputs(*(char **)args[0], stream);
+ *(ffi_arg *)ret = fputs(*(char **)args[0], (FILE *)stream);
@}
+typedef int (*puts_t)(char *);
+
int main()
@{
ffi_cif cif;
ffi_type *args[1];
ffi_closure *closure;
- int (*bound_puts)(char *);
+ void *bound_puts;
int rc;
/* Allocate closure and bound_puts */
@@ -565,13 +568,13 @@ int main()
/* Initialize the cif */
if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
- &ffi_type_uint, args) == FFI_OK)
+ &ffi_type_sint, args) == FFI_OK)
@{
/* Initialize the closure, setting stream to stdout */
if (ffi_prep_closure_loc(closure, &cif, puts_binding,
stdout, bound_puts) == FFI_OK)
@{
- rc = bound_puts("Hello World!");
+ rc = ((puts_t)bound_puts)("Hello World!");
/* rc now holds the result of the call to fputs */
@}
@}
diff --git a/gcc-4.8/libffi/fficonfig.h.in b/gcc-4.8/libffi/fficonfig.h.in
index 52694eb9f..19d66d021 100644
--- a/gcc-4.8/libffi/fficonfig.h.in
+++ b/gcc-4.8/libffi/fficonfig.h.in
@@ -73,6 +73,9 @@
/* Define if you have the long double type and it is bigger than a double */
#undef HAVE_LONG_DOUBLE
+/* Define if you support more than one size of the long double type */
+#undef HAVE_LONG_DOUBLE_VARIANT
+
/* Define to 1 if you have the `memcpy' function. */
#undef HAVE_MEMCPY
diff --git a/gcc-4.8/libffi/include/Makefile.in b/gcc-4.8/libffi/include/Makefile.in
index 2bc4a29cf..c923bf212 100644
--- a/gcc-4.8/libffi/include/Makefile.in
+++ b/gcc-4.8/libffi/include/Makefile.in
@@ -113,6 +113,7 @@ FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@
FGREP = @FGREP@
GREP = @GREP@
HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
+HAVE_LONG_DOUBLE_VARIANT = @HAVE_LONG_DOUBLE_VARIANT@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
diff --git a/gcc-4.8/libffi/include/ffi.h.in b/gcc-4.8/libffi/include/ffi.h.in
index 84017f1f4..380673b0b 100644
--- a/gcc-4.8/libffi/include/ffi.h.in
+++ b/gcc-4.8/libffi/include/ffi.h.in
@@ -207,6 +207,11 @@ typedef struct {
#endif
} ffi_cif;
+#if HAVE_LONG_DOUBLE_VARIANT
+/* Used to adjust size/alignment of ffi types. */
+void ffi_prep_types (ffi_abi abi);
+# endif
+
/* Used internally, but overridden by some architectures */
ffi_status ffi_prep_cif_core(ffi_cif *cif,
ffi_abi abi,
diff --git a/gcc-4.8/libffi/man/Makefile.in b/gcc-4.8/libffi/man/Makefile.in
index 0ac4b71de..743e67b7d 100644
--- a/gcc-4.8/libffi/man/Makefile.in
+++ b/gcc-4.8/libffi/man/Makefile.in
@@ -111,6 +111,7 @@ FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@
FGREP = @FGREP@
GREP = @GREP@
HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
+HAVE_LONG_DOUBLE_VARIANT = @HAVE_LONG_DOUBLE_VARIANT@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
diff --git a/gcc-4.8/libffi/src/powerpc/ffi.c b/gcc-4.8/libffi/src/powerpc/ffi.c
index 26f7cf19b..0bd270c7e 100644
--- a/gcc-4.8/libffi/src/powerpc/ffi.c
+++ b/gcc-4.8/libffi/src/powerpc/ffi.c
@@ -1,5 +1,6 @@
/* -----------------------------------------------------------------------
- ffi.c - Copyright (C) 2011 Anthony Green
+ ffi.c - Copyright (C) 2013 IBM
+ Copyright (C) 2011 Anthony Green
Copyright (C) 2011 Kyle Moffett
Copyright (C) 2008 Red Hat, Inc
Copyright (C) 2007, 2008 Free Software Foundation, Inc
@@ -27,966 +28,104 @@
OTHER DEALINGS IN THE SOFTWARE.
----------------------------------------------------------------------- */
-#include <ffi.h>
-#include <ffi_common.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-
-
-extern void ffi_closure_SYSV (void);
-extern void FFI_HIDDEN ffi_closure_LINUX64 (void);
-
-enum {
- /* The assembly depends on these exact flags. */
- FLAG_RETURNS_SMST = 1 << (31-31), /* Used for FFI_SYSV small structs. */
- FLAG_RETURNS_NOTHING = 1 << (31-30), /* These go in cr7 */
-#ifndef __NO_FPRS__
- FLAG_RETURNS_FP = 1 << (31-29),
-#endif
- FLAG_RETURNS_64BITS = 1 << (31-28),
-
- FLAG_RETURNS_128BITS = 1 << (31-27), /* cr6 */
-
- FLAG_ARG_NEEDS_COPY = 1 << (31- 7),
-#ifndef __NO_FPRS__
- FLAG_FP_ARGUMENTS = 1 << (31- 6), /* cr1.eq; specified by ABI */
-#endif
- FLAG_4_GPR_ARGUMENTS = 1 << (31- 5),
- FLAG_RETVAL_REFERENCE = 1 << (31- 4)
-};
-
-/* About the SYSV ABI. */
-#define ASM_NEEDS_REGISTERS 4
-#define NUM_GPR_ARG_REGISTERS 8
-#ifndef __NO_FPRS__
-# define NUM_FPR_ARG_REGISTERS 8
-#endif
-
-/* ffi_prep_args_SYSV is called by the assembly routine once stack space
- has been allocated for the function's arguments.
-
- The stack layout we want looks like this:
-
- | Return address from ffi_call_SYSV 4bytes | higher addresses
- |--------------------------------------------|
- | Previous backchain pointer 4 | stack pointer here
- |--------------------------------------------|<+ <<< on entry to
- | Saved r28-r31 4*4 | | ffi_call_SYSV
- |--------------------------------------------| |
- | GPR registers r3-r10 8*4 | | ffi_call_SYSV
- |--------------------------------------------| |
- | FPR registers f1-f8 (optional) 8*8 | |
- |--------------------------------------------| | stack |
- | Space for copied structures | | grows |
- |--------------------------------------------| | down V
- | Parameters that didn't fit in registers | |
- |--------------------------------------------| | lower addresses
- | Space for callee's LR 4 | |
- |--------------------------------------------| | stack pointer here
- | Current backchain pointer 4 |-/ during
- |--------------------------------------------| <<< ffi_call_SYSV
-
-*/
-
-void
-ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack)
-{
- const unsigned bytes = ecif->cif->bytes;
- const unsigned flags = ecif->cif->flags;
-
- typedef union {
- char *c;
- unsigned *u;
- long long *ll;
- float *f;
- double *d;
- } valp;
-
- /* 'stacktop' points at the previous backchain pointer. */
- valp stacktop;
-
- /* 'gpr_base' points at the space for gpr3, and grows upwards as
- we use GPR registers. */
- valp gpr_base;
- int intarg_count;
-
-#ifndef __NO_FPRS__
- /* 'fpr_base' points at the space for fpr1, and grows upwards as
- we use FPR registers. */
- valp fpr_base;
- int fparg_count;
-#endif
-
- /* 'copy_space' grows down as we put structures in it. It should
- stay 16-byte aligned. */
- valp copy_space;
-
- /* 'next_arg' grows up as we put parameters in it. */
- valp next_arg;
-
- int i;
- ffi_type **ptr;
-#ifndef __NO_FPRS__
- double double_tmp;
-#endif
- union {
- void **v;
- char **c;
- signed char **sc;
- unsigned char **uc;
- signed short **ss;
- unsigned short **us;
- unsigned int **ui;
- long long **ll;
- float **f;
- double **d;
- } p_argv;
- size_t struct_copy_size;
- unsigned gprvalue;
-
- stacktop.c = (char *) stack + bytes;
- gpr_base.u = stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS;
- intarg_count = 0;
-#ifndef __NO_FPRS__
- fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS;
- fparg_count = 0;
- copy_space.c = ((flags & FLAG_FP_ARGUMENTS) ? fpr_base.c : gpr_base.c);
-#else
- copy_space.c = gpr_base.c;
-#endif
- next_arg.u = stack + 2;
-
- /* Check that everything starts aligned properly. */
- FFI_ASSERT (((unsigned long) (char *) stack & 0xF) == 0);
- FFI_ASSERT (((unsigned long) copy_space.c & 0xF) == 0);
- FFI_ASSERT (((unsigned long) stacktop.c & 0xF) == 0);
- FFI_ASSERT ((bytes & 0xF) == 0);
- FFI_ASSERT (copy_space.c >= next_arg.c);
-
- /* Deal with return values that are actually pass-by-reference. */
- if (flags & FLAG_RETVAL_REFERENCE)
- {
- *gpr_base.u++ = (unsigned long) (char *) ecif->rvalue;
- intarg_count++;
- }
-
- /* Now for the arguments. */
- p_argv.v = ecif->avalue;
- for (ptr = ecif->cif->arg_types, i = ecif->cif->nargs;
- i > 0;
- i--, ptr++, p_argv.v++)
- {
- unsigned short typenum = (*ptr)->type;
-
- /* We may need to handle some values depending on ABI */
- if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT) {
- if (typenum == FFI_TYPE_FLOAT)
- typenum = FFI_TYPE_UINT32;
- if (typenum == FFI_TYPE_DOUBLE)
- typenum = FFI_TYPE_UINT64;
- if (typenum == FFI_TYPE_LONGDOUBLE)
- typenum = FFI_TYPE_UINT128;
- } else if (ecif->cif->abi != FFI_LINUX) {
-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
- if (typenum == FFI_TYPE_LONGDOUBLE)
- typenum = FFI_TYPE_STRUCT;
-#endif
- }
-
- /* Now test the translated value */
- switch (typenum) {
-#ifndef __NO_FPRS__
- case FFI_TYPE_FLOAT:
- /* With FFI_LINUX_SOFT_FLOAT floats are handled like UINT32. */
- double_tmp = **p_argv.f;
- if (fparg_count >= NUM_FPR_ARG_REGISTERS)
- {
- *next_arg.f = (float) double_tmp;
- next_arg.u += 1;
- intarg_count++;
- }
- else
- *fpr_base.d++ = double_tmp;
- fparg_count++;
- FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
- break;
-
- case FFI_TYPE_DOUBLE:
- /* With FFI_LINUX_SOFT_FLOAT doubles are handled like UINT64. */
- double_tmp = **p_argv.d;
-
- if (fparg_count >= NUM_FPR_ARG_REGISTERS)
- {
- if (intarg_count >= NUM_GPR_ARG_REGISTERS
- && intarg_count % 2 != 0)
- {
- intarg_count++;
- next_arg.u++;
- }
- *next_arg.d = double_tmp;
- next_arg.u += 2;
- }
- else
- *fpr_base.d++ = double_tmp;
- fparg_count++;
- FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
- break;
-
-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
- case FFI_TYPE_LONGDOUBLE:
- double_tmp = (*p_argv.d)[0];
-
- if (fparg_count >= NUM_FPR_ARG_REGISTERS - 1)
- {
- if (intarg_count >= NUM_GPR_ARG_REGISTERS
- && intarg_count % 2 != 0)
- {
- intarg_count++;
- next_arg.u++;
- }
- *next_arg.d = double_tmp;
- next_arg.u += 2;
- double_tmp = (*p_argv.d)[1];
- *next_arg.d = double_tmp;
- next_arg.u += 2;
- }
- else
- {
- *fpr_base.d++ = double_tmp;
- double_tmp = (*p_argv.d)[1];
- *fpr_base.d++ = double_tmp;
- }
-
- fparg_count += 2;
- FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
- break;
-#endif
-#endif /* have FPRs */
-
- /*
- * The soft float ABI for long doubles works like this, a long double
- * is passed in four consecutive GPRs if available. A maximum of 2
- * long doubles can be passed in gprs. If we do not have 4 GPRs
- * left, the long double is passed on the stack, 4-byte aligned.
- */
- case FFI_TYPE_UINT128: {
- unsigned int int_tmp = (*p_argv.ui)[0];
- unsigned int ii;
- if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3) {
- if (intarg_count < NUM_GPR_ARG_REGISTERS)
- intarg_count += NUM_GPR_ARG_REGISTERS - intarg_count;
- *(next_arg.u++) = int_tmp;
- for (ii = 1; ii < 4; ii++) {
- int_tmp = (*p_argv.ui)[ii];
- *(next_arg.u++) = int_tmp;
- }
- } else {
- *(gpr_base.u++) = int_tmp;
- for (ii = 1; ii < 4; ii++) {
- int_tmp = (*p_argv.ui)[ii];
- *(gpr_base.u++) = int_tmp;
- }
- }
- intarg_count += 4;
- break;
- }
-
- case FFI_TYPE_UINT64:
- case FFI_TYPE_SINT64:
- if (intarg_count == NUM_GPR_ARG_REGISTERS-1)
- intarg_count++;
- if (intarg_count >= NUM_GPR_ARG_REGISTERS)
- {
- if (intarg_count % 2 != 0)
- {
- intarg_count++;
- next_arg.u++;
- }
- *next_arg.ll = **p_argv.ll;
- next_arg.u += 2;
- }
- else
- {
- /* whoops: abi states only certain register pairs
- * can be used for passing long long int
- * specifically (r3,r4), (r5,r6), (r7,r8),
- * (r9,r10) and if next arg is long long but
- * not correct starting register of pair then skip
- * until the proper starting register
- */
- if (intarg_count % 2 != 0)
- {
- intarg_count ++;
- gpr_base.u++;
- }
- *gpr_base.ll++ = **p_argv.ll;
- }
- intarg_count += 2;
- break;
-
- case FFI_TYPE_STRUCT:
- struct_copy_size = ((*ptr)->size + 15) & ~0xF;
- copy_space.c -= struct_copy_size;
- memcpy (copy_space.c, *p_argv.c, (*ptr)->size);
-
- gprvalue = (unsigned long) copy_space.c;
-
- FFI_ASSERT (copy_space.c > next_arg.c);
- FFI_ASSERT (flags & FLAG_ARG_NEEDS_COPY);
- goto putgpr;
-
- case FFI_TYPE_UINT8:
- gprvalue = **p_argv.uc;
- goto putgpr;
- case FFI_TYPE_SINT8:
- gprvalue = **p_argv.sc;
- goto putgpr;
- case FFI_TYPE_UINT16:
- gprvalue = **p_argv.us;
- goto putgpr;
- case FFI_TYPE_SINT16:
- gprvalue = **p_argv.ss;
- goto putgpr;
-
- case FFI_TYPE_INT:
- case FFI_TYPE_UINT32:
- case FFI_TYPE_SINT32:
- case FFI_TYPE_POINTER:
-
- gprvalue = **p_argv.ui;
-
- putgpr:
- if (intarg_count >= NUM_GPR_ARG_REGISTERS)
- *next_arg.u++ = gprvalue;
- else
- *gpr_base.u++ = gprvalue;
- intarg_count++;
- break;
- }
- }
-
- /* Check that we didn't overrun the stack... */
- FFI_ASSERT (copy_space.c >= next_arg.c);
- FFI_ASSERT (gpr_base.u <= stacktop.u - ASM_NEEDS_REGISTERS);
-#ifndef __NO_FPRS__
- FFI_ASSERT (fpr_base.u
- <= stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS);
-#endif
- FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4);
-}
-
-/* About the LINUX64 ABI. */
-enum {
- NUM_GPR_ARG_REGISTERS64 = 8,
- NUM_FPR_ARG_REGISTERS64 = 13
-};
-enum { ASM_NEEDS_REGISTERS64 = 4 };
-
-/* ffi_prep_args64 is called by the assembly routine once stack space
- has been allocated for the function's arguments.
-
- The stack layout we want looks like this:
-
- | Ret addr from ffi_call_LINUX64 8bytes | higher addresses
- |--------------------------------------------|
- | CR save area 8bytes |
- |--------------------------------------------|
- | Previous backchain pointer 8 | stack pointer here
- |--------------------------------------------|<+ <<< on entry to
- | Saved r28-r31 4*8 | | ffi_call_LINUX64
- |--------------------------------------------| |
- | GPR registers r3-r10 8*8 | |
- |--------------------------------------------| |
- | FPR registers f1-f13 (optional) 13*8 | |
- |--------------------------------------------| |
- | Parameter save area | |
- |--------------------------------------------| |
- | TOC save area 8 | |
- |--------------------------------------------| | stack |
- | Linker doubleword 8 | | grows |
- |--------------------------------------------| | down V
- | Compiler doubleword 8 | |
- |--------------------------------------------| | lower addresses
- | Space for callee's LR 8 | |
- |--------------------------------------------| |
- | CR save area 8 | |
- |--------------------------------------------| | stack pointer here
- | Current backchain pointer 8 |-/ during
- |--------------------------------------------| <<< ffi_call_LINUX64
-
-*/
+#include "ffi.h"
+#include "ffi_common.h"
+#include "ffi_powerpc.h"
+#if HAVE_LONG_DOUBLE_VARIANT
+/* Adjust ffi_type_longdouble. */
void FFI_HIDDEN
-ffi_prep_args64 (extended_cif *ecif, unsigned long *const stack)
+ffi_prep_types (ffi_abi abi)
{
- const unsigned long bytes = ecif->cif->bytes;
- const unsigned long flags = ecif->cif->flags;
-
- typedef union {
- char *c;
- unsigned long *ul;
- float *f;
- double *d;
- } valp;
-
- /* 'stacktop' points at the previous backchain pointer. */
- valp stacktop;
-
- /* 'next_arg' points at the space for gpr3, and grows upwards as
- we use GPR registers, then continues at rest. */
- valp gpr_base;
- valp gpr_end;
- valp rest;
- valp next_arg;
-
- /* 'fpr_base' points at the space for fpr3, and grows upwards as
- we use FPR registers. */
- valp fpr_base;
- int fparg_count;
-
- int i, words;
- ffi_type **ptr;
- double double_tmp;
- union {
- void **v;
- char **c;
- signed char **sc;
- unsigned char **uc;
- signed short **ss;
- unsigned short **us;
- signed int **si;
- unsigned int **ui;
- unsigned long **ul;
- float **f;
- double **d;
- } p_argv;
- unsigned long gprvalue;
-
- stacktop.c = (char *) stack + bytes;
- gpr_base.ul = stacktop.ul - ASM_NEEDS_REGISTERS64 - NUM_GPR_ARG_REGISTERS64;
- gpr_end.ul = gpr_base.ul + NUM_GPR_ARG_REGISTERS64;
- rest.ul = stack + 6 + NUM_GPR_ARG_REGISTERS64;
- fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS64;
- fparg_count = 0;
- next_arg.ul = gpr_base.ul;
-
- /* Check that everything starts aligned properly. */
- FFI_ASSERT (((unsigned long) (char *) stack & 0xF) == 0);
- FFI_ASSERT (((unsigned long) stacktop.c & 0xF) == 0);
- FFI_ASSERT ((bytes & 0xF) == 0);
-
- /* Deal with return values that are actually pass-by-reference. */
- if (flags & FLAG_RETVAL_REFERENCE)
- *next_arg.ul++ = (unsigned long) (char *) ecif->rvalue;
-
- /* Now for the arguments. */
- p_argv.v = ecif->avalue;
- for (ptr = ecif->cif->arg_types, i = ecif->cif->nargs;
- i > 0;
- i--, ptr++, p_argv.v++)
- {
- switch ((*ptr)->type)
- {
- case FFI_TYPE_FLOAT:
- double_tmp = **p_argv.f;
- *next_arg.f = (float) double_tmp;
- if (++next_arg.ul == gpr_end.ul)
- next_arg.ul = rest.ul;
- if (fparg_count < NUM_FPR_ARG_REGISTERS64)
- *fpr_base.d++ = double_tmp;
- fparg_count++;
- FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
- break;
-
- case FFI_TYPE_DOUBLE:
- double_tmp = **p_argv.d;
- *next_arg.d = double_tmp;
- if (++next_arg.ul == gpr_end.ul)
- next_arg.ul = rest.ul;
- if (fparg_count < NUM_FPR_ARG_REGISTERS64)
- *fpr_base.d++ = double_tmp;
- fparg_count++;
- FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
- break;
-
-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
- case FFI_TYPE_LONGDOUBLE:
- double_tmp = (*p_argv.d)[0];
- *next_arg.d = double_tmp;
- if (++next_arg.ul == gpr_end.ul)
- next_arg.ul = rest.ul;
- if (fparg_count < NUM_FPR_ARG_REGISTERS64)
- *fpr_base.d++ = double_tmp;
- fparg_count++;
- double_tmp = (*p_argv.d)[1];
- *next_arg.d = double_tmp;
- if (++next_arg.ul == gpr_end.ul)
- next_arg.ul = rest.ul;
- if (fparg_count < NUM_FPR_ARG_REGISTERS64)
- *fpr_base.d++ = double_tmp;
- fparg_count++;
- FFI_ASSERT (__LDBL_MANT_DIG__ == 106);
- FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
- break;
-#endif
-
- case FFI_TYPE_STRUCT:
- words = ((*ptr)->size + 7) / 8;
- if (next_arg.ul >= gpr_base.ul && next_arg.ul + words > gpr_end.ul)
- {
- size_t first = gpr_end.c - next_arg.c;
- memcpy (next_arg.c, *p_argv.c, first);
- memcpy (rest.c, *p_argv.c + first, (*ptr)->size - first);
- next_arg.c = rest.c + words * 8 - first;
- }
- else
- {
- char *where = next_arg.c;
-
-#ifndef __LITTLE_ENDIAN__
- /* Structures with size less than eight bytes are passed
- left-padded. */
- if ((*ptr)->size < 8)
- where += 8 - (*ptr)->size;
-#endif
- memcpy (where, *p_argv.c, (*ptr)->size);
- next_arg.ul += words;
- if (next_arg.ul == gpr_end.ul)
- next_arg.ul = rest.ul;
- }
- break;
-
- case FFI_TYPE_UINT8:
- gprvalue = **p_argv.uc;
- goto putgpr;
- case FFI_TYPE_SINT8:
- gprvalue = **p_argv.sc;
- goto putgpr;
- case FFI_TYPE_UINT16:
- gprvalue = **p_argv.us;
- goto putgpr;
- case FFI_TYPE_SINT16:
- gprvalue = **p_argv.ss;
- goto putgpr;
- case FFI_TYPE_UINT32:
- gprvalue = **p_argv.ui;
- goto putgpr;
- case FFI_TYPE_INT:
- case FFI_TYPE_SINT32:
- gprvalue = **p_argv.si;
- goto putgpr;
-
- case FFI_TYPE_UINT64:
- case FFI_TYPE_SINT64:
- case FFI_TYPE_POINTER:
- gprvalue = **p_argv.ul;
- putgpr:
- *next_arg.ul++ = gprvalue;
- if (next_arg.ul == gpr_end.ul)
- next_arg.ul = rest.ul;
- break;
- }
- }
-
- FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS
- || (next_arg.ul >= gpr_base.ul
- && next_arg.ul <= gpr_base.ul + 4));
+# if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+# ifdef POWERPC64
+ ffi_prep_types_linux64 (abi);
+# else
+ ffi_prep_types_sysv (abi);
+# endif
+# endif
}
-
-
+#endif
/* Perform machine dependent cif processing */
-ffi_status
+ffi_status FFI_HIDDEN
ffi_prep_cif_machdep (ffi_cif *cif)
{
- /* All this is for the SYSV and LINUX64 ABI. */
- int i;
- ffi_type **ptr;
- unsigned bytes;
- int fparg_count = 0, intarg_count = 0;
- unsigned flags = 0;
- unsigned struct_copy_size = 0;
- unsigned type = cif->rtype->type;
- unsigned size = cif->rtype->size;
-
- if (cif->abi != FFI_LINUX64)
- {
- /* All the machine-independent calculation of cif->bytes will be wrong.
- Redo the calculation for SYSV. */
-
- /* Space for the frame pointer, callee's LR, and the asm's temp regs. */
- bytes = (2 + ASM_NEEDS_REGISTERS) * sizeof (int);
-
- /* Space for the GPR registers. */
- bytes += NUM_GPR_ARG_REGISTERS * sizeof (int);
- }
- else
- {
- /* 64-bit ABI. */
-
- /* Space for backchain, CR, LR, cc/ld doubleword, TOC and the asm's temp
- regs. */
- bytes = (6 + ASM_NEEDS_REGISTERS64) * sizeof (long);
-
- /* Space for the mandatory parm save area and general registers. */
- bytes += 2 * NUM_GPR_ARG_REGISTERS64 * sizeof (long);
- }
-
- /* Return value handling. The rules for SYSV are as follows:
- - 32-bit (or less) integer values are returned in gpr3;
- - Structures of size <= 4 bytes also returned in gpr3;
- - 64-bit integer values and structures between 5 and 8 bytes are returned
- in gpr3 and gpr4;
- - Single/double FP values are returned in fpr1;
- - Larger structures are allocated space and a pointer is passed as
- the first argument.
- - long doubles (if not equivalent to double) are returned in
- fpr1,fpr2 for Linux and as for large structs for SysV.
- For LINUX64:
- - integer values in gpr3;
- - Structures/Unions by reference;
- - Single/double FP values in fpr1, long double in fpr1,fpr2.
- - soft-float float/doubles are treated as UINT32/UINT64 respectivley.
- - soft-float long doubles are returned in gpr3-gpr6. */
- /* First translate for softfloat/nonlinux */
- if (cif->abi == FFI_LINUX_SOFT_FLOAT) {
- if (type == FFI_TYPE_FLOAT)
- type = FFI_TYPE_UINT32;
- if (type == FFI_TYPE_DOUBLE)
- type = FFI_TYPE_UINT64;
- if (type == FFI_TYPE_LONGDOUBLE)
- type = FFI_TYPE_UINT128;
- } else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) {
-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
- if (type == FFI_TYPE_LONGDOUBLE)
- type = FFI_TYPE_STRUCT;
-#endif
- }
-
- switch (type)
- {
-#ifndef __NO_FPRS__
-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
- case FFI_TYPE_LONGDOUBLE:
- flags |= FLAG_RETURNS_128BITS;
- /* Fall through. */
-#endif
- case FFI_TYPE_DOUBLE:
- flags |= FLAG_RETURNS_64BITS;
- /* Fall through. */
- case FFI_TYPE_FLOAT:
- flags |= FLAG_RETURNS_FP;
- break;
-#endif
-
- case FFI_TYPE_UINT128:
- flags |= FLAG_RETURNS_128BITS;
- /* Fall through. */
- case FFI_TYPE_UINT64:
- case FFI_TYPE_SINT64:
- flags |= FLAG_RETURNS_64BITS;
- break;
-
- case FFI_TYPE_STRUCT:
- /*
- * The final SYSV ABI says that structures smaller or equal 8 bytes
- * are returned in r3/r4. The FFI_GCC_SYSV ABI instead returns them
- * in memory.
- *
- * NOTE: The assembly code can safely assume that it just needs to
- * store both r3 and r4 into a 8-byte word-aligned buffer, as
- * we allocate a temporary buffer in ffi_call() if this flag is
- * set.
- */
- if (cif->abi == FFI_SYSV && size <= 8)
- flags |= FLAG_RETURNS_SMST;
- intarg_count++;
- flags |= FLAG_RETVAL_REFERENCE;
- /* Fall through. */
- case FFI_TYPE_VOID:
- flags |= FLAG_RETURNS_NOTHING;
- break;
-
- default:
- /* Returns 32-bit integer, or similar. Nothing to do here. */
- break;
- }
-
- if (cif->abi != FFI_LINUX64)
- /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the
- first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest
- goes on the stack. Structures and long doubles (if not equivalent
- to double) are passed as a pointer to a copy of the structure.
- Stuff on the stack needs to keep proper alignment. */
- for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
- {
- unsigned short typenum = (*ptr)->type;
-
- /* We may need to handle some values depending on ABI */
- if (cif->abi == FFI_LINUX_SOFT_FLOAT) {
- if (typenum == FFI_TYPE_FLOAT)
- typenum = FFI_TYPE_UINT32;
- if (typenum == FFI_TYPE_DOUBLE)
- typenum = FFI_TYPE_UINT64;
- if (typenum == FFI_TYPE_LONGDOUBLE)
- typenum = FFI_TYPE_UINT128;
- } else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) {
-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
- if (typenum == FFI_TYPE_LONGDOUBLE)
- typenum = FFI_TYPE_STRUCT;
-#endif
- }
-
- switch (typenum) {
-#ifndef __NO_FPRS__
- case FFI_TYPE_FLOAT:
- fparg_count++;
- /* floating singles are not 8-aligned on stack */
- break;
-
-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
- case FFI_TYPE_LONGDOUBLE:
- fparg_count++;
- /* Fall thru */
-#endif
- case FFI_TYPE_DOUBLE:
- fparg_count++;
- /* If this FP arg is going on the stack, it must be
- 8-byte-aligned. */
- if (fparg_count > NUM_FPR_ARG_REGISTERS
- && intarg_count >= NUM_GPR_ARG_REGISTERS
- && intarg_count % 2 != 0)
- intarg_count++;
- break;
-#endif
- case FFI_TYPE_UINT128:
- /*
- * A long double in FFI_LINUX_SOFT_FLOAT can use only a set
- * of four consecutive gprs. If we do not have enough, we
- * have to adjust the intarg_count value.
- */
- if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3
- && intarg_count < NUM_GPR_ARG_REGISTERS)
- intarg_count = NUM_GPR_ARG_REGISTERS;
- intarg_count += 4;
- break;
-
- case FFI_TYPE_UINT64:
- case FFI_TYPE_SINT64:
- /* 'long long' arguments are passed as two words, but
- either both words must fit in registers or both go
- on the stack. If they go on the stack, they must
- be 8-byte-aligned.
-
- Also, only certain register pairs can be used for
- passing long long int -- specifically (r3,r4), (r5,r6),
- (r7,r8), (r9,r10).
- */
- if (intarg_count == NUM_GPR_ARG_REGISTERS-1
- || intarg_count % 2 != 0)
- intarg_count++;
- intarg_count += 2;
- break;
-
- case FFI_TYPE_STRUCT:
- /* We must allocate space for a copy of these to enforce
- pass-by-value. Pad the space up to a multiple of 16
- bytes (the maximum alignment required for anything under
- the SYSV ABI). */
- struct_copy_size += ((*ptr)->size + 15) & ~0xF;
- /* Fall through (allocate space for the pointer). */
-
- case FFI_TYPE_POINTER:
- case FFI_TYPE_INT:
- case FFI_TYPE_UINT32:
- case FFI_TYPE_SINT32:
- case FFI_TYPE_UINT16:
- case FFI_TYPE_SINT16:
- case FFI_TYPE_UINT8:
- case FFI_TYPE_SINT8:
- /* Everything else is passed as a 4-byte word in a GPR, either
- the object itself or a pointer to it. */
- intarg_count++;
- break;
- default:
- FFI_ASSERT (0);
- }
- }
- else
- for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
- {
- switch ((*ptr)->type)
- {
-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
- case FFI_TYPE_LONGDOUBLE:
- if (cif->abi == FFI_LINUX_SOFT_FLOAT)
- intarg_count += 4;
- else
- {
- fparg_count += 2;
- intarg_count += 2;
- }
- break;
-#endif
- case FFI_TYPE_FLOAT:
- case FFI_TYPE_DOUBLE:
- fparg_count++;
- intarg_count++;
- break;
-
- case FFI_TYPE_STRUCT:
- intarg_count += ((*ptr)->size + 7) / 8;
- break;
-
- case FFI_TYPE_POINTER:
- case FFI_TYPE_UINT64:
- case FFI_TYPE_SINT64:
- case FFI_TYPE_INT:
- case FFI_TYPE_UINT32:
- case FFI_TYPE_SINT32:
- case FFI_TYPE_UINT16:
- case FFI_TYPE_SINT16:
- case FFI_TYPE_UINT8:
- case FFI_TYPE_SINT8:
- /* Everything else is passed as a 8-byte word in a GPR, either
- the object itself or a pointer to it. */
- intarg_count++;
- break;
- default:
- FFI_ASSERT (0);
- }
- }
-
-#ifndef __NO_FPRS__
- if (fparg_count != 0)
- flags |= FLAG_FP_ARGUMENTS;
-#endif
- if (intarg_count > 4)
- flags |= FLAG_4_GPR_ARGUMENTS;
- if (struct_copy_size != 0)
- flags |= FLAG_ARG_NEEDS_COPY;
-
- if (cif->abi != FFI_LINUX64)
- {
-#ifndef __NO_FPRS__
- /* Space for the FPR registers, if needed. */
- if (fparg_count != 0)
- bytes += NUM_FPR_ARG_REGISTERS * sizeof (double);
+#ifdef POWERPC64
+ return ffi_prep_cif_linux64 (cif);
+#else
+ return ffi_prep_cif_sysv (cif);
#endif
+}
- /* Stack space. */
- if (intarg_count > NUM_GPR_ARG_REGISTERS)
- bytes += (intarg_count - NUM_GPR_ARG_REGISTERS) * sizeof (int);
-#ifndef __NO_FPRS__
- if (fparg_count > NUM_FPR_ARG_REGISTERS)
- bytes += (fparg_count - NUM_FPR_ARG_REGISTERS) * sizeof (double);
-#endif
- }
- else
- {
-#ifndef __NO_FPRS__
- /* Space for the FPR registers, if needed. */
- if (fparg_count != 0)
- bytes += NUM_FPR_ARG_REGISTERS64 * sizeof (double);
+ffi_status FFI_HIDDEN
+ffi_prep_cif_machdep_var (ffi_cif *cif,
+ unsigned int nfixedargs MAYBE_UNUSED,
+ unsigned int ntotalargs MAYBE_UNUSED)
+{
+#ifdef POWERPC64
+ return ffi_prep_cif_linux64_var (cif, nfixedargs, ntotalargs);
+#else
+ return ffi_prep_cif_sysv (cif);
#endif
-
- /* Stack space. */
- if (intarg_count > NUM_GPR_ARG_REGISTERS64)
- bytes += (intarg_count - NUM_GPR_ARG_REGISTERS64) * sizeof (long);
- }
-
- /* The stack space allocated needs to be a multiple of 16 bytes. */
- bytes = (bytes + 15) & ~0xF;
-
- /* Add in the space for the copied structures. */
- bytes += struct_copy_size;
-
- cif->flags = flags;
- cif->bytes = bytes;
-
- return FFI_OK;
}
-extern void ffi_call_SYSV(extended_cif *, unsigned, unsigned, unsigned *,
- void (*fn)(void));
-extern void FFI_HIDDEN ffi_call_LINUX64(extended_cif *, unsigned long,
- unsigned long, unsigned long *,
- void (*fn)(void));
-
void
ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
{
- /*
- * The final SYSV ABI says that structures smaller or equal 8 bytes
- * are returned in r3/r4. The FFI_GCC_SYSV ABI instead returns them
- * in memory.
- *
- * Just to keep things simple for the assembly code, we will always
- * bounce-buffer struct return values less than or equal to 8 bytes.
- * This allows the ASM to handle SYSV small structures by directly
- * writing r3 and r4 to memory without worrying about struct size.
- */
- unsigned int smst_buffer[2];
+ /* The final SYSV ABI says that structures smaller or equal 8 bytes
+ are returned in r3/r4. A draft ABI used by linux instead returns
+ them in memory.
+
+ We bounce-buffer SYSV small struct return values so that sysv.S
+ can write r3 and r4 to memory without worrying about struct size.
+
+ For ELFv2 ABI, use a bounce buffer for homogeneous structs too,
+ for similar reasons. */
+ unsigned long smst_buffer[8];
extended_cif ecif;
- unsigned int rsize = 0;
ecif.cif = cif;
ecif.avalue = avalue;
- /* Ensure that we have a valid struct return value */
ecif.rvalue = rvalue;
- if (cif->rtype->type == FFI_TYPE_STRUCT) {
- rsize = cif->rtype->size;
- if (rsize <= 8)
+ if ((cif->flags & FLAG_RETURNS_SMST) != 0)
ecif.rvalue = smst_buffer;
- else if (!rvalue)
- ecif.rvalue = alloca(rsize);
- }
+ /* Ensure that we have a valid struct return value.
+ FIXME: Isn't this just papering over a user problem? */
+ else if (!rvalue && cif->rtype->type == FFI_TYPE_STRUCT)
+ ecif.rvalue = alloca (cif->rtype->size);
- switch (cif->abi)
- {
-#ifndef POWERPC64
-# ifndef __NO_FPRS__
- case FFI_SYSV:
- case FFI_GCC_SYSV:
- case FFI_LINUX:
-# endif
- case FFI_LINUX_SOFT_FLOAT:
- ffi_call_SYSV (&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn);
- break;
-#else
- case FFI_LINUX64:
+#ifdef POWERPC64
ffi_call_LINUX64 (&ecif, -(long) cif->bytes, cif->flags, ecif.rvalue, fn);
- break;
+#else
+ ffi_call_SYSV (&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn);
#endif
- default:
- FFI_ASSERT (0);
- break;
- }
/* Check for a bounce-buffered return value */
if (rvalue && ecif.rvalue == smst_buffer)
- memcpy(rvalue, smst_buffer, rsize);
+ {
+ unsigned int rsize = cif->rtype->size;
+#ifndef __LITTLE_ENDIAN__
+ /* The SYSV ABI returns a structure of up to 4 bytes in size
+ left-padded in r3. */
+# ifndef POWERPC64
+ if (rsize <= 4)
+ memcpy (rvalue, (char *) smst_buffer + 4 - rsize, rsize);
+ else
+# endif
+ /* The SYSV ABI returns a structure of up to 8 bytes in size
+ left-padded in r3/r4, and the ELFv2 ABI similarly returns a
+ structure of up to 8 bytes in size left-padded in r3. */
+ if (rsize <= 8)
+ memcpy (rvalue, (char *) smst_buffer + 8 - rsize, rsize);
+ else
+#endif
+ memcpy (rvalue, smst_buffer, rsize);
+ }
}
-#ifndef POWERPC64
-#define MIN_CACHE_LINE_SIZE 8
-
-static void
-flush_icache (char *wraddr, char *xaddr, int size)
-{
- int i;
- for (i = 0; i < size; i += MIN_CACHE_LINE_SIZE)
- __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;"
- : : "r" (xaddr + i), "r" (wraddr + i) : "memory");
- __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;" "sync;" "isync;"
- : : "r"(xaddr + size - 1), "r"(wraddr + size - 1)
- : "memory");
-}
-#endif
-
ffi_status
ffi_prep_closure_loc (ffi_closure *closure,
ffi_cif *cif,
@@ -995,487 +134,8 @@ ffi_prep_closure_loc (ffi_closure *closure,
void *codeloc)
{
#ifdef POWERPC64
- void **tramp = (void **) &closure->tramp[0];
-
- if (cif->abi != FFI_LINUX64)
- return FFI_BAD_ABI;
- /* Copy function address and TOC from ffi_closure_LINUX64. */
- memcpy (tramp, (char *) ffi_closure_LINUX64, 16);
- tramp[2] = codeloc;
+ return ffi_prep_closure_loc_linux64 (closure, cif, fun, user_data, codeloc);
#else
- unsigned int *tramp;
-
- if (! (cif->abi == FFI_GCC_SYSV
- || cif->abi == FFI_SYSV
- || cif->abi == FFI_LINUX
- || cif->abi == FFI_LINUX_SOFT_FLOAT))
- return FFI_BAD_ABI;
-
- tramp = (unsigned int *) &closure->tramp[0];
- tramp[0] = 0x7c0802a6; /* mflr r0 */
- tramp[1] = 0x4800000d; /* bl 10 <trampoline_initial+0x10> */
- tramp[4] = 0x7d6802a6; /* mflr r11 */
- tramp[5] = 0x7c0803a6; /* mtlr r0 */
- tramp[6] = 0x800b0000; /* lwz r0,0(r11) */
- tramp[7] = 0x816b0004; /* lwz r11,4(r11) */
- tramp[8] = 0x7c0903a6; /* mtctr r0 */
- tramp[9] = 0x4e800420; /* bctr */
- *(void **) &tramp[2] = (void *) ffi_closure_SYSV; /* function */
- *(void **) &tramp[3] = codeloc; /* context */
-
- /* Flush the icache. */
- flush_icache ((char *)tramp, (char *)codeloc, FFI_TRAMPOLINE_SIZE);
-#endif
-
- closure->cif = cif;
- closure->fun = fun;
- closure->user_data = user_data;
-
- return FFI_OK;
-}
-
-typedef union
-{
- float f;
- double d;
-} ffi_dblfl;
-
-int ffi_closure_helper_SYSV (ffi_closure *, void *, unsigned long *,
- ffi_dblfl *, unsigned long *);
-
-/* Basically the trampoline invokes ffi_closure_SYSV, and on
- * entry, r11 holds the address of the closure.
- * After storing the registers that could possibly contain
- * parameters to be passed into the stack frame and setting
- * up space for a return value, ffi_closure_SYSV invokes the
- * following helper function to do most of the work
- */
-
-int
-ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue,
- unsigned long *pgr, ffi_dblfl *pfr,
- unsigned long *pst)
-{
- /* rvalue is the pointer to space for return value in closure assembly */
- /* pgr is the pointer to where r3-r10 are stored in ffi_closure_SYSV */
- /* pfr is the pointer to where f1-f8 are stored in ffi_closure_SYSV */
- /* pst is the pointer to outgoing parameter stack in original caller */
-
- void ** avalue;
- ffi_type ** arg_types;
- long i, avn;
-#ifndef __NO_FPRS__
- long nf = 0; /* number of floating registers already used */
-#endif
- long ng = 0; /* number of general registers already used */
-
- ffi_cif *cif = closure->cif;
- unsigned size = cif->rtype->size;
- unsigned short rtypenum = cif->rtype->type;
-
- avalue = alloca (cif->nargs * sizeof (void *));
-
- /* First translate for softfloat/nonlinux */
- if (cif->abi == FFI_LINUX_SOFT_FLOAT) {
- if (rtypenum == FFI_TYPE_FLOAT)
- rtypenum = FFI_TYPE_UINT32;
- if (rtypenum == FFI_TYPE_DOUBLE)
- rtypenum = FFI_TYPE_UINT64;
- if (rtypenum == FFI_TYPE_LONGDOUBLE)
- rtypenum = FFI_TYPE_UINT128;
- } else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) {
-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
- if (rtypenum == FFI_TYPE_LONGDOUBLE)
- rtypenum = FFI_TYPE_STRUCT;
-#endif
- }
-
-
- /* Copy the caller's structure return value address so that the closure
- returns the data directly to the caller.
- For FFI_SYSV the result is passed in r3/r4 if the struct size is less
- or equal 8 bytes. */
- if (rtypenum == FFI_TYPE_STRUCT && ((cif->abi != FFI_SYSV) || (size > 8))) {
- rvalue = (void *) *pgr;
- ng++;
- pgr++;
- }
-
- i = 0;
- avn = cif->nargs;
- arg_types = cif->arg_types;
-
- /* Grab the addresses of the arguments from the stack frame. */
- while (i < avn) {
- unsigned short typenum = arg_types[i]->type;
-
- /* We may need to handle some values depending on ABI */
- if (cif->abi == FFI_LINUX_SOFT_FLOAT) {
- if (typenum == FFI_TYPE_FLOAT)
- typenum = FFI_TYPE_UINT32;
- if (typenum == FFI_TYPE_DOUBLE)
- typenum = FFI_TYPE_UINT64;
- if (typenum == FFI_TYPE_LONGDOUBLE)
- typenum = FFI_TYPE_UINT128;
- } else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) {
-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
- if (typenum == FFI_TYPE_LONGDOUBLE)
- typenum = FFI_TYPE_STRUCT;
-#endif
- }
-
- switch (typenum) {
-#ifndef __NO_FPRS__
- case FFI_TYPE_FLOAT:
- /* unfortunately float values are stored as doubles
- * in the ffi_closure_SYSV code (since we don't check
- * the type in that routine).
- */
-
- /* there are 8 64bit floating point registers */
-
- if (nf < 8)
- {
- double temp = pfr->d;
- pfr->f = (float) temp;
- avalue[i] = pfr;
- nf++;
- pfr++;
- }
- else
- {
- /* FIXME? here we are really changing the values
- * stored in the original calling routines outgoing
- * parameter stack. This is probably a really
- * naughty thing to do but...
- */
- avalue[i] = pst;
- pst += 1;
- }
- break;
-
- case FFI_TYPE_DOUBLE:
- /* On the outgoing stack all values are aligned to 8 */
- /* there are 8 64bit floating point registers */
-
- if (nf < 8)
- {
- avalue[i] = pfr;
- nf++;
- pfr++;
- }
- else
- {
- if (((long) pst) & 4)
- pst++;
- avalue[i] = pst;
- pst += 2;
- }
- break;
-
-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
- case FFI_TYPE_LONGDOUBLE:
- if (nf < 7)
- {
- avalue[i] = pfr;
- pfr += 2;
- nf += 2;
- }
- else
- {
- if (((long) pst) & 4)
- pst++;
- avalue[i] = pst;
- pst += 4;
- nf = 8;
- }
- break;
-#endif
-#endif /* have FPRS */
-
- case FFI_TYPE_UINT128:
- /*
- * Test if for the whole long double, 4 gprs are available.
- * otherwise the stuff ends up on the stack.
- */
- if (ng < 5) {
- avalue[i] = pgr;
- pgr += 4;
- ng += 4;
- } else {
- avalue[i] = pst;
- pst += 4;
- ng = 8+4;
- }
- break;
-
- case FFI_TYPE_SINT8:
- case FFI_TYPE_UINT8:
-#ifndef __LITTLE_ENDIAN__
- /* there are 8 gpr registers used to pass values */
- if (ng < 8)
- {
- avalue[i] = (char *) pgr + 3;
- ng++;
- pgr++;
- }
- else
- {
- avalue[i] = (char *) pst + 3;
- pst++;
- }
- break;
+ return ffi_prep_closure_loc_sysv (closure, cif, fun, user_data, codeloc);
#endif
- case FFI_TYPE_SINT16:
- case FFI_TYPE_UINT16:
-#ifndef __LITTLE_ENDIAN__
- /* there are 8 gpr registers used to pass values */
- if (ng < 8)
- {
- avalue[i] = (char *) pgr + 2;
- ng++;
- pgr++;
- }
- else
- {
- avalue[i] = (char *) pst + 2;
- pst++;
- }
- break;
-#endif
- case FFI_TYPE_SINT32:
- case FFI_TYPE_UINT32:
- case FFI_TYPE_POINTER:
- /* there are 8 gpr registers used to pass values */
- if (ng < 8)
- {
- avalue[i] = pgr;
- ng++;
- pgr++;
- }
- else
- {
- avalue[i] = pst;
- pst++;
- }
- break;
-
- case FFI_TYPE_STRUCT:
- /* Structs are passed by reference. The address will appear in a
- gpr if it is one of the first 8 arguments. */
- if (ng < 8)
- {
- avalue[i] = (void *) *pgr;
- ng++;
- pgr++;
- }
- else
- {
- avalue[i] = (void *) *pst;
- pst++;
- }
- break;
-
- case FFI_TYPE_SINT64:
- case FFI_TYPE_UINT64:
- /* passing long long ints are complex, they must
- * be passed in suitable register pairs such as
- * (r3,r4) or (r5,r6) or (r6,r7), or (r7,r8) or (r9,r10)
- * and if the entire pair aren't available then the outgoing
- * parameter stack is used for both but an alignment of 8
- * must will be kept. So we must either look in pgr
- * or pst to find the correct address for this type
- * of parameter.
- */
- if (ng < 7)
- {
- if (ng & 0x01)
- {
- /* skip r4, r6, r8 as starting points */
- ng++;
- pgr++;
- }
- avalue[i] = pgr;
- ng += 2;
- pgr += 2;
- }
- else
- {
- if (((long) pst) & 4)
- pst++;
- avalue[i] = pst;
- pst += 2;
- ng = 8;
- }
- break;
-
- default:
- FFI_ASSERT (0);
- }
-
- i++;
- }
-
-
- (closure->fun) (cif, rvalue, avalue, closure->user_data);
-
- /* Tell ffi_closure_SYSV how to perform return type promotions.
- Because the FFI_SYSV ABI returns the structures <= 8 bytes in r3/r4
- we have to tell ffi_closure_SYSV how to treat them. We combine the base
- type FFI_SYSV_TYPE_SMALL_STRUCT - 1 with the size of the struct.
- So a one byte struct gets the return type 16. Return type 1 to 15 are
- already used and we never have a struct with size zero. That is the reason
- for the subtraction of 1. See the comment in ffitarget.h about ordering.
- */
- if (cif->abi == FFI_SYSV && rtypenum == FFI_TYPE_STRUCT && size <= 8)
- return (FFI_SYSV_TYPE_SMALL_STRUCT - 1) + size;
- return rtypenum;
-}
-
-int FFI_HIDDEN ffi_closure_helper_LINUX64 (ffi_closure *, void *,
- unsigned long *, ffi_dblfl *);
-
-int FFI_HIDDEN
-ffi_closure_helper_LINUX64 (ffi_closure *closure, void *rvalue,
- unsigned long *pst, ffi_dblfl *pfr)
-{
- /* rvalue is the pointer to space for return value in closure assembly */
- /* pst is the pointer to parameter save area
- (r3-r10 are stored into its first 8 slots by ffi_closure_LINUX64) */
- /* pfr is the pointer to where f1-f13 are stored in ffi_closure_LINUX64 */
-
- void **avalue;
- ffi_type **arg_types;
- long i, avn;
- ffi_cif *cif;
- ffi_dblfl *end_pfr = pfr + NUM_FPR_ARG_REGISTERS64;
-
- cif = closure->cif;
- avalue = alloca (cif->nargs * sizeof (void *));
-
- /* Copy the caller's structure return value address so that the closure
- returns the data directly to the caller. */
- if (cif->rtype->type == FFI_TYPE_STRUCT)
- {
- rvalue = (void *) *pst;
- pst++;
- }
-
- i = 0;
- avn = cif->nargs;
- arg_types = cif->arg_types;
-
- /* Grab the addresses of the arguments from the stack frame. */
- while (i < avn)
- {
- switch (arg_types[i]->type)
- {
- case FFI_TYPE_SINT8:
- case FFI_TYPE_UINT8:
-#ifndef __LITTLE_ENDIAN__
- avalue[i] = (char *) pst + 7;
- pst++;
- break;
-#endif
- case FFI_TYPE_SINT16:
- case FFI_TYPE_UINT16:
-#ifndef __LITTLE_ENDIAN__
- avalue[i] = (char *) pst + 6;
- pst++;
- break;
-#endif
- case FFI_TYPE_SINT32:
- case FFI_TYPE_UINT32:
-#ifndef __LITTLE_ENDIAN__
- avalue[i] = (char *) pst + 4;
- pst++;
- break;
-#endif
- case FFI_TYPE_SINT64:
- case FFI_TYPE_UINT64:
- case FFI_TYPE_POINTER:
- avalue[i] = pst;
- pst++;
- break;
-
- case FFI_TYPE_STRUCT:
-#ifndef __LITTLE_ENDIAN__
- /* Structures with size less than eight bytes are passed
- left-padded. */
- if (arg_types[i]->size < 8)
- avalue[i] = (char *) pst + 8 - arg_types[i]->size;
- else
-#endif
- avalue[i] = pst;
- pst += (arg_types[i]->size + 7) / 8;
- break;
-
- case FFI_TYPE_FLOAT:
- /* unfortunately float values are stored as doubles
- * in the ffi_closure_LINUX64 code (since we don't check
- * the type in that routine).
- */
-
- /* there are 13 64bit floating point registers */
-
- if (pfr < end_pfr)
- {
- double temp = pfr->d;
- pfr->f = (float) temp;
- avalue[i] = pfr;
- pfr++;
- }
- else
- avalue[i] = pst;
- pst++;
- break;
-
- case FFI_TYPE_DOUBLE:
- /* On the outgoing stack all values are aligned to 8 */
- /* there are 13 64bit floating point registers */
-
- if (pfr < end_pfr)
- {
- avalue[i] = pfr;
- pfr++;
- }
- else
- avalue[i] = pst;
- pst++;
- break;
-
-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
- case FFI_TYPE_LONGDOUBLE:
- if (pfr + 1 < end_pfr)
- {
- avalue[i] = pfr;
- pfr += 2;
- }
- else
- {
- if (pfr < end_pfr)
- {
- /* Passed partly in f13 and partly on the stack.
- Move it all to the stack. */
- *pst = *(unsigned long *) pfr;
- pfr++;
- }
- avalue[i] = pst;
- }
- pst += 2;
- break;
-#endif
-
- default:
- FFI_ASSERT (0);
- }
-
- i++;
- }
-
-
- (closure->fun) (cif, rvalue, avalue, closure->user_data);
-
- /* Tell ffi_closure_LINUX64 how to perform return type promotions. */
- return cif->rtype->type;
}
diff --git a/gcc-4.8/libffi/src/powerpc/ffi_linux64.c b/gcc-4.8/libffi/src/powerpc/ffi_linux64.c
new file mode 100644
index 000000000..33f24b327
--- /dev/null
+++ b/gcc-4.8/libffi/src/powerpc/ffi_linux64.c
@@ -0,0 +1,942 @@
+/* -----------------------------------------------------------------------
+ ffi_linux64.c - Copyright (C) 2013 IBM
+ Copyright (C) 2011 Anthony Green
+ Copyright (C) 2011 Kyle Moffett
+ Copyright (C) 2008 Red Hat, Inc
+ Copyright (C) 2007, 2008 Free Software Foundation, Inc
+ Copyright (c) 1998 Geoffrey Keating
+
+ PowerPC Foreign Function Interface
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ ``Software''), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+ ----------------------------------------------------------------------- */
+
+#include "ffi.h"
+
+#ifdef POWERPC64
+#include "ffi_common.h"
+#include "ffi_powerpc.h"
+
+
+/* About the LINUX64 ABI. */
+enum {
+ NUM_GPR_ARG_REGISTERS64 = 8,
+ NUM_FPR_ARG_REGISTERS64 = 13
+};
+enum { ASM_NEEDS_REGISTERS64 = 4 };
+
+
+#if HAVE_LONG_DOUBLE_VARIANT && FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+/* Adjust size of ffi_type_longdouble. */
+void FFI_HIDDEN
+ffi_prep_types_linux64 (ffi_abi abi)
+{
+ if ((abi & (FFI_LINUX | FFI_LINUX_LONG_DOUBLE_128)) == FFI_LINUX)
+ {
+ ffi_type_longdouble.size = 8;
+ ffi_type_longdouble.alignment = 8;
+ }
+ else
+ {
+ ffi_type_longdouble.size = 16;
+ ffi_type_longdouble.alignment = 16;
+ }
+}
+#endif
+
+
+#if _CALL_ELF == 2
+static unsigned int
+discover_homogeneous_aggregate (const ffi_type *t, unsigned int *elnum)
+{
+ switch (t->type)
+ {
+ case FFI_TYPE_FLOAT:
+ case FFI_TYPE_DOUBLE:
+ *elnum = 1;
+ return (int) t->type;
+
+ case FFI_TYPE_STRUCT:;
+ {
+ unsigned int base_elt = 0, total_elnum = 0;
+ ffi_type **el = t->elements;
+ while (*el)
+ {
+ unsigned int el_elt, el_elnum = 0;
+ el_elt = discover_homogeneous_aggregate (*el, &el_elnum);
+ if (el_elt == 0
+ || (base_elt && base_elt != el_elt))
+ return 0;
+ base_elt = el_elt;
+ total_elnum += el_elnum;
+ if (total_elnum > 8)
+ return 0;
+ el++;
+ }
+ *elnum = total_elnum;
+ return base_elt;
+ }
+
+ default:
+ return 0;
+ }
+}
+#endif
+
+
+/* Perform machine dependent cif processing */
+static ffi_status
+ffi_prep_cif_linux64_core (ffi_cif *cif)
+{
+ ffi_type **ptr;
+ unsigned bytes;
+ unsigned i, fparg_count = 0, intarg_count = 0;
+ unsigned flags = cif->flags;
+#if _CALL_ELF == 2
+ unsigned int elt, elnum;
+#endif
+
+#if FFI_TYPE_LONGDOUBLE == FFI_TYPE_DOUBLE
+ /* If compiled without long double support.. */
+ if ((cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0)
+ return FFI_BAD_ABI;
+#endif
+
+ /* The machine-independent calculation of cif->bytes doesn't work
+ for us. Redo the calculation. */
+#if _CALL_ELF == 2
+ /* Space for backchain, CR, LR, TOC and the asm's temp regs. */
+ bytes = (4 + ASM_NEEDS_REGISTERS64) * sizeof (long);
+
+ /* Space for the general registers. */
+ bytes += NUM_GPR_ARG_REGISTERS64 * sizeof (long);
+#else
+ /* Space for backchain, CR, LR, cc/ld doubleword, TOC and the asm's temp
+ regs. */
+ bytes = (6 + ASM_NEEDS_REGISTERS64) * sizeof (long);
+
+ /* Space for the mandatory parm save area and general registers. */
+ bytes += 2 * NUM_GPR_ARG_REGISTERS64 * sizeof (long);
+#endif
+
+ /* Return value handling. */
+ switch (cif->rtype->type)
+ {
+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ case FFI_TYPE_LONGDOUBLE:
+ if ((cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0)
+ flags |= FLAG_RETURNS_128BITS;
+ /* Fall through. */
+#endif
+ case FFI_TYPE_DOUBLE:
+ flags |= FLAG_RETURNS_64BITS;
+ /* Fall through. */
+ case FFI_TYPE_FLOAT:
+ flags |= FLAG_RETURNS_FP;
+ break;
+
+ case FFI_TYPE_UINT128:
+ flags |= FLAG_RETURNS_128BITS;
+ /* Fall through. */
+ case FFI_TYPE_UINT64:
+ case FFI_TYPE_SINT64:
+ flags |= FLAG_RETURNS_64BITS;
+ break;
+
+ case FFI_TYPE_STRUCT:
+#if _CALL_ELF == 2
+ elt = discover_homogeneous_aggregate (cif->rtype, &elnum);
+ if (elt)
+ {
+ if (elt == FFI_TYPE_DOUBLE)
+ flags |= FLAG_RETURNS_64BITS;
+ flags |= FLAG_RETURNS_FP | FLAG_RETURNS_SMST;
+ break;
+ }
+ if (cif->rtype->size <= 16)
+ {
+ flags |= FLAG_RETURNS_SMST;
+ break;
+ }
+#endif
+ intarg_count++;
+ flags |= FLAG_RETVAL_REFERENCE;
+ /* Fall through. */
+ case FFI_TYPE_VOID:
+ flags |= FLAG_RETURNS_NOTHING;
+ break;
+
+ default:
+ /* Returns 32-bit integer, or similar. Nothing to do here. */
+ break;
+ }
+
+ for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
+ {
+ unsigned int align;
+
+ switch ((*ptr)->type)
+ {
+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ case FFI_TYPE_LONGDOUBLE:
+ if ((cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0)
+ {
+ fparg_count++;
+ intarg_count++;
+ }
+ /* Fall through. */
+#endif
+ case FFI_TYPE_DOUBLE:
+ case FFI_TYPE_FLOAT:
+ fparg_count++;
+ intarg_count++;
+ if (fparg_count > NUM_FPR_ARG_REGISTERS64)
+ flags |= FLAG_ARG_NEEDS_PSAVE;
+ break;
+
+ case FFI_TYPE_STRUCT:
+ if ((cif->abi & FFI_LINUX_STRUCT_ALIGN) != 0)
+ {
+ align = (*ptr)->alignment;
+ if (align > 16)
+ align = 16;
+ align = align / 8;
+ if (align > 1)
+ intarg_count = ALIGN (intarg_count, align);
+ }
+ intarg_count += ((*ptr)->size + 7) / 8;
+#if _CALL_ELF == 2
+ elt = discover_homogeneous_aggregate (*ptr, &elnum);
+ if (elt)
+ {
+ fparg_count += elnum;
+ if (fparg_count > NUM_FPR_ARG_REGISTERS64)
+ flags |= FLAG_ARG_NEEDS_PSAVE;
+ }
+ else
+#endif
+ {
+ if (intarg_count > NUM_GPR_ARG_REGISTERS64)
+ flags |= FLAG_ARG_NEEDS_PSAVE;
+ }
+ break;
+
+ case FFI_TYPE_POINTER:
+ case FFI_TYPE_UINT64:
+ case FFI_TYPE_SINT64:
+ case FFI_TYPE_INT:
+ case FFI_TYPE_UINT32:
+ case FFI_TYPE_SINT32:
+ case FFI_TYPE_UINT16:
+ case FFI_TYPE_SINT16:
+ case FFI_TYPE_UINT8:
+ case FFI_TYPE_SINT8:
+ /* Everything else is passed as a 8-byte word in a GPR, either
+ the object itself or a pointer to it. */
+ intarg_count++;
+ if (intarg_count > NUM_GPR_ARG_REGISTERS64)
+ flags |= FLAG_ARG_NEEDS_PSAVE;
+ break;
+ default:
+ FFI_ASSERT (0);
+ }
+ }
+
+ if (fparg_count != 0)
+ flags |= FLAG_FP_ARGUMENTS;
+ if (intarg_count > 4)
+ flags |= FLAG_4_GPR_ARGUMENTS;
+
+ /* Space for the FPR registers, if needed. */
+ if (fparg_count != 0)
+ bytes += NUM_FPR_ARG_REGISTERS64 * sizeof (double);
+
+ /* Stack space. */
+#if _CALL_ELF == 2
+ if ((flags & FLAG_ARG_NEEDS_PSAVE) != 0)
+ bytes += intarg_count * sizeof (long);
+#else
+ if (intarg_count > NUM_GPR_ARG_REGISTERS64)
+ bytes += (intarg_count - NUM_GPR_ARG_REGISTERS64) * sizeof (long);
+#endif
+
+ /* The stack space allocated needs to be a multiple of 16 bytes. */
+ bytes = (bytes + 15) & ~0xF;
+
+ cif->flags = flags;
+ cif->bytes = bytes;
+
+ return FFI_OK;
+}
+
+ffi_status FFI_HIDDEN
+ffi_prep_cif_linux64 (ffi_cif *cif)
+{
+ if ((cif->abi & FFI_LINUX) != 0)
+ cif->nfixedargs = cif->nargs;
+#if _CALL_ELF != 2
+ else if (cif->abi == FFI_COMPAT_LINUX64)
+ {
+ /* This call is from old code. Don't touch cif->nfixedargs
+ since old code will be using a smaller cif. */
+ cif->flags |= FLAG_COMPAT;
+ /* Translate to new abi value. */
+ cif->abi = FFI_LINUX | FFI_LINUX_LONG_DOUBLE_128;
+ }
+#endif
+ else
+ return FFI_BAD_ABI;
+ return ffi_prep_cif_linux64_core (cif);
+}
+
+ffi_status FFI_HIDDEN
+ffi_prep_cif_linux64_var (ffi_cif *cif,
+ unsigned int nfixedargs,
+ unsigned int ntotalargs MAYBE_UNUSED)
+{
+ if ((cif->abi & FFI_LINUX) != 0)
+ cif->nfixedargs = nfixedargs;
+#if _CALL_ELF != 2
+ else if (cif->abi == FFI_COMPAT_LINUX64)
+ {
+ /* This call is from old code. Don't touch cif->nfixedargs
+ since old code will be using a smaller cif. */
+ cif->flags |= FLAG_COMPAT;
+ /* Translate to new abi value. */
+ cif->abi = FFI_LINUX | FFI_LINUX_LONG_DOUBLE_128;
+ }
+#endif
+ else
+ return FFI_BAD_ABI;
+#if _CALL_ELF == 2
+ cif->flags |= FLAG_ARG_NEEDS_PSAVE;
+#endif
+ return ffi_prep_cif_linux64_core (cif);
+}
+
+
+/* ffi_prep_args64 is called by the assembly routine once stack space
+ has been allocated for the function's arguments.
+
+ The stack layout we want looks like this:
+
+ | Ret addr from ffi_call_LINUX64 8bytes | higher addresses
+ |--------------------------------------------|
+ | CR save area 8bytes |
+ |--------------------------------------------|
+ | Previous backchain pointer 8 | stack pointer here
+ |--------------------------------------------|<+ <<< on entry to
+ | Saved r28-r31 4*8 | | ffi_call_LINUX64
+ |--------------------------------------------| |
+ | GPR registers r3-r10 8*8 | |
+ |--------------------------------------------| |
+ | FPR registers f1-f13 (optional) 13*8 | |
+ |--------------------------------------------| |
+ | Parameter save area | |
+ |--------------------------------------------| |
+ | TOC save area 8 | |
+ |--------------------------------------------| | stack |
+ | Linker doubleword 8 | | grows |
+ |--------------------------------------------| | down V
+ | Compiler doubleword 8 | |
+ |--------------------------------------------| | lower addresses
+ | Space for callee's LR 8 | |
+ |--------------------------------------------| |
+ | CR save area 8 | |
+ |--------------------------------------------| | stack pointer here
+ | Current backchain pointer 8 |-/ during
+ |--------------------------------------------| <<< ffi_call_LINUX64
+
+*/
+
+void FFI_HIDDEN
+ffi_prep_args64 (extended_cif *ecif, unsigned long *const stack)
+{
+ const unsigned long bytes = ecif->cif->bytes;
+ const unsigned long flags = ecif->cif->flags;
+
+ typedef union
+ {
+ char *c;
+ unsigned long *ul;
+ float *f;
+ double *d;
+ size_t p;
+ } valp;
+
+ /* 'stacktop' points at the previous backchain pointer. */
+ valp stacktop;
+
+ /* 'next_arg' points at the space for gpr3, and grows upwards as
+ we use GPR registers, then continues at rest. */
+ valp gpr_base;
+ valp gpr_end;
+ valp rest;
+ valp next_arg;
+
+ /* 'fpr_base' points at the space for fpr3, and grows upwards as
+ we use FPR registers. */
+ valp fpr_base;
+ unsigned int fparg_count;
+
+ unsigned int i, words, nargs, nfixedargs;
+ ffi_type **ptr;
+ double double_tmp;
+ union
+ {
+ void **v;
+ char **c;
+ signed char **sc;
+ unsigned char **uc;
+ signed short **ss;
+ unsigned short **us;
+ signed int **si;
+ unsigned int **ui;
+ unsigned long **ul;
+ float **f;
+ double **d;
+ } p_argv;
+ unsigned long gprvalue;
+ unsigned long align;
+
+ stacktop.c = (char *) stack + bytes;
+ gpr_base.ul = stacktop.ul - ASM_NEEDS_REGISTERS64 - NUM_GPR_ARG_REGISTERS64;
+ gpr_end.ul = gpr_base.ul + NUM_GPR_ARG_REGISTERS64;
+#if _CALL_ELF == 2
+ rest.ul = stack + 4 + NUM_GPR_ARG_REGISTERS64;
+#else
+ rest.ul = stack + 6 + NUM_GPR_ARG_REGISTERS64;
+#endif
+ fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS64;
+ fparg_count = 0;
+ next_arg.ul = gpr_base.ul;
+
+ /* Check that everything starts aligned properly. */
+ FFI_ASSERT (((unsigned long) (char *) stack & 0xF) == 0);
+ FFI_ASSERT (((unsigned long) stacktop.c & 0xF) == 0);
+ FFI_ASSERT ((bytes & 0xF) == 0);
+
+ /* Deal with return values that are actually pass-by-reference. */
+ if (flags & FLAG_RETVAL_REFERENCE)
+ *next_arg.ul++ = (unsigned long) (char *) ecif->rvalue;
+
+ /* Now for the arguments. */
+ p_argv.v = ecif->avalue;
+ nargs = ecif->cif->nargs;
+#if _CALL_ELF != 2
+ nfixedargs = (unsigned) -1;
+ if ((flags & FLAG_COMPAT) == 0)
+#endif
+ nfixedargs = ecif->cif->nfixedargs;
+ for (ptr = ecif->cif->arg_types, i = 0;
+ i < nargs;
+ i++, ptr++, p_argv.v++)
+ {
+#if _CALL_ELF == 2
+ unsigned int elt, elnum;
+#endif
+
+ switch ((*ptr)->type)
+ {
+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ case FFI_TYPE_LONGDOUBLE:
+ if ((ecif->cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0)
+ {
+ double_tmp = (*p_argv.d)[0];
+ if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
+ {
+ *fpr_base.d++ = double_tmp;
+# if _CALL_ELF != 2
+ if ((flags & FLAG_COMPAT) != 0)
+ *next_arg.d = double_tmp;
+# endif
+ }
+ else
+ *next_arg.d = double_tmp;
+ if (++next_arg.ul == gpr_end.ul)
+ next_arg.ul = rest.ul;
+ fparg_count++;
+ double_tmp = (*p_argv.d)[1];
+ if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
+ {
+ *fpr_base.d++ = double_tmp;
+# if _CALL_ELF != 2
+ if ((flags & FLAG_COMPAT) != 0)
+ *next_arg.d = double_tmp;
+# endif
+ }
+ else
+ *next_arg.d = double_tmp;
+ if (++next_arg.ul == gpr_end.ul)
+ next_arg.ul = rest.ul;
+ fparg_count++;
+ FFI_ASSERT (__LDBL_MANT_DIG__ == 106);
+ FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+ break;
+ }
+ /* Fall through. */
+#endif
+ case FFI_TYPE_DOUBLE:
+ double_tmp = **p_argv.d;
+ if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
+ {
+ *fpr_base.d++ = double_tmp;
+#if _CALL_ELF != 2
+ if ((flags & FLAG_COMPAT) != 0)
+ *next_arg.d = double_tmp;
+#endif
+ }
+ else
+ *next_arg.d = double_tmp;
+ if (++next_arg.ul == gpr_end.ul)
+ next_arg.ul = rest.ul;
+ fparg_count++;
+ FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+ break;
+
+ case FFI_TYPE_FLOAT:
+ double_tmp = **p_argv.f;
+ if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
+ {
+ *fpr_base.d++ = double_tmp;
+#if _CALL_ELF != 2
+ if ((flags & FLAG_COMPAT) != 0)
+ *next_arg.f = (float) double_tmp;
+#endif
+ }
+ else
+ *next_arg.f = (float) double_tmp;
+ if (++next_arg.ul == gpr_end.ul)
+ next_arg.ul = rest.ul;
+ fparg_count++;
+ FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+ break;
+
+ case FFI_TYPE_STRUCT:
+ if ((ecif->cif->abi & FFI_LINUX_STRUCT_ALIGN) != 0)
+ {
+ align = (*ptr)->alignment;
+ if (align > 16)
+ align = 16;
+ if (align > 1)
+ next_arg.p = ALIGN (next_arg.p, align);
+ }
+#if _CALL_ELF == 2
+ elt = discover_homogeneous_aggregate (*ptr, &elnum);
+ if (elt)
+ {
+ union {
+ void *v;
+ float *f;
+ double *d;
+ } arg;
+
+ arg.v = *p_argv.v;
+ if (elt == FFI_TYPE_FLOAT)
+ {
+ do
+ {
+ double_tmp = *arg.f++;
+ if (fparg_count < NUM_FPR_ARG_REGISTERS64
+ && i < nfixedargs)
+ *fpr_base.d++ = double_tmp;
+ else
+ *next_arg.f = (float) double_tmp;
+ if (++next_arg.f == gpr_end.f)
+ next_arg.f = rest.f;
+ fparg_count++;
+ }
+ while (--elnum != 0);
+ if ((next_arg.p & 3) != 0)
+ {
+ if (++next_arg.f == gpr_end.f)
+ next_arg.f = rest.f;
+ }
+ }
+ else
+ do
+ {
+ double_tmp = *arg.d++;
+ if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
+ *fpr_base.d++ = double_tmp;
+ else
+ *next_arg.d = double_tmp;
+ if (++next_arg.d == gpr_end.d)
+ next_arg.d = rest.d;
+ fparg_count++;
+ }
+ while (--elnum != 0);
+ }
+ else
+#endif
+ {
+ words = ((*ptr)->size + 7) / 8;
+ if (next_arg.ul >= gpr_base.ul && next_arg.ul + words > gpr_end.ul)
+ {
+ size_t first = gpr_end.c - next_arg.c;
+ memcpy (next_arg.c, *p_argv.c, first);
+ memcpy (rest.c, *p_argv.c + first, (*ptr)->size - first);
+ next_arg.c = rest.c + words * 8 - first;
+ }
+ else
+ {
+ char *where = next_arg.c;
+
+#ifndef __LITTLE_ENDIAN__
+ /* Structures with size less than eight bytes are passed
+ left-padded. */
+ if ((*ptr)->size < 8)
+ where += 8 - (*ptr)->size;
+#endif
+ memcpy (where, *p_argv.c, (*ptr)->size);
+ next_arg.ul += words;
+ if (next_arg.ul == gpr_end.ul)
+ next_arg.ul = rest.ul;
+ }
+ }
+ break;
+
+ case FFI_TYPE_UINT8:
+ gprvalue = **p_argv.uc;
+ goto putgpr;
+ case FFI_TYPE_SINT8:
+ gprvalue = **p_argv.sc;
+ goto putgpr;
+ case FFI_TYPE_UINT16:
+ gprvalue = **p_argv.us;
+ goto putgpr;
+ case FFI_TYPE_SINT16:
+ gprvalue = **p_argv.ss;
+ goto putgpr;
+ case FFI_TYPE_UINT32:
+ gprvalue = **p_argv.ui;
+ goto putgpr;
+ case FFI_TYPE_INT:
+ case FFI_TYPE_SINT32:
+ gprvalue = **p_argv.si;
+ goto putgpr;
+
+ case FFI_TYPE_UINT64:
+ case FFI_TYPE_SINT64:
+ case FFI_TYPE_POINTER:
+ gprvalue = **p_argv.ul;
+ putgpr:
+ *next_arg.ul++ = gprvalue;
+ if (next_arg.ul == gpr_end.ul)
+ next_arg.ul = rest.ul;
+ break;
+ }
+ }
+
+ FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS
+ || (next_arg.ul >= gpr_base.ul
+ && next_arg.ul <= gpr_base.ul + 4));
+}
+
+
+#if _CALL_ELF == 2
+#define MIN_CACHE_LINE_SIZE 8
+
+static void
+flush_icache (char *wraddr, char *xaddr, int size)
+{
+ int i;
+ for (i = 0; i < size; i += MIN_CACHE_LINE_SIZE)
+ __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;"
+ : : "r" (xaddr + i), "r" (wraddr + i) : "memory");
+ __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;" "sync;" "isync;"
+ : : "r"(xaddr + size - 1), "r"(wraddr + size - 1)
+ : "memory");
+}
+#endif
+
+ffi_status
+ffi_prep_closure_loc_linux64 (ffi_closure *closure,
+ ffi_cif *cif,
+ void (*fun) (ffi_cif *, void *, void **, void *),
+ void *user_data,
+ void *codeloc)
+{
+#if _CALL_ELF == 2
+ unsigned int *tramp = (unsigned int *) &closure->tramp[0];
+
+ if (cif->abi < FFI_LINUX || cif->abi >= FFI_LAST_ABI)
+ return FFI_BAD_ABI;
+
+ tramp[0] = 0xe96c0018; /* 0: ld 11,2f-0b(12) */
+ tramp[1] = 0xe98c0010; /* ld 12,1f-0b(12) */
+ tramp[2] = 0x7d8903a6; /* mtctr 12 */
+ tramp[3] = 0x4e800420; /* bctr */
+ /* 1: .quad function_addr */
+ /* 2: .quad context */
+ *(void **) &tramp[4] = (void *) ffi_closure_LINUX64;
+ *(void **) &tramp[6] = codeloc;
+ flush_icache ((char *)tramp, (char *)codeloc, FFI_TRAMPOLINE_SIZE);
+#else
+ void **tramp = (void **) &closure->tramp[0];
+
+ if (cif->abi < FFI_LINUX || cif->abi >= FFI_LAST_ABI)
+ return FFI_BAD_ABI;
+
+ /* Copy function address and TOC from ffi_closure_LINUX64. */
+ memcpy (tramp, (char *) ffi_closure_LINUX64, 16);
+ tramp[2] = codeloc;
+#endif
+
+ closure->cif = cif;
+ closure->fun = fun;
+ closure->user_data = user_data;
+
+ return FFI_OK;
+}
+
+
+int FFI_HIDDEN
+ffi_closure_helper_LINUX64 (ffi_closure *closure, void *rvalue,
+ unsigned long *pst, ffi_dblfl *pfr)
+{
+ /* rvalue is the pointer to space for return value in closure assembly */
+ /* pst is the pointer to parameter save area
+ (r3-r10 are stored into its first 8 slots by ffi_closure_LINUX64) */
+ /* pfr is the pointer to where f1-f13 are stored in ffi_closure_LINUX64 */
+
+ void **avalue;
+ ffi_type **arg_types;
+ unsigned long i, avn, nfixedargs;
+ ffi_cif *cif;
+ ffi_dblfl *end_pfr = pfr + NUM_FPR_ARG_REGISTERS64;
+ unsigned long align;
+
+ cif = closure->cif;
+ avalue = alloca (cif->nargs * sizeof (void *));
+
+ /* Copy the caller's structure return value address so that the
+ closure returns the data directly to the caller. */
+ if (cif->rtype->type == FFI_TYPE_STRUCT
+ && (cif->flags & FLAG_RETURNS_SMST) == 0)
+ {
+ rvalue = (void *) *pst;
+ pst++;
+ }
+
+ i = 0;
+ avn = cif->nargs;
+#if _CALL_ELF != 2
+ nfixedargs = (unsigned) -1;
+ if ((cif->flags & FLAG_COMPAT) == 0)
+#endif
+ nfixedargs = cif->nfixedargs;
+ arg_types = cif->arg_types;
+
+ /* Grab the addresses of the arguments from the stack frame. */
+ while (i < avn)
+ {
+ unsigned int elt, elnum;
+
+ switch (arg_types[i]->type)
+ {
+ case FFI_TYPE_SINT8:
+ case FFI_TYPE_UINT8:
+#ifndef __LITTLE_ENDIAN__
+ avalue[i] = (char *) pst + 7;
+ pst++;
+ break;
+#endif
+
+ case FFI_TYPE_SINT16:
+ case FFI_TYPE_UINT16:
+#ifndef __LITTLE_ENDIAN__
+ avalue[i] = (char *) pst + 6;
+ pst++;
+ break;
+#endif
+
+ case FFI_TYPE_SINT32:
+ case FFI_TYPE_UINT32:
+#ifndef __LITTLE_ENDIAN__
+ avalue[i] = (char *) pst + 4;
+ pst++;
+ break;
+#endif
+
+ case FFI_TYPE_SINT64:
+ case FFI_TYPE_UINT64:
+ case FFI_TYPE_POINTER:
+ avalue[i] = pst;
+ pst++;
+ break;
+
+ case FFI_TYPE_STRUCT:
+ if ((cif->abi & FFI_LINUX_STRUCT_ALIGN) != 0)
+ {
+ align = arg_types[i]->alignment;
+ if (align > 16)
+ align = 16;
+ if (align > 1)
+ pst = (unsigned long *) ALIGN ((size_t) pst, align);
+ }
+ elt = 0;
+#if _CALL_ELF == 2
+ elt = discover_homogeneous_aggregate (arg_types[i], &elnum);
+#endif
+ if (elt)
+ {
+ union {
+ void *v;
+ unsigned long *ul;
+ float *f;
+ double *d;
+ size_t p;
+ } to, from;
+
+ /* Repackage the aggregate from its parts. The
+ aggregate size is not greater than the space taken by
+ the registers so store back to the register/parameter
+ save arrays. */
+ if (pfr + elnum <= end_pfr)
+ to.v = pfr;
+ else
+ to.v = pst;
+
+ avalue[i] = to.v;
+ from.ul = pst;
+ if (elt == FFI_TYPE_FLOAT)
+ {
+ do
+ {
+ if (pfr < end_pfr && i < nfixedargs)
+ {
+ *to.f = (float) pfr->d;
+ pfr++;
+ }
+ else
+ *to.f = *from.f;
+ to.f++;
+ from.f++;
+ }
+ while (--elnum != 0);
+ }
+ else
+ {
+ do
+ {
+ if (pfr < end_pfr && i < nfixedargs)
+ {
+ *to.d = pfr->d;
+ pfr++;
+ }
+ else
+ *to.d = *from.d;
+ to.d++;
+ from.d++;
+ }
+ while (--elnum != 0);
+ }
+ }
+ else
+ {
+#ifndef __LITTLE_ENDIAN__
+ /* Structures with size less than eight bytes are passed
+ left-padded. */
+ if (arg_types[i]->size < 8)
+ avalue[i] = (char *) pst + 8 - arg_types[i]->size;
+ else
+#endif
+ avalue[i] = pst;
+ }
+ pst += (arg_types[i]->size + 7) / 8;
+ break;
+
+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ case FFI_TYPE_LONGDOUBLE:
+ if ((cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0)
+ {
+ if (pfr + 1 < end_pfr && i + 1 < nfixedargs)
+ {
+ avalue[i] = pfr;
+ pfr += 2;
+ }
+ else
+ {
+ if (pfr < end_pfr && i < nfixedargs)
+ {
+ /* Passed partly in f13 and partly on the stack.
+ Move it all to the stack. */
+ *pst = *(unsigned long *) pfr;
+ pfr++;
+ }
+ avalue[i] = pst;
+ }
+ pst += 2;
+ break;
+ }
+ /* Fall through. */
+#endif
+ case FFI_TYPE_DOUBLE:
+ /* On the outgoing stack all values are aligned to 8 */
+ /* there are 13 64bit floating point registers */
+
+ if (pfr < end_pfr && i < nfixedargs)
+ {
+ avalue[i] = pfr;
+ pfr++;
+ }
+ else
+ avalue[i] = pst;
+ pst++;
+ break;
+
+ case FFI_TYPE_FLOAT:
+ if (pfr < end_pfr && i < nfixedargs)
+ {
+ /* Float values are stored as doubles in the
+ ffi_closure_LINUX64 code. Fix them here. */
+ pfr->f = (float) pfr->d;
+ avalue[i] = pfr;
+ pfr++;
+ }
+ else
+ avalue[i] = pst;
+ pst++;
+ break;
+
+ default:
+ FFI_ASSERT (0);
+ }
+
+ i++;
+ }
+
+
+ (closure->fun) (cif, rvalue, avalue, closure->user_data);
+
+ /* Tell ffi_closure_LINUX64 how to perform return type promotions. */
+ if ((cif->flags & FLAG_RETURNS_SMST) != 0)
+ {
+ if ((cif->flags & FLAG_RETURNS_FP) == 0)
+ return FFI_V2_TYPE_SMALL_STRUCT + cif->rtype->size - 1;
+ else if ((cif->flags & FLAG_RETURNS_64BITS) != 0)
+ return FFI_V2_TYPE_DOUBLE_HOMOG;
+ else
+ return FFI_V2_TYPE_FLOAT_HOMOG;
+ }
+ return cif->rtype->type;
+}
+#endif
diff --git a/gcc-4.8/libffi/src/powerpc/ffi_powerpc.h b/gcc-4.8/libffi/src/powerpc/ffi_powerpc.h
new file mode 100644
index 000000000..2e61653d1
--- /dev/null
+++ b/gcc-4.8/libffi/src/powerpc/ffi_powerpc.h
@@ -0,0 +1,77 @@
+/* -----------------------------------------------------------------------
+ ffi_powerpc.h - Copyright (C) 2013 IBM
+ Copyright (C) 2011 Anthony Green
+ Copyright (C) 2011 Kyle Moffett
+ Copyright (C) 2008 Red Hat, Inc
+ Copyright (C) 2007, 2008 Free Software Foundation, Inc
+ Copyright (c) 1998 Geoffrey Keating
+
+ PowerPC Foreign Function Interface
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ ``Software''), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+ ----------------------------------------------------------------------- */
+
+enum {
+ /* The assembly depends on these exact flags. */
+ /* These go in cr7 */
+ FLAG_RETURNS_SMST = 1 << (31-31), /* Used for FFI_SYSV small structs. */
+ FLAG_RETURNS_NOTHING = 1 << (31-30),
+ FLAG_RETURNS_FP = 1 << (31-29),
+ FLAG_RETURNS_64BITS = 1 << (31-28),
+
+ /* This goes in cr6 */
+ FLAG_RETURNS_128BITS = 1 << (31-27),
+
+ FLAG_COMPAT = 1 << (31- 8), /* Not used by assembly */
+
+ /* These go in cr1 */
+ FLAG_ARG_NEEDS_COPY = 1 << (31- 7), /* Used by sysv code */
+ FLAG_ARG_NEEDS_PSAVE = FLAG_ARG_NEEDS_COPY, /* Used by linux64 code */
+ FLAG_FP_ARGUMENTS = 1 << (31- 6), /* cr1.eq; specified by ABI */
+ FLAG_4_GPR_ARGUMENTS = 1 << (31- 5),
+ FLAG_RETVAL_REFERENCE = 1 << (31- 4)
+};
+
+typedef union
+{
+ float f;
+ double d;
+} ffi_dblfl;
+
+void FFI_HIDDEN ffi_closure_SYSV (void);
+void FFI_HIDDEN ffi_call_SYSV(extended_cif *, unsigned, unsigned, unsigned *,
+ void (*)(void));
+
+void FFI_HIDDEN ffi_prep_types_sysv (ffi_abi);
+ffi_status FFI_HIDDEN ffi_prep_cif_sysv (ffi_cif *);
+int FFI_HIDDEN ffi_closure_helper_SYSV (ffi_closure *, void *, unsigned long *,
+ ffi_dblfl *, unsigned long *);
+
+void FFI_HIDDEN ffi_call_LINUX64(extended_cif *, unsigned long, unsigned long,
+ unsigned long *, void (*)(void));
+void FFI_HIDDEN ffi_closure_LINUX64 (void);
+
+void FFI_HIDDEN ffi_prep_types_linux64 (ffi_abi);
+ffi_status FFI_HIDDEN ffi_prep_cif_linux64 (ffi_cif *);
+ffi_status FFI_HIDDEN ffi_prep_cif_linux64_var (ffi_cif *, unsigned int,
+ unsigned int);
+void FFI_HIDDEN ffi_prep_args64 (extended_cif *, unsigned long *const);
+int FFI_HIDDEN ffi_closure_helper_LINUX64 (ffi_closure *, void *,
+ unsigned long *, ffi_dblfl *);
diff --git a/gcc-4.8/libffi/src/powerpc/ffi_sysv.c b/gcc-4.8/libffi/src/powerpc/ffi_sysv.c
new file mode 100644
index 000000000..fbe85fe91
--- /dev/null
+++ b/gcc-4.8/libffi/src/powerpc/ffi_sysv.c
@@ -0,0 +1,931 @@
+/* -----------------------------------------------------------------------
+ ffi_sysv.c - Copyright (C) 2013 IBM
+ Copyright (C) 2011 Anthony Green
+ Copyright (C) 2011 Kyle Moffett
+ Copyright (C) 2008 Red Hat, Inc
+ Copyright (C) 2007, 2008 Free Software Foundation, Inc
+ Copyright (c) 1998 Geoffrey Keating
+
+ PowerPC Foreign Function Interface
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ ``Software''), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+ ----------------------------------------------------------------------- */
+
+#include "ffi.h"
+
+#ifndef POWERPC64
+#include "ffi_common.h"
+#include "ffi_powerpc.h"
+
+
+/* About the SYSV ABI. */
+#define ASM_NEEDS_REGISTERS 4
+#define NUM_GPR_ARG_REGISTERS 8
+#define NUM_FPR_ARG_REGISTERS 8
+
+
+#if HAVE_LONG_DOUBLE_VARIANT && FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+/* Adjust size of ffi_type_longdouble. */
+void FFI_HIDDEN
+ffi_prep_types_sysv (ffi_abi abi)
+{
+ if ((abi & (FFI_SYSV | FFI_SYSV_LONG_DOUBLE_128)) == FFI_SYSV)
+ {
+ ffi_type_longdouble.size = 8;
+ ffi_type_longdouble.alignment = 8;
+ }
+ else
+ {
+ ffi_type_longdouble.size = 16;
+ ffi_type_longdouble.alignment = 16;
+ }
+}
+#endif
+
+/* Transform long double, double and float to other types as per abi. */
+static int
+translate_float (int abi, int type)
+{
+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ if (type == FFI_TYPE_LONGDOUBLE
+ && (abi & FFI_SYSV_LONG_DOUBLE_128) == 0)
+ type = FFI_TYPE_DOUBLE;
+#endif
+ if ((abi & FFI_SYSV_SOFT_FLOAT) != 0)
+ {
+ if (type == FFI_TYPE_FLOAT)
+ type = FFI_TYPE_UINT32;
+ else if (type == FFI_TYPE_DOUBLE)
+ type = FFI_TYPE_UINT64;
+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ else if (type == FFI_TYPE_LONGDOUBLE)
+ type = FFI_TYPE_UINT128;
+ }
+ else if ((abi & FFI_SYSV_IBM_LONG_DOUBLE) == 0)
+ {
+ if (type == FFI_TYPE_LONGDOUBLE)
+ type = FFI_TYPE_STRUCT;
+#endif
+ }
+ return type;
+}
+
+/* Perform machine dependent cif processing */
+static ffi_status
+ffi_prep_cif_sysv_core (ffi_cif *cif)
+{
+ ffi_type **ptr;
+ unsigned bytes;
+ unsigned i, fparg_count = 0, intarg_count = 0;
+ unsigned flags = cif->flags;
+ unsigned struct_copy_size = 0;
+ unsigned type = cif->rtype->type;
+ unsigned size = cif->rtype->size;
+
+ /* The machine-independent calculation of cif->bytes doesn't work
+ for us. Redo the calculation. */
+
+ /* Space for the frame pointer, callee's LR, and the asm's temp regs. */
+ bytes = (2 + ASM_NEEDS_REGISTERS) * sizeof (int);
+
+ /* Space for the GPR registers. */
+ bytes += NUM_GPR_ARG_REGISTERS * sizeof (int);
+
+ /* Return value handling. The rules for SYSV are as follows:
+ - 32-bit (or less) integer values are returned in gpr3;
+ - Structures of size <= 4 bytes also returned in gpr3;
+ - 64-bit integer values and structures between 5 and 8 bytes are returned
+ in gpr3 and gpr4;
+ - Larger structures are allocated space and a pointer is passed as
+ the first argument.
+ - Single/double FP values are returned in fpr1;
+ - long doubles (if not equivalent to double) are returned in
+ fpr1,fpr2 for Linux and as for large structs for SysV. */
+
+ type = translate_float (cif->abi, type);
+
+ switch (type)
+ {
+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ case FFI_TYPE_LONGDOUBLE:
+ flags |= FLAG_RETURNS_128BITS;
+ /* Fall through. */
+#endif
+ case FFI_TYPE_DOUBLE:
+ flags |= FLAG_RETURNS_64BITS;
+ /* Fall through. */
+ case FFI_TYPE_FLOAT:
+ flags |= FLAG_RETURNS_FP;
+#ifdef __NO_FPRS__
+ return FFI_BAD_ABI;
+#endif
+ break;
+
+ case FFI_TYPE_UINT128:
+ flags |= FLAG_RETURNS_128BITS;
+ /* Fall through. */
+ case FFI_TYPE_UINT64:
+ case FFI_TYPE_SINT64:
+ flags |= FLAG_RETURNS_64BITS;
+ break;
+
+ case FFI_TYPE_STRUCT:
+ /* The final SYSV ABI says that structures smaller or equal 8 bytes
+ are returned in r3/r4. A draft ABI used by linux instead
+ returns them in memory. */
+ if ((cif->abi & FFI_SYSV_STRUCT_RET) != 0 && size <= 8)
+ {
+ flags |= FLAG_RETURNS_SMST;
+ break;
+ }
+ intarg_count++;
+ flags |= FLAG_RETVAL_REFERENCE;
+ /* Fall through. */
+ case FFI_TYPE_VOID:
+ flags |= FLAG_RETURNS_NOTHING;
+ break;
+
+ default:
+ /* Returns 32-bit integer, or similar. Nothing to do here. */
+ break;
+ }
+
+ /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the
+ first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest
+ goes on the stack. Structures and long doubles (if not equivalent
+ to double) are passed as a pointer to a copy of the structure.
+ Stuff on the stack needs to keep proper alignment. */
+ for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
+ {
+ unsigned short typenum = (*ptr)->type;
+
+ typenum = translate_float (cif->abi, typenum);
+
+ switch (typenum)
+ {
+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ case FFI_TYPE_LONGDOUBLE:
+ fparg_count++;
+ /* Fall thru */
+#endif
+ case FFI_TYPE_DOUBLE:
+ fparg_count++;
+ /* If this FP arg is going on the stack, it must be
+ 8-byte-aligned. */
+ if (fparg_count > NUM_FPR_ARG_REGISTERS
+ && intarg_count >= NUM_GPR_ARG_REGISTERS
+ && intarg_count % 2 != 0)
+ intarg_count++;
+#ifdef __NO_FPRS__
+ return FFI_BAD_ABI;
+#endif
+ break;
+
+ case FFI_TYPE_FLOAT:
+ fparg_count++;
+#ifdef __NO_FPRS__
+ return FFI_BAD_ABI;
+#endif
+ break;
+
+ case FFI_TYPE_UINT128:
+ /* A long double in FFI_LINUX_SOFT_FLOAT can use only a set
+ of four consecutive gprs. If we do not have enough, we
+ have to adjust the intarg_count value. */
+ if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3
+ && intarg_count < NUM_GPR_ARG_REGISTERS)
+ intarg_count = NUM_GPR_ARG_REGISTERS;
+ intarg_count += 4;
+ break;
+
+ case FFI_TYPE_UINT64:
+ case FFI_TYPE_SINT64:
+ /* 'long long' arguments are passed as two words, but
+ either both words must fit in registers or both go
+ on the stack. If they go on the stack, they must
+ be 8-byte-aligned.
+
+ Also, only certain register pairs can be used for
+ passing long long int -- specifically (r3,r4), (r5,r6),
+ (r7,r8), (r9,r10). */
+ if (intarg_count == NUM_GPR_ARG_REGISTERS-1
+ || intarg_count % 2 != 0)
+ intarg_count++;
+ intarg_count += 2;
+ break;
+
+ case FFI_TYPE_STRUCT:
+ /* We must allocate space for a copy of these to enforce
+ pass-by-value. Pad the space up to a multiple of 16
+ bytes (the maximum alignment required for anything under
+ the SYSV ABI). */
+ struct_copy_size += ((*ptr)->size + 15) & ~0xF;
+ /* Fall through (allocate space for the pointer). */
+
+ case FFI_TYPE_POINTER:
+ case FFI_TYPE_INT:
+ case FFI_TYPE_UINT32:
+ case FFI_TYPE_SINT32:
+ case FFI_TYPE_UINT16:
+ case FFI_TYPE_SINT16:
+ case FFI_TYPE_UINT8:
+ case FFI_TYPE_SINT8:
+ /* Everything else is passed as a 4-byte word in a GPR, either
+ the object itself or a pointer to it. */
+ intarg_count++;
+ break;
+
+ default:
+ FFI_ASSERT (0);
+ }
+ }
+
+ if (fparg_count != 0)
+ flags |= FLAG_FP_ARGUMENTS;
+ if (intarg_count > 4)
+ flags |= FLAG_4_GPR_ARGUMENTS;
+ if (struct_copy_size != 0)
+ flags |= FLAG_ARG_NEEDS_COPY;
+
+ /* Space for the FPR registers, if needed. */
+ if (fparg_count != 0)
+ bytes += NUM_FPR_ARG_REGISTERS * sizeof (double);
+
+ /* Stack space. */
+ if (intarg_count > NUM_GPR_ARG_REGISTERS)
+ bytes += (intarg_count - NUM_GPR_ARG_REGISTERS) * sizeof (int);
+ if (fparg_count > NUM_FPR_ARG_REGISTERS)
+ bytes += (fparg_count - NUM_FPR_ARG_REGISTERS) * sizeof (double);
+
+ /* The stack space allocated needs to be a multiple of 16 bytes. */
+ bytes = (bytes + 15) & ~0xF;
+
+ /* Add in the space for the copied structures. */
+ bytes += struct_copy_size;
+
+ cif->flags = flags;
+ cif->bytes = bytes;
+
+ return FFI_OK;
+}
+
+ffi_status FFI_HIDDEN
+ffi_prep_cif_sysv (ffi_cif *cif)
+{
+ if ((cif->abi & FFI_SYSV) == 0)
+ {
+ /* This call is from old code. Translate to new ABI values. */
+ cif->flags |= FLAG_COMPAT;
+ switch (cif->abi)
+ {
+ default:
+ return FFI_BAD_ABI;
+
+ case FFI_COMPAT_SYSV:
+ cif->abi = FFI_SYSV | FFI_SYSV_STRUCT_RET | FFI_SYSV_LONG_DOUBLE_128;
+ break;
+
+ case FFI_COMPAT_GCC_SYSV:
+ cif->abi = FFI_SYSV | FFI_SYSV_LONG_DOUBLE_128;
+ break;
+
+ case FFI_COMPAT_LINUX:
+ cif->abi = (FFI_SYSV | FFI_SYSV_IBM_LONG_DOUBLE
+ | FFI_SYSV_LONG_DOUBLE_128);
+ break;
+
+ case FFI_COMPAT_LINUX_SOFT_FLOAT:
+ cif->abi = (FFI_SYSV | FFI_SYSV_SOFT_FLOAT | FFI_SYSV_IBM_LONG_DOUBLE
+ | FFI_SYSV_LONG_DOUBLE_128);
+ break;
+ }
+ }
+ return ffi_prep_cif_sysv_core (cif);
+}
+
+/* ffi_prep_args_SYSV is called by the assembly routine once stack space
+ has been allocated for the function's arguments.
+
+ The stack layout we want looks like this:
+
+ | Return address from ffi_call_SYSV 4bytes | higher addresses
+ |--------------------------------------------|
+ | Previous backchain pointer 4 | stack pointer here
+ |--------------------------------------------|<+ <<< on entry to
+ | Saved r28-r31 4*4 | | ffi_call_SYSV
+ |--------------------------------------------| |
+ | GPR registers r3-r10 8*4 | | ffi_call_SYSV
+ |--------------------------------------------| |
+ | FPR registers f1-f8 (optional) 8*8 | |
+ |--------------------------------------------| | stack |
+ | Space for copied structures | | grows |
+ |--------------------------------------------| | down V
+ | Parameters that didn't fit in registers | |
+ |--------------------------------------------| | lower addresses
+ | Space for callee's LR 4 | |
+ |--------------------------------------------| | stack pointer here
+ | Current backchain pointer 4 |-/ during
+ |--------------------------------------------| <<< ffi_call_SYSV
+
+*/
+
+void FFI_HIDDEN
+ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack)
+{
+ const unsigned bytes = ecif->cif->bytes;
+ const unsigned flags = ecif->cif->flags;
+
+ typedef union
+ {
+ char *c;
+ unsigned *u;
+ long long *ll;
+ float *f;
+ double *d;
+ } valp;
+
+ /* 'stacktop' points at the previous backchain pointer. */
+ valp stacktop;
+
+ /* 'gpr_base' points at the space for gpr3, and grows upwards as
+ we use GPR registers. */
+ valp gpr_base;
+ int intarg_count;
+
+#ifndef __NO_FPRS__
+ /* 'fpr_base' points at the space for fpr1, and grows upwards as
+ we use FPR registers. */
+ valp fpr_base;
+ int fparg_count;
+#endif
+
+ /* 'copy_space' grows down as we put structures in it. It should
+ stay 16-byte aligned. */
+ valp copy_space;
+
+ /* 'next_arg' grows up as we put parameters in it. */
+ valp next_arg;
+
+ int i;
+ ffi_type **ptr;
+#ifndef __NO_FPRS__
+ double double_tmp;
+#endif
+ union
+ {
+ void **v;
+ char **c;
+ signed char **sc;
+ unsigned char **uc;
+ signed short **ss;
+ unsigned short **us;
+ unsigned int **ui;
+ long long **ll;
+ float **f;
+ double **d;
+ } p_argv;
+ size_t struct_copy_size;
+ unsigned gprvalue;
+
+ stacktop.c = (char *) stack + bytes;
+ gpr_base.u = stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS;
+ intarg_count = 0;
+#ifndef __NO_FPRS__
+ fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS;
+ fparg_count = 0;
+ copy_space.c = ((flags & FLAG_FP_ARGUMENTS) ? fpr_base.c : gpr_base.c);
+#else
+ copy_space.c = gpr_base.c;
+#endif
+ next_arg.u = stack + 2;
+
+ /* Check that everything starts aligned properly. */
+ FFI_ASSERT (((unsigned long) (char *) stack & 0xF) == 0);
+ FFI_ASSERT (((unsigned long) copy_space.c & 0xF) == 0);
+ FFI_ASSERT (((unsigned long) stacktop.c & 0xF) == 0);
+ FFI_ASSERT ((bytes & 0xF) == 0);
+ FFI_ASSERT (copy_space.c >= next_arg.c);
+
+ /* Deal with return values that are actually pass-by-reference. */
+ if (flags & FLAG_RETVAL_REFERENCE)
+ {
+ *gpr_base.u++ = (unsigned long) (char *) ecif->rvalue;
+ intarg_count++;
+ }
+
+ /* Now for the arguments. */
+ p_argv.v = ecif->avalue;
+ for (ptr = ecif->cif->arg_types, i = ecif->cif->nargs;
+ i > 0;
+ i--, ptr++, p_argv.v++)
+ {
+ unsigned int typenum = (*ptr)->type;
+
+ typenum = translate_float (ecif->cif->abi, typenum);
+
+ /* Now test the translated value */
+ switch (typenum)
+ {
+#ifndef __NO_FPRS__
+# if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ case FFI_TYPE_LONGDOUBLE:
+ double_tmp = (*p_argv.d)[0];
+
+ if (fparg_count >= NUM_FPR_ARG_REGISTERS - 1)
+ {
+ if (intarg_count >= NUM_GPR_ARG_REGISTERS
+ && intarg_count % 2 != 0)
+ {
+ intarg_count++;
+ next_arg.u++;
+ }
+ *next_arg.d = double_tmp;
+ next_arg.u += 2;
+ double_tmp = (*p_argv.d)[1];
+ *next_arg.d = double_tmp;
+ next_arg.u += 2;
+ }
+ else
+ {
+ *fpr_base.d++ = double_tmp;
+ double_tmp = (*p_argv.d)[1];
+ *fpr_base.d++ = double_tmp;
+ }
+
+ fparg_count += 2;
+ FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+ break;
+# endif
+ case FFI_TYPE_DOUBLE:
+ double_tmp = **p_argv.d;
+
+ if (fparg_count >= NUM_FPR_ARG_REGISTERS)
+ {
+ if (intarg_count >= NUM_GPR_ARG_REGISTERS
+ && intarg_count % 2 != 0)
+ {
+ intarg_count++;
+ next_arg.u++;
+ }
+ *next_arg.d = double_tmp;
+ next_arg.u += 2;
+ }
+ else
+ *fpr_base.d++ = double_tmp;
+ fparg_count++;
+ FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+ break;
+
+ case FFI_TYPE_FLOAT:
+ double_tmp = **p_argv.f;
+ if (fparg_count >= NUM_FPR_ARG_REGISTERS)
+ {
+ *next_arg.f = (float) double_tmp;
+ next_arg.u += 1;
+ intarg_count++;
+ }
+ else
+ *fpr_base.d++ = double_tmp;
+ fparg_count++;
+ FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+ break;
+#endif /* have FPRs */
+
+ case FFI_TYPE_UINT128:
+ /* The soft float ABI for long doubles works like this, a long double
+ is passed in four consecutive GPRs if available. A maximum of 2
+ long doubles can be passed in gprs. If we do not have 4 GPRs
+ left, the long double is passed on the stack, 4-byte aligned. */
+ {
+ unsigned int int_tmp;
+ unsigned int ii;
+ if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3)
+ {
+ if (intarg_count < NUM_GPR_ARG_REGISTERS)
+ intarg_count = NUM_GPR_ARG_REGISTERS;
+ for (ii = 0; ii < 4; ii++)
+ {
+ int_tmp = (*p_argv.ui)[ii];
+ *next_arg.u++ = int_tmp;
+ }
+ }
+ else
+ {
+ for (ii = 0; ii < 4; ii++)
+ {
+ int_tmp = (*p_argv.ui)[ii];
+ *gpr_base.u++ = int_tmp;
+ }
+ }
+ intarg_count += 4;
+ break;
+ }
+
+ case FFI_TYPE_UINT64:
+ case FFI_TYPE_SINT64:
+ if (intarg_count == NUM_GPR_ARG_REGISTERS-1)
+ intarg_count++;
+ if (intarg_count >= NUM_GPR_ARG_REGISTERS)
+ {
+ if (intarg_count % 2 != 0)
+ {
+ intarg_count++;
+ next_arg.u++;
+ }
+ *next_arg.ll = **p_argv.ll;
+ next_arg.u += 2;
+ }
+ else
+ {
+ /* The abi states only certain register pairs can be
+ used for passing long long int specifically (r3,r4),
+ (r5,r6), (r7,r8), (r9,r10). If next arg is long long
+ but not correct starting register of pair then skip
+ until the proper starting register. */
+ if (intarg_count % 2 != 0)
+ {
+ intarg_count ++;
+ gpr_base.u++;
+ }
+ *gpr_base.ll++ = **p_argv.ll;
+ }
+ intarg_count += 2;
+ break;
+
+ case FFI_TYPE_STRUCT:
+ struct_copy_size = ((*ptr)->size + 15) & ~0xF;
+ copy_space.c -= struct_copy_size;
+ memcpy (copy_space.c, *p_argv.c, (*ptr)->size);
+
+ gprvalue = (unsigned long) copy_space.c;
+
+ FFI_ASSERT (copy_space.c > next_arg.c);
+ FFI_ASSERT (flags & FLAG_ARG_NEEDS_COPY);
+ goto putgpr;
+
+ case FFI_TYPE_UINT8:
+ gprvalue = **p_argv.uc;
+ goto putgpr;
+ case FFI_TYPE_SINT8:
+ gprvalue = **p_argv.sc;
+ goto putgpr;
+ case FFI_TYPE_UINT16:
+ gprvalue = **p_argv.us;
+ goto putgpr;
+ case FFI_TYPE_SINT16:
+ gprvalue = **p_argv.ss;
+ goto putgpr;
+
+ case FFI_TYPE_INT:
+ case FFI_TYPE_UINT32:
+ case FFI_TYPE_SINT32:
+ case FFI_TYPE_POINTER:
+
+ gprvalue = **p_argv.ui;
+
+ putgpr:
+ if (intarg_count >= NUM_GPR_ARG_REGISTERS)
+ *next_arg.u++ = gprvalue;
+ else
+ *gpr_base.u++ = gprvalue;
+ intarg_count++;
+ break;
+ }
+ }
+
+ /* Check that we didn't overrun the stack... */
+ FFI_ASSERT (copy_space.c >= next_arg.c);
+ FFI_ASSERT (gpr_base.u <= stacktop.u - ASM_NEEDS_REGISTERS);
+ /* The assert below is testing that the number of integer arguments agrees
+ with the number found in ffi_prep_cif_machdep(). However, intarg_count
+ is incremented whenever we place an FP arg on the stack, so account for
+ that before our assert test. */
+#ifndef __NO_FPRS__
+ if (fparg_count > NUM_FPR_ARG_REGISTERS)
+ intarg_count -= fparg_count - NUM_FPR_ARG_REGISTERS;
+ FFI_ASSERT (fpr_base.u
+ <= stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS);
+#endif
+ FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4);
+}
+
+#define MIN_CACHE_LINE_SIZE 8
+
+static void
+flush_icache (char *wraddr, char *xaddr, int size)
+{
+ int i;
+ for (i = 0; i < size; i += MIN_CACHE_LINE_SIZE)
+ __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;"
+ : : "r" (xaddr + i), "r" (wraddr + i) : "memory");
+ __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;" "sync;" "isync;"
+ : : "r"(xaddr + size - 1), "r"(wraddr + size - 1)
+ : "memory");
+}
+
+ffi_status FFI_HIDDEN
+ffi_prep_closure_loc_sysv (ffi_closure *closure,
+ ffi_cif *cif,
+ void (*fun) (ffi_cif *, void *, void **, void *),
+ void *user_data,
+ void *codeloc)
+{
+ unsigned int *tramp;
+
+ if (cif->abi < FFI_SYSV || cif->abi >= FFI_LAST_ABI)
+ return FFI_BAD_ABI;
+
+ tramp = (unsigned int *) &closure->tramp[0];
+ tramp[0] = 0x7c0802a6; /* mflr r0 */
+ tramp[1] = 0x4800000d; /* bl 10 <trampoline_initial+0x10> */
+ tramp[4] = 0x7d6802a6; /* mflr r11 */
+ tramp[5] = 0x7c0803a6; /* mtlr r0 */
+ tramp[6] = 0x800b0000; /* lwz r0,0(r11) */
+ tramp[7] = 0x816b0004; /* lwz r11,4(r11) */
+ tramp[8] = 0x7c0903a6; /* mtctr r0 */
+ tramp[9] = 0x4e800420; /* bctr */
+ *(void **) &tramp[2] = (void *) ffi_closure_SYSV; /* function */
+ *(void **) &tramp[3] = codeloc; /* context */
+
+ /* Flush the icache. */
+ flush_icache ((char *)tramp, (char *)codeloc, FFI_TRAMPOLINE_SIZE);
+
+ closure->cif = cif;
+ closure->fun = fun;
+ closure->user_data = user_data;
+
+ return FFI_OK;
+}
+
+/* Basically the trampoline invokes ffi_closure_SYSV, and on
+ entry, r11 holds the address of the closure.
+ After storing the registers that could possibly contain
+ parameters to be passed into the stack frame and setting
+ up space for a return value, ffi_closure_SYSV invokes the
+ following helper function to do most of the work. */
+
+int
+ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue,
+ unsigned long *pgr, ffi_dblfl *pfr,
+ unsigned long *pst)
+{
+ /* rvalue is the pointer to space for return value in closure assembly */
+ /* pgr is the pointer to where r3-r10 are stored in ffi_closure_SYSV */
+ /* pfr is the pointer to where f1-f8 are stored in ffi_closure_SYSV */
+ /* pst is the pointer to outgoing parameter stack in original caller */
+
+ void ** avalue;
+ ffi_type ** arg_types;
+ long i, avn;
+#ifndef __NO_FPRS__
+ long nf = 0; /* number of floating registers already used */
+#endif
+ long ng = 0; /* number of general registers already used */
+
+ ffi_cif *cif = closure->cif;
+ unsigned size = cif->rtype->size;
+ unsigned short rtypenum = cif->rtype->type;
+
+ avalue = alloca (cif->nargs * sizeof (void *));
+
+ /* First translate for softfloat/nonlinux */
+ rtypenum = translate_float (cif->abi, rtypenum);
+
+ /* Copy the caller's structure return value address so that the closure
+ returns the data directly to the caller.
+ For FFI_SYSV the result is passed in r3/r4 if the struct size is less
+ or equal 8 bytes. */
+ if (rtypenum == FFI_TYPE_STRUCT
+ && !((cif->abi & FFI_SYSV_STRUCT_RET) != 0 && size <= 8))
+ {
+ rvalue = (void *) *pgr;
+ ng++;
+ pgr++;
+ }
+
+ i = 0;
+ avn = cif->nargs;
+ arg_types = cif->arg_types;
+
+ /* Grab the addresses of the arguments from the stack frame. */
+ while (i < avn) {
+ unsigned short typenum = arg_types[i]->type;
+
+ /* We may need to handle some values depending on ABI. */
+ typenum = translate_float (cif->abi, typenum);
+
+ switch (typenum)
+ {
+#ifndef __NO_FPRS__
+ case FFI_TYPE_FLOAT:
+ /* Unfortunately float values are stored as doubles
+ in the ffi_closure_SYSV code (since we don't check
+ the type in that routine). */
+ if (nf < NUM_FPR_ARG_REGISTERS)
+ {
+ /* FIXME? here we are really changing the values
+ stored in the original calling routines outgoing
+ parameter stack. This is probably a really
+ naughty thing to do but... */
+ double temp = pfr->d;
+ pfr->f = (float) temp;
+ avalue[i] = pfr;
+ nf++;
+ pfr++;
+ }
+ else
+ {
+ avalue[i] = pst;
+ pst += 1;
+ }
+ break;
+
+ case FFI_TYPE_DOUBLE:
+ if (nf < NUM_FPR_ARG_REGISTERS)
+ {
+ avalue[i] = pfr;
+ nf++;
+ pfr++;
+ }
+ else
+ {
+ if (((long) pst) & 4)
+ pst++;
+ avalue[i] = pst;
+ pst += 2;
+ }
+ break;
+
+# if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ case FFI_TYPE_LONGDOUBLE:
+ if (nf < NUM_FPR_ARG_REGISTERS - 1)
+ {
+ avalue[i] = pfr;
+ pfr += 2;
+ nf += 2;
+ }
+ else
+ {
+ if (((long) pst) & 4)
+ pst++;
+ avalue[i] = pst;
+ pst += 4;
+ nf = 8;
+ }
+ break;
+# endif
+#endif
+
+ case FFI_TYPE_UINT128:
+ /* Test if for the whole long double, 4 gprs are available.
+ otherwise the stuff ends up on the stack. */
+ if (ng < NUM_GPR_ARG_REGISTERS - 3)
+ {
+ avalue[i] = pgr;
+ pgr += 4;
+ ng += 4;
+ }
+ else
+ {
+ avalue[i] = pst;
+ pst += 4;
+ ng = 8+4;
+ }
+ break;
+
+ case FFI_TYPE_SINT8:
+ case FFI_TYPE_UINT8:
+#ifndef __LITTLE_ENDIAN__
+ if (ng < NUM_GPR_ARG_REGISTERS)
+ {
+ avalue[i] = (char *) pgr + 3;
+ ng++;
+ pgr++;
+ }
+ else
+ {
+ avalue[i] = (char *) pst + 3;
+ pst++;
+ }
+ break;
+#endif
+
+ case FFI_TYPE_SINT16:
+ case FFI_TYPE_UINT16:
+#ifndef __LITTLE_ENDIAN__
+ if (ng < NUM_GPR_ARG_REGISTERS)
+ {
+ avalue[i] = (char *) pgr + 2;
+ ng++;
+ pgr++;
+ }
+ else
+ {
+ avalue[i] = (char *) pst + 2;
+ pst++;
+ }
+ break;
+#endif
+
+ case FFI_TYPE_SINT32:
+ case FFI_TYPE_UINT32:
+ case FFI_TYPE_POINTER:
+ if (ng < NUM_GPR_ARG_REGISTERS)
+ {
+ avalue[i] = pgr;
+ ng++;
+ pgr++;
+ }
+ else
+ {
+ avalue[i] = pst;
+ pst++;
+ }
+ break;
+
+ case FFI_TYPE_STRUCT:
+ /* Structs are passed by reference. The address will appear in a
+ gpr if it is one of the first 8 arguments. */
+ if (ng < NUM_GPR_ARG_REGISTERS)
+ {
+ avalue[i] = (void *) *pgr;
+ ng++;
+ pgr++;
+ }
+ else
+ {
+ avalue[i] = (void *) *pst;
+ pst++;
+ }
+ break;
+
+ case FFI_TYPE_SINT64:
+ case FFI_TYPE_UINT64:
+ /* Passing long long ints are complex, they must
+ be passed in suitable register pairs such as
+ (r3,r4) or (r5,r6) or (r6,r7), or (r7,r8) or (r9,r10)
+ and if the entire pair aren't available then the outgoing
+ parameter stack is used for both but an alignment of 8
+ must will be kept. So we must either look in pgr
+ or pst to find the correct address for this type
+ of parameter. */
+ if (ng < NUM_GPR_ARG_REGISTERS - 1)
+ {
+ if (ng & 1)
+ {
+ /* skip r4, r6, r8 as starting points */
+ ng++;
+ pgr++;
+ }
+ avalue[i] = pgr;
+ ng += 2;
+ pgr += 2;
+ }
+ else
+ {
+ if (((long) pst) & 4)
+ pst++;
+ avalue[i] = pst;
+ pst += 2;
+ ng = NUM_GPR_ARG_REGISTERS;
+ }
+ break;
+
+ default:
+ FFI_ASSERT (0);
+ }
+
+ i++;
+ }
+
+ (closure->fun) (cif, rvalue, avalue, closure->user_data);
+
+ /* Tell ffi_closure_SYSV how to perform return type promotions.
+ Because the FFI_SYSV ABI returns the structures <= 8 bytes in
+ r3/r4 we have to tell ffi_closure_SYSV how to treat them. We
+ combine the base type FFI_SYSV_TYPE_SMALL_STRUCT with the size of
+ the struct less one. We never have a struct with size zero.
+ See the comment in ffitarget.h about ordering. */
+ if (rtypenum == FFI_TYPE_STRUCT
+ && (cif->abi & FFI_SYSV_STRUCT_RET) != 0 && size <= 8)
+ return FFI_SYSV_TYPE_SMALL_STRUCT - 1 + size;
+ return rtypenum;
+}
+#endif
diff --git a/gcc-4.8/libffi/src/powerpc/ffitarget.h b/gcc-4.8/libffi/src/powerpc/ffitarget.h
index 3c9db495f..b47b0f5d3 100644
--- a/gcc-4.8/libffi/src/powerpc/ffitarget.h
+++ b/gcc-4.8/libffi/src/powerpc/ffitarget.h
@@ -60,45 +60,76 @@ typedef signed long ffi_sarg;
typedef enum ffi_abi {
FFI_FIRST_ABI = 0,
-#ifdef POWERPC
- FFI_SYSV,
- FFI_GCC_SYSV,
- FFI_LINUX64,
- FFI_LINUX,
- FFI_LINUX_SOFT_FLOAT,
-# if defined(POWERPC64)
- FFI_DEFAULT_ABI = FFI_LINUX64,
-# elif defined(__NO_FPRS__)
- FFI_DEFAULT_ABI = FFI_LINUX_SOFT_FLOAT,
-# elif (__LDBL_MANT_DIG__ == 106)
- FFI_DEFAULT_ABI = FFI_LINUX,
-# else
- FFI_DEFAULT_ABI = FFI_GCC_SYSV,
-# endif
-#endif
-
-#ifdef POWERPC_AIX
+#if defined (POWERPC_AIX)
FFI_AIX,
FFI_DARWIN,
FFI_DEFAULT_ABI = FFI_AIX,
-#endif
+ FFI_LAST_ABI
-#ifdef POWERPC_DARWIN
+#elif defined (POWERPC_DARWIN)
FFI_AIX,
FFI_DARWIN,
FFI_DEFAULT_ABI = FFI_DARWIN,
-#endif
+ FFI_LAST_ABI
+
+#else
+ /* The FFI_COMPAT values are used by old code. Since libffi may be
+ a shared library we have to support old values for backwards
+ compatibility. */
+ FFI_COMPAT_SYSV,
+ FFI_COMPAT_GCC_SYSV,
+ FFI_COMPAT_LINUX64,
+ FFI_COMPAT_LINUX,
+ FFI_COMPAT_LINUX_SOFT_FLOAT,
+
+# if defined (POWERPC64)
+ /* This bit, always set in new code, must not be set in any of the
+ old FFI_COMPAT values that might be used for 64-bit linux. We
+ only need worry about FFI_COMPAT_LINUX64, but to be safe avoid
+ all old values. */
+ FFI_LINUX = 8,
+ /* This and following bits can reuse FFI_COMPAT values. */
+ FFI_LINUX_STRUCT_ALIGN = 1,
+ FFI_LINUX_LONG_DOUBLE_128 = 2,
+ FFI_DEFAULT_ABI = (FFI_LINUX
+# ifdef __STRUCT_PARM_ALIGN__
+ | FFI_LINUX_STRUCT_ALIGN
+# endif
+# ifdef __LONG_DOUBLE_128__
+ | FFI_LINUX_LONG_DOUBLE_128
+# endif
+ ),
+ FFI_LAST_ABI = 12
-#ifdef POWERPC_FREEBSD
- FFI_SYSV,
- FFI_GCC_SYSV,
- FFI_LINUX64,
- FFI_LINUX,
- FFI_LINUX_SOFT_FLOAT,
- FFI_DEFAULT_ABI = FFI_SYSV,
+# else
+ /* This bit, always set in new code, must not be set in any of the
+ old FFI_COMPAT values that might be used for 32-bit linux/sysv/bsd. */
+ FFI_SYSV = 8,
+ /* This and following bits can reuse FFI_COMPAT values. */
+ FFI_SYSV_SOFT_FLOAT = 1,
+ FFI_SYSV_STRUCT_RET = 2,
+ FFI_SYSV_IBM_LONG_DOUBLE = 4,
+ FFI_SYSV_LONG_DOUBLE_128 = 16,
+
+ FFI_DEFAULT_ABI = (FFI_SYSV
+# ifdef __NO_FPRS__
+ | FFI_SYSV_SOFT_FLOAT
+# endif
+# if (defined (__SVR4_STRUCT_RETURN) \
+ || defined (POWERPC_FREEBSD) && !defined (__AIX_STRUCT_RETURN))
+ | FFI_SYSV_STRUCT_RET
+# endif
+# if __LDBL_MANT_DIG__ == 106
+ | FFI_SYSV_IBM_LONG_DOUBLE
+# endif
+# ifdef __LONG_DOUBLE_128__
+ | FFI_SYSV_LONG_DOUBLE_128
+# endif
+ ),
+ FFI_LAST_ABI = 32
+# endif
#endif
- FFI_LAST_ABI
} ffi_abi;
#endif
@@ -106,6 +137,10 @@ typedef enum ffi_abi {
#define FFI_CLOSURES 1
#define FFI_NATIVE_RAW_API 0
+#if defined (POWERPC) || defined (POWERPC_FREEBSD)
+# define FFI_TARGET_SPECIFIC_VARIADIC 1
+# define FFI_EXTRA_CIF_FIELDS unsigned nfixedargs
+#endif
/* For additional types like the below, take care about the order in
ppc_closures.S. They must follow after the FFI_TYPE_LAST. */
@@ -113,19 +148,26 @@ typedef enum ffi_abi {
/* Needed for soft-float long-double-128 support. */
#define FFI_TYPE_UINT128 (FFI_TYPE_LAST + 1)
-/* Needed for FFI_SYSV small structure returns.
- We use two flag bits, (FLAG_SYSV_SMST_R3, FLAG_SYSV_SMST_R4) which are
- defined in ffi.c, to determine the exact return type and its size. */
+/* Needed for FFI_SYSV small structure returns. */
#define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 2)
-#if defined(POWERPC64) || defined(POWERPC_AIX)
+/* Used by ELFv2 for homogenous structure returns. */
+#define FFI_V2_TYPE_FLOAT_HOMOG (FFI_TYPE_LAST + 1)
+#define FFI_V2_TYPE_DOUBLE_HOMOG (FFI_TYPE_LAST + 2)
+#define FFI_V2_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 3)
+
+#if _CALL_ELF == 2
+# define FFI_TRAMPOLINE_SIZE 32
+#else
+# if defined(POWERPC64) || defined(POWERPC_AIX)
# if defined(POWERPC_DARWIN64)
# define FFI_TRAMPOLINE_SIZE 48
# else
# define FFI_TRAMPOLINE_SIZE 24
# endif
-#else /* POWERPC || POWERPC_AIX */
+# else /* POWERPC || POWERPC_AIX */
# define FFI_TRAMPOLINE_SIZE 40
+# endif
#endif
#ifndef LIBFFI_ASM
diff --git a/gcc-4.8/libffi/src/powerpc/linux64.S b/gcc-4.8/libffi/src/powerpc/linux64.S
index f28da8120..c4d01d8e3 100644
--- a/gcc-4.8/libffi/src/powerpc/linux64.S
+++ b/gcc-4.8/libffi/src/powerpc/linux64.S
@@ -29,18 +29,25 @@
#include <fficonfig.h>
#include <ffi.h>
-#ifdef __powerpc64__
+#ifdef POWERPC64
.hidden ffi_call_LINUX64
.globl ffi_call_LINUX64
+# if _CALL_ELF == 2
+ .text
+ffi_call_LINUX64:
+ addis %r2, %r12, .TOC.-ffi_call_LINUX64@ha
+ addi %r2, %r2, .TOC.-ffi_call_LINUX64@l
+ .localentry ffi_call_LINUX64, . - ffi_call_LINUX64
+# else
.section ".opd","aw"
.align 3
ffi_call_LINUX64:
-#ifdef _CALL_LINUX
+# ifdef _CALL_LINUX
.quad .L.ffi_call_LINUX64,.TOC.@tocbase,0
.type ffi_call_LINUX64,@function
.text
.L.ffi_call_LINUX64:
-#else
+# else
.hidden .ffi_call_LINUX64
.globl .ffi_call_LINUX64
.quad .ffi_call_LINUX64,.TOC.@tocbase,0
@@ -48,7 +55,8 @@ ffi_call_LINUX64:
.type .ffi_call_LINUX64,@function
.text
.ffi_call_LINUX64:
-#endif
+# endif
+# endif
.LFB1:
mflr %r0
std %r28, -32(%r1)
@@ -63,26 +71,35 @@ ffi_call_LINUX64:
mr %r31, %r5 /* flags, */
mr %r30, %r6 /* rvalue, */
mr %r29, %r7 /* function address. */
+/* Save toc pointer, not for the ffi_prep_args64 call, but for the later
+ bctrl function call. */
+# if _CALL_ELF == 2
+ std %r2, 24(%r1)
+# else
std %r2, 40(%r1)
+# endif
/* Call ffi_prep_args64. */
mr %r4, %r1
-#ifdef _CALL_LINUX
+# if defined _CALL_LINUX || _CALL_ELF == 2
bl ffi_prep_args64
-#else
+# else
bl .ffi_prep_args64
-#endif
+# endif
- ld %r0, 0(%r29)
+# if _CALL_ELF == 2
+ mr %r12, %r29
+# else
+ ld %r12, 0(%r29)
ld %r2, 8(%r29)
ld %r11, 16(%r29)
-
+# endif
/* Now do the call. */
/* Set up cr1 with bits 4-7 of the flags. */
mtcrf 0x40, %r31
/* Get the address to call into CTR. */
- mtctr %r0
+ mtctr %r12
/* Load all those argument registers. */
ld %r3, -32-(8*8)(%r28)
ld %r4, -32-(7*8)(%r28)
@@ -117,12 +134,17 @@ ffi_call_LINUX64:
/* This must follow the call immediately, the unwinder
uses this to find out if r2 has been saved or not. */
+# if _CALL_ELF == 2
+ ld %r2, 24(%r1)
+# else
ld %r2, 40(%r1)
+# endif
/* Now, deal with the return value. */
mtcrf 0x01, %r31
- bt- 30, .Ldone_return_value
- bt- 29, .Lfp_return_value
+ bt 31, .Lstruct_return_value
+ bt 30, .Ldone_return_value
+ bt 29, .Lfp_return_value
std %r3, 0(%r30)
/* Fall through... */
@@ -130,7 +152,7 @@ ffi_call_LINUX64:
/* Restore the registers we used and return. */
mr %r1, %r28
ld %r0, 16(%r28)
- ld %r28, -32(%r1)
+ ld %r28, -32(%r28)
mtlr %r0
ld %r29, -24(%r1)
ld %r30, -16(%r1)
@@ -147,14 +169,48 @@ ffi_call_LINUX64:
.Lfloat_return_value:
stfs %f1, 0(%r30)
b .Ldone_return_value
+
+.Lstruct_return_value:
+ bf 29, .Lsmall_struct
+ bf 28, .Lfloat_homog_return_value
+ stfd %f1, 0(%r30)
+ stfd %f2, 8(%r30)
+ stfd %f3, 16(%r30)
+ stfd %f4, 24(%r30)
+ stfd %f5, 32(%r30)
+ stfd %f6, 40(%r30)
+ stfd %f7, 48(%r30)
+ stfd %f8, 56(%r30)
+ b .Ldone_return_value
+
+.Lfloat_homog_return_value:
+ stfs %f1, 0(%r30)
+ stfs %f2, 4(%r30)
+ stfs %f3, 8(%r30)
+ stfs %f4, 12(%r30)
+ stfs %f5, 16(%r30)
+ stfs %f6, 20(%r30)
+ stfs %f7, 24(%r30)
+ stfs %f8, 28(%r30)
+ b .Ldone_return_value
+
+.Lsmall_struct:
+ std %r3, 0(%r30)
+ std %r4, 8(%r30)
+ b .Ldone_return_value
+
.LFE1:
.long 0
.byte 0,12,0,1,128,4,0,0
-#ifdef _CALL_LINUX
+# if _CALL_ELF == 2
+ .size ffi_call_LINUX64,.-ffi_call_LINUX64
+# else
+# ifdef _CALL_LINUX
.size ffi_call_LINUX64,.-.L.ffi_call_LINUX64
-#else
+# else
.size .ffi_call_LINUX64,.-.ffi_call_LINUX64
-#endif
+# endif
+# endif
.section .eh_frame,EH_FRAME_FLAGS,@progbits
.Lframe1:
@@ -197,8 +253,8 @@ ffi_call_LINUX64:
.uleb128 0x4
.align 3
.LEFDE1:
-#endif
-#if defined __ELF__ && defined __linux__
+# if (defined __ELF__ && defined __linux__) || _CALL_ELF == 2
.section .note.GNU-stack,"",@progbits
+# endif
#endif
diff --git a/gcc-4.8/libffi/src/powerpc/linux64_closure.S b/gcc-4.8/libffi/src/powerpc/linux64_closure.S
index ac4a226ac..46a9ddfcd 100644
--- a/gcc-4.8/libffi/src/powerpc/linux64_closure.S
+++ b/gcc-4.8/libffi/src/powerpc/linux64_closure.S
@@ -30,18 +30,25 @@
.file "linux64_closure.S"
-#ifdef __powerpc64__
+#ifdef POWERPC64
FFI_HIDDEN (ffi_closure_LINUX64)
.globl ffi_closure_LINUX64
+# if _CALL_ELF == 2
+ .text
+ffi_closure_LINUX64:
+ addis %r2, %r12, .TOC.-ffi_closure_LINUX64@ha
+ addi %r2, %r2, .TOC.-ffi_closure_LINUX64@l
+ .localentry ffi_closure_LINUX64, . - ffi_closure_LINUX64
+# else
.section ".opd","aw"
.align 3
ffi_closure_LINUX64:
-#ifdef _CALL_LINUX
+# ifdef _CALL_LINUX
.quad .L.ffi_closure_LINUX64,.TOC.@tocbase,0
.type ffi_closure_LINUX64,@function
.text
.L.ffi_closure_LINUX64:
-#else
+# else
FFI_HIDDEN (.ffi_closure_LINUX64)
.globl .ffi_closure_LINUX64
.quad .ffi_closure_LINUX64,.TOC.@tocbase,0
@@ -49,61 +56,101 @@ ffi_closure_LINUX64:
.type .ffi_closure_LINUX64,@function
.text
.ffi_closure_LINUX64:
-#endif
+# endif
+# endif
+
+# if _CALL_ELF == 2
+# 32 byte special reg save area + 64 byte parm save area
+# + 64 byte retval area + 13*8 fpr save area + round to 16
+# define STACKFRAME 272
+# define PARMSAVE 32
+# define RETVAL PARMSAVE+64
+# else
+# 48 bytes special reg save area + 64 bytes parm save area
+# + 16 bytes retval area + 13*8 bytes fpr save area + round to 16
+# define STACKFRAME 240
+# define PARMSAVE 48
+# define RETVAL PARMSAVE+64
+# endif
+
.LFB1:
- # save general regs into parm save area
- std %r3, 48(%r1)
- std %r4, 56(%r1)
- std %r5, 64(%r1)
- std %r6, 72(%r1)
+# if _CALL_ELF == 2
+ ld %r12, FFI_TRAMPOLINE_SIZE(%r11) # closure->cif
mflr %r0
+ lwz %r12, 28(%r12) # cif->flags
+ mtcrf 0x40, %r12
+ addi %r12, %r1, PARMSAVE
+ bt 7, .Lparmsave
+ # Our caller has not allocated a parameter save area.
+ # We need to allocate one here and use it to pass gprs to
+ # ffi_closure_helper_LINUX64.
+ addi %r12, %r1, -STACKFRAME+PARMSAVE
+.Lparmsave:
+ std %r0, 16(%r1)
+ # Save general regs into parm save area
+ std %r3, 0(%r12)
+ std %r4, 8(%r12)
+ std %r5, 16(%r12)
+ std %r6, 24(%r12)
+ std %r7, 32(%r12)
+ std %r8, 40(%r12)
+ std %r9, 48(%r12)
+ std %r10, 56(%r12)
+
+ # load up the pointer to the parm save area
+ mr %r5, %r12
+# else
+ mflr %r0
+ # Save general regs into parm save area
+ # This is the parameter save area set up by our caller.
+ std %r3, PARMSAVE+0(%r1)
+ std %r4, PARMSAVE+8(%r1)
+ std %r5, PARMSAVE+16(%r1)
+ std %r6, PARMSAVE+24(%r1)
+ std %r7, PARMSAVE+32(%r1)
+ std %r8, PARMSAVE+40(%r1)
+ std %r9, PARMSAVE+48(%r1)
+ std %r10, PARMSAVE+56(%r1)
- std %r7, 80(%r1)
- std %r8, 88(%r1)
- std %r9, 96(%r1)
- std %r10, 104(%r1)
std %r0, 16(%r1)
- # mandatory 48 bytes special reg save area + 64 bytes parm save area
- # + 16 bytes retval area + 13*8 bytes fpr save area + round to 16
- stdu %r1, -240(%r1)
-.LCFI0:
+ # load up the pointer to the parm save area
+ addi %r5, %r1, PARMSAVE
+# endif
# next save fpr 1 to fpr 13
- stfd %f1, 128+(0*8)(%r1)
- stfd %f2, 128+(1*8)(%r1)
- stfd %f3, 128+(2*8)(%r1)
- stfd %f4, 128+(3*8)(%r1)
- stfd %f5, 128+(4*8)(%r1)
- stfd %f6, 128+(5*8)(%r1)
- stfd %f7, 128+(6*8)(%r1)
- stfd %f8, 128+(7*8)(%r1)
- stfd %f9, 128+(8*8)(%r1)
- stfd %f10, 128+(9*8)(%r1)
- stfd %f11, 128+(10*8)(%r1)
- stfd %f12, 128+(11*8)(%r1)
- stfd %f13, 128+(12*8)(%r1)
+ stfd %f1, -104+(0*8)(%r1)
+ stfd %f2, -104+(1*8)(%r1)
+ stfd %f3, -104+(2*8)(%r1)
+ stfd %f4, -104+(3*8)(%r1)
+ stfd %f5, -104+(4*8)(%r1)
+ stfd %f6, -104+(5*8)(%r1)
+ stfd %f7, -104+(6*8)(%r1)
+ stfd %f8, -104+(7*8)(%r1)
+ stfd %f9, -104+(8*8)(%r1)
+ stfd %f10, -104+(9*8)(%r1)
+ stfd %f11, -104+(10*8)(%r1)
+ stfd %f12, -104+(11*8)(%r1)
+ stfd %f13, -104+(12*8)(%r1)
- # set up registers for the routine that actually does the work
- # get the context pointer from the trampoline
- mr %r3, %r11
+ # load up the pointer to the saved fpr registers */
+ addi %r6, %r1, -104
- # now load up the pointer to the result storage
- addi %r4, %r1, 112
+ # load up the pointer to the result storage
+ addi %r4, %r1, -STACKFRAME+RETVAL
- # now load up the pointer to the parameter save area
- # in the previous frame
- addi %r5, %r1, 240 + 48
+ stdu %r1, -STACKFRAME(%r1)
+.LCFI0:
- # now load up the pointer to the saved fpr registers */
- addi %r6, %r1, 128
+ # get the context pointer from the trampoline
+ mr %r3, %r11
# make the call
-#ifdef _CALL_LINUX
+# if defined _CALL_LINUX || _CALL_ELF == 2
bl ffi_closure_helper_LINUX64
-#else
+# else
bl .ffi_closure_helper_LINUX64
-#endif
+# endif
.Lret:
# now r3 contains the return type
@@ -112,10 +159,12 @@ ffi_closure_LINUX64:
# look up the proper starting point in table
# by using return type as offset
+ ld %r0, STACKFRAME+16(%r1)
+ cmpldi %r3, FFI_V2_TYPE_SMALL_STRUCT
+ bge .Lsmall
mflr %r4 # move address of .Lret to r4
sldi %r3, %r3, 4 # now multiply return type by 16
addi %r4, %r4, .Lret_type0 - .Lret
- ld %r0, 240+16(%r1)
add %r3, %r3, %r4 # add contents of table to table address
mtctr %r3
bctr # jump to it
@@ -128,117 +177,175 @@ ffi_closure_LINUX64:
.Lret_type0:
# case FFI_TYPE_VOID
mtlr %r0
- addi %r1, %r1, 240
+ addi %r1, %r1, STACKFRAME
blr
nop
# case FFI_TYPE_INT
-#ifdef __LITTLE_ENDIAN__
- lwa %r3, 112+0(%r1)
-#else
- lwa %r3, 112+4(%r1)
-#endif
+# ifdef __LITTLE_ENDIAN__
+ lwa %r3, RETVAL+0(%r1)
+# else
+ lwa %r3, RETVAL+4(%r1)
+# endif
mtlr %r0
- addi %r1, %r1, 240
+ addi %r1, %r1, STACKFRAME
blr
# case FFI_TYPE_FLOAT
- lfs %f1, 112+0(%r1)
+ lfs %f1, RETVAL+0(%r1)
mtlr %r0
- addi %r1, %r1, 240
+ addi %r1, %r1, STACKFRAME
blr
# case FFI_TYPE_DOUBLE
- lfd %f1, 112+0(%r1)
+ lfd %f1, RETVAL+0(%r1)
mtlr %r0
- addi %r1, %r1, 240
+ addi %r1, %r1, STACKFRAME
blr
# case FFI_TYPE_LONGDOUBLE
- lfd %f1, 112+0(%r1)
+ lfd %f1, RETVAL+0(%r1)
mtlr %r0
- lfd %f2, 112+8(%r1)
+ lfd %f2, RETVAL+8(%r1)
b .Lfinish
# case FFI_TYPE_UINT8
-#ifdef __LITTLE_ENDIAN__
- lbz %r3, 112+0(%r1)
-#else
- lbz %r3, 112+7(%r1)
-#endif
+# ifdef __LITTLE_ENDIAN__
+ lbz %r3, RETVAL+0(%r1)
+# else
+ lbz %r3, RETVAL+7(%r1)
+# endif
mtlr %r0
- addi %r1, %r1, 240
+ addi %r1, %r1, STACKFRAME
blr
# case FFI_TYPE_SINT8
-#ifdef __LITTLE_ENDIAN__
- lbz %r3, 112+0(%r1)
-#else
- lbz %r3, 112+7(%r1)
-#endif
+# ifdef __LITTLE_ENDIAN__
+ lbz %r3, RETVAL+0(%r1)
+# else
+ lbz %r3, RETVAL+7(%r1)
+# endif
extsb %r3,%r3
mtlr %r0
b .Lfinish
# case FFI_TYPE_UINT16
-#ifdef __LITTLE_ENDIAN__
- lhz %r3, 112+0(%r1)
-#else
- lhz %r3, 112+6(%r1)
-#endif
+# ifdef __LITTLE_ENDIAN__
+ lhz %r3, RETVAL+0(%r1)
+# else
+ lhz %r3, RETVAL+6(%r1)
+# endif
mtlr %r0
.Lfinish:
- addi %r1, %r1, 240
+ addi %r1, %r1, STACKFRAME
blr
# case FFI_TYPE_SINT16
-#ifdef __LITTLE_ENDIAN__
- lha %r3, 112+0(%r1)
-#else
- lha %r3, 112+6(%r1)
-#endif
+# ifdef __LITTLE_ENDIAN__
+ lha %r3, RETVAL+0(%r1)
+# else
+ lha %r3, RETVAL+6(%r1)
+# endif
mtlr %r0
- addi %r1, %r1, 240
+ addi %r1, %r1, STACKFRAME
blr
# case FFI_TYPE_UINT32
-#ifdef __LITTLE_ENDIAN__
- lwz %r3, 112+0(%r1)
-#else
- lwz %r3, 112+4(%r1)
-#endif
+# ifdef __LITTLE_ENDIAN__
+ lwz %r3, RETVAL+0(%r1)
+# else
+ lwz %r3, RETVAL+4(%r1)
+# endif
mtlr %r0
- addi %r1, %r1, 240
+ addi %r1, %r1, STACKFRAME
blr
# case FFI_TYPE_SINT32
-#ifdef __LITTLE_ENDIAN__
- lwa %r3, 112+0(%r1)
-#else
- lwa %r3, 112+4(%r1)
-#endif
+# ifdef __LITTLE_ENDIAN__
+ lwa %r3, RETVAL+0(%r1)
+# else
+ lwa %r3, RETVAL+4(%r1)
+# endif
mtlr %r0
- addi %r1, %r1, 240
+ addi %r1, %r1, STACKFRAME
blr
# case FFI_TYPE_UINT64
- ld %r3, 112+0(%r1)
+ ld %r3, RETVAL+0(%r1)
mtlr %r0
- addi %r1, %r1, 240
+ addi %r1, %r1, STACKFRAME
blr
# case FFI_TYPE_SINT64
- ld %r3, 112+0(%r1)
+ ld %r3, RETVAL+0(%r1)
mtlr %r0
- addi %r1, %r1, 240
+ addi %r1, %r1, STACKFRAME
blr
# case FFI_TYPE_STRUCT
mtlr %r0
- addi %r1, %r1, 240
+ addi %r1, %r1, STACKFRAME
blr
nop
# case FFI_TYPE_POINTER
- ld %r3, 112+0(%r1)
+ ld %r3, RETVAL+0(%r1)
+ mtlr %r0
+ addi %r1, %r1, STACKFRAME
+ blr
+# case FFI_V2_TYPE_FLOAT_HOMOG
+ lfs %f1, RETVAL+0(%r1)
+ lfs %f2, RETVAL+4(%r1)
+ lfs %f3, RETVAL+8(%r1)
+ b .Lmorefloat
+# case FFI_V2_TYPE_DOUBLE_HOMOG
+ lfd %f1, RETVAL+0(%r1)
+ lfd %f2, RETVAL+8(%r1)
+ lfd %f3, RETVAL+16(%r1)
+ lfd %f4, RETVAL+24(%r1)
+ mtlr %r0
+ lfd %f5, RETVAL+32(%r1)
+ lfd %f6, RETVAL+40(%r1)
+ lfd %f7, RETVAL+48(%r1)
+ lfd %f8, RETVAL+56(%r1)
+ addi %r1, %r1, STACKFRAME
+ blr
+.Lmorefloat:
+ lfs %f4, RETVAL+12(%r1)
+ mtlr %r0
+ lfs %f5, RETVAL+16(%r1)
+ lfs %f6, RETVAL+20(%r1)
+ lfs %f7, RETVAL+24(%r1)
+ lfs %f8, RETVAL+28(%r1)
+ addi %r1, %r1, STACKFRAME
+ blr
+.Lsmall:
+# ifdef __LITTLE_ENDIAN__
+ ld %r3,RETVAL+0(%r1)
+ mtlr %r0
+ ld %r4,RETVAL+8(%r1)
+ addi %r1, %r1, STACKFRAME
+ blr
+# else
+ # A struct smaller than a dword is returned in the low bits of r3
+ # ie. right justified. Larger structs are passed left justified
+ # in r3 and r4. The return value area on the stack will have
+ # the structs as they are usually stored in memory.
+ cmpldi %r3, FFI_V2_TYPE_SMALL_STRUCT + 7 # size 8 bytes?
+ neg %r5, %r3
+ ld %r3,RETVAL+0(%r1)
+ blt .Lsmalldown
+ mtlr %r0
+ ld %r4,RETVAL+8(%r1)
+ addi %r1, %r1, STACKFRAME
+ blr
+.Lsmalldown:
+ addi %r5, %r5, FFI_V2_TYPE_SMALL_STRUCT + 7
mtlr %r0
- addi %r1, %r1, 240
+ sldi %r5, %r5, 3
+ addi %r1, %r1, STACKFRAME
+ srd %r3, %r3, %r5
blr
-# esac
+# endif
+
.LFE1:
.long 0
.byte 0,12,0,1,128,0,0,0
-#ifdef _CALL_LINUX
+# if _CALL_ELF == 2
+ .size ffi_closure_LINUX64,.-ffi_closure_LINUX64
+# else
+# ifdef _CALL_LINUX
.size ffi_closure_LINUX64,.-.L.ffi_closure_LINUX64
-#else
+# else
.size .ffi_closure_LINUX64,.-.ffi_closure_LINUX64
-#endif
+# endif
+# endif
.section .eh_frame,EH_FRAME_FLAGS,@progbits
.Lframe1:
@@ -267,14 +374,14 @@ ffi_closure_LINUX64:
.byte 0x2 # DW_CFA_advance_loc1
.byte .LCFI0-.LFB1
.byte 0xe # DW_CFA_def_cfa_offset
- .uleb128 240
+ .uleb128 STACKFRAME
.byte 0x11 # DW_CFA_offset_extended_sf
.uleb128 0x41
.sleb128 -2
.align 3
.LEFDE1:
-#endif
-#if defined __ELF__ && defined __linux__
+# if defined __ELF__ && defined __linux__
.section .note.GNU-stack,"",@progbits
+# endif
#endif
diff --git a/gcc-4.8/libffi/src/powerpc/ppc_closure.S b/gcc-4.8/libffi/src/powerpc/ppc_closure.S
index e16000642..050712850 100644
--- a/gcc-4.8/libffi/src/powerpc/ppc_closure.S
+++ b/gcc-4.8/libffi/src/powerpc/ppc_closure.S
@@ -31,7 +31,7 @@
.file "ppc_closure.S"
-#ifndef __powerpc64__
+#ifndef POWERPC64
ENTRY(ffi_closure_SYSV)
.LFB1:
@@ -238,7 +238,7 @@ ENTRY(ffi_closure_SYSV)
lwz %r3,112+0(%r1)
lwz %r4,112+4(%r1)
lwz %r5,112+8(%r1)
- bl .Luint128
+ b .Luint128
# The return types below are only used when the ABI type is FFI_SYSV.
# case FFI_SYSV_TYPE_SMALL_STRUCT + 1. One byte struct.
@@ -378,8 +378,7 @@ END(ffi_closure_SYSV)
.align 2
.LEFDE1:
-#endif
-
#if defined __ELF__ && defined __linux__
.section .note.GNU-stack,"",@progbits
#endif
+#endif
diff --git a/gcc-4.8/libffi/src/powerpc/sysv.S b/gcc-4.8/libffi/src/powerpc/sysv.S
index 675ed03ee..fed2380c9 100644
--- a/gcc-4.8/libffi/src/powerpc/sysv.S
+++ b/gcc-4.8/libffi/src/powerpc/sysv.S
@@ -30,7 +30,7 @@
#include <ffi.h>
#include <powerpc/asm.h>
-#ifndef __powerpc64__
+#ifndef POWERPC64
.globl ffi_prep_args_SYSV
ENTRY(ffi_call_SYSV)
.LFB1:
@@ -213,8 +213,8 @@ END(ffi_call_SYSV)
.uleb128 0x1c
.align 2
.LEFDE1:
-#endif
#if defined __ELF__ && defined __linux__
.section .note.GNU-stack,"",@progbits
#endif
+#endif
diff --git a/gcc-4.8/libffi/src/prep_cif.c b/gcc-4.8/libffi/src/prep_cif.c
index 5d1924bbe..866ed3471 100644
--- a/gcc-4.8/libffi/src/prep_cif.c
+++ b/gcc-4.8/libffi/src/prep_cif.c
@@ -126,6 +126,10 @@ ffi_status FFI_HIDDEN ffi_prep_cif_core(ffi_cif *cif, ffi_abi abi,
cif->flags = 0;
+#if HAVE_LONG_DOUBLE_VARIANT
+ ffi_prep_types (abi);
+#endif
+
/* Initialize the return type if necessary */
if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK))
return FFI_BAD_TYPEDEF;
diff --git a/gcc-4.8/libffi/src/types.c b/gcc-4.8/libffi/src/types.c
index 0a11eb0fb..0de599423 100644
--- a/gcc-4.8/libffi/src/types.c
+++ b/gcc-4.8/libffi/src/types.c
@@ -44,6 +44,17 @@ const ffi_type ffi_type_##name = { \
id, NULL \
}
+#define FFI_NONCONST_TYPEDEF(name, type, id) \
+struct struct_align_##name { \
+ char c; \
+ type x; \
+}; \
+ffi_type ffi_type_##name = { \
+ sizeof(type), \
+ offsetof(struct struct_align_##name, x), \
+ id, NULL \
+}
+
/* Size and alignment are fake here. They must not be 0. */
const ffi_type ffi_type_void = {
1, 1, FFI_TYPE_VOID, NULL
@@ -73,5 +84,9 @@ FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE);
# endif
const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL };
#elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+# if HAVE_LONG_DOUBLE_VARIANT
+FFI_NONCONST_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE);
+# else
FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE);
+# endif
#endif
diff --git a/gcc-4.8/libffi/testsuite/Makefile.in b/gcc-4.8/libffi/testsuite/Makefile.in
index 4a9f98ed9..808d4cb2e 100644
--- a/gcc-4.8/libffi/testsuite/Makefile.in
+++ b/gcc-4.8/libffi/testsuite/Makefile.in
@@ -88,6 +88,7 @@ FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@
FGREP = @FGREP@
GREP = @GREP@
HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
+HAVE_LONG_DOUBLE_VARIANT = @HAVE_LONG_DOUBLE_VARIANT@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
diff --git a/gcc-4.8/libffi/testsuite/libffi.call/cls_double_va.c b/gcc-4.8/libffi/testsuite/libffi.call/cls_double_va.c
index dbf20002d..01ef1c2f1 100644
--- a/gcc-4.8/libffi/testsuite/libffi.call/cls_double_va.c
+++ b/gcc-4.8/libffi/testsuite/libffi.call/cls_double_va.c
@@ -45,19 +45,17 @@ int main (void)
args[2] = NULL;
ffi_call(&cif, FFI_FN(printf), &res, args);
- // { dg-output "7.0" }
+ /* { dg-output "7.0" } */
printf("res: %d\n", (int) res);
- // { dg-output "\nres: 4" }
+ /* { dg-output "\nres: 4" } */
- /* The call to cls_double_va_fn is static, so have to use a normal prep_cif */
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint, arg_types) == FFI_OK);
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL,
+ code) == FFI_OK);
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL, code) == FFI_OK);
-
- res = ((int(*)(char*, double))(code))(format, doubleArg);
- // { dg-output "\n7.0" }
+ res = ((int(*)(char*, ...))(code))(format, doubleArg);
+ /* { dg-output "\n7.0" } */
printf("res: %d\n", (int) res);
- // { dg-output "\nres: 4" }
+ /* { dg-output "\nres: 4" } */
exit(0);
}
diff --git a/gcc-4.8/libffi/testsuite/libffi.call/cls_longdouble_va.c b/gcc-4.8/libffi/testsuite/libffi.call/cls_longdouble_va.c
index 4fa1ea28a..1082570de 100644
--- a/gcc-4.8/libffi/testsuite/libffi.call/cls_longdouble_va.c
+++ b/gcc-4.8/libffi/testsuite/libffi.call/cls_longdouble_va.c
@@ -45,20 +45,17 @@ int main (void)
args[2] = NULL;
ffi_call(&cif, FFI_FN(printf), &res, args);
- // { dg-output "7.0" }
+ /* { dg-output "7.0" } */
printf("res: %d\n", (int) res);
- // { dg-output "\nres: 4" }
+ /* { dg-output "\nres: 4" } */
- /* The call to cls_longdouble_va_fn is static, so have to use a normal prep_cif */
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint,
- arg_types) == FFI_OK);
-
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_longdouble_va_fn, NULL, code) == FFI_OK);
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_longdouble_va_fn, NULL,
+ code) == FFI_OK);
- res = ((int(*)(char*, long double))(code))(format, ldArg);
- // { dg-output "\n7.0" }
+ res = ((int(*)(char*, ...))(code))(format, ldArg);
+ /* { dg-output "\n7.0" } */
printf("res: %d\n", (int) res);
- // { dg-output "\nres: 4" }
+ /* { dg-output "\nres: 4" } */
exit(0);
}
diff --git a/gcc-4.8/libgcc/ChangeLog b/gcc-4.8/libgcc/ChangeLog
index 8aeac1ca1..bf568924b 100644
--- a/gcc-4.8/libgcc/ChangeLog
+++ b/gcc-4.8/libgcc/ChangeLog
@@ -1,3 +1,219 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-05-21 Maciej W. Rozycki <macro@codesourcery.com>
+
+ Backport from mainline
+ 2014-05-21 Maciej W. Rozycki <macro@codesourcery.com>
+
+ PR libgcc/60166
+ * config/arm/sfp-machine.h (_FP_NANFRAC_H, _FP_NANFRAC_S)
+ (_FP_NANFRAC_D, _FP_NANSIGN_Q): Set the quiet bit.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline r204808:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+ Alan Modra <amodra@gmail.com>
+
+ * config/rs6000/linux-unwind.h (TOC_SAVE_SLOT): Define.
+ (frob_update_context): Use it.
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+ Alan Modra <amodra@gmail.com>
+
+ * config/rs6000/tramp.S [__powerpc64__ && _CALL_ELF == 2]:
+ (trampoline_initial): Provide ELFv2 variant.
+ (__trampoline_setup): Likewise.
+
+ * config/rs6000/linux-unwind.h (frob_update_context): Do not
+ check for AIX indirect function call sequence if _CALL_ELF == 2.
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+ Alan Modra <amodra@gmail.com>
+
+ * config/rs6000/linux-unwind.h (get_regs): Do not support
+ old kernel versions if _CALL_ELF == 2.
+ (frob_update_context): Do not support PLT stub variants only
+ generated by old linkers if _CALL_ELF == 2.
+
+ Backport from mainline r204800:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+ Alan Modra <amodra@gmail.com>
+
+ * config/rs6000/linux-unwind.h (ppc_fallback_frame_state): Correct
+ location of CR save area for 64-bit little-endian systems.
+
+2014-03-20 Joel Sherrill <joel.sherrill@oarcorp.com>
+
+ * config.host (v850*-*-*): Add to tmake_file instead of resetting it.
+
+2014-02-28 Joey Ye <joey.ye@arm.com>
+
+ Backport from mainline r208229
+ 2014-02-28 Joey Ye <joey.ye@arm.com>
+
+ PR libgcc/60166
+ * config/arm/sfp-machine.h (_FP_NANFRAC_H,
+ _FP_NANFRAC_S, _FP_NANFRAC_D, _FP_NANFRAC_Q):
+ Set to zero.
+
+2014-02-18 Kai Tietz <ktietz@redhat.com>
+ Jonathan Schleifer <js@webkeks.org>
+
+ PR objc/56870
+ * unwind-seh.c (_GCC_specific_handler): Pass proper
+ value to unwind-handler.
+
+2014-01-25 Walter Lee <walt@tilera.com>
+
+ Backport from mainline
+ 2014-01-25 Walter Lee <walt@tilera.com>
+
+ * config/tilepro/atomic.c (pre_atomic_barrier): Mark inline.
+ (post_atomic_barrier): Ditto.
+ (__fetch_and_do): New macro.
+ (__atomic_fetch_and_do): Use __fetch_and_do.
+ (__sync_fetch_and_do): New macro.
+ (__sync_fetch_and_add_4): New function.
+ (__sync_fetch_and_sub_4): New function.
+ (__sync_fetch_and_or_4): New function.
+ (__sync_fetch_and_and_4): New function.
+ (__sync_fetch_and_xor_4): New function.
+ (__sync_fetch_and_nand_4): New function.
+ (__sync_fetch_and_add_8): New function.
+ (__sync_fetch_and_sub_8): New function.
+ (__sync_fetch_and_or_8): New function.
+ (__sync_fetch_and_and_8): New function.
+ (__sync_fetch_and_xor_8): New function.
+ (__sync_fetch_and_nand_8): New function.
+ (__do_and_fetch): New macro.
+ (__atomic_do_and_fetch): Use __do_and_fetch.
+ (__sync_do_and_fetch): New macro.
+ (__sync_add_and_fetch_4): New function.
+ (__sync_sub_and_fetch_4): New function.
+ (__sync_or_and_fetch_4): New function.
+ (__sync_and_and_fetch_4): New function.
+ (__sync_xor_and_fetch_4): New function.
+ (__sync_nand_and_fetch_4): New function.
+ (__sync_add_and_fetch_8): New function.
+ (__sync_sub_and_fetch_8): New function.
+ (__sync_or_and_fetch_8): New function.
+ (__sync_and_and_fetch_8): New function.
+ (__sync_xor_and_fetch_8): New function.
+ (__sync_nand_and_fetch_8): New function.
+ (__sync_exchange_methods): New macro.
+ (__sync_val_compare_and_swap_4): New function.
+ (__sync_bool_compare_and_swap_4): New function.
+ (__sync_lock_test_and_test_4): New function.
+ (__sync_val_compare_and_swap_8): New function.
+ (__sync_bool_compare_and_swap_8): New function.
+ (__sync_lock_test_and_test_8): New function.
+ (__subword_cmpxchg_body): New macro.
+ (__atomic_compare_exchange_1): Use __subword_cmpxchg_body.
+ (__atomic_compare_exchange_2): Ditto.
+ (__sync_subword_cmpxchg): New macro.
+ (__sync_val_compare_and_swap_1): New function.
+ (__sync_bool_compare_and_swap_1): New function.
+ (__sync_val_compare_and_swap_2): New function.
+ (__sync_bool_compare_and_swap_2): New function.
+ (__atomic_subword): Rename to ...
+ (__subword): ... New name.
+ (__atomic_subword_fetch): Use __subword.
+ (__sync_subword_fetch): New macro.
+ (__sync_fetch_and_add_1): New function.
+ (__sync_fetch_and_sub_1): New function.
+ (__sync_fetch_and_or_1): New function.
+ (__sync_fetch_and_and_1): New function.
+ (__sync_fetch_and_xor_1): New function.
+ (__sync_fetch_and_nand_1): New function.
+ (__sync_fetch_and_add_2): New function.
+ (__sync_fetch_and_sub_2): New function.
+ (__sync_fetch_and_or_2): New function.
+ (__sync_fetch_and_and_2): New function.
+ (__sync_fetch_and_xor_2): New function.
+ (__sync_fetch_and_nand_2): New function.
+ (__sync_add_and_fetch_1): New function.
+ (__sync_sub_and_fetch_1): New function.
+ (__sync_or_and_fetch_1): New function.
+ (__sync_and_and_fetch_1): New function.
+ (__sync_xor_and_fetch_1): New function.
+ (__sync_nand_and_fetch_1): New function.
+ (__sync_add_and_fetch_2): New function.
+ (__sync_sub_and_fetch_2): New function.
+ (__sync_or_and_fetch_2): New function.
+ (__sync_and_and_fetch_2): New function.
+ (__sync_xor_and_fetch_2): New function.
+ (__sync_nand_and_fetch_2): New function.
+ (__atomic_subword_lock): Use __subword.
+ (__sync_subword_lock): New macro.
+ (__sync_lock_test_and_set_1): New function.
+ (__sync_lock_test_and_set_2): New function.
+
+2014-01-25 Walter Lee <walt@tilera.com>
+
+ Backport from mainline
+ 2014-01-25 Walter Lee <walt@tilera.com>
+
+ * config/tilepro/atomic.c (BIT_OFFSET): Define.
+ (__atomic_subword_cmpxchg): Use BIT_OFFSET.
+ (__atomic_subword): Ditto.
+
+2014-01-25 Walter Lee <walt@tilera.com>
+
+ Backport from mainline
+ 2014-01-25 Walter Lee <walt@tilera.com>
+
+ * config/tilepro/atomic.c (__atomic_do_and_fetch): Add
+ a prefix op argument.
+ (__atomic_nand_fetch_4): Add prefix op.
+ (__atomic_nand_fetch_8): Ditto.
+
+2014-01-21 Baruch Siach <barch@tkos.co.il>
+
+ * config.host (tmake_file): add t-slibgcc-libgcc for xtensa*-*-linux*.
+
+2014-01-03 Joseph Myers <joseph@codesourcery.com>
+
+ * config/rs6000/ibm-ldouble.c (__gcc_qdiv): Scale up arguments in
+ case of small numerator and finite nonzero result.
+
+2013-12-12 Zhenqiang Chen <zhenqiang.chen@arm.com>
+
+ Backport from trunk r205917.
+ 2013-12-12 Zhenqiang Chen <zhenqiang.chen@arm.com>
+ * config.host (arm*-*-uclinux*): Move t-arm before t-bpabi.
+
+2013-12-10 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/sfp-exceptions.c (__sfp_handle_exceptions): Emit SSE
+ instructions when __SSE_MATH__ is defined.
+
+2013-12-06 Ralf Corsépius <ralf.corsepius@rtems.org>
+
+ * config.host (microblaze-*-rtems*): New.
+
+2013-11-10 Kai Tietz <ktietz@redhat.com>
+
+ Back-merged from trunk
+ * config/i386/cygming-crtbegin.c (__gcc_register_frame):
+ Increment load-count on use of LIBGCC_SONAME DLL.
+ (hmod_libgcc): New static variable to hold handle of
+ LIBGCC_SONAME DLL.
+ (__gcc_deregister_frame): Decrement load-count of
+ LIBGCC_SONAME DLL.
+
+2013-11-07 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/sfp-exceptions.c (__sfp_handle_exceptions): Handle
+ FP_EX_DENORM. Store result to volatile location after SSE division
+ to close interrupt window. Remove unneeded fwait after x87
+ division since interrupt window will be closed by emitted fstp.
+ Rewrite FP_EX_INEXACT handling.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libgcc/config.host b/gcc-4.8/libgcc/config.host
index 86255e657..d003093b2 100644
--- a/gcc-4.8/libgcc/config.host
+++ b/gcc-4.8/libgcc/config.host
@@ -336,10 +336,10 @@ arm*-*-linux*) # ARM GNU/Linux with ELF
;;
arm*-*-uclinux*) # ARM ucLinux
tmake_file="${tmake_file} t-fixedpoint-gnu-prefix"
+ tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
tmake_file="${tmake_file} arm/t-bpabi"
tm_file="$tm_file arm/bpabi-lib.h"
unwind_header=config/arm/unwind-arm.h
- tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
extra_parts="$extra_parts crti.o crtn.o"
;;
arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems*)
@@ -723,6 +723,10 @@ microblaze*-*-elf)
tmake_file="${tmake_file} microblaze/t-microblaze t-fdpbit"
extra_parts="$extra_parts crtbeginS.o crtendS.o crtbeginT.o crti.o crtn.o"
;;
+microblaze*-*-rtems*)
+ tmake_file="${tmake_file} microblaze/t-microblaze t-fdpbit"
+ extra_parts="$extra_parts crtbeginS.o crtendS.o crtbeginT.o crti.o crtn.o"
+ ;;
mips*-*-netbsd*) # NetBSD/mips, either endian.
;;
mips*-*-linux*) # Linux MIPS, either endian.
@@ -1086,7 +1090,7 @@ tilepro-*-linux*)
md_unwind_header=tilepro/linux-unwind.h
;;
v850*-*-*)
- tmake_file="v850/t-v850 t-fdpbit"
+ tmake_file="${tmake_file} v850/t-v850 t-fdpbit"
;;
vax-*-linux*)
tmake_file="$tmake_file vax/t-linux"
@@ -1103,7 +1107,7 @@ xtensa*-*-elf*)
extra_parts="$extra_parts crti.o crtn.o"
;;
xtensa*-*-linux*)
- tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux"
+ tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux t-slibgcc-libgcc"
md_unwind_header=xtensa/linux-unwind.h
;;
am33_2.0-*-linux*)
diff --git a/gcc-4.8/libgcc/config/arm/sfp-machine.h b/gcc-4.8/libgcc/config/arm/sfp-machine.h
index a89d05a00..f29b23eeb 100644
--- a/gcc-4.8/libgcc/config/arm/sfp-machine.h
+++ b/gcc-4.8/libgcc/config/arm/sfp-machine.h
@@ -19,10 +19,12 @@ typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
-#define _FP_NANFRAC_H ((_FP_QNANBIT_H << 1) - 1)
-#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
-#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
-#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
+/* According to RTABI, QNAN is only with the most significant bit of the
+ significand set, and all other significand bits zero. */
+#define _FP_NANFRAC_H _FP_QNANBIT_H
+#define _FP_NANFRAC_S _FP_QNANBIT_S
+#define _FP_NANFRAC_D _FP_QNANBIT_D, 0
+#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0
#define _FP_NANSIGN_H 0
#define _FP_NANSIGN_S 0
#define _FP_NANSIGN_D 0
diff --git a/gcc-4.8/libgcc/config/i386/cygming-crtbegin.c b/gcc-4.8/libgcc/config/i386/cygming-crtbegin.c
index 6a513cb3f..210bdb494 100644
--- a/gcc-4.8/libgcc/config/i386/cygming-crtbegin.c
+++ b/gcc-4.8/libgcc/config/i386/cygming-crtbegin.c
@@ -69,6 +69,9 @@ static EH_FRAME_SECTION_CONST char __EH_FRAME_BEGIN__[]
= { };
static struct object obj;
+
+/* Handle of libgcc's DLL reference. */
+HANDLE hmod_libgcc;
#endif
#if TARGET_USE_JCR_SECTION
@@ -93,9 +96,14 @@ __gcc_register_frame (void)
void (*register_frame_fn) (const void *, struct object *);
HANDLE h = GetModuleHandle (LIBGCC_SONAME);
+
if (h)
+ {
+ /* Increasing the load-count of LIBGCC_SONAME DLL. */
+ hmod_libgcc = LoadLibrary (LIBGCC_SONAME);
register_frame_fn = (void (*) (const void *, struct object *))
GetProcAddress (h, "__register_frame_info");
+ }
else
register_frame_fn = __register_frame_info;
if (register_frame_fn)
@@ -132,5 +140,7 @@ __gcc_deregister_frame (void)
deregister_frame_fn = __deregister_frame_info;
if (deregister_frame_fn)
deregister_frame_fn (__EH_FRAME_BEGIN__);
+ if (hmod_libgcc)
+ FreeLibrary (hmod_libgcc);
#endif
}
diff --git a/gcc-4.8/libgcc/config/i386/sfp-exceptions.c b/gcc-4.8/libgcc/config/i386/sfp-exceptions.c
index fbaaab22f..1bab10b0b 100644
--- a/gcc-4.8/libgcc/config/i386/sfp-exceptions.c
+++ b/gcc-4.8/libgcc/config/i386/sfp-exceptions.c
@@ -47,21 +47,33 @@ __sfp_handle_exceptions (int _fex)
if (_fex & FP_EX_INVALID)
{
float f = 0.0f;
-#ifdef __x86_64__
+#ifdef __SSE_MATH__
+ volatile float r __attribute__ ((unused));
asm volatile ("%vdivss\t{%0, %d0|%d0, %0}" : "+x" (f));
+ r = f; /* Needed to trigger exception. */
#else
asm volatile ("fdiv\t{%y0, %0|%0, %y0}" : "+t" (f));
- asm volatile ("fwait");
+ /* No need for fwait, exception is triggered by emitted fstp. */
#endif
}
+ if (_fex & FP_EX_DENORM)
+ {
+ struct fenv temp;
+ asm volatile ("fnstenv\t%0" : "=m" (temp));
+ temp.__status_word |= FP_EX_DENORM;
+ asm volatile ("fldenv\t%0" : : "m" (temp));
+ asm volatile ("fwait");
+ }
if (_fex & FP_EX_DIVZERO)
{
float f = 1.0f, g = 0.0f;
-#ifdef __x86_64__
+#ifdef __SSE_MATH__
+ volatile float r __attribute__ ((unused));
asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g));
+ r = f; /* Needed to trigger exception. */
#else
asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
- asm volatile ("fwait");
+ /* No need for fwait, exception is triggered by emitted fstp. */
#endif
}
if (_fex & FP_EX_OVERFLOW)
@@ -82,11 +94,15 @@ __sfp_handle_exceptions (int _fex)
}
if (_fex & FP_EX_INEXACT)
{
- struct fenv temp;
- asm volatile ("fnstenv\t%0" : "=m" (temp));
- temp.__status_word |= FP_EX_INEXACT;
- asm volatile ("fldenv\t%0" : : "m" (temp));
- asm volatile ("fwait");
+ float f = 1.0f, g = 3.0f;
+#ifdef __SSE_MATH__
+ volatile float r __attribute__ ((unused));
+ asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g));
+ r = f; /* Needed to trigger exception. */
+#else
+ asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
+ /* No need for fwait, exception is triggered by emitted fstp. */
+#endif
}
};
#endif
diff --git a/gcc-4.8/libgcc/config/libbid/ChangeLog b/gcc-4.8/libgcc/config/libbid/ChangeLog
index c1f04e845..678fcee0f 100644
--- a/gcc-4.8/libgcc/config/libbid/ChangeLog
+++ b/gcc-4.8/libgcc/config/libbid/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libgcc/config/rs6000/ibm-ldouble.c b/gcc-4.8/libgcc/config/rs6000/ibm-ldouble.c
index 28e02e995..574e395f8 100644
--- a/gcc-4.8/libgcc/config/rs6000/ibm-ldouble.c
+++ b/gcc-4.8/libgcc/config/rs6000/ibm-ldouble.c
@@ -188,7 +188,16 @@ __gcc_qdiv (double a, double b, double c, double d)
|| nonfinite (t))
return t;
- /* Finite nonzero result requires corrections to the highest order term. */
+ /* Finite nonzero result requires corrections to the highest order
+ term. These corrections require the low part of c * t to be
+ exactly represented in double. */
+ if (fabs (a) <= 0x1p-969)
+ {
+ a *= 0x1p106;
+ b *= 0x1p106;
+ c *= 0x1p106;
+ d *= 0x1p106;
+ }
s = c * t; /* (s,sigma) = c*t exactly. */
w = -(-b + d * t); /* Written to get fnmsub for speed, but not
diff --git a/gcc-4.8/libgcc/config/rs6000/linux-unwind.h b/gcc-4.8/libgcc/config/rs6000/linux-unwind.h
index c9273c404..a421b1582 100644
--- a/gcc-4.8/libgcc/config/rs6000/linux-unwind.h
+++ b/gcc-4.8/libgcc/config/rs6000/linux-unwind.h
@@ -24,9 +24,19 @@
#define R_LR 65
#define R_CR2 70
+#define R_CR3 71
+#define R_CR4 72
#define R_VR0 77
#define R_VRSAVE 109
+#ifdef __powerpc64__
+#if _CALL_ELF == 2
+#define TOC_SAVE_SLOT 24
+#else
+#define TOC_SAVE_SLOT 40
+#endif
+#endif
+
struct gcc_vregs
{
__attribute__ ((vector_size (16))) int vr[32];
@@ -107,6 +117,8 @@ get_regs (struct _Unwind_Context *context)
}
else if (pc[1] == 0x380000AC)
{
+#if _CALL_ELF != 2
+ /* These old kernel versions never supported ELFv2. */
/* This works for 2.4 kernels, but not for 2.6 kernels with vdso
because pc isn't pointing into the stack. Can be removed when
no one is running 2.4.19 or 2.4.20, the first two ppc64
@@ -121,6 +133,7 @@ get_regs (struct _Unwind_Context *context)
if ((long) frame24->puc != -21 * 8)
return frame24->puc->regs;
else
+#endif
{
/* This works for 2.4.21 and later kernels. */
struct rt_sigframe {
@@ -185,6 +198,7 @@ ppc_fallback_frame_state (struct _Unwind_Context *context,
{
struct gcc_regs *regs = get_regs (context);
struct gcc_vregs *vregs;
+ long cr_offset;
long new_cfa;
int i;
@@ -206,11 +220,21 @@ ppc_fallback_frame_state (struct _Unwind_Context *context,
fs->regs.reg[i].loc.offset = (long) &regs->gpr[i] - new_cfa;
}
+ /* The CR is saved in the low 32 bits of regs->ccr. */
+ cr_offset = (long) &regs->ccr - new_cfa;
+#ifndef __LITTLE_ENDIAN__
+ cr_offset += sizeof (long) - 4;
+#endif
+ /* In the ELFv1 ABI, CR2 stands in for the whole CR. */
fs->regs.reg[R_CR2].how = REG_SAVED_OFFSET;
- /* CR? regs are always 32-bit and PPC is big-endian, so in 64-bit
- libgcc loc.offset needs to point to the low 32 bits of regs->ccr. */
- fs->regs.reg[R_CR2].loc.offset = (long) &regs->ccr - new_cfa
- + sizeof (long) - 4;
+ fs->regs.reg[R_CR2].loc.offset = cr_offset;
+#if _CALL_ELF == 2
+ /* In the ELFv2 ABI, every CR field has a separate CFI entry. */
+ fs->regs.reg[R_CR3].how = REG_SAVED_OFFSET;
+ fs->regs.reg[R_CR3].loc.offset = cr_offset;
+ fs->regs.reg[R_CR4].how = REG_SAVED_OFFSET;
+ fs->regs.reg[R_CR4].loc.offset = cr_offset;
+#endif
fs->regs.reg[R_LR].how = REG_SAVED_OFFSET;
fs->regs.reg[R_LR].loc.offset = (long) &regs->link - new_cfa;
@@ -294,9 +318,13 @@ frob_update_context (struct _Unwind_Context *context, _Unwind_FrameState *fs ATT
figure out if it was saved. The big problem here is that the
code that does the save/restore is generated by the linker, so
we have no good way to determine at compile time what to do. */
- if (pc[0] == 0xF8410028
+ if (pc[0] == 0xF8410000 + TOC_SAVE_SLOT
+#if _CALL_ELF != 2
+ /* The ELFv2 linker never generates the old PLT stub form. */
|| ((pc[0] & 0xFFFF0000) == 0x3D820000
- && pc[1] == 0xF8410028))
+ && pc[1] == 0xF8410000 + TOC_SAVE_SLOT)
+#endif
+ )
{
/* We are in a plt call stub or r2 adjusting long branch stub,
before r2 has been saved. Keep REG_UNSAVED. */
@@ -305,18 +333,21 @@ frob_update_context (struct _Unwind_Context *context, _Unwind_FrameState *fs ATT
{
unsigned int *insn
= (unsigned int *) _Unwind_GetGR (context, R_LR);
- if (insn && *insn == 0xE8410028)
- _Unwind_SetGRPtr (context, 2, context->cfa + 40);
+ if (insn && *insn == 0xE8410000 + TOC_SAVE_SLOT)
+ _Unwind_SetGRPtr (context, 2, context->cfa + TOC_SAVE_SLOT);
+#if _CALL_ELF != 2
+ /* ELFv2 does not use this function pointer call sequence. */
else if (pc[0] == 0x4E800421
- && pc[1] == 0xE8410028)
+ && pc[1] == 0xE8410000 + TOC_SAVE_SLOT)
{
/* We are at the bctrl instruction in a call via function
pointer. gcc always emits the load of the new R2 just
before the bctrl so this is the first and only place
we need to use the stored R2. */
_Unwind_Word sp = _Unwind_GetGR (context, 1);
- _Unwind_SetGRPtr (context, 2, (void *)(sp + 40));
+ _Unwind_SetGRPtr (context, 2, (void *)(sp + TOC_SAVE_SLOT));
}
+#endif
}
}
#endif
diff --git a/gcc-4.8/libgcc/config/rs6000/tramp.S b/gcc-4.8/libgcc/config/rs6000/tramp.S
index 14cb18de2..fe2a4543b 100644
--- a/gcc-4.8/libgcc/config/rs6000/tramp.S
+++ b/gcc-4.8/libgcc/config/rs6000/tramp.S
@@ -116,4 +116,70 @@ FUNC_END(__trampoline_setup)
#endif
+#elif _CALL_ELF == 2
+ .type trampoline_initial,@object
+ .align 3
+trampoline_initial:
+ ld r11,.Lchain(r12)
+ ld r12,.Lfunc(r12)
+ mtctr r12
+ bctr
+.Lfunc = .-trampoline_initial
+ .quad 0 /* will be replaced with function address */
+.Lchain = .-trampoline_initial
+ .quad 0 /* will be replaced with static chain */
+
+trampoline_size = .-trampoline_initial
+ .size trampoline_initial,trampoline_size
+
+
+/* R3 = stack address to store trampoline */
+/* R4 = length of trampoline area */
+/* R5 = function address */
+/* R6 = static chain */
+
+ .pushsection ".toc","aw"
+.LC0:
+ .quad trampoline_initial-8
+ .popsection
+
+FUNC_START(__trampoline_setup)
+ addis 7,2,.LC0@toc@ha
+ ld 7,.LC0@toc@l(7) /* trampoline address -8 */
+
+ li r8,trampoline_size /* verify that the trampoline is big enough */
+ cmpw cr1,r8,r4
+ srwi r4,r4,3 /* # doublewords to move */
+ addi r9,r3,-8 /* adjust pointer for stdu */
+ mtctr r4
+ blt cr1,.Labort
+
+ /* Copy the instructions to the stack */
+.Lmove:
+ ldu r10,8(r7)
+ stdu r10,8(r9)
+ bdnz .Lmove
+
+ /* Store correct function and static chain */
+ std r5,.Lfunc(r3)
+ std r6,.Lchain(r3)
+
+ /* Now flush both caches */
+ mtctr r4
+.Lcache:
+ icbi 0,r3
+ dcbf 0,r3
+ addi r3,r3,8
+ bdnz .Lcache
+
+ /* Finally synchronize things & return */
+ sync
+ isync
+ blr
+
+.Labort:
+ bl JUMP_TARGET(abort)
+ nop
+FUNC_END(__trampoline_setup)
+
#endif
diff --git a/gcc-4.8/libgcc/config/tilepro/atomic.c b/gcc-4.8/libgcc/config/tilepro/atomic.c
index 762bd6dc7..415353254 100644
--- a/gcc-4.8/libgcc/config/tilepro/atomic.c
+++ b/gcc-4.8/libgcc/config/tilepro/atomic.c
@@ -28,7 +28,7 @@
/* This code should be inlined by the compiler, but for now support
it as out-of-line methods in libgcc. */
-static void
+static inline void
pre_atomic_barrier (int model)
{
switch ((enum memmodel) model)
@@ -44,7 +44,7 @@ pre_atomic_barrier (int model)
return;
}
-static void
+static inline void
post_atomic_barrier (int model)
{
switch ((enum memmodel) model)
@@ -62,16 +62,21 @@ post_atomic_barrier (int model)
#define __unused __attribute__((unused))
-#define __atomic_fetch_and_do(type, size, opname) \
-type \
-__atomic_fetch_##opname##_##size(type* p, type i, int model) \
+#define __fetch_and_do(proto, type, size, opname, top, bottom) \
+proto \
{ \
- pre_atomic_barrier(model); \
+ top; \
type rv = arch_atomic_##opname(p, i); \
- post_atomic_barrier(model); \
+ bottom; \
return rv; \
}
+#define __atomic_fetch_and_do(type, size, opname) \
+ __fetch_and_do(type __atomic_fetch_##opname##_##size(type* p, type i, int model), \
+ type, size, opname, \
+ pre_atomic_barrier(model), \
+ post_atomic_barrier(model)) \
+
__atomic_fetch_and_do (int, 4, add)
__atomic_fetch_and_do (int, 4, sub)
__atomic_fetch_and_do (int, 4, or)
@@ -84,27 +89,73 @@ __atomic_fetch_and_do (long long, 8, or)
__atomic_fetch_and_do (long long, 8, and)
__atomic_fetch_and_do (long long, 8, xor)
__atomic_fetch_and_do (long long, 8, nand)
-#define __atomic_do_and_fetch(type, size, opname, op) \
-type \
-__atomic_##opname##_fetch_##size(type* p, type i, int model) \
+
+#define __sync_fetch_and_do(type, size, opname) \
+ __fetch_and_do(type __sync_fetch_and_##opname##_##size(type* p, type i), \
+ type, size, opname, \
+ arch_atomic_write_barrier(), \
+ arch_atomic_read_barrier())
+
+__sync_fetch_and_do (int, 4, add)
+__sync_fetch_and_do (int, 4, sub)
+__sync_fetch_and_do (int, 4, or)
+__sync_fetch_and_do (int, 4, and)
+__sync_fetch_and_do (int, 4, xor)
+__sync_fetch_and_do (int, 4, nand)
+__sync_fetch_and_do (long long, 8, add)
+__sync_fetch_and_do (long long, 8, sub)
+__sync_fetch_and_do (long long, 8, or)
+__sync_fetch_and_do (long long, 8, and)
+__sync_fetch_and_do (long long, 8, xor)
+__sync_fetch_and_do (long long, 8, nand)
+
+#define __do_and_fetch(proto, type, size, opname, op, op2, top, bottom) \
+proto \
{ \
- pre_atomic_barrier(model); \
- type rv = arch_atomic_##opname(p, i) op i; \
- post_atomic_barrier(model); \
+ top; \
+ type rv = op2 (arch_atomic_##opname(p, i) op i); \
+ bottom; \
return rv; \
}
-__atomic_do_and_fetch (int, 4, add, +)
-__atomic_do_and_fetch (int, 4, sub, -)
-__atomic_do_and_fetch (int, 4, or, |)
-__atomic_do_and_fetch (int, 4, and, &)
-__atomic_do_and_fetch (int, 4, xor, |)
-__atomic_do_and_fetch (int, 4, nand, &)
-__atomic_do_and_fetch (long long, 8, add, +)
-__atomic_do_and_fetch (long long, 8, sub, -)
-__atomic_do_and_fetch (long long, 8, or, |)
-__atomic_do_and_fetch (long long, 8, and, &)
-__atomic_do_and_fetch (long long, 8, xor, |)
-__atomic_do_and_fetch (long long, 8, nand, &)
+
+#define __atomic_do_and_fetch(type, size, opname, op, op2) \
+ __do_and_fetch(type __atomic_##opname##_fetch_##size(type* p, type i, int model), \
+ type, size, opname, op, op2, \
+ pre_atomic_barrier(model), \
+ post_atomic_barrier(model)) \
+
+__atomic_do_and_fetch (int, 4, add, +, )
+__atomic_do_and_fetch (int, 4, sub, -, )
+__atomic_do_and_fetch (int, 4, or, |, )
+__atomic_do_and_fetch (int, 4, and, &, )
+__atomic_do_and_fetch (int, 4, xor, |, )
+__atomic_do_and_fetch (int, 4, nand, &, ~)
+__atomic_do_and_fetch (long long, 8, add, +, )
+__atomic_do_and_fetch (long long, 8, sub, -, )
+__atomic_do_and_fetch (long long, 8, or, |, )
+__atomic_do_and_fetch (long long, 8, and, &, )
+__atomic_do_and_fetch (long long, 8, xor, |, )
+__atomic_do_and_fetch (long long, 8, nand, &, ~)
+
+#define __sync_do_and_fetch(type, size, opname, op, op2) \
+ __do_and_fetch(type __sync_##opname##_and_fetch_##size(type* p, type i), \
+ type, size, opname, op, op2, \
+ arch_atomic_write_barrier(), \
+ arch_atomic_read_barrier()) \
+
+__sync_do_and_fetch (int, 4, add, +, )
+__sync_do_and_fetch (int, 4, sub, -, )
+__sync_do_and_fetch (int, 4, or, |, )
+__sync_do_and_fetch (int, 4, and, &, )
+__sync_do_and_fetch (int, 4, xor, |, )
+__sync_do_and_fetch (int, 4, nand, &, ~)
+__sync_do_and_fetch (long long, 8, add, +, )
+__sync_do_and_fetch (long long, 8, sub, -, )
+__sync_do_and_fetch (long long, 8, or, |, )
+__sync_do_and_fetch (long long, 8, and, &, )
+__sync_do_and_fetch (long long, 8, xor, |, )
+__sync_do_and_fetch (long long, 8, nand, &, ~)
+
#define __atomic_exchange_methods(type, size) \
bool \
__atomic_compare_exchange_##size(volatile type* ptr, type* oldvalp, \
@@ -128,49 +179,117 @@ __atomic_exchange_##size(volatile type* ptr, type val, int model) \
post_atomic_barrier(model); \
return retval; \
}
+
__atomic_exchange_methods (int, 4)
__atomic_exchange_methods (long long, 8)
+#define __sync_exchange_methods(type, size) \
+type \
+__sync_val_compare_and_swap_##size(type* ptr, type oldval, type newval) \
+{ \
+ arch_atomic_write_barrier(); \
+ type retval = arch_atomic_val_compare_and_exchange(ptr, oldval, newval); \
+ arch_atomic_read_barrier(); \
+ return retval; \
+} \
+ \
+bool \
+__sync_bool_compare_and_swap_##size(type* ptr, type oldval, type newval) \
+{ \
+ arch_atomic_write_barrier(); \
+ bool retval = arch_atomic_bool_compare_and_exchange(ptr, oldval, newval); \
+ arch_atomic_read_barrier(); \
+ return retval; \
+} \
+ \
+type \
+__sync_lock_test_and_set_##size(type* ptr, type val) \
+{ \
+ type retval = arch_atomic_exchange(ptr, val); \
+ arch_atomic_acquire_barrier_value(retval); \
+ return retval; \
+}
+
+__sync_exchange_methods (int, 4)
+__sync_exchange_methods (long long, 8)
+
+#ifdef __LITTLE_ENDIAN__
+#define BIT_OFFSET(n, type) ((n) * 8)
+#else
+#define BIT_OFFSET(n, type) ((4 - sizeof(type) - (n)) * 8)
+#endif
+
/* Subword methods require the same approach for both TILEPro and
TILE-Gx. We load the background data for the word, insert the
desired subword piece, then compare-and-exchange it into place. */
#define u8 unsigned char
#define u16 unsigned short
-#define __atomic_subword_cmpxchg(type, size) \
- \
-bool \
-__atomic_compare_exchange_##size(volatile type* ptr, type* guess, \
- type val, bool weak __unused, int models, \
- int modelf __unused) \
-{ \
- pre_atomic_barrier(models); \
+
+#define __subword_cmpxchg_body(type, size, ptr, guess, val) \
+ ({ \
unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
- const int shift = ((unsigned long)ptr & 3UL) * 8; \
+ const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type); \
const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
const unsigned int bgmask = ~(valmask << shift); \
unsigned int oldword = *p; \
type oldval = (oldword >> shift) & valmask; \
- if (__builtin_expect((oldval == *guess), 1)) { \
+ if (__builtin_expect((oldval == guess), 1)) { \
unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
oldword = arch_atomic_val_compare_and_exchange(p, oldword, word); \
oldval = (oldword >> shift) & valmask; \
} \
+ oldval; \
+ }) \
+
+#define __atomic_subword_cmpxchg(type, size) \
+ \
+bool \
+__atomic_compare_exchange_##size(volatile type* ptr, type* guess_ptr, \
+ type val, bool weak __unused, int models, \
+ int modelf __unused) \
+{ \
+ pre_atomic_barrier(models); \
+ type guess = *guess_ptr; \
+ type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
post_atomic_barrier(models); \
- bool success = (oldval == *guess); \
- *guess = oldval; \
+ bool success = (oldval == guess); \
+ *guess_ptr = oldval; \
return success; \
}
+
__atomic_subword_cmpxchg (u8, 1)
__atomic_subword_cmpxchg (u16, 2)
+
+#define __sync_subword_cmpxchg(type, size) \
+ \
+type \
+__sync_val_compare_and_swap_##size(type* ptr, type guess, type val) \
+{ \
+ arch_atomic_write_barrier(); \
+ type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
+ arch_atomic_read_barrier(); \
+ return oldval; \
+} \
+ \
+bool \
+__sync_bool_compare_and_swap_##size(type* ptr, type guess, type val) \
+{ \
+ type oldval = __sync_val_compare_and_swap_##size(ptr, guess, val); \
+ return oldval == guess; \
+}
+
+__sync_subword_cmpxchg (u8, 1)
+__sync_subword_cmpxchg (u16, 2)
+
/* For the atomic-update subword methods, we use the same approach as
above, but we retry until we succeed if the compare-and-exchange
fails. */
-#define __atomic_subword(type, proto, top, expr, bottom) \
+#define __subword(type, proto, top, expr, bottom) \
proto \
{ \
top \
unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
- const int shift = ((unsigned long)ptr & 3UL) * 8; \
+ const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type); \
const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
const unsigned int bgmask = ~(valmask << shift); \
unsigned int oldword, xword = *p; \
@@ -184,42 +303,93 @@ proto \
} while (__builtin_expect(xword != oldword, 0)); \
bottom \
}
+
#define __atomic_subword_fetch(type, funcname, expr, retval) \
- __atomic_subword(type, \
+ __subword(type, \
type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
pre_atomic_barrier(model);, \
expr, \
post_atomic_barrier(model); return retval;)
+
__atomic_subword_fetch (u8, fetch_add_1, oldval + i, oldval)
__atomic_subword_fetch (u8, fetch_sub_1, oldval - i, oldval)
__atomic_subword_fetch (u8, fetch_or_1, oldval | i, oldval)
__atomic_subword_fetch (u8, fetch_and_1, oldval & i, oldval)
__atomic_subword_fetch (u8, fetch_xor_1, oldval ^ i, oldval)
__atomic_subword_fetch (u8, fetch_nand_1, ~(oldval & i), oldval)
+
__atomic_subword_fetch (u16, fetch_add_2, oldval + i, oldval)
__atomic_subword_fetch (u16, fetch_sub_2, oldval - i, oldval)
__atomic_subword_fetch (u16, fetch_or_2, oldval | i, oldval)
__atomic_subword_fetch (u16, fetch_and_2, oldval & i, oldval)
__atomic_subword_fetch (u16, fetch_xor_2, oldval ^ i, oldval)
__atomic_subword_fetch (u16, fetch_nand_2, ~(oldval & i), oldval)
+
__atomic_subword_fetch (u8, add_fetch_1, oldval + i, val)
__atomic_subword_fetch (u8, sub_fetch_1, oldval - i, val)
__atomic_subword_fetch (u8, or_fetch_1, oldval | i, val)
__atomic_subword_fetch (u8, and_fetch_1, oldval & i, val)
__atomic_subword_fetch (u8, xor_fetch_1, oldval ^ i, val)
__atomic_subword_fetch (u8, nand_fetch_1, ~(oldval & i), val)
+
__atomic_subword_fetch (u16, add_fetch_2, oldval + i, val)
__atomic_subword_fetch (u16, sub_fetch_2, oldval - i, val)
__atomic_subword_fetch (u16, or_fetch_2, oldval | i, val)
__atomic_subword_fetch (u16, and_fetch_2, oldval & i, val)
__atomic_subword_fetch (u16, xor_fetch_2, oldval ^ i, val)
__atomic_subword_fetch (u16, nand_fetch_2, ~(oldval & i), val)
+
+#define __sync_subword_fetch(type, funcname, expr, retval) \
+ __subword(type, \
+ type __sync_ ## funcname(type *ptr, type i), \
+ arch_atomic_read_barrier();, \
+ expr, \
+ arch_atomic_write_barrier(); return retval;)
+
+__sync_subword_fetch (u8, fetch_and_add_1, oldval + i, oldval)
+__sync_subword_fetch (u8, fetch_and_sub_1, oldval - i, oldval)
+__sync_subword_fetch (u8, fetch_and_or_1, oldval | i, oldval)
+__sync_subword_fetch (u8, fetch_and_and_1, oldval & i, oldval)
+__sync_subword_fetch (u8, fetch_and_xor_1, oldval ^ i, oldval)
+__sync_subword_fetch (u8, fetch_and_nand_1, ~(oldval & i), oldval)
+
+__sync_subword_fetch (u16, fetch_and_add_2, oldval + i, oldval)
+__sync_subword_fetch (u16, fetch_and_sub_2, oldval - i, oldval)
+__sync_subword_fetch (u16, fetch_and_or_2, oldval | i, oldval)
+__sync_subword_fetch (u16, fetch_and_and_2, oldval & i, oldval)
+__sync_subword_fetch (u16, fetch_and_xor_2, oldval ^ i, oldval)
+__sync_subword_fetch (u16, fetch_and_nand_2, ~(oldval & i), oldval)
+
+__sync_subword_fetch (u8, add_and_fetch_1, oldval + i, val)
+__sync_subword_fetch (u8, sub_and_fetch_1, oldval - i, val)
+__sync_subword_fetch (u8, or_and_fetch_1, oldval | i, val)
+__sync_subword_fetch (u8, and_and_fetch_1, oldval & i, val)
+__sync_subword_fetch (u8, xor_and_fetch_1, oldval ^ i, val)
+__sync_subword_fetch (u8, nand_and_fetch_1, ~(oldval & i), val)
+
+__sync_subword_fetch (u16, add_and_fetch_2, oldval + i, val)
+__sync_subword_fetch (u16, sub_and_fetch_2, oldval - i, val)
+__sync_subword_fetch (u16, or_and_fetch_2, oldval | i, val)
+__sync_subword_fetch (u16, and_and_fetch_2, oldval & i, val)
+__sync_subword_fetch (u16, xor_and_fetch_2, oldval ^ i, val)
+__sync_subword_fetch (u16, nand_and_fetch_2, ~(oldval & i), val)
+
#define __atomic_subword_lock(type, size) \
- \
-__atomic_subword(type, \
+ __subword(type, \
type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
pre_atomic_barrier(model);, \
nval, \
post_atomic_barrier(model); return oldval;)
+
__atomic_subword_lock (u8, 1)
__atomic_subword_lock (u16, 2)
+
+#define __sync_subword_lock(type, size) \
+ __subword(type, \
+ type __sync_lock_test_and_set_##size(type* ptr, type nval), \
+ , \
+ nval, \
+ arch_atomic_acquire_barrier_value(oldval); return oldval;)
+
+__sync_subword_lock (u8, 1)
+__sync_subword_lock (u16, 2)
diff --git a/gcc-4.8/libgcc/unwind-seh.c b/gcc-4.8/libgcc/unwind-seh.c
index 54a86213f..9fd5e850d 100644
--- a/gcc-4.8/libgcc/unwind-seh.c
+++ b/gcc-4.8/libgcc/unwind-seh.c
@@ -313,8 +313,9 @@ _GCC_specific_handler (PEXCEPTION_RECORD ms_exc, void *this_frame,
ms_exc->ExceptionInformation[3] = gcc_context.reg[1];
/* Begin phase 2. Perform the unwinding. */
- RtlUnwindEx (this_frame, gcc_context.ra, ms_exc, gcc_exc,
- ms_orig_context, ms_disp->HistoryTable);
+ RtlUnwindEx (this_frame, gcc_context.ra, ms_exc,
+ (PVOID)gcc_context.reg[0], ms_orig_context,
+ ms_disp->HistoryTable);
}
/* In _Unwind_RaiseException we return _URC_FATAL_PHASE1_ERROR. */
diff --git a/gcc-4.8/libgfortran/ChangeLog b/gcc-4.8/libgfortran/ChangeLog
index cd7a210e5..1aaf6845c 100644
--- a/gcc-4.8/libgfortran/ChangeLog
+++ b/gcc-4.8/libgfortran/ChangeLog
@@ -1,3 +1,79 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-05-03 Janne Blomqvist <jb@gcc.gnu.org>
+
+ Backport from 4.9
+ PR libfortran/56919
+ * intrinsics/system_clock.c (GF_CLOCK_MONOTONIC): Check
+ _POSIX_MONOTONIC_CLOCK as well.
+
+2014-04-12 Jerry DeLisle <jvdelisle@gcc.gnu>
+
+ Backport from mainline
+ PR libfortran/60810
+ * io/unit.c (is_trim_ok): If internal unit is array, do not trim.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+ * configure: Regenerate.
+
+2014-03-15 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ Backport from mainline
+ PR libgfortran/60128
+ * io/write_float.def (output_float): Remove unused variable
+ nzero_real. Replace a double space with a single one.
+ (determine_en_precision): Fix wrong handling of the EN format.
+
+2014-03-15 Jerry DeLisle <jvdelisle@gcc.gnu>
+
+ Backport from mainline
+ PR libfortran/58324
+ PR libfortran/38199
+ * io/list_read.c (finish_list_read): Read one character to check
+ for the end of the file. If it is the end, then issue the file
+ end error message. If not, use eat_line to reach the end
+ without giving error. The next attempt to read will then
+ issue the error as described above.
+ * io/read.c (read_decimal): Quickly skip spaces to avoid calls
+ to next_char.
+ * io/unit.c (is_trim_ok): New helper function to check various
+ conditions to see if its OK to trim the internal unit string.
+ (get_internal_unit): Use LEN_TRIM to shorten selected internal
+ unit strings for optimizing READ. Enable this optimization for
+ formatted READ.
+
+2014-02-21 Jerry DeLisle <jvdelisle@gcc.gnu>
+ Dominique d'Humieres <dominiq@lps.ens.fr>
+ Steven G. Kargl <kargl@gcc.gnu.org>
+
+ Backport from mainline
+ PR libfortran/59700
+ PR libfortran/59764
+ * io/io.h (struct st_parameter_dt): Assign expanded_read flag to
+ unused bit. Define new variable line_buffer_pos.
+ * io/list_read.c (free_saved, next_char, l_push_char,
+ read_logical, read_real): Replace use of item_count with
+ line_buffer_pos for line_buffer look ahead.
+ (read_logical, read_integer, parse_real, read_real, check_type):
+ Adjust location of free_line to after generating error messages
+ to retain the correct item count for the message.
+
+2014-02-15 Jerry DeLisle <jvdelisle@gcc.gnu>
+ Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ Backport from mainline
+ PR libfortran/59771
+ PR libfortran/59774
+ PR libfortran/59836
+ * io/write_float.def (output_float): Fix wrong handling of the
+ Fw.0 format.
+ (output_float_FMT_G_): Fixes rounding issues with -m32.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libgfortran/configure b/gcc-4.8/libgfortran/configure
index 8385e9684..ee99e6c89 100755
--- a/gcc-4.8/libgfortran/configure
+++ b/gcc-4.8/libgfortran/configure
@@ -8062,7 +8062,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -8087,7 +8087,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -8106,7 +8109,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -12333,7 +12339,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12336 "configure"
+#line 12342 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12439,7 +12445,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12442 "configure"
+#line 12448 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/gcc-4.8/libgfortran/intrinsics/system_clock.c b/gcc-4.8/libgfortran/intrinsics/system_clock.c
index 87a87e22f..63ea393f6 100644
--- a/gcc-4.8/libgfortran/intrinsics/system_clock.c
+++ b/gcc-4.8/libgfortran/intrinsics/system_clock.c
@@ -32,7 +32,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* POSIX states that CLOCK_REALTIME must be present if clock_gettime
is available, others are optional. */
#if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_GETTIME_LIBRT)
-#ifdef CLOCK_MONOTONIC
+#if defined(CLOCK_MONOTONIC) && defined(_POSIX_MONOTONIC_CLOCK) \
+ && _POSIX_MONOTONIC_CLOCK >= 0
#define GF_CLOCK_MONOTONIC CLOCK_MONOTONIC
#else
#define GF_CLOCK_MONOTONIC CLOCK_REALTIME
diff --git a/gcc-4.8/libgfortran/io/io.h b/gcc-4.8/libgfortran/io/io.h
index 8ea932667..10f09855f 100644
--- a/gcc-4.8/libgfortran/io/io.h
+++ b/gcc-4.8/libgfortran/io/io.h
@@ -424,7 +424,10 @@ typedef struct st_parameter_dt
unsigned g0_no_blanks : 1;
/* Used to signal use of free_format_data. */
unsigned format_not_saved : 1;
- /* 14 unused bits. */
+ /* A flag used to identify when a non-standard expanded namelist read
+ has occurred. */
+ unsigned expanded_read : 1;
+ /* 13 unused bits. */
/* Used for ungetc() style functionality. Possible values
are an unsigned char, EOF, or EOF - 1 used to mark the
@@ -441,9 +444,8 @@ typedef struct st_parameter_dt
char *line_buffer;
struct format_data *fmt;
namelist_info *ionml;
- /* A flag used to identify when a non-standard expanded namelist read
- has occurred. */
- int expanded_read;
+ /* Current position within the look-ahead line buffer. */
+ int line_buffer_pos;
/* Storage area for values except for strings. Must be
large enough to hold a complex value (two reals) of the
largest kind. */
diff --git a/gcc-4.8/libgfortran/io/list_read.c b/gcc-4.8/libgfortran/io/list_read.c
index 60f4549cd..43f606085 100644
--- a/gcc-4.8/libgfortran/io/list_read.c
+++ b/gcc-4.8/libgfortran/io/list_read.c
@@ -118,7 +118,7 @@ free_saved (st_parameter_dt *dtp)
static void
free_line (st_parameter_dt *dtp)
{
- dtp->u.p.item_count = 0;
+ dtp->u.p.line_buffer_pos = 0;
dtp->u.p.line_buffer_enabled = 0;
if (dtp->u.p.line_buffer == NULL)
@@ -150,15 +150,15 @@ next_char (st_parameter_dt *dtp)
{
dtp->u.p.at_eol = 0;
- c = dtp->u.p.line_buffer[dtp->u.p.item_count];
- if (c != '\0' && dtp->u.p.item_count < 64)
+ c = dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos];
+ if (c != '\0' && dtp->u.p.line_buffer_pos < 64)
{
- dtp->u.p.line_buffer[dtp->u.p.item_count] = '\0';
- dtp->u.p.item_count++;
+ dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos] = '\0';
+ dtp->u.p.line_buffer_pos++;
goto done;
}
- dtp->u.p.item_count = 0;
+ dtp->u.p.line_buffer_pos = 0;
dtp->u.p.line_buffer_enabled = 0;
}
@@ -640,7 +640,7 @@ l_push_char (st_parameter_dt *dtp, char c)
if (dtp->u.p.line_buffer == NULL)
dtp->u.p.line_buffer = xcalloc (SCRATCH_SIZE, 1);
- dtp->u.p.line_buffer[dtp->u.p.item_count++] = c;
+ dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos++] = c;
}
@@ -750,7 +750,7 @@ read_logical (st_parameter_dt *dtp, int length)
{
dtp->u.p.nml_read_error = 1;
dtp->u.p.line_buffer_enabled = 1;
- dtp->u.p.item_count = 0;
+ dtp->u.p.line_buffer_pos = 0;
return;
}
@@ -758,14 +758,17 @@ read_logical (st_parameter_dt *dtp, int length)
bad_logical:
- free_line (dtp);
-
if (nml_bad_return (dtp, c))
+ {
+ free_line (dtp);
return;
+ }
+
free_saved (dtp);
if (c == EOF)
{
+ free_line (dtp);
hit_eof (dtp);
return;
}
@@ -773,6 +776,7 @@ read_logical (st_parameter_dt *dtp, int length)
eat_line (dtp);
snprintf (message, MSGLEN, "Bad logical value while reading item %d",
dtp->u.p.item_count);
+ free_line (dtp);
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
return;
@@ -913,9 +917,9 @@ read_integer (st_parameter_dt *dtp, int length)
else if (c != '\n')
eat_line (dtp);
- free_line (dtp);
snprintf (message, MSGLEN, "Bad integer for item %d in list input",
dtp->u.p.item_count);
+ free_line (dtp);
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
return;
@@ -1298,9 +1302,9 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length)
else if (c != '\n')
eat_line (dtp);
- free_line (dtp);
snprintf (message, MSGLEN, "Bad floating point number for item %d",
dtp->u.p.item_count);
+ free_line (dtp);
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
return 1;
@@ -1406,9 +1410,9 @@ eol_4:
else if (c != '\n')
eat_line (dtp);
- free_line (dtp);
snprintf (message, MSGLEN, "Bad complex value in item %d of list input",
dtp->u.p.item_count);
+ free_line (dtp);
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
}
@@ -1770,7 +1774,7 @@ read_real (st_parameter_dt *dtp, void * dest, int length)
{
dtp->u.p.nml_read_error = 1;
dtp->u.p.line_buffer_enabled = 1;
- dtp->u.p.item_count = 0;
+ dtp->u.p.line_buffer_pos = 0;
return;
}
@@ -1789,9 +1793,9 @@ read_real (st_parameter_dt *dtp, void * dest, int length)
else if (c != '\n')
eat_line (dtp);
- free_line (dtp);
snprintf (message, MSGLEN, "Bad real number in item %d of list input",
dtp->u.p.item_count);
+ free_line (dtp);
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
}
@@ -1806,11 +1810,10 @@ check_type (st_parameter_dt *dtp, bt type, int len)
if (dtp->u.p.saved_type != BT_UNKNOWN && dtp->u.p.saved_type != type)
{
- free_line (dtp);
snprintf (message, MSGLEN, "Read type %s where %s was expected for item %d",
type_name (dtp->u.p.saved_type), type_name (type),
dtp->u.p.item_count);
-
+ free_line (dtp);
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
return 1;
}
@@ -1820,12 +1823,12 @@ check_type (st_parameter_dt *dtp, bt type, int len)
if (dtp->u.p.saved_length != len)
{
- free_line (dtp);
snprintf (message, MSGLEN,
"Read kind %d %s where kind %d is required for item %d",
dtp->u.p.saved_length, type_name (dtp->u.p.saved_type), len,
dtp->u.p.item_count);
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
+ free_line (dtp);
return 1;
}
@@ -2031,8 +2034,6 @@ list_formatted_read (st_parameter_dt *dtp, bt type, void *p, int kind,
void
finish_list_read (st_parameter_dt *dtp)
{
- int err;
-
free_saved (dtp);
fbuf_flush (dtp->u.p.current_unit, dtp->u.p.mode);
@@ -2043,12 +2044,22 @@ finish_list_read (st_parameter_dt *dtp)
return;
}
- err = eat_line (dtp);
- if (err == LIBERROR_END)
+ if (!is_internal_unit (dtp))
+ {
+ int c;
+ c = next_char (dtp);
+ if (c == EOF)
{
free_line (dtp);
hit_eof (dtp);
+ return;
+ }
+ if (c != '\n')
+ eat_line (dtp);
}
+
+ free_line (dtp);
+
}
/* NAMELIST INPUT
diff --git a/gcc-4.8/libgfortran/io/read.c b/gcc-4.8/libgfortran/io/read.c
index 2da1048f8..f45e1b4ed 100644
--- a/gcc-4.8/libgfortran/io/read.c
+++ b/gcc-4.8/libgfortran/io/read.c
@@ -655,7 +655,13 @@ read_decimal (st_parameter_dt *dtp, const fnode *f, char *dest, int length)
if (c == ' ')
{
- if (dtp->u.p.blank_status == BLANK_NULL) continue;
+ if (dtp->u.p.blank_status == BLANK_NULL)
+ {
+ /* Skip spaces. */
+ for ( ; w > 0; p++, w--)
+ if (*p != ' ') break;
+ continue;
+ }
if (dtp->u.p.blank_status == BLANK_ZERO) c = '0';
}
diff --git a/gcc-4.8/libgfortran/io/unit.c b/gcc-4.8/libgfortran/io/unit.c
index f8c1516e0..d1b1a712e 100644
--- a/gcc-4.8/libgfortran/io/unit.c
+++ b/gcc-4.8/libgfortran/io/unit.c
@@ -29,6 +29,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "unix.h"
#include <stdlib.h>
#include <string.h>
+#include <stdbool.h>
/* IO locking rules:
@@ -375,6 +376,36 @@ find_or_create_unit (int n)
}
+/* Helper function to check rank, stride, format string, and namelist.
+ This is used for optimization. You can't trim out blanks or shorten
+ the string if trailing spaces are significant. */
+static bool
+is_trim_ok (st_parameter_dt *dtp)
+{
+ /* Check rank and stride. */
+ if (dtp->internal_unit_desc)
+ return false;
+ /* Format strings can not have 'BZ' or '/'. */
+ if (dtp->common.flags & IOPARM_DT_HAS_FORMAT)
+ {
+ char *p = dtp->format;
+ off_t i;
+ if (dtp->common.flags & IOPARM_DT_HAS_BLANK)
+ return false;
+ for (i = 0; i < dtp->format_len; i++)
+ {
+ if (p[i] == '/') return false;
+ if (p[i] == 'b' || p[i] == 'B')
+ if (p[i+1] == 'z' || p[i+1] == 'Z')
+ return false;
+ }
+ }
+ if (dtp->u.p.ionml) /* A namelist. */
+ return false;
+ return true;
+}
+
+
gfc_unit *
get_internal_unit (st_parameter_dt *dtp)
{
@@ -402,6 +433,22 @@ get_internal_unit (st_parameter_dt *dtp)
some other file I/O unit. */
iunit->unit_number = -1;
+ /* As an optimization, adjust the unit record length to not
+ include trailing blanks. This will not work under certain conditions
+ where trailing blanks have significance. */
+ if (dtp->u.p.mode == READING && is_trim_ok (dtp))
+ {
+ int len;
+ if (dtp->common.unit == 0)
+ len = string_len_trim (dtp->internal_unit_len,
+ dtp->internal_unit);
+ else
+ len = string_len_trim_char4 (dtp->internal_unit_len,
+ (const gfc_char4_t*) dtp->internal_unit);
+ dtp->internal_unit_len = len;
+ iunit->recl = dtp->internal_unit_len;
+ }
+
/* Set up the looping specification from the array descriptor, if any. */
if (is_array_io (dtp))
@@ -414,27 +461,6 @@ get_internal_unit (st_parameter_dt *dtp)
start_record *= iunit->recl;
}
- else
- {
- /* If we are not processing an array, adjust the unit record length not
- to include trailing blanks for list-formatted reads. */
- if (dtp->u.p.mode == READING && !(dtp->common.flags & IOPARM_DT_HAS_FORMAT))
- {
- if (dtp->common.unit == 0)
- {
- dtp->internal_unit_len =
- string_len_trim (dtp->internal_unit_len, dtp->internal_unit);
- iunit->recl = dtp->internal_unit_len;
- }
- else
- {
- dtp->internal_unit_len =
- string_len_trim_char4 (dtp->internal_unit_len,
- (const gfc_char4_t*) dtp->internal_unit);
- iunit->recl = dtp->internal_unit_len;
- }
- }
- }
/* Set initial values for unit parameters. */
if (dtp->common.unit)
diff --git a/gcc-4.8/libgfortran/io/write_float.def b/gcc-4.8/libgfortran/io/write_float.def
index 5b76fd596..acfa125cf 100644
--- a/gcc-4.8/libgfortran/io/write_float.def
+++ b/gcc-4.8/libgfortran/io/write_float.def
@@ -125,8 +125,6 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
int nzero;
/* Number of digits after the decimal point. */
int nafter;
- /* Number of zeros after the decimal point, whatever the precision. */
- int nzero_real;
int leadzero;
int nblanks;
int ndigits, edigits;
@@ -138,7 +136,6 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
p = dtp->u.p.scale_factor;
rchar = '5';
- nzero_real = -1;
/* We should always know the field width and precision. */
if (d < 0)
@@ -191,7 +188,7 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
if (nafter < 0)
nafter = 0;
nafter = d;
- nzero = nzero_real = 0;
+ nzero = 0;
}
else /* p < 0 */
{
@@ -211,14 +208,13 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
nafter = d + nbefore;
nbefore = 0;
}
- nzero_real = nzero;
if (nzero > d)
nzero = d;
}
}
else
{
- nzero = nzero_real = 0;
+ nzero = 0;
nafter = d;
}
@@ -373,7 +369,7 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
updown:
rchar = '0';
- if (w > 0 && d == 0 && p == 0)
+ if (ft != FMT_F && w > 0 && d == 0 && p == 0)
nbefore = 1;
/* Scan for trailing zeros to see if we really need to round it. */
for(i = nbefore + nafter; i < ndigits; i++)
@@ -386,13 +382,14 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
do_rnd:
if (nbefore + nafter == 0)
+ /* Handle the case Fw.0 and value < 1.0 */
{
ndigits = 0;
- if (nzero_real == d && digits[0] >= rchar)
+ if (digits[0] >= rchar)
{
/* We rounded to zero but shouldn't have */
- nzero--;
- nafter = 1;
+ nbefore = 1;
+ digits--;
digits[0] = '1';
ndigits = 1;
}
@@ -990,13 +987,14 @@ output_float_FMT_G_ ## x (st_parameter_dt *dtp, const fnode *f, \
int d = f->u.real.d;\
int w = f->u.real.w;\
fnode newf;\
- GFC_REAL_ ## x rexp_d, r = 0.5;\
+ GFC_REAL_ ## x exp_d, r = 0.5, r_sc;\
int low, high, mid;\
int ubound, lbound;\
char *p, pad = ' ';\
int save_scale_factor, nb = 0;\
try result;\
int nprinted, precision;\
+ volatile GFC_REAL_ ## x temp;\
\
save_scale_factor = dtp->u.p.scale_factor;\
\
@@ -1015,10 +1013,13 @@ output_float_FMT_G_ ## x (st_parameter_dt *dtp, const fnode *f, \
break;\
}\
\
- rexp_d = calculate_exp_ ## x (-d);\
- if ((m > 0.0 && ((m < 0.1 - 0.1 * r * rexp_d) || (rexp_d * (m + r) >= 1.0)))\
+ exp_d = calculate_exp_ ## x (d);\
+ r_sc = (1 - r / exp_d);\
+ temp = 0.1 * r_sc;\
+ if ((m > 0.0 && ((m < temp) || (r >= (exp_d - m))))\
|| ((m == 0.0) && !(compile_options.allow_std\
- & (GFC_STD_F2003 | GFC_STD_F2008))))\
+ & (GFC_STD_F2003 | GFC_STD_F2008)))\
+ || d == 0)\
{ \
newf.format = FMT_E;\
newf.u.real.w = w;\
@@ -1038,10 +1039,9 @@ output_float_FMT_G_ ## x (st_parameter_dt *dtp, const fnode *f, \
\
while (low <= high)\
{ \
- volatile GFC_REAL_ ## x temp;\
mid = (low + high) / 2;\
\
- temp = (calculate_exp_ ## x (mid - 1) * (1 - r * rexp_d));\
+ temp = (calculate_exp_ ## x (mid - 1) * r_sc);\
\
if (m < temp)\
{ \
@@ -1121,14 +1121,36 @@ OUTPUT_FLOAT_FMT_G(16,L)
/* EN format is tricky since the number of significant digits depends
on the magnitude. Solve it by first printing a temporary value and
figure out the number of significant digits from the printed
- exponent. */
+ exponent. Values y, 0.95*10.0**e <= y <10.0**e, are rounded to
+ 10.0**e even when the final result will not be rounded to 10.0**e.
+ For these values the exponent returned by atoi has to be decremented
+ by one. The values y in the ranges
+ (1000.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*(n+1))
+ (100.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*n+2)
+ (10.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*n+1)
+ are correctly rounded respectively to 1.0...0*10.0*(3*(n+1)),
+ 100.0...0*10.0*(3*n), and 10.0...0*10.0*(3*n), where 0...0
+ represents d zeroes, by the lines 279 to 297. */
#define EN_PREC(x,y)\
{\
- GFC_REAL_ ## x tmp; \
- tmp = * (GFC_REAL_ ## x *)source; \
+ volatile GFC_REAL_ ## x tmp, one = 1.0;\
+ tmp = * (GFC_REAL_ ## x *)source;\
if (isfinite (tmp)) \
- nprinted = DTOA(y,0,tmp); \
+ {\
+ nprinted = DTOA(y,0,tmp);\
+ int e = atoi (&buffer[4]);\
+ if (buffer[1] == '1')\
+ {\
+ tmp = (calculate_exp_ ## x (-e)) * tmp;\
+ tmp = one - (tmp < 0 ? -tmp : tmp); \
+ if (tmp > 0)\
+ e = e - 1;\
+ }\
+ nbefore = e%3;\
+ if (nbefore < 0)\
+ nbefore = 3 + nbefore;\
+ }\
else\
nprinted = -1;\
}\
@@ -1140,6 +1162,7 @@ determine_en_precision (st_parameter_dt *dtp, const fnode *f,
int nprinted;
char buffer[10];
const size_t size = 10;
+ int nbefore; /* digits before decimal point - 1. */
switch (len)
{
@@ -1172,16 +1195,6 @@ determine_en_precision (st_parameter_dt *dtp, const fnode *f,
if (nprinted == -1)
return -1;
- int e = atoi (&buffer[5]);
- int nbefore; /* digits before decimal point - 1. */
- if (e >= 0)
- nbefore = e % 3;
- else
- {
- nbefore = (-e) % 3;
- if (nbefore != 0)
- nbefore = 3 - nbefore;
- }
int prec = f->u.real.d + nbefore;
if (dtp->u.p.current_unit->round_status != ROUND_UNSPECIFIED
&& dtp->u.p.current_unit->round_status != ROUND_PROCDEFINED)
diff --git a/gcc-4.8/libgo/Makefile.am b/gcc-4.8/libgo/Makefile.am
index c81c66cb0..199b44418 100644
--- a/gcc-4.8/libgo/Makefile.am
+++ b/gcc-4.8/libgo/Makefile.am
@@ -424,6 +424,7 @@ runtime_files = \
runtime/go-caller.c \
runtime/go-callers.c \
runtime/go-can-convert-interface.c \
+ runtime/go-cdiv.c \
runtime/go-cgo.c \
runtime/go-check-interface.c \
runtime/go-construct-map.c \
@@ -1254,7 +1255,7 @@ go_go_build_files = \
go/go/build/build.go \
go/go/build/doc.go \
go/go/build/read.go \
- syslist.go
+ go/go/build/syslist.go
go_go_doc_files = \
go/go/doc/comment.go \
go/go/doc/doc.go \
@@ -2712,15 +2713,6 @@ go/build/check: $(CHECK_DEPS)
@$(CHECK)
.PHONY: go/build/check
-syslist.go: s-syslist; @true
-s-syslist: Makefile
- echo '// Generated automatically by make.' >syslist.go.tmp
- echo 'package build' >>syslist.go.tmp
- echo 'const goosList = "$(GOOS)"' >>syslist.go.tmp
- echo 'const goarchList = "$(GOARCH)"' >>syslist.go.tmp
- $(SHELL) $(srcdir)/../move-if-change syslist.go.tmp syslist.go
- $(STAMP) $@
-
@go_include@ go/doc.lo.dep
go/doc.lo.dep: $(go_go_doc_files)
$(BUILDDEPS)
diff --git a/gcc-4.8/libgo/Makefile.in b/gcc-4.8/libgo/Makefile.in
index 9e31e8ca2..61cca7385 100644
--- a/gcc-4.8/libgo/Makefile.in
+++ b/gcc-4.8/libgo/Makefile.in
@@ -195,7 +195,7 @@ libgo_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \
@LIBGO_IS_LINUX_TRUE@am__objects_5 = getncpu-linux.lo
am__objects_6 = go-append.lo go-assert.lo go-assert-interface.lo \
go-byte-array-to-string.lo go-breakpoint.lo go-caller.lo \
- go-callers.lo go-can-convert-interface.lo go-cgo.lo \
+ go-callers.lo go-can-convert-interface.lo go-cdiv.lo go-cgo.lo \
go-check-interface.lo go-construct-map.lo \
go-convert-interface.lo go-copy.lo go-defer.lo \
go-deferred-recover.lo go-eface-compare.lo \
@@ -757,6 +757,7 @@ runtime_files = \
runtime/go-caller.c \
runtime/go-callers.c \
runtime/go-can-convert-interface.c \
+ runtime/go-cdiv.c \
runtime/go-cgo.c \
runtime/go-check-interface.c \
runtime/go-construct-map.c \
@@ -1446,7 +1447,7 @@ go_go_build_files = \
go/go/build/build.go \
go/go/build/doc.go \
go/go/build/read.go \
- syslist.go
+ go/go/build/syslist.go
go_go_doc_files = \
go/go/doc/comment.go \
@@ -2368,6 +2369,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-caller.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-callers.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-can-convert-interface.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-cdiv.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-cgo.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-check-interface.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-construct-map.Plo@am__quote@
@@ -2554,6 +2556,13 @@ go-can-convert-interface.lo: runtime/go-can-convert-interface.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o go-can-convert-interface.lo `test -f 'runtime/go-can-convert-interface.c' || echo '$(srcdir)/'`runtime/go-can-convert-interface.c
+go-cdiv.lo: runtime/go-cdiv.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-cdiv.lo -MD -MP -MF $(DEPDIR)/go-cdiv.Tpo -c -o go-cdiv.lo `test -f 'runtime/go-cdiv.c' || echo '$(srcdir)/'`runtime/go-cdiv.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/go-cdiv.Tpo $(DEPDIR)/go-cdiv.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/go-cdiv.c' object='go-cdiv.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o go-cdiv.lo `test -f 'runtime/go-cdiv.c' || echo '$(srcdir)/'`runtime/go-cdiv.c
+
go-cgo.lo: runtime/go-cgo.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-cgo.lo -MD -MP -MF $(DEPDIR)/go-cgo.Tpo -c -o go-cgo.lo `test -f 'runtime/go-cgo.c' || echo '$(srcdir)/'`runtime/go-cgo.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/go-cgo.Tpo $(DEPDIR)/go-cgo.Plo
@@ -5062,15 +5071,6 @@ go/build/check: $(CHECK_DEPS)
@$(CHECK)
.PHONY: go/build/check
-syslist.go: s-syslist; @true
-s-syslist: Makefile
- echo '// Generated automatically by make.' >syslist.go.tmp
- echo 'package build' >>syslist.go.tmp
- echo 'const goosList = "$(GOOS)"' >>syslist.go.tmp
- echo 'const goarchList = "$(GOARCH)"' >>syslist.go.tmp
- $(SHELL) $(srcdir)/../move-if-change syslist.go.tmp syslist.go
- $(STAMP) $@
-
@go_include@ go/doc.lo.dep
go/doc.lo.dep: $(go_go_doc_files)
$(BUILDDEPS)
diff --git a/gcc-4.8/libgo/config.h.in b/gcc-4.8/libgo/config.h.in
index 1057d9e85..f6da8b982 100644
--- a/gcc-4.8/libgo/config.h.in
+++ b/gcc-4.8/libgo/config.h.in
@@ -39,6 +39,9 @@
/* Define to 1 if you have the `dl_iterate_phdr' function. */
#undef HAVE_DL_ITERATE_PHDR
+/* Define to 1 if you have the `dup3' function. */
+#undef HAVE_DUP3
+
/* Define to 1 if you have the `epoll_create1' function. */
#undef HAVE_EPOLL_CREATE1
@@ -66,6 +69,9 @@
/* Define if _Unwind_GetIPInfo is available. */
#undef HAVE_GETIPINFO
+/* Define to 1 if you have the `getxattr' function. */
+#undef HAVE_GETXATTR
+
/* Define to 1 if you have the `inotify_add_watch' function. */
#undef HAVE_INOTIFY_ADD_WATCH
@@ -111,6 +117,9 @@
/* Define to 1 if you have the <linux/rtnetlink.h> header file. */
#undef HAVE_LINUX_RTNETLINK_H
+/* Define to 1 if you have the `listxattr' function. */
+#undef HAVE_LISTXATTR
+
/* Define to 1 if the system has the type `loff_t'. */
#undef HAVE_LOFF_T
@@ -171,6 +180,9 @@
/* Define to 1 if you have the `pipe2' function. */
#undef HAVE_PIPE2
+/* Define to 1 if you have the `removexattr' function. */
+#undef HAVE_REMOVEXATTR
+
/* Define to 1 if you have the `renameat' function. */
#undef HAVE_RENAMEAT
@@ -180,6 +192,9 @@
/* Define to 1 if you have the `setenv' function. */
#undef HAVE_SETENV
+/* Define to 1 if you have the `setxattr' function. */
+#undef HAVE_SETXATTR
+
/* Define to 1 if you have the `sinl' function. */
#undef HAVE_SINL
diff --git a/gcc-4.8/libgo/config/libtool.m4 b/gcc-4.8/libgo/config/libtool.m4
index 1a667d31a..f1ffebf99 100644
--- a/gcc-4.8/libgo/config/libtool.m4
+++ b/gcc-4.8/libgo/config/libtool.m4
@@ -1225,7 +1225,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -1239,7 +1239,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_i386"
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -1258,7 +1261,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
diff --git a/gcc-4.8/libgo/configure b/gcc-4.8/libgo/configure
index e54a2cd1b..112662d74 100755
--- a/gcc-4.8/libgo/configure
+++ b/gcc-4.8/libgo/configure
@@ -6501,7 +6501,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -6519,7 +6519,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_i386"
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -6538,7 +6541,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -11105,7 +11111,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11108 "configure"
+#line 11114 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11211,7 +11217,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11214 "configure"
+#line 11220 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -14700,7 +14706,7 @@ else
fi
-for ac_func in accept4 epoll_create1 faccessat fallocate fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_init1 inotify_rm_watch mkdirat mknodat openat pipe2 renameat sync_file_range splice tee unlinkat unshare utimensat
+for ac_func in accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat openat pipe2 removexattr renameat setxattr sync_file_range splice tee unlinkat unshare utimensat
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
diff --git a/gcc-4.8/libgo/configure.ac b/gcc-4.8/libgo/configure.ac
index 81c0a88b0..8ce846d9f 100644
--- a/gcc-4.8/libgo/configure.ac
+++ b/gcc-4.8/libgo/configure.ac
@@ -503,7 +503,7 @@ AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv dl_iterate_phdr)
AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
-AC_CHECK_FUNCS(accept4 epoll_create1 faccessat fallocate fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_init1 inotify_rm_watch mkdirat mknodat openat pipe2 renameat sync_file_range splice tee unlinkat unshare utimensat)
+AC_CHECK_FUNCS(accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat openat pipe2 removexattr renameat setxattr sync_file_range splice tee unlinkat unshare utimensat)
AC_TYPE_OFF_T
AC_CHECK_TYPES([loff_t])
diff --git a/gcc-4.8/libgo/go/go/build/build.go b/gcc-4.8/libgo/go/go/build/build.go
index cc89afb21..59ddcefd7 100644
--- a/gcc-4.8/libgo/go/go/build/build.go
+++ b/gcc-4.8/libgo/go/go/build/build.go
@@ -429,7 +429,7 @@ func (ctxt *Context) Import(path string, srcDir string, mode ImportMode) (*Packa
switch ctxt.Compiler {
case "gccgo":
dir, elem := pathpkg.Split(p.ImportPath)
- pkga = "pkg/gccgo/" + dir + "lib" + elem + ".a"
+ pkga = "pkg/gccgo_" + ctxt.GOOS + "_" + ctxt.GOARCH + "/" + dir + "lib" + elem + ".a"
case "gc":
suffix := ""
if ctxt.InstallSuffix != "" {
diff --git a/gcc-4.8/libgo/go/go/build/syslist.go b/gcc-4.8/libgo/go/go/build/syslist.go
new file mode 100644
index 000000000..a322c88c4
--- /dev/null
+++ b/gcc-4.8/libgo/go/go/build/syslist.go
@@ -0,0 +1,8 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package build
+
+const goosList = "darwin dragonfly freebsd linux netbsd openbsd plan9 windows solaris "
+const goarchList = "386 amd64 arm alpha m68k mipso32 mipsn32 mipsn64 mipso64 ppc ppc64 sparc sparc64 "
diff --git a/gcc-4.8/libgo/go/net/fd_unix.go b/gcc-4.8/libgo/go/net/fd_unix.go
index 8c59bff98..0f863aadd 100644
--- a/gcc-4.8/libgo/go/net/fd_unix.go
+++ b/gcc-4.8/libgo/go/net/fd_unix.go
@@ -9,6 +9,7 @@ package net
import (
"io"
"os"
+ "runtime"
"sync"
"syscall"
"time"
@@ -90,6 +91,16 @@ func (fd *netFD) connect(la, ra syscall.Sockaddr) error {
if err == nil || err == syscall.EISCONN {
break
}
+
+ // On Solaris we can see EINVAL if the socket has
+ // already been accepted and closed by the server.
+ // Treat this as a successful connection--writes to
+ // the socket will see EOF. For details and a test
+ // case in C see http://golang.org/issue/6828.
+ if runtime.GOOS == "solaris" && err == syscall.EINVAL {
+ break
+ }
+
if err != syscall.EINPROGRESS && err != syscall.EALREADY && err != syscall.EINTR {
return err
}
diff --git a/gcc-4.8/libgo/go/reflect/all_test.go b/gcc-4.8/libgo/go/reflect/all_test.go
index 526f09bb2..50f49e066 100644
--- a/gcc-4.8/libgo/go/reflect/all_test.go
+++ b/gcc-4.8/libgo/go/reflect/all_test.go
@@ -1430,6 +1430,46 @@ func TestFunc(t *testing.T) {
}
}
+type emptyStruct struct{}
+
+type nonEmptyStruct struct {
+ member int
+}
+
+func returnEmpty() emptyStruct {
+ return emptyStruct{}
+}
+
+func takesEmpty(e emptyStruct) {
+}
+
+func returnNonEmpty(i int) nonEmptyStruct {
+ return nonEmptyStruct{member: i}
+}
+
+func takesNonEmpty(n nonEmptyStruct) int {
+ return n.member
+}
+
+func TestCallWithStruct(t *testing.T) {
+ r := ValueOf(returnEmpty).Call([]Value{})
+ if len(r) != 1 || r[0].Type() != TypeOf(emptyStruct{}) {
+ t.Errorf("returning empty struct returned %s instead", r)
+ }
+ r = ValueOf(takesEmpty).Call([]Value{ValueOf(emptyStruct{})})
+ if len(r) != 0 {
+ t.Errorf("takesEmpty returned values: %s", r)
+ }
+ r = ValueOf(returnNonEmpty).Call([]Value{ValueOf(42)})
+ if len(r) != 1 || r[0].Type() != TypeOf(nonEmptyStruct{}) || r[0].Field(0).Int() != 42 {
+ t.Errorf("returnNonEmpty returned %s", r)
+ }
+ r = ValueOf(takesNonEmpty).Call([]Value{ValueOf(nonEmptyStruct{member: 42})})
+ if len(r) != 1 || r[0].Type() != TypeOf(1) || r[0].Int() != 42 {
+ t.Errorf("takesNonEmpty returned %s", r)
+ }
+}
+
func TestMakeFunc(t *testing.T) {
switch runtime.GOARCH {
case "amd64", "386":
@@ -1587,9 +1627,13 @@ func TestMethod(t *testing.T) {
}
}
-/* Not yet implemented for gccgo
-
func TestMethodValue(t *testing.T) {
+ switch runtime.GOARCH {
+ case "amd64", "386":
+ default:
+ t.Skip("reflect method values not implemented for " + runtime.GOARCH)
+ }
+
p := Point{3, 4}
var i int64
@@ -1658,8 +1702,6 @@ func TestMethodValue(t *testing.T) {
}
}
-*/
-
// Reflect version of $GOROOT/test/method5.go
// Concrete types implementing M method.
@@ -1744,14 +1786,18 @@ type Tm4 struct {
func (t4 Tm4) M(x int, b byte) (byte, int) { return b, x + 40 }
func TestMethod5(t *testing.T) {
- /* Not yet used for gccgo
+ switch runtime.GOARCH {
+ case "amd64", "386":
+ default:
+ t.Skip("reflect method values not implemented for " + runtime.GOARCH)
+ }
+
CheckF := func(name string, f func(int, byte) (byte, int), inc int) {
b, x := f(1000, 99)
if b != 99 || x != 1000+inc {
t.Errorf("%s(1000, 99) = %v, %v, want 99, %v", name, b, x, 1000+inc)
}
}
- */
CheckV := func(name string, i Value, inc int) {
bx := i.Method(0).Call([]Value{ValueOf(1000), ValueOf(byte(99))})
@@ -1761,9 +1807,7 @@ func TestMethod5(t *testing.T) {
t.Errorf("direct %s.M(1000, 99) = %v, %v, want 99, %v", name, b, x, 1000+inc)
}
- /* Not yet implemented for gccgo
CheckF(name+".M", i.Method(0).Interface().(func(int, byte) (byte, int)), inc)
- */
}
var TinterType = TypeOf(new(Tinter)).Elem()
diff --git a/gcc-4.8/libgo/go/reflect/makefunc.go b/gcc-4.8/libgo/go/reflect/makefunc.go
index 3e8085bec..9f150ea65 100644
--- a/gcc-4.8/libgo/go/reflect/makefunc.go
+++ b/gcc-4.8/libgo/go/reflect/makefunc.go
@@ -17,6 +17,11 @@ type makeFuncImpl struct {
code uintptr
typ *funcType
fn func([]Value) []Value
+
+ // For gccgo we use the same entry point for functions and for
+ // method values.
+ method int
+ rcvr Value
}
// MakeFunc returns a new function of the given Type
@@ -61,7 +66,7 @@ func MakeFunc(typ Type, fn func(args []Value) (results []Value)) Value {
dummy := makeFuncStub
code := **(**uintptr)(unsafe.Pointer(&dummy))
- impl := &makeFuncImpl{code: code, typ: ftyp, fn: fn}
+ impl := &makeFuncImpl{code: code, typ: ftyp, fn: fn, method: -1}
return Value{t, unsafe.Pointer(&impl), flag(Func<<flagKindShift) | flagIndir}
}
@@ -85,15 +90,94 @@ func makeMethodValue(op string, v Value) Value {
panic("reflect: internal error: invalid use of makePartialFunc")
}
+ switch runtime.GOARCH {
+ case "amd64", "386":
+ default:
+ panic("reflect.makeMethodValue not implemented for " + runtime.GOARCH)
+ }
+
// Ignoring the flagMethod bit, v describes the receiver, not the method type.
fl := v.flag & (flagRO | flagAddr | flagIndir)
fl |= flag(v.typ.Kind()) << flagKindShift
rcvr := Value{v.typ, v.val, fl}
+ // v.Type returns the actual type of the method value.
+ ft := v.Type().(*rtype)
+
+ // Indirect Go func value (dummy) to obtain
+ // actual code address. (A Go func value is a pointer
+ // to a C function pointer. http://golang.org/s/go11func.)
+ dummy := makeFuncStub
+ code := **(**uintptr)(unsafe.Pointer(&dummy))
+
// Cause panic if method is not appropriate.
// The panic would still happen during the call if we omit this,
// but we want Interface() and other operations to fail early.
- methodReceiver(op, rcvr, int(v.flag)>>flagMethodShift)
+ t, _, _ := methodReceiver(op, rcvr, int(v.flag)>>flagMethodShift)
+
+ fv := &makeFuncImpl{
+ code: code,
+ typ: (*funcType)(unsafe.Pointer(t)),
+ method: int(v.flag) >> flagMethodShift,
+ rcvr: rcvr,
+ }
+
+ return Value{ft, unsafe.Pointer(&fv), v.flag&flagRO | flag(Func)<<flagKindShift | flagIndir}
+}
+
+// makeValueMethod takes a method function and returns a function that
+// takes a value receiver and calls the real method with a pointer to
+// it.
+func makeValueMethod(v Value) Value {
+ typ := v.typ
+ if typ.Kind() != Func {
+ panic("reflect: call of makeValueMethod with non-Func type")
+ }
+ if v.flag&flagMethodFn == 0 {
+ panic("reflect: call of makeValueMethod with non-MethodFn")
+ }
- panic("reflect makeMethodValue not implemented")
+ switch runtime.GOARCH {
+ case "amd64", "386":
+ default:
+ panic("reflect.makeValueMethod not implemented for " + runtime.GOARCH)
+ }
+
+ t := typ.common()
+ ftyp := (*funcType)(unsafe.Pointer(t))
+
+ // Indirect Go func value (dummy) to obtain
+ // actual code address. (A Go func value is a pointer
+ // to a C function pointer. http://golang.org/s/go11func.)
+ dummy := makeFuncStub
+ code := **(**uintptr)(unsafe.Pointer(&dummy))
+
+ impl := &makeFuncImpl{
+ code: code,
+ typ: ftyp,
+ method: -2,
+ rcvr: v,
+ }
+
+ return Value{t, unsafe.Pointer(&impl), flag(Func<<flagKindShift) | flagIndir}
+}
+
+// Call the function represented by a makeFuncImpl.
+func (c *makeFuncImpl) call(in []Value) []Value {
+ if c.method == -1 {
+ return c.fn(in)
+ } else if c.method == -2 {
+ if c.typ.IsVariadic() {
+ return c.rcvr.CallSlice(in)
+ } else {
+ return c.rcvr.Call(in)
+ }
+ } else {
+ m := c.rcvr.Method(c.method)
+ if c.typ.IsVariadic() {
+ return m.CallSlice(in)
+ } else {
+ return m.Call(in)
+ }
+ }
}
diff --git a/gcc-4.8/libgo/go/reflect/makefunc_386.S b/gcc-4.8/libgo/go/reflect/makefunc_386.S
index 5878bc44c..0e2e76465 100644
--- a/gcc-4.8/libgo/go/reflect/makefunc_386.S
+++ b/gcc-4.8/libgo/go/reflect/makefunc_386.S
@@ -25,9 +25,13 @@ reflect.makeFuncStub:
struct {
esp uint32 // 0x0
eax uint32 // 0x4
- st0 uint64 // 0x8
+ st0 float64 // 0x8
+ sr bool // 0x10
+ sf bool // 0x11
}
- */
+ The sr field is set by the function to a non-zero value if
+ the function takes a struct hidden pointer that must be
+ popped off the stack. */
pushl %ebp
.LCFI0:
@@ -45,6 +49,15 @@ reflect.makeFuncStub:
leal 8(%ebp), %eax /* Set esp field in struct. */
movl %eax, -24(%ebp)
+ /* For MakeFunc functions that call recover. */
+ movl 4(%ebp), %eax
+ movl %eax, (%esp)
+#ifdef __PIC__
+ call __go_makefunc_can_recover@PLT
+#else
+ call __go_makefunc_can_recover
+#endif
+
#ifdef __PIC__
call __go_get_closure@PLT
#else
@@ -62,9 +75,20 @@ reflect.makeFuncStub:
call reflect.MakeFuncStubGo
#endif
+ /* MakeFunc functions can no longer call recover. */
+#ifdef __PIC__
+ call __go_makefunc_returning@PLT
+#else
+ call __go_makefunc_returning
+#endif
+
/* Set return registers. */
movl -20(%ebp), %eax
+
+ cmpb $0, -7(%ebp)
+ je 2f
+
fldl -16(%ebp)
#ifdef __SSE2__
@@ -73,12 +97,20 @@ reflect.makeFuncStub:
movsd -16(%ebp), %xmm0
#endif
+2:
+ movb -8(%ebp), %dl
+
addl $36, %esp
popl %ebx
.LCFI3:
popl %ebp
.LCFI4:
+
+ testb %dl,%dl
+ jne 1f
ret
+1:
+ ret $4
.LFE1:
#ifdef __ELF__
.size reflect.makeFuncStub, . - reflect.makeFuncStub
diff --git a/gcc-4.8/libgo/go/reflect/makefunc_amd64.S b/gcc-4.8/libgo/go/reflect/makefunc_amd64.S
index 9d12f193f..88302eee1 100644
--- a/gcc-4.8/libgo/go/reflect/makefunc_amd64.S
+++ b/gcc-4.8/libgo/go/reflect/makefunc_amd64.S
@@ -61,6 +61,14 @@ reflect.makeFuncStub:
movdqa %xmm6, 0xa0(%rsp)
movdqa %xmm7, 0xb0(%rsp)
+ /* For MakeFunc functions that call recover. */
+ movq 8(%rbp), %rdi
+#ifdef __PIC__
+ call __go_makefunc_can_recover@PLT
+#else
+ call __go_makefunc_can_recover
+#endif
+
# Get function type.
#ifdef __PIC__
call __go_get_closure@PLT
@@ -77,6 +85,13 @@ reflect.makeFuncStub:
call reflect.MakeFuncStubGo
#endif
+ /* MakeFunc functions can no longer call recover. */
+#ifdef __PIC__
+ call __go_makefunc_returning@PLT
+#else
+ call __go_makefunc_returning
+#endif
+
# The structure will be updated with any return values. Load
# all possible return registers before returning to the caller.
diff --git a/gcc-4.8/libgo/go/reflect/makefuncgo_386.go b/gcc-4.8/libgo/go/reflect/makefuncgo_386.go
index 0fac1f488..45dd2d759 100644
--- a/gcc-4.8/libgo/go/reflect/makefuncgo_386.go
+++ b/gcc-4.8/libgo/go/reflect/makefuncgo_386.go
@@ -15,7 +15,9 @@ import "unsafe"
type i386Regs struct {
esp uint32
eax uint32 // Value to return in %eax.
- st0 uint64 // Value to return in %st(0).
+ st0 float64 // Value to return in %st(0).
+ sr bool // Set to true if hidden struct pointer.
+ sf bool // Set to true if returning float
}
// MakeFuncStubGo implements the 386 calling convention for MakeFunc.
@@ -56,10 +58,13 @@ func MakeFuncStubGo(regs *i386Regs, c *makeFuncImpl) {
in := make([]Value, 0, len(ftyp.in))
ap := uintptr(regs.esp)
+ regs.sr = false
+ regs.sf = false
var retPtr unsafe.Pointer
if retStruct {
retPtr = *(*unsafe.Pointer)(unsafe.Pointer(ap))
ap += ptrSize
+ regs.sr = true
}
for _, rt := range ftyp.in {
@@ -77,7 +82,7 @@ func MakeFuncStubGo(regs *i386Regs, c *makeFuncImpl) {
// Call the real function.
- out := c.fn(in)
+ out := c.call(in)
if len(out) != len(ftyp.out) {
panic("reflect: wrong return count from function created by MakeFunc")
@@ -123,13 +128,16 @@ func MakeFuncStubGo(regs *i386Regs, c *makeFuncImpl) {
v := out[0]
w := v.iword()
- if v.Kind() != Ptr && v.Kind() != UnsafePointer {
- w = loadIword(unsafe.Pointer(w), v.typ.size)
- }
switch v.Kind() {
- case Float32, Float64:
- regs.st0 = uint64(uintptr(w))
- default:
+ case Ptr, UnsafePointer:
regs.eax = uint32(uintptr(w))
+ case Float32:
+ regs.st0 = float64(*(*float32)(unsafe.Pointer(w)))
+ regs.sf = true
+ case Float64:
+ regs.st0 = *(*float64)(unsafe.Pointer(w))
+ regs.sf = true
+ default:
+ regs.eax = uint32(uintptr(loadIword(unsafe.Pointer(w), v.typ.size)))
}
}
diff --git a/gcc-4.8/libgo/go/reflect/makefuncgo_amd64.go b/gcc-4.8/libgo/go/reflect/makefuncgo_amd64.go
index ecc50a425..42fe03a93 100644
--- a/gcc-4.8/libgo/go/reflect/makefuncgo_amd64.go
+++ b/gcc-4.8/libgo/go/reflect/makefuncgo_amd64.go
@@ -319,7 +319,7 @@ argloop:
// All the real arguments have been found and turned into
// Value's. Call the real function.
- out := c.fn(in)
+ out := c.call(in)
if len(out) != len(ftyp.out) {
panic("reflect: wrong return count from function created by MakeFunc")
diff --git a/gcc-4.8/libgo/go/reflect/type.go b/gcc-4.8/libgo/go/reflect/type.go
index d084f38eb..2b8342cb5 100644
--- a/gcc-4.8/libgo/go/reflect/type.go
+++ b/gcc-4.8/libgo/go/reflect/type.go
@@ -508,7 +508,7 @@ func (t *uncommonType) Method(i int) (m Method) {
m.Type = toType(mt)
x := new(unsafe.Pointer)
*x = unsafe.Pointer(&p.tfn)
- m.Func = Value{mt, unsafe.Pointer(x), fl | flagIndir}
+ m.Func = Value{mt, unsafe.Pointer(x), fl | flagIndir | flagMethodFn}
m.Index = i
return
}
diff --git a/gcc-4.8/libgo/go/reflect/value.go b/gcc-4.8/libgo/go/reflect/value.go
index b199f7088..492155781 100644
--- a/gcc-4.8/libgo/go/reflect/value.go
+++ b/gcc-4.8/libgo/go/reflect/value.go
@@ -98,6 +98,7 @@ const (
flagIndir
flagAddr
flagMethod
+ flagMethodFn // gccgo: first fn parameter is always pointer
flagKindShift = iota
flagKindWidth = 5 // there are 27 kinds
flagKindMask flag = 1<<flagKindWidth - 1
@@ -433,7 +434,7 @@ func (v Value) call(op string, in []Value) []Value {
if v.flag&flagMethod != 0 {
nin++
}
- firstPointer := len(in) > 0 && t.In(0).Kind() != Ptr && v.flag&flagMethod == 0 && isMethod(v.typ)
+ firstPointer := len(in) > 0 && t.In(0).Kind() != Ptr && v.flag&flagMethodFn != 0
params := make([]unsafe.Pointer, nin)
off := 0
if v.flag&flagMethod != 0 {
@@ -484,33 +485,6 @@ func (v Value) call(op string, in []Value) []Value {
return ret
}
-// gccgo specific test to see if typ is a method. We can tell by
-// looking at the string to see if there is a receiver. We need this
-// because for gccgo all methods take pointer receivers.
-func isMethod(t *rtype) bool {
- if Kind(t.kind) != Func {
- return false
- }
- s := *t.string
- parens := 0
- params := 0
- sawRet := false
- for i, c := range s {
- if c == '(' {
- if parens == 0 {
- params++
- }
- parens++
- } else if c == ')' {
- parens--
- } else if parens == 0 && c == ' ' && s[i+1] != '(' && !sawRet {
- params++
- sawRet = true
- }
- }
- return params > 2
-}
-
// methodReceiver returns information about the receiver
// described by v. The Value v may or may not have the
// flagMethod bit set, so the kind cached in v.flag should
@@ -917,6 +891,16 @@ func valueInterface(v Value, safe bool) interface{} {
v = makeMethodValue("Interface", v)
}
+ if v.flag&flagMethodFn != 0 {
+ if v.typ.Kind() != Func {
+ panic("reflect: MethodFn of non-Func")
+ }
+ ft := (*funcType)(unsafe.Pointer(v.typ))
+ if ft.in[0].Kind() != Ptr {
+ v = makeValueMethod(v)
+ }
+ }
+
k := v.kind()
if k == Interface {
// Special case: return the element inside the interface.
@@ -1230,8 +1214,7 @@ func (v Value) Pointer() uintptr {
// created via reflect have the same underlying code pointer,
// so their Pointers are equal. The function used here must
// match the one used in makeMethodValue.
- // This is not properly implemented for gccgo.
- f := Zero
+ f := makeFuncStub
return **(**uintptr)(unsafe.Pointer(&f))
}
p := v.val
diff --git a/gcc-4.8/libgo/go/syscall/libcall_linux.go b/gcc-4.8/libgo/go/syscall/libcall_linux.go
index 79de2f389..60eecd9ef 100644
--- a/gcc-4.8/libgo/go/syscall/libcall_linux.go
+++ b/gcc-4.8/libgo/go/syscall/libcall_linux.go
@@ -190,6 +190,9 @@ func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
//sys Adjtimex(buf *Timex) (state int, err error)
//adjtimex(buf *Timex) _C_int
+//sysnb Dup3(oldfd int, newfd int, flags int) (err error)
+//dup3(oldfd _C_int, newfd _C_int, flags _C_int) _C_int
+
//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
//faccessat(dirfd _C_int, pathname *byte, mode _C_int, flags _C_int) _C_int
@@ -268,6 +271,9 @@ func ParseDirent(buf []byte, max int, names []string) (consumed int, count int,
return origlen - len(buf), count, names
}
+//sys Getxattr(path string, attr string, dest []byte) (sz int, err error)
+//getxattr(path *byte, attr *byte, buf *byte, count Size_t) Ssize_t
+
//sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)
//inotify_add_watch(fd _C_int, pathname *byte, mask uint32) _C_int
@@ -283,6 +289,9 @@ func ParseDirent(buf []byte, max int, names []string) (consumed int, count int,
//sys Klogctl(typ int, buf []byte) (n int, err error)
//klogctl(typ _C_int, bufp *byte, len _C_int) _C_int
+//sys Listxattr(path string, dest []byte) (sz int, err error)
+//listxattr(path *byte, list *byte, size Size_t) Ssize_t
+
//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
//mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int
@@ -305,6 +314,9 @@ func Pipe2(p []int, flags int) (err error) {
//sys PivotRoot(newroot string, putold string) (err error)
//pivot_root(newroot *byte, putold *byte) _C_int
+//sys Removexattr(path string, attr string) (err error)
+//removexattr(path *byte, name *byte) _C_int
+
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//renameat(olddirfd _C_int, oldpath *byte, newdirfd _C_int, newpath *byte) _C_int
@@ -338,6 +350,9 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
//sysnb Setresuid(ruid int, eguid int, suid int) (err error)
//setresuid(ruid Uid_t, euid Uid_t, suid Uid_t) _C_int
+//sys Setxattr(path string, attr string, data []byte, flags int) (err error)
+//setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int
+
//sys splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error)
//splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t
func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
diff --git a/gcc-4.8/libgo/go/syscall/libcall_posix.go b/gcc-4.8/libgo/go/syscall/libcall_posix.go
index 1e7823b54..91ff59b6c 100644
--- a/gcc-4.8/libgo/go/syscall/libcall_posix.go
+++ b/gcc-4.8/libgo/go/syscall/libcall_posix.go
@@ -238,6 +238,9 @@ func FDZero(set *FdSet) {
//sysnb Getppid() (ppid int)
//getppid() Pid_t
+//sys Getpriority(which int, who int) (prio int, err error)
+//getpriority(which _C_int, who _C_int) _C_int
+
//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
//getrlimit(resource _C_int, rlim *Rlimit) _C_int
@@ -307,6 +310,9 @@ func Gettimeofday(tv *Timeval) (err error) {
//sysnb Setpgid(pid int, pgid int) (err error)
//setpgid(pid Pid_t, pgid Pid_t) _C_int
+//sys Setpriority(which int, who int, prio int) (err error)
+//setpriority(which _C_int, who _C_int, prio _C_int) _C_int
+
//sysnb Setreuid(ruid int, euid int) (err error)
//setreuid(ruid Uid_t, euid Uid_t) _C_int
diff --git a/gcc-4.8/libgo/go/syscall/socket.go b/gcc-4.8/libgo/go/syscall/socket.go
index cc98d6b79..4a80a4cdb 100644
--- a/gcc-4.8/libgo/go/syscall/socket.go
+++ b/gcc-4.8/libgo/go/syscall/socket.go
@@ -25,7 +25,7 @@ type RawSockaddrAny struct {
Pad [96]int8
}
-const SizeofSockaddrAny = 0x1c
+const SizeofSockaddrAny = 0x6c
type SockaddrInet4 struct {
Port int
diff --git a/gcc-4.8/libgo/mksysinfo.sh b/gcc-4.8/libgo/mksysinfo.sh
index 11bcb257a..71c328627 100755
--- a/gcc-4.8/libgo/mksysinfo.sh
+++ b/gcc-4.8/libgo/mksysinfo.sh
@@ -1035,6 +1035,10 @@ grep '^type _utimbuf ' gen-sysinfo.go | \
grep '^const _LOCK_' gen-sysinfo.go |
sed -e 's/^\(const \)_\(LOCK_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+# The PRIO constants.
+grep '^const _PRIO_' gen-sysinfo.go | \
+ sed -e 's/^\(const \)_\(PRIO_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+
# The GNU/Linux LINUX_REBOOT flags.
grep '^const _LINUX_REBOOT_' gen-sysinfo.go |
sed -e 's/^\(const \)_\(LINUX_REBOOT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
diff --git a/gcc-4.8/libgo/runtime/go-callers.c b/gcc-4.8/libgo/runtime/go-callers.c
index 291dfd0d6..ae411d9c8 100644
--- a/gcc-4.8/libgo/runtime/go-callers.c
+++ b/gcc-4.8/libgo/runtime/go-callers.c
@@ -11,6 +11,13 @@
#include "runtime.h"
#include "array.h"
+/* This is set to non-zero when calling backtrace_full. This is used
+ to avoid getting hanging on a recursive lock in dl_iterate_phdr on
+ older versions of glibc when a SIGPROF signal arrives while
+ collecting a backtrace. */
+
+uint32 runtime_in_callers;
+
/* Argument passed to callback function. */
struct callers_data
@@ -111,8 +118,10 @@ runtime_callers (int32 skip, Location *locbuf, int32 m)
data.skip = skip + 1;
data.index = 0;
data.max = m;
+ runtime_xadd (&runtime_in_callers, 1);
backtrace_full (__go_get_backtrace_state (), 0, callback, error_callback,
&data);
+ runtime_xadd (&runtime_in_callers, -1);
return data.index;
}
diff --git a/gcc-4.8/libgo/runtime/go-cdiv.c b/gcc-4.8/libgo/runtime/go-cdiv.c
new file mode 100644
index 000000000..0a81e458c
--- /dev/null
+++ b/gcc-4.8/libgo/runtime/go-cdiv.c
@@ -0,0 +1,46 @@
+/* go-cdiv.c -- complex division routines
+
+ Copyright 2013 The Go Authors. All rights reserved.
+ Use of this source code is governed by a BSD-style
+ license that can be found in the LICENSE file. */
+
+/* Calls to these functions are generated by the Go frontend for
+ division of complex64 or complex128. We use these because Go's
+ complex division expects slightly different results from the GCC
+ default. When dividing NaN+1.0i / 0+0i, Go expects NaN+NaNi but
+ GCC generates NaN+Infi. NaN+Infi seems wrong seems the rules of
+ C99 Annex G specify that if either side of a complex number is Inf,
+ the the whole number is Inf, but an operation involving NaN ought
+ to result in NaN, not Inf. */
+
+__complex float
+__go_complex64_div (__complex float a, __complex float b)
+{
+ if (__builtin_expect (b == 0+0i, 0))
+ {
+ if (!__builtin_isinff (__real__ a)
+ && !__builtin_isinff (__imag__ a)
+ && (__builtin_isnanf (__real__ a) || __builtin_isnanf (__imag__ a)))
+ {
+ /* Pass "1" to nanf to match math/bits.go. */
+ return __builtin_nanf("1") + __builtin_nanf("1")*1i;
+ }
+ }
+ return a / b;
+}
+
+__complex double
+__go_complex128_div (__complex double a, __complex double b)
+{
+ if (__builtin_expect (b == 0+0i, 0))
+ {
+ if (!__builtin_isinf (__real__ a)
+ && !__builtin_isinf (__imag__ a)
+ && (__builtin_isnan (__real__ a) || __builtin_isnan (__imag__ a)))
+ {
+ /* Pass "1" to nan to match math/bits.go. */
+ return __builtin_nan("1") + __builtin_nan("1")*1i;
+ }
+ }
+ return a / b;
+}
diff --git a/gcc-4.8/libgo/runtime/go-defer.c b/gcc-4.8/libgo/runtime/go-defer.c
index 3955e0f5c..fed8db385 100644
--- a/gcc-4.8/libgo/runtime/go-defer.c
+++ b/gcc-4.8/libgo/runtime/go-defer.c
@@ -27,6 +27,7 @@ __go_defer (_Bool *frame, void (*pfn) (void *), void *arg)
n->__pfn = pfn;
n->__arg = arg;
n->__retaddr = NULL;
+ n->__makefunc_can_recover = 0;
g->defer = n;
}
diff --git a/gcc-4.8/libgo/runtime/go-defer.h b/gcc-4.8/libgo/runtime/go-defer.h
index 0b20e8f6e..3298ce950 100644
--- a/gcc-4.8/libgo/runtime/go-defer.h
+++ b/gcc-4.8/libgo/runtime/go-defer.h
@@ -34,4 +34,10 @@ struct __go_defer_stack
set by __go_set_defer_retaddr which is called by the thunks
created by defer statements. */
const void *__retaddr;
+
+ /* Set to true if a function created by reflect.MakeFunc is
+ permitted to recover. The return address of such a function
+ function will be somewhere in libffi, so __retaddr is not
+ useful. */
+ _Bool __makefunc_can_recover;
};
diff --git a/gcc-4.8/libgo/runtime/go-int-array-to-string.c b/gcc-4.8/libgo/runtime/go-int-array-to-string.c
index 6cae2fd8c..e3c008a0b 100644
--- a/gcc-4.8/libgo/runtime/go-int-array-to-string.c
+++ b/gcc-4.8/libgo/runtime/go-int-array-to-string.c
@@ -30,6 +30,8 @@ __go_int_array_to_string (const void* p, intgo len)
if (v < 0 || v > 0x10ffff)
v = 0xfffd;
+ else if (0xd800 <= v && v <= 0xdfff)
+ v = 0xfffd;
if (v <= 0x7f)
slen += 1;
@@ -56,6 +58,8 @@ __go_int_array_to_string (const void* p, intgo len)
character. */
if (v < 0 || v > 0x10ffff)
v = 0xfffd;
+ else if (0xd800 <= v && v <= 0xdfff)
+ v = 0xfffd;
if (v <= 0x7f)
*s++ = v;
diff --git a/gcc-4.8/libgo/runtime/go-make-slice.c b/gcc-4.8/libgo/runtime/go-make-slice.c
index 591ab37e0..f08cb012d 100644
--- a/gcc-4.8/libgo/runtime/go-make-slice.c
+++ b/gcc-4.8/libgo/runtime/go-make-slice.c
@@ -34,7 +34,10 @@ __go_make_slice2 (const struct __go_type_descriptor *td, uintptr_t len,
std = (const struct __go_slice_type *) td;
ilen = (intgo) len;
- if (ilen < 0 || (uintptr_t) ilen != len)
+ if (ilen < 0
+ || (uintptr_t) ilen != len
+ || (std->__element_type->__size > 0
+ && len > MaxMem / std->__element_type->__size))
runtime_panicstring ("makeslice: len out of range");
icap = (intgo) cap;
diff --git a/gcc-4.8/libgo/runtime/go-nosys.c b/gcc-4.8/libgo/runtime/go-nosys.c
index 3ab5ea235..0a94de052 100644
--- a/gcc-4.8/libgo/runtime/go-nosys.c
+++ b/gcc-4.8/libgo/runtime/go-nosys.c
@@ -43,6 +43,17 @@ accept4 (int sockfd __attribute__ ((unused)),
}
#endif
+#ifndef HAVE_DUP3
+int
+dup3 (int oldfd __attribute__ ((unused)),
+ int newfd __attribute__ ((unused)),
+ int flags __attribute__ ((unused)))
+{
+ errno = ENOSYS;
+ return -1;
+}
+#endif
+
#ifndef HAVE_EPOLL_CREATE1
int
epoll_create1 (int flags __attribute__ ((unused)))
@@ -112,6 +123,18 @@ futimesat (int dirfd __attribute__ ((unused)),
}
#endif
+#ifndef HAVE_GETXATTR
+ssize_t
+getxattr (const char *path __attribute__ ((unused)),
+ const char *name __attribute__ ((unused)),
+ void *value __attribute__ ((unused)),
+ size_t size __attribute__ ((unused)))
+{
+ errno = ENOSYS;
+ return -1;
+}
+#endif
+
#ifndef HAVE_INOTIFY_ADD_WATCH
int
inotify_add_watch (int fd __attribute__ ((unused)),
@@ -151,6 +174,17 @@ inotify_rm_watch (int fd __attribute__ ((unused)),
}
#endif
+#ifndef HAVE_LISTXATTR
+ssize_t
+listxattr (const char *path __attribute__ ((unused)),
+ char *list __attribute__ ((unused)),
+ size_t size __attribute__ ((unused)))
+{
+ errno = ENOSYS;
+ return -1;
+}
+#endif
+
#ifndef HAVE_MKDIRAT
int
mkdirat (int dirfd __attribute__ ((unused)),
@@ -196,6 +230,16 @@ pipe2 (int pipefd[2] __attribute__ ((unused)),
}
#endif
+#ifndef HAVE_REMOVEXATTR
+int
+removexattr (const char *path __attribute__ ((unused)),
+ const char *name __attribute__ ((unused)))
+{
+ errno = ENOSYS;
+ return -1;
+}
+#endif
+
#ifndef HAVE_RENAMEAT
int
renameat (int olddirfd __attribute__ ((unused)),
@@ -208,6 +252,19 @@ renameat (int olddirfd __attribute__ ((unused)),
}
#endif
+#ifndef HAVE_SETXATTR
+int
+setxattr (const char *path __attribute__ ((unused)),
+ const char *name __attribute__ ((unused)),
+ const void *value __attribute__ ((unused)),
+ size_t size __attribute__ ((unused)),
+ int flags __attribute__ ((unused)))
+{
+ errno = ENOSYS;
+ return -1;
+}
+#endif
+
#ifndef HAVE_SPLICE
int
splice (int fd __attribute__ ((unused)),
diff --git a/gcc-4.8/libgo/runtime/go-recover.c b/gcc-4.8/libgo/runtime/go-recover.c
index d6403e00d..ceb9b5725 100644
--- a/gcc-4.8/libgo/runtime/go-recover.c
+++ b/gcc-4.8/libgo/runtime/go-recover.c
@@ -16,12 +16,14 @@
__go_can_recover--this is, the thunk. */
_Bool
-__go_can_recover (const void* retaddr)
+__go_can_recover (const void *retaddr)
{
G *g;
struct __go_defer_stack *d;
const char* ret;
const char* dret;
+ Location loc;
+ const byte *name;
g = runtime_g ();
@@ -52,7 +54,78 @@ __go_can_recover (const void* retaddr)
#endif
dret = (const char *) d->__retaddr;
- return ret <= dret && ret + 16 >= dret;
+ if (ret <= dret && ret + 16 >= dret)
+ return 1;
+
+ /* If the function calling recover was created by reflect.MakeFunc,
+ then RETADDR will be somewhere in libffi. Our caller is
+ permitted to recover if it was called from libffi. */
+ if (!d->__makefunc_can_recover)
+ return 0;
+
+ if (runtime_callers (2, &loc, 1) < 1)
+ return 0;
+
+ /* If we have no function name, then we weren't called by Go code.
+ Guess that we were called by libffi. */
+ if (loc.function.len == 0)
+ return 1;
+
+ if (loc.function.len < 4)
+ return 0;
+ name = loc.function.str;
+ if (*name == '_')
+ {
+ if (loc.function.len < 5)
+ return 0;
+ ++name;
+ }
+
+ if (name[0] == 'f' && name[1] == 'f' && name[2] == 'i' && name[3] == '_')
+ return 1;
+
+ /* We may also be called by reflect.makeFuncImpl.call, for a
+ function created by reflect.MakeFunc. */
+ if (__builtin_strstr ((const char *) name, "makeFuncImpl") != NULL)
+ return 1;
+
+ return 0;
+}
+
+/* This function is called when code is about to enter a function
+ created by reflect.MakeFunc. It is called by the function stub
+ used by MakeFunc. If the stub is permitted to call recover, then a
+ real MakeFunc function is permitted to call recover. */
+
+void
+__go_makefunc_can_recover (const void *retaddr)
+{
+ struct __go_defer_stack *d;
+
+ d = runtime_g ()->defer;
+ if (d != NULL
+ && !d->__makefunc_can_recover
+ && __go_can_recover (retaddr))
+ d->__makefunc_can_recover = 1;
+}
+
+/* This function is called when code is about to exit a function
+ created by reflect.MakeFunc. It is called by the function stub
+ used by MakeFunc. It clears the __makefunc_can_recover field.
+ It's OK to always clear this field, because __go_can_recover will
+ only be called by a stub created for a function that calls recover.
+ That stub will not call a function created by reflect.MakeFunc, so
+ by the time we get here any caller higher up on the call stack no
+ longer needs the information. */
+
+void
+__go_makefunc_returning (void)
+{
+ struct __go_defer_stack *d;
+
+ d = runtime_g ()->defer;
+ if (d != NULL)
+ d->__makefunc_can_recover = 0;
}
/* This is only called when it is valid for the caller to recover the
diff --git a/gcc-4.8/libgo/runtime/go-reflect-call.c b/gcc-4.8/libgo/runtime/go-reflect-call.c
index 5cf370798..12bd0d7c2 100644
--- a/gcc-4.8/libgo/runtime/go-reflect-call.c
+++ b/gcc-4.8/libgo/runtime/go-reflect-call.c
@@ -98,9 +98,12 @@ go_struct_to_ffi (const struct __go_struct_type *descriptor)
const struct __go_struct_field *fields;
int i;
+ field_count = descriptor->__fields.__count;
+ if (field_count == 0) {
+ return &ffi_type_void;
+ }
ret = (ffi_type *) __go_alloc (sizeof (ffi_type));
ret->type = FFI_TYPE_STRUCT;
- field_count = descriptor->__fields.__count;
fields = (const struct __go_struct_field *) descriptor->__fields.__values;
ret->elements = (ffi_type **) __go_alloc ((field_count + 1)
* sizeof (ffi_type *));
diff --git a/gcc-4.8/libgo/runtime/go-signal.c b/gcc-4.8/libgo/runtime/go-signal.c
index 9771b71cf..41a807943 100644
--- a/gcc-4.8/libgo/runtime/go-signal.c
+++ b/gcc-4.8/libgo/runtime/go-signal.c
@@ -234,7 +234,7 @@ runtime_sighandler (int sig, Siginfo *info,
G *g;
g = runtime_g ();
- runtime_traceback (g);
+ runtime_traceback ();
runtime_tracebackothers (g);
/* The gc library calls runtime_dumpregs here, and provides
@@ -399,6 +399,9 @@ sig_tramp_info (int sig, Siginfo *info, void *context)
{
G *gp;
M *mp;
+#ifdef USING_SPLIT_STACK
+ void *stack_context[10];
+#endif
/* We are now running on the stack registered via sigaltstack.
(Actually there is a small span of time between runtime_siginit
@@ -409,7 +412,7 @@ sig_tramp_info (int sig, Siginfo *info, void *context)
if (gp != NULL)
{
#ifdef USING_SPLIT_STACK
- __splitstack_getcontext (&gp->stack_context[0]);
+ __splitstack_getcontext (&stack_context[0]);
#endif
}
@@ -432,7 +435,7 @@ sig_tramp_info (int sig, Siginfo *info, void *context)
if (gp != NULL)
{
#ifdef USING_SPLIT_STACK
- __splitstack_setcontext (&gp->stack_context[0]);
+ __splitstack_setcontext (&stack_context[0]);
#endif
}
}
diff --git a/gcc-4.8/libgo/runtime/malloc.goc b/gcc-4.8/libgo/runtime/malloc.goc
index 8ccaa6b88..d6ecfe463 100644
--- a/gcc-4.8/libgo/runtime/malloc.goc
+++ b/gcc-4.8/libgo/runtime/malloc.goc
@@ -541,7 +541,6 @@ runtime_settype_flush(M *mp, bool sysalloc)
// (Manually inlined copy of runtime_MHeap_Lookup)
p = (uintptr)v>>PageShift;
- if(sizeof(void*) == 8)
p -= (uintptr)runtime_mheap->arena_start >> PageShift;
s = runtime_mheap->map[p];
diff --git a/gcc-4.8/libgo/runtime/mgc0.c b/gcc-4.8/libgo/runtime/mgc0.c
index c3b32111c..032a43d01 100644
--- a/gcc-4.8/libgo/runtime/mgc0.c
+++ b/gcc-4.8/libgo/runtime/mgc0.c
@@ -174,7 +174,7 @@ static struct {
Obj *roots;
uint32 nroot;
uint32 rootcap;
-} work;
+} work __attribute__((aligned(8)));
enum {
GC_DEFAULT_PTR = GC_NUM_INSTR,
@@ -239,7 +239,6 @@ markonly(void *obj)
// (Manually inlined copy of MHeap_LookupMaybe.)
k = (uintptr)obj>>PageShift;
x = k;
- if(sizeof(void*) == 8)
x -= (uintptr)runtime_mheap->arena_start>>PageShift;
s = runtime_mheap->map[x];
if(s == nil || k < s->start || k - s->start >= s->npages || s->state != MSpanInUse)
@@ -418,7 +417,6 @@ flushptrbuf(PtrTarget *ptrbuf, PtrTarget **ptrbufpos, Obj **_wp, Workbuf **_wbuf
// (Manually inlined copy of MHeap_LookupMaybe.)
k = (uintptr)obj>>PageShift;
x = k;
- if(sizeof(void*) == 8)
x -= (uintptr)arena_start>>PageShift;
s = runtime_mheap->map[x];
if(s == nil || k < s->start || k - s->start >= s->npages || s->state != MSpanInUse)
@@ -466,7 +464,6 @@ flushptrbuf(PtrTarget *ptrbuf, PtrTarget **ptrbufpos, Obj **_wp, Workbuf **_wbuf
// Ask span about size class.
// (Manually inlined copy of MHeap_Lookup.)
x = (uintptr)obj >> PageShift;
- if(sizeof(void*) == 8)
x -= (uintptr)arena_start>>PageShift;
s = runtime_mheap->map[x];
@@ -585,7 +582,6 @@ checkptr(void *obj, uintptr objti)
if(t == nil)
return;
x = (uintptr)obj >> PageShift;
- if(sizeof(void*) == 8)
x -= (uintptr)(runtime_mheap->arena_start)>>PageShift;
s = runtime_mheap->map[x];
objstart = (byte*)((uintptr)s->start<<PageShift);
diff --git a/gcc-4.8/libgo/runtime/mheap.c b/gcc-4.8/libgo/runtime/mheap.c
index b4d94b685..50ec1527f 100644
--- a/gcc-4.8/libgo/runtime/mheap.c
+++ b/gcc-4.8/libgo/runtime/mheap.c
@@ -150,7 +150,6 @@ HaveSpan:
runtime_MSpan_Init(t, s->start + npage, s->npages - npage);
s->npages = npage;
p = t->start;
- if(sizeof(void*) == 8)
p -= ((uintptr)h->arena_start>>PageShift);
if(p > 0)
h->map[p-1] = s;
@@ -169,7 +168,6 @@ HaveSpan:
s->elemsize = (sizeclass==0 ? s->npages<<PageShift : (uintptr)runtime_class_to_size[sizeclass]);
s->types.compression = MTypes_Empty;
p = s->start;
- if(sizeof(void*) == 8)
p -= ((uintptr)h->arena_start>>PageShift);
for(n=0; n<npage; n++)
h->map[p+n] = s;
@@ -241,7 +239,6 @@ MHeap_Grow(MHeap *h, uintptr npage)
mstats.mspan_sys = h->spanalloc.sys;
runtime_MSpan_Init(s, (uintptr)v>>PageShift, ask>>PageShift);
p = s->start;
- if(sizeof(void*) == 8)
p -= ((uintptr)h->arena_start>>PageShift);
h->map[p] = s;
h->map[p + s->npages - 1] = s;
@@ -259,7 +256,6 @@ runtime_MHeap_Lookup(MHeap *h, void *v)
uintptr p;
p = (uintptr)v;
- if(sizeof(void*) == 8)
p -= (uintptr)h->arena_start;
return h->map[p >> PageShift];
}
@@ -281,7 +277,6 @@ runtime_MHeap_LookupMaybe(MHeap *h, void *v)
return nil;
p = (uintptr)v>>PageShift;
q = p;
- if(sizeof(void*) == 8)
q -= (uintptr)h->arena_start >> PageShift;
s = h->map[q];
if(s == nil || p < s->start || p - s->start >= s->npages)
@@ -332,7 +327,6 @@ MHeap_FreeLocked(MHeap *h, MSpan *s)
// Coalesce with earlier, later spans.
p = s->start;
- if(sizeof(void*) == 8)
p -= (uintptr)h->arena_start >> PageShift;
if(p > 0 && (t = h->map[p-1]) != nil && t->state != MSpanInUse) {
tp = (uintptr*)(t->start<<PageShift);
diff --git a/gcc-4.8/libgo/runtime/proc.c b/gcc-4.8/libgo/runtime/proc.c
index 0e77a3e06..4ca975680 100644
--- a/gcc-4.8/libgo/runtime/proc.c
+++ b/gcc-4.8/libgo/runtime/proc.c
@@ -1716,10 +1716,30 @@ goexit0(G *gp)
// entersyscall is going to return immediately after.
void runtime_entersyscall(void) __attribute__ ((no_split_stack));
+static void doentersyscall(void) __attribute__ ((no_split_stack, noinline));
void
runtime_entersyscall()
{
+ // Save the registers in the g structure so that any pointers
+ // held in registers will be seen by the garbage collector.
+ getcontext(&g->gcregs);
+
+ // Do the work in a separate function, so that this function
+ // doesn't save any registers on its own stack. If this
+ // function does save any registers, we might store the wrong
+ // value in the call to getcontext.
+ //
+ // FIXME: This assumes that we do not need to save any
+ // callee-saved registers to access the TLS variable g. We
+ // don't want to put the ucontext_t on the stack because it is
+ // large and we can not split the stack here.
+ doentersyscall();
+}
+
+static void
+doentersyscall()
+{
if(m->profilehz > 0)
runtime_setprof(false);
@@ -1736,10 +1756,6 @@ runtime_entersyscall()
}
#endif
- // Save the registers in the g structure so that any pointers
- // held in registers will be seen by the garbage collector.
- getcontext(&g->gcregs);
-
g->status = Gsyscall;
if(runtime_atomicload(&runtime_sched.sysmonwait)) { // TODO: fast atomic
@@ -2239,6 +2255,14 @@ runtime_sigprof()
if(prof.fn == nil || prof.hz == 0)
return;
+ if(runtime_atomicload(&runtime_in_callers) > 0) {
+ // If SIGPROF arrived while already fetching runtime
+ // callers we can have trouble on older systems
+ // because the unwind library calls dl_iterate_phdr
+ // which was not recursive in the past.
+ return;
+ }
+
runtime_lock(&prof);
if(prof.fn == nil) {
runtime_unlock(&prof);
diff --git a/gcc-4.8/libgo/runtime/runtime.h b/gcc-4.8/libgo/runtime/runtime.h
index d2e7d4c11..964b2e31e 100644
--- a/gcc-4.8/libgo/runtime/runtime.h
+++ b/gcc-4.8/libgo/runtime/runtime.h
@@ -440,7 +440,7 @@ enum {
};
void runtime_hashinit(void);
-void runtime_traceback();
+void runtime_traceback(void);
void runtime_tracebackothers(G*);
/*
@@ -756,6 +756,7 @@ extern struct backtrace_state *__go_get_backtrace_state(void);
extern _Bool __go_file_line(uintptr, String*, String*, intgo *);
extern byte* runtime_progname();
extern void runtime_main(void*);
+extern uint32 runtime_in_callers;
int32 getproccount(void);
diff --git a/gcc-4.8/libgo/testsuite/gotest b/gcc-4.8/libgo/testsuite/gotest
index 4015ed1e8..155c7a861 100755
--- a/gcc-4.8/libgo/testsuite/gotest
+++ b/gcc-4.8/libgo/testsuite/gotest
@@ -369,7 +369,7 @@ localname() {
{
text="T"
case "$GOARCH" in
- ppc64) text="D" ;;
+ ppc64) text="[TD]" ;;
esac
symtogo='sed -e s/_test/XXXtest/ -e s/.*_\([^_]*\.\)/\1/ -e s/XXXtest/_test/'
diff --git a/gcc-4.8/libgomp/ChangeLog b/gcc-4.8/libgomp/ChangeLog
index 7a377b7d4..fc2bbee0d 100644
--- a/gcc-4.8/libgomp/ChangeLog
+++ b/gcc-4.8/libgomp/ChangeLog
@@ -1,3 +1,25 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * configure: Regenerate.
+
+2014-04-02 Richard Henderson <rth@redhat.com>
+
+ * config/linux/futex.h (futex_wait): Get error value from errno.
+ (futex_wake): Likewise.
+
+2013-12-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR libgomp/59467
+ * testsuite/libgomp.fortran/crayptr2.f90: Add private (d) clause to
+ !$omp parallel.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libgomp/config/linux/futex.h b/gcc-4.8/libgomp/config/linux/futex.h
index 676b2dbb8..9dd8fe72f 100644
--- a/gcc-4.8/libgomp/config/linux/futex.h
+++ b/gcc-4.8/libgomp/config/linux/futex.h
@@ -45,8 +45,8 @@
static inline void
futex_wait (int *addr, int val)
{
- long err = syscall (SYS_futex, addr, gomp_futex_wait, val, NULL);
- if (__builtin_expect (err == -ENOSYS, 0))
+ int err = syscall (SYS_futex, addr, gomp_futex_wait, val, NULL);
+ if (__builtin_expect (err < 0 && errno == ENOSYS, 0))
{
gomp_futex_wait &= ~FUTEX_PRIVATE_FLAG;
gomp_futex_wake &= ~FUTEX_PRIVATE_FLAG;
@@ -57,8 +57,8 @@ futex_wait (int *addr, int val)
static inline void
futex_wake (int *addr, int count)
{
- long err = syscall (SYS_futex, addr, gomp_futex_wake, count);
- if (__builtin_expect (err == -ENOSYS, 0))
+ int err = syscall (SYS_futex, addr, gomp_futex_wake, count);
+ if (__builtin_expect (err < 0 && errno == ENOSYS, 0))
{
gomp_futex_wait &= ~FUTEX_PRIVATE_FLAG;
gomp_futex_wake &= ~FUTEX_PRIVATE_FLAG;
diff --git a/gcc-4.8/libgomp/configure b/gcc-4.8/libgomp/configure
index b48979b3b..608a2b0dc 100755
--- a/gcc-4.8/libgomp/configure
+++ b/gcc-4.8/libgomp/configure
@@ -6580,7 +6580,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -6605,7 +6605,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -6624,7 +6627,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -11088,7 +11094,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11091 "configure"
+#line 11097 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11194,7 +11200,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11197 "configure"
+#line 11203 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/gcc-4.8/libgomp/libgomp.info b/gcc-4.8/libgomp/libgomp.info
index d374a41df..f4dd86fd3 100644
--- a/gcc-4.8/libgomp/libgomp.info
+++ b/gcc-4.8/libgomp/libgomp.info
@@ -1,5 +1,5 @@
-This is libgomp.info, produced by makeinfo version 4.13 from
-/d/gcc-4.8.1/gcc-4.8.1/libgomp/libgomp.texi.
+This is libgomp.info, produced by makeinfo version 4.12 from
+/space/rguenther/gcc-4.8.3/gcc-4.8.3/libgomp/libgomp.texi.
Copyright (C) 2006-2013 Free Software Foundation, Inc.
@@ -91,7 +91,7 @@ compile-time flag `-fopenmp' must be specified. This enables the OpenMP
directive `#pragma omp' in C/C++ and `!$omp' directives in free form,
`c$omp', `*$omp' and `!$omp' directives in fixed form, `!$' conditional
compilation sentinels in free form and `c$', `*$' and `!$' sentinels in
-fixed form, for Fortran. The flag also arranges for automatic linking
+fixed form, for Fortran. The flag also arranges for automatic linking
of the OpenMP runtime library (*note Runtime Library Routines::).
A complete description of all OpenMP directives accepted may be
@@ -105,7 +105,7 @@ File: libgomp.info, Node: Runtime Library Routines, Next: Environment Variable
**************************
The runtime routines described here are defined by section 3 of the
-OpenMP specifications in version 3.1. The routines are structured in
+OpenMP specifications in version 3.1. The routines are structured in
following three parts:
Control threads, processors and the parallel environment.
@@ -187,7 +187,7 @@ File: libgomp.info, Node: omp_get_ancestor_thread_num, Next: omp_get_dynamic,
_Description_:
This function returns the thread identification number for the
- given nesting level of the current thread. For values of LEVEL
+ given nesting level of the current thread. For values of LEVEL
outside zero to `omp_get_level' -1 is returned; if LEVEL is
`omp_get_level' the result is identical to `omp_get_thread_num'.
@@ -356,7 +356,7 @@ File: libgomp.info, Node: omp_get_num_threads, Next: omp_get_schedule, Prev:
===================================================
_Description_:
- Returns the number of threads in the current team. In a sequential
+ Returns the number of threads in the current team. In a sequential
section of the program `omp_get_num_threads' returns 1.
The default team size may be initialized at startup by the
@@ -386,7 +386,7 @@ File: libgomp.info, Node: omp_get_schedule, Next: omp_get_team_size, Prev: om
==============================================================
_Description_:
- Obtain the runtime scheduling method. The KIND argument will be
+ Obtain the runtime scheduling method. The KIND argument will be
set to the value `omp_sched_static', `omp_sched_dynamic',
`omp_sched_guided' or `omp_sched_auto'. The second argument,
MODIFIER, is set to the chunk size.
@@ -414,7 +414,7 @@ File: libgomp.info, Node: omp_get_team_size, Next: omp_get_thread_limit, Prev
_Description_:
This function returns the number of threads in a thread team to
- which either the current thread or its ancestor belongs. For
+ which either the current thread or its ancestor belongs. For
values of LEVEL outside zero to `omp_get_level', -1 is returned;
if LEVEL is zero, 1 is returned, and for `omp_get_level', the
result is identical to `omp_get_num_threads'.
@@ -465,7 +465,7 @@ File: libgomp.info, Node: omp_get_thread_num, Next: omp_in_parallel, Prev: om
_Description_:
Returns a unique thread identification number within the current
team. In a sequential parts of the program, `omp_get_thread_num'
- always returns 0. In parallel regions the return value varies from
+ always returns 0. In parallel regions the return value varies from
0 to `omp_get_num_threads'-1 inclusive. The return value of the
master thread of a team is always 0.
@@ -530,7 +530,7 @@ File: libgomp.info, Node: omp_set_dynamic, Next: omp_set_max_active_levels, P
_Description_:
Enable or disable the dynamic adjustment of the number of threads
- within a team. The function takes the language-specific equivalent
+ within a team. The function takes the language-specific equivalent
of `true' and `false', where `true' enables dynamic adjustment of
team sizes and `false' disables it.
@@ -579,7 +579,7 @@ File: libgomp.info, Node: omp_set_nested, Next: omp_set_num_threads, Prev: om
_Description_:
Enable or disable nested parallel regions, i.e., whether team
- members are allowed to create new teams. The function takes the
+ members are allowed to create new teams. The function takes the
language-specific equivalent of `true' and `false', where `true'
enables dynamic adjustment of team sizes and `false' disables it.
@@ -628,7 +628,7 @@ File: libgomp.info, Node: omp_set_schedule, Next: omp_init_lock, Prev: omp_se
===========================================================
_Description_:
- Sets the runtime scheduling method. The KIND argument can have the
+ Sets the runtime scheduling method. The KIND argument can have the
value `omp_sched_static', `omp_sched_dynamic', `omp_sched_guided'
or `omp_sched_auto'. Except for `omp_sched_auto', the chunk size
is set to the value of MODIFIER if positive, or to the default
@@ -637,7 +637,7 @@ _Description_:
_C/C++_
_Prototype_: `void omp_set_schedule(omp_sched_t *kind, int
- *modifier);'
+ *modifier);'
_Fortran_:
_Interface_: `subroutine omp_set_schedule(kind, modifier)'
@@ -736,7 +736,7 @@ _Description_:
A simple lock about to be unset must have been locked by
`omp_set_lock' or `omp_test_lock' before. In addition, the lock
must be held by the thread calling `omp_unset_lock'. Then, the
- lock becomes unlocked. If one or more threads attempted to set the
+ lock becomes unlocked. If one or more threads attempted to set the
lock before, one of them is chosen to, again, set the lock to
itself.
@@ -760,7 +760,7 @@ File: libgomp.info, Node: omp_destroy_lock, Next: omp_init_nest_lock, Prev: o
=============================================
_Description_:
- Destroy a simple lock. In order to be destroyed, a simple lock
+ Destroy a simple lock. In order to be destroyed, a simple lock
must be in the unlocked state.
_C/C++_:
@@ -862,7 +862,7 @@ _Description_:
`omp_set_nested_lock' or `omp_test_nested_lock' before. In
addition, the lock must be held by the thread calling
`omp_unset_nested_lock'. If the nesting count drops to zero, the
- lock becomes unlocked. If one ore more threads attempted to set
+ lock becomes unlocked. If one ore more threads attempted to set
the lock before, one of them is chosen to, again, set the lock to
itself.
@@ -886,7 +886,7 @@ File: libgomp.info, Node: omp_destroy_nest_lock, Next: omp_get_wtick, Prev: o
==================================================
_Description_:
- Destroy a nested lock. In order to be destroyed, a nested lock
+ Destroy a nested lock. In order to be destroyed, a nested lock
must be in the unlocked state and its nesting count must equal
zero.
@@ -932,7 +932,7 @@ File: libgomp.info, Node: omp_get_wtime, Prev: omp_get_wtick, Up: Runtime Lib
==============================================
_Description_:
- Elapsed wall clock time in seconds. The time is measured per
+ Elapsed wall clock time in seconds. The time is measured per
thread, no guarantee can be made that two distinct threads measure
the same time. Time is measured from some "time in the past",
which is an arbitrary time guaranteed not to change during the
@@ -984,7 +984,7 @@ File: libgomp.info, Node: OMP_DYNAMIC, Next: OMP_MAX_ACTIVE_LEVELS, Up: Envir
_Description_:
Enable or disable the dynamic adjustment of the number of threads
- within a team. The value of this environment variable shall be
+ within a team. The value of this environment variable shall be
`TRUE' or `FALSE'. If undefined, dynamic adjustment is disabled by
default.
@@ -1002,7 +1002,7 @@ File: libgomp.info, Node: OMP_MAX_ACTIVE_LEVELS, Next: OMP_NESTED, Prev: OMP_
_Description_:
Specifies the initial value for the maximum number of nested
- parallel regions. The value of this variable shall be a positive
+ parallel regions. The value of this variable shall be a positive
integer. If undefined, the number of active levels is unlimited.
_See also_:
@@ -1019,7 +1019,7 @@ File: libgomp.info, Node: OMP_NESTED, Next: OMP_NUM_THREADS, Prev: OMP_MAX_AC
_Description_:
Enable or disable nested parallel regions, i.e., whether team
- members are allowed to create new teams. The value of this
+ members are allowed to create new teams. The value of this
environment variable shall be `TRUE' or `FALSE'. If undefined,
nested parallel regions are disabled by default.
@@ -1077,7 +1077,7 @@ File: libgomp.info, Node: OMP_STACKSIZE, Next: OMP_SCHEDULE, Prev: OMP_NUM_TH
_Description_:
Set the default thread stack size in kilobytes, unless the number
is suffixed by `B', `K', `M' or `G', in which case the size is,
- respectively, in bytes, kilobytes, megabytes or gigabytes. This is
+ respectively, in bytes, kilobytes, megabytes or gigabytes. This is
different from `pthread_attr_setstacksize' which gets the number
of bytes as an argument. If the stack size cannot be set due to
system constraints, an error is reported and the initial stack
@@ -1094,8 +1094,8 @@ File: libgomp.info, Node: OMP_THREAD_LIMIT, Next: OMP_WAIT_POLICY, Prev: OMP_
==========================================================
_Description_:
- Specifies the number of threads to use for the whole program. The
- value of this variable shall be a positive integer. If undefined,
+ Specifies the number of threads to use for the whole program. The
+ value of this variable shall be a positive integer. If undefined,
the number of threads is not limited.
_See also_:
@@ -1111,7 +1111,7 @@ File: libgomp.info, Node: OMP_WAIT_POLICY, Next: OMP_PROC_BIND, Prev: OMP_THR
=======================================================
_Description_:
- Specifies whether waiting threads should be active or passive. If
+ Specifies whether waiting threads should be active or passive. If
the value is `PASSIVE', waiting threads should not consume CPU
power while waiting; while the value is `ACTIVE' specifies that
they should.
@@ -1126,7 +1126,7 @@ File: libgomp.info, Node: OMP_PROC_BIND, Next: GOMP_CPU_AFFINITY, Prev: OMP_W
==============================================================
_Description_:
- Specifies whether threads may be moved between processors. If set
+ Specifies whether threads may be moved between processors. If set
to `true', OpenMP theads should not be moved, if set to `false'
they may be moved.
@@ -1143,11 +1143,11 @@ File: libgomp.info, Node: GOMP_CPU_AFFINITY, Next: GOMP_STACKSIZE, Prev: OMP_
========================================================
_Description_:
- Binds threads to specific CPUs. The variable should contain a
- space-separated or comma-separated list of CPUs. This list may
+ Binds threads to specific CPUs. The variable should contain a
+ space-separated or comma-separated list of CPUs. This list may
contain different kinds of entries: either single CPU numbers in
any order, a range of CPUs (M-N) or a range with some stride
- (M-N:S). CPU numbers are zero based. For example,
+ (M-N:S). CPU numbers are zero based. For example,
`GOMP_CPU_AFFINITY="0 3 1-2 4-15:2"' will bind the initial thread
to CPU 0, the second to CPU 3, the third to CPU 1, the fourth to
CPU 2, the fifth to CPU 4, the sixth through tenth to CPUs 6, 8,
@@ -1156,7 +1156,7 @@ _Description_:
CPU 0.
There is no GNU OpenMP library routine to determine whether a CPU
- affinity specification is in effect. As a workaround,
+ affinity specification is in effect. As a workaround,
language-specific library functions, e.g., `getenv' in C or
`GET_ENVIRONMENT_VARIABLE' in Fortran, may be used to query the
setting of the `GOMP_CPU_AFFINITY' environment variable. A defined
@@ -1176,11 +1176,11 @@ File: libgomp.info, Node: GOMP_STACKSIZE, Prev: GOMP_CPU_AFFINITY, Up: Enviro
=====================================================
_Description_:
- Set the default thread stack size in kilobytes. This is different
+ Set the default thread stack size in kilobytes. This is different
from `pthread_attr_setstacksize' which gets the number of bytes as
- an argument. If the stack size cannot be set due to system
+ an argument. If the stack size cannot be set due to system
constraints, an error is reported and the initial stack size is
- left unchanged. If undefined, the stack size is system dependent.
+ left unchanged. If undefined, the stack size is system dependent.
_See also_:
*note OMP_STACKSIZE::
@@ -1344,8 +1344,8 @@ only thing I can figure is that we do something like:
}
where the "x=x" and "y=y" assignments actually have different uids
-for the two variables, i.e. not something you could write directly in
-C. Presumably this only makes sense if the "outer" x and y are global
+for the two variables, i.e. not something you could write directly in
+C. Presumably this only makes sense if the "outer" x and y are global
variables.
COPYPRIVATE would work the same way, except the structure broadcast
@@ -2035,7 +2035,7 @@ TERMS AND CONDITIONS
by modifying or propagating a covered work, you indicate your
acceptance of this License to do so.
- 10. Automatic Licensing of Downstream Recipients.
+ 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
@@ -2063,7 +2063,7 @@ TERMS AND CONDITIONS
using, selling, offering for sale, or importing the Program or any
portion of it.
- 11. Patents.
+ 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.
@@ -2136,7 +2136,7 @@ TERMS AND CONDITIONS
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
- 12. No Surrender of Others' Freedom.
+ 12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order,
agreement or otherwise) that contradict the conditions of this
@@ -2150,7 +2150,7 @@ TERMS AND CONDITIONS
terms and this License would be to refrain entirely from conveying
the Program.
- 13. Use with the GNU Affero General Public License.
+ 13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
@@ -2161,7 +2161,7 @@ TERMS AND CONDITIONS
General Public License, section 13, concerning interaction through
a network will apply to the combination as such.
- 14. Revised Versions of this License.
+ 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new
versions of the GNU General Public License from time to time.
@@ -2188,19 +2188,19 @@ TERMS AND CONDITIONS
author or copyright holder as a result of your choosing to follow a
later version.
- 15. Disclaimer of Warranty.
+ 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
- APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
NECESSARY SERVICING, REPAIR OR CORRECTION.
- 16. Limitation of Liability.
+ 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
@@ -2213,7 +2213,7 @@ TERMS AND CONDITIONS
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
THE POSSIBILITY OF SUCH DAMAGES.
- 17. Interpretation of Sections 15 and 16.
+ 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
@@ -2686,7 +2686,7 @@ GNU Free Documentation License
not permanently reinstated, receipt of a copy of some or all of
the same material does not give you any rights to use it.
- 10. FUTURE REVISIONS OF THIS LICENSE
+ 10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of
the GNU Free Documentation License from time to time. Such new
@@ -2707,7 +2707,7 @@ GNU Free Documentation License
proxy's public statement of acceptance of a version permanently
authorizes you to choose that version for the Document.
- 11. RELICENSING
+ 11. RELICENSING
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
World Wide Web server that publishes copyrightable works and also
@@ -2754,7 +2754,7 @@ notices just after the title page:
Free Documentation License''.
If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
+Texts, replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with
the Front-Cover Texts being LIST, and with the Back-Cover Texts
@@ -2850,72 +2850,72 @@ Library Index

Tag Table:
-Node: Top2025
-Node: Enabling OpenMP3219
-Node: Runtime Library Routines4004
-Node: omp_get_active_level6452
-Node: omp_get_ancestor_thread_num7156
-Node: omp_get_dynamic8083
-Node: omp_get_level8961
-Node: omp_get_max_active_levels9585
-Node: omp_get_max_threads10288
-Node: omp_get_nested11044
-Node: omp_get_num_procs11956
-Node: omp_get_num_threads12474
-Node: omp_get_schedule13556
-Node: omp_get_team_size14477
-Node: omp_get_thread_limit15439
-Node: omp_get_thread_num16062
-Node: omp_in_parallel16930
-Node: omp_in_final17577
-Node: omp_set_dynamic18248
-Node: omp_set_max_active_levels19085
-Node: omp_set_nested19865
-Node: omp_set_num_threads20744
-Node: omp_set_schedule21580
-Node: omp_init_lock22652
-Node: omp_set_lock23303
-Node: omp_test_lock24154
-Node: omp_unset_lock25125
-Node: omp_destroy_lock26051
-Node: omp_init_nest_lock26725
-Node: omp_set_nest_lock27458
-Node: omp_test_nest_lock28369
-Node: omp_unset_nest_lock29398
-Node: omp_destroy_nest_lock30408
-Node: omp_get_wtick31156
-Node: omp_get_wtime31747
-Node: Environment Variables32521
-Node: OMP_DYNAMIC33649
-Node: OMP_MAX_ACTIVE_LEVELS34217
-Node: OMP_NESTED34856
-Node: OMP_NUM_THREADS35460
-Node: OMP_SCHEDULE36148
-Node: OMP_STACKSIZE36842
-Node: OMP_THREAD_LIMIT37668
-Node: OMP_WAIT_POLICY38263
-Node: OMP_PROC_BIND38824
-Node: GOMP_CPU_AFFINITY39382
-Node: GOMP_STACKSIZE40923
-Node: The libgomp ABI41733
-Node: Implementing MASTER construct42532
-Node: Implementing CRITICAL construct42946
-Node: Implementing ATOMIC construct43685
-Node: Implementing FLUSH construct44166
-Node: Implementing BARRIER construct44437
-Node: Implementing THREADPRIVATE construct44706
-Node: Implementing PRIVATE clause45358
-Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses45939
-Node: Implementing REDUCTION clause47263
-Node: Implementing PARALLEL construct47820
-Node: Implementing FOR construct49077
-Node: Implementing ORDERED construct51075
-Node: Implementing SECTIONS construct51381
-Node: Implementing SINGLE construct52147
-Node: Reporting Bugs52809
-Node: Copying53119
-Node: GNU Free Documentation License90684
-Node: Funding115826
-Node: Library Index118351
+Node: Top2039
+Node: Enabling OpenMP3233
+Node: Runtime Library Routines4018
+Node: omp_get_active_level6466
+Node: omp_get_ancestor_thread_num7170
+Node: omp_get_dynamic8097
+Node: omp_get_level8975
+Node: omp_get_max_active_levels9599
+Node: omp_get_max_threads10302
+Node: omp_get_nested11058
+Node: omp_get_num_procs11970
+Node: omp_get_num_threads12488
+Node: omp_get_schedule13570
+Node: omp_get_team_size14491
+Node: omp_get_thread_limit15453
+Node: omp_get_thread_num16076
+Node: omp_in_parallel16944
+Node: omp_in_final17591
+Node: omp_set_dynamic18262
+Node: omp_set_max_active_levels19099
+Node: omp_set_nested19879
+Node: omp_set_num_threads20758
+Node: omp_set_schedule21594
+Node: omp_init_lock22666
+Node: omp_set_lock23317
+Node: omp_test_lock24168
+Node: omp_unset_lock25139
+Node: omp_destroy_lock26065
+Node: omp_init_nest_lock26739
+Node: omp_set_nest_lock27472
+Node: omp_test_nest_lock28383
+Node: omp_unset_nest_lock29412
+Node: omp_destroy_nest_lock30422
+Node: omp_get_wtick31170
+Node: omp_get_wtime31761
+Node: Environment Variables32535
+Node: OMP_DYNAMIC33663
+Node: OMP_MAX_ACTIVE_LEVELS34231
+Node: OMP_NESTED34870
+Node: OMP_NUM_THREADS35474
+Node: OMP_SCHEDULE36162
+Node: OMP_STACKSIZE36856
+Node: OMP_THREAD_LIMIT37682
+Node: OMP_WAIT_POLICY38277
+Node: OMP_PROC_BIND38838
+Node: GOMP_CPU_AFFINITY39396
+Node: GOMP_STACKSIZE40937
+Node: The libgomp ABI41747
+Node: Implementing MASTER construct42546
+Node: Implementing CRITICAL construct42960
+Node: Implementing ATOMIC construct43699
+Node: Implementing FLUSH construct44180
+Node: Implementing BARRIER construct44451
+Node: Implementing THREADPRIVATE construct44720
+Node: Implementing PRIVATE clause45372
+Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses45953
+Node: Implementing REDUCTION clause47277
+Node: Implementing PARALLEL construct47834
+Node: Implementing FOR construct49091
+Node: Implementing ORDERED construct51089
+Node: Implementing SECTIONS construct51395
+Node: Implementing SINGLE construct52161
+Node: Reporting Bugs52823
+Node: Copying53133
+Node: GNU Free Documentation License90698
+Node: Funding115840
+Node: Library Index118365

End Tag Table
diff --git a/gcc-4.8/libgomp/testsuite/libgomp.fortran/crayptr2.f90 b/gcc-4.8/libgomp/testsuite/libgomp.fortran/crayptr2.f90
index 4ad7cf228..c88cc7ab8 100644
--- a/gcc-4.8/libgomp/testsuite/libgomp.fortran/crayptr2.f90
+++ b/gcc-4.8/libgomp/testsuite/libgomp.fortran/crayptr2.f90
@@ -12,7 +12,7 @@
b = 2
c = 3
l = .false.
-!$omp parallel num_threads (3) reduction (.or.:l)
+!$omp parallel num_threads (3) reduction (.or.:l) private (d)
if (omp_get_thread_num () .eq. 0) then
ip = loc (a)
elseif (omp_get_thread_num () .eq. 1) then
diff --git a/gcc-4.8/libiberty/ChangeLog b/gcc-4.8/libiberty/ChangeLog
index df4c305d7..d914fa3b4 100644
--- a/gcc-4.8/libiberty/ChangeLog
+++ b/gcc-4.8/libiberty/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libitm/ChangeLog b/gcc-4.8/libitm/ChangeLog
index b71c0f8f7..9b3ff926e 100644
--- a/gcc-4.8/libitm/ChangeLog
+++ b/gcc-4.8/libitm/ChangeLog
@@ -1,3 +1,66 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-14 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * acinclude.m4: Move s390* case from RTM to HTM check.
+ * configure: Regenerate.
+
+2014-04-09 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * config/generic/asmcfi.h: Also check for
+ __GCC_HAVE_DWARF2_CFI_ASM.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline r204808:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/powerpc/sjlj.S [__powerpc64__ && _CALL_ELF == 2]:
+ (FUNC): Define ELFv2 variant.
+ (END): Likewise.
+ (HIDDEN): Likewise.
+ (CALL): Likewise.
+ (BASE): Likewise.
+ (LR_SAVE): Likewise.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Power8 HTM Support
+ Backport from mainline
+ * acinclude.m4 (LIBITM_CHECK_AS_HTM): New.
+ * configure: Rebuild.
+ * configure.tgt (target_cpu): Add -mhtm to XCFLAGS.
+ * config/powerpc/target.h: Include sys/auxv.h and htmintrin.h.
+ (USE_HTM_FASTPATH): Define.
+ (_TBEGIN_STARTED, _TBEGIN_INDETERMINATE, _TBEGIN_PERSISTENT)
+ (_HTM_RETRIES) New macros.
+ (htm_abort, htm_abort_should_retry, htm_available, htm_begin, htm_init)
+ (htm_begin_success, htm_commit, htm_transaction_active): New functions.
+
+2014-03-26 Jakub Jelinek <jakub@redhat.com>
+
+ * config/linux/futex_bits.h: Include errno.h.
+ (sys_futex0): If syscall returns -1, return -errno rather than
+ -1.
+
+2014-03-03 Peter Bergner <bergner@vnet.ibm.com>
+
+ Backport from mainline
+ 2013-06-20 Torvald Riegel <triegel@redhat.com>
+
+ * query.cc (_ITM_inTransaction): Abort when using the HTM fastpath.
+ (_ITM_getTransactionId): Same.
+ * config/x86/target.h (htm_transaction_active): New.
+
+ 2013-06-20 Torvald Riegel <triegel@redhat.com>
+
+ PR libitm/57643
+ * beginend.cc (gtm_thread::begin_transaction): Handle reentrancy in
+ the HTM fastpath.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
@@ -9,7 +72,6 @@
* configure.tgt: Add -msoft-float to XCFLAGS.
-
2013-08-14 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config/s390/sjlj.S: Add file missing from last commit.
diff --git a/gcc-4.8/libitm/acinclude.m4 b/gcc-4.8/libitm/acinclude.m4
index de1c8f1ec..ca7e0a921 100644
--- a/gcc-4.8/libitm/acinclude.m4
+++ b/gcc-4.8/libitm/acinclude.m4
@@ -121,6 +121,20 @@ i[[34567]]86 | x86_64)
AC_DEFINE(HAVE_AS_RTM, 1, [Define to 1 if the assembler supports RTM.])
fi
;;
+esac])
+
+dnl Check if as supports HTM instructions.
+AC_DEFUN([LIBITM_CHECK_AS_HTM], [
+case "${target_cpu}" in
+powerpc*)
+ AC_CACHE_CHECK([if the assembler supports HTM], libitm_cv_as_htm, [
+ AC_TRY_COMPILE([], [asm("tbegin. 0; tend. 0");],
+ [libitm_cv_as_htm=yes], [libitm_cv_as_htm=no])
+ ])
+ if test x$libitm_cv_as_htm = xyes; then
+ AC_DEFINE(HAVE_AS_HTM, 1, [Define to 1 if the assembler supports HTM.])
+ fi
+ ;;
s390*)
AC_CACHE_CHECK([if the assembler supports HTM], libitm_cv_as_htm, [
save_CFLAGS="$CFLAGS"
diff --git a/gcc-4.8/libitm/beginend.cc b/gcc-4.8/libitm/beginend.cc
index 93e702efc..a3bf54921 100644
--- a/gcc-4.8/libitm/beginend.cc
+++ b/gcc-4.8/libitm/beginend.cc
@@ -197,6 +197,8 @@ GTM::gtm_thread::begin_transaction (uint32_t prop, const gtm_jmpbuf *jb)
// We are executing a transaction now.
// Monitor the writer flag in the serial-mode lock, and abort
// if there is an active or waiting serial-mode transaction.
+ // Note that this can also happen due to an enclosing
+ // serial-mode transaction; we handle this case below.
if (unlikely(serial_lock.is_write_locked()))
htm_abort();
else
@@ -219,6 +221,14 @@ GTM::gtm_thread::begin_transaction (uint32_t prop, const gtm_jmpbuf *jb)
tx = new gtm_thread();
set_gtm_thr(tx);
}
+ // Check whether there is an enclosing serial-mode transaction;
+ // if so, we just continue as a nested transaction and don't
+ // try to use the HTM fastpath. This case can happen when an
+ // outermost relaxed transaction calls unsafe code that starts
+ // a transaction.
+ if (tx->nesting > 0)
+ break;
+ // Another thread is running a serial-mode transaction. Wait.
serial_lock.read_lock(tx);
serial_lock.read_unlock(tx);
// TODO We should probably reset the retry count t here, unless
diff --git a/gcc-4.8/libitm/config/generic/asmcfi.h b/gcc-4.8/libitm/config/generic/asmcfi.h
index f34191763..59d73924b 100644
--- a/gcc-4.8/libitm/config/generic/asmcfi.h
+++ b/gcc-4.8/libitm/config/generic/asmcfi.h
@@ -24,7 +24,7 @@
#include "config.h"
-#ifdef HAVE_AS_CFI_PSEUDO_OP
+#if defined(HAVE_AS_CFI_PSEUDO_OP) && defined(__GCC_HAVE_DWARF2_CFI_ASM)
#define cfi_startproc .cfi_startproc
#define cfi_endproc .cfi_endproc
@@ -50,4 +50,4 @@
#define cfi_restore(r)
#define cfi_undefined(r)
-#endif /* HAVE_AS_CFI_PSEUDO_OP */
+#endif /* HAVE_AS_CFI_PSEUDO_OP && __GCC_HAVE_DWARF2_CFI_ASM */
diff --git a/gcc-4.8/libitm/config/linux/futex_bits.h b/gcc-4.8/libitm/config/linux/futex_bits.h
index 44f89aae2..fd79652e3 100644
--- a/gcc-4.8/libitm/config/linux/futex_bits.h
+++ b/gcc-4.8/libitm/config/linux/futex_bits.h
@@ -31,9 +31,13 @@
#include <unistd.h>
#include <sys/syscall.h>
+#include <errno.h>
static inline long
sys_futex0 (std::atomic<int> *addr, long op, long val)
{
- return syscall (SYS_futex, (int*) addr, op, val, 0);
+ long res = syscall (SYS_futex, (int*) addr, op, val, 0);
+ if (__builtin_expect (res == -1, 0))
+ return -errno;
+ return res;
}
diff --git a/gcc-4.8/libitm/config/powerpc/sjlj.S b/gcc-4.8/libitm/config/powerpc/sjlj.S
index 1f4a100f9..4a0b43dbb 100644
--- a/gcc-4.8/libitm/config/powerpc/sjlj.S
+++ b/gcc-4.8/libitm/config/powerpc/sjlj.S
@@ -26,7 +26,26 @@
#include "asmcfi.h"
-#if defined(__powerpc64__) && defined(__ELF__)
+#if defined(__powerpc64__) && _CALL_ELF == 2
+.macro FUNC name
+ .globl \name
+ .type \name, @function
+\name:
+0: addis 2,12,(.TOC.-0b)@ha
+ addi 2,2,(.TOC.-0b)@l
+ .localentry \name, . - \name
+.endm
+.macro END name
+ .size \name, . - \name
+.endm
+.macro HIDDEN name
+ .hidden \name
+.endm
+.macro CALL name
+ bl \name
+ nop
+.endm
+#elif defined(__powerpc64__) && defined(__ELF__)
.macro FUNC name
.globl \name, .\name
.section ".opd","aw"
@@ -117,6 +136,9 @@ _$0:
#if defined(_CALL_AIXDESC)
# define BASE 6*WS
# define LR_SAVE 2*WS
+#elif _CALL_ELF == 2
+# define BASE 6*WS
+# define LR_SAVE 2*WS
#elif defined(_CALL_SYSV)
# define BASE 2*WS
# define LR_SAVE 1*WS
diff --git a/gcc-4.8/libitm/config/powerpc/target.h b/gcc-4.8/libitm/config/powerpc/target.h
index 67c021884..cf01a5724 100644
--- a/gcc-4.8/libitm/config/powerpc/target.h
+++ b/gcc-4.8/libitm/config/powerpc/target.h
@@ -22,6 +22,10 @@
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
+#ifdef HAVE_SYS_AUXV_H
+#include <sys/auxv.h>
+#endif
+
namespace GTM HIDDEN {
typedef int v128 __attribute__((vector_size(16), may_alias, aligned(16)));
@@ -55,4 +59,82 @@ cpu_relax (void)
__asm volatile ("" : : : "memory");
}
+// Use HTM if it is supported by the system.
+// See gtm_thread::begin_transaction for how these functions are used.
+#if defined (__linux__) \
+ && defined (HAVE_AS_HTM) \
+ && defined (HAVE_GETAUXVAL) \
+ && defined (AT_HWCAP2) \
+ && defined (PPC_FEATURE2_HAS_HTM)
+
+#include <htmintrin.h>
+
+#define USE_HTM_FASTPATH
+
+#define _TBEGIN_STARTED 0
+#define _TBEGIN_INDETERMINATE 1
+#define _TBEGIN_PERSISTENT 2
+
+/* Number of retries for transient failures. */
+#define _HTM_RETRIES 10
+
+static inline bool
+htm_available (void)
+{
+ return (getauxval (AT_HWCAP2) & PPC_FEATURE2_HAS_HTM) ? true : false;
+}
+
+static inline uint32_t
+htm_init (void)
+{
+ // Maximum number of times we try to execute a transaction
+ // as a HW transaction.
+ return htm_available () ? _HTM_RETRIES : 0;
+}
+
+static inline uint32_t
+htm_begin (void)
+{
+ if (__builtin_expect (__builtin_tbegin (0), 1))
+ return _TBEGIN_STARTED;
+
+ if (_TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
+ return _TBEGIN_PERSISTENT;
+
+ return _TBEGIN_INDETERMINATE;
+}
+
+static inline bool
+htm_begin_success (uint32_t begin_ret)
+{
+ return begin_ret == _TBEGIN_STARTED;
+}
+
+static inline void
+htm_commit (void)
+{
+ __builtin_tend (0);
+}
+
+static inline void
+htm_abort (void)
+{
+ __builtin_tabort (0);
+}
+
+static inline bool
+htm_abort_should_retry (uint32_t begin_ret)
+{
+ return begin_ret != _TBEGIN_PERSISTENT;
+}
+
+/* Returns true iff a hardware transaction is currently being executed. */
+static inline bool
+htm_transaction_active (void)
+{
+ return (_HTM_STATE (__builtin_ttest ()) == _HTM_TRANSACTIONAL);
+}
+
+#endif
+
} // namespace GTM
diff --git a/gcc-4.8/libitm/config/x86/target.h b/gcc-4.8/libitm/config/x86/target.h
index 77b627f95..063c09ed9 100644
--- a/gcc-4.8/libitm/config/x86/target.h
+++ b/gcc-4.8/libitm/config/x86/target.h
@@ -125,6 +125,13 @@ htm_abort_should_retry (uint32_t begin_ret)
{
return begin_ret & _XABORT_RETRY;
}
+
+/* Returns true iff a hardware transaction is currently being executed. */
+static inline bool
+htm_transaction_active ()
+{
+ return _xtest() != 0;
+}
#endif
diff --git a/gcc-4.8/libitm/configure b/gcc-4.8/libitm/configure
index 7635a4712..031c19ce3 100644
--- a/gcc-4.8/libitm/configure
+++ b/gcc-4.8/libitm/configure
@@ -7270,7 +7270,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -7295,7 +7295,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -7314,7 +7317,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -11779,7 +11785,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11782 "configure"
+#line 11788 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11885,7 +11891,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11888 "configure"
+#line 11894 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -17362,6 +17368,43 @@ $as_echo "#define HAVE_AS_RTM 1" >>confdefs.h
fi
;;
+esac
+
+case "${target_cpu}" in
+powerpc*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the assembler supports HTM" >&5
+$as_echo_n "checking if the assembler supports HTM... " >&6; }
+if test "${libitm_cv_as_htm+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+asm("tbegin. 0; tend. 0");
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ libitm_cv_as_htm=yes
+else
+ libitm_cv_as_htm=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libitm_cv_as_htm" >&5
+$as_echo "$libitm_cv_as_htm" >&6; }
+ if test x$libitm_cv_as_htm = xyes; then
+
+$as_echo "#define HAVE_AS_HTM 1" >>confdefs.h
+
+ fi
+ ;;
s390*)
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the assembler supports HTM" >&5
$as_echo_n "checking if the assembler supports HTM... " >&6; }
@@ -17399,7 +17442,6 @@ $as_echo "#define HAVE_AS_HTM 1" >>confdefs.h
fi
;;
esac
-LIBITM_CHECK_AS_HTM
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether weak refs work like ELF" >&5
diff --git a/gcc-4.8/libitm/configure.tgt b/gcc-4.8/libitm/configure.tgt
index a20b410e0..507845597 100644
--- a/gcc-4.8/libitm/configure.tgt
+++ b/gcc-4.8/libitm/configure.tgt
@@ -47,7 +47,10 @@ fi
# work out any special compilation flags as necessary.
case "${target_cpu}" in
alpha*) ARCH=alpha ;;
- rs6000 | powerpc*) ARCH=powerpc ;;
+ rs6000 | powerpc*)
+ XCFLAGS="${XCFLAGS} -mhtm"
+ ARCH=powerpc
+ ;;
arm*) ARCH=arm ;;
diff --git a/gcc-4.8/libitm/libitm.info b/gcc-4.8/libitm/libitm.info
index 9429feda4..0c8d5a941 100644
--- a/gcc-4.8/libitm/libitm.info
+++ b/gcc-4.8/libitm/libitm.info
@@ -1,5 +1,5 @@
-This is libitm.info, produced by makeinfo version 4.13 from
-/d/gcc-4.8.1/gcc-4.8.1/libitm/libitm.texi.
+This is libitm.info, produced by makeinfo version 4.12 from
+/space/rguenther/gcc-4.8.3/gcc-4.8.3/libitm/libitm.texi.
Copyright (C) 2011-2013 Free Software Foundation, Inc.
@@ -33,7 +33,7 @@ Introduction
************
This manual documents the usage and internals of libitm, the GNU
-Transactional Memory Library. It provides transaction support for
+Transactional Memory Library. It provides transaction support for
accesses to a process' memory, enabling easy-to-use synchronization of
accesses to shared memory by several threads.
@@ -56,7 +56,7 @@ File: libitm.info, Node: Enabling libitm, Next: C/C++ Language Constructs for
*****************
To activate support for TM in C/C++, the compile-time flag `-fgnu-tm'
-must be specified. This enables TM language-level constructs such as
+must be specified. This enables TM language-level constructs such as
transaction statements (e.g., `__transaction_atomic', *note C/C++
Language Constructs for TM:: for details).
@@ -67,7 +67,7 @@ File: libitm.info, Node: C/C++ Language Constructs for TM, Next: The libitm AB
**********************************
Transactions are supported in C++ and C in the form of transaction
-statements, transaction expressions, and function transactions. In the
+statements, transaction expressions, and function transactions. In the
following example, both `a' and `b' will be read and the difference
will be written to `c', all atomically and isolated from other
transactions:
@@ -87,10 +87,10 @@ Constructs for C++ (v1.1)
of transactions.
The precise semantics of transactions are defined in terms of the
-C++11/C11 memory model (see the specification). Roughly, transactions
+C++11/C11 memory model (see the specification). Roughly, transactions
provide synchronization guarantees that are similar to what would be
guaranteed when using a single global lock as a guard for all
-transactions. Note that like other synchronization constructs in C/C++,
+transactions. Note that like other synchronization constructs in C/C++,
transactions rely on a data-race-free program (e.g., a nontransactional
write that is concurrent with a transactional read to the same memory
location is a data race).
@@ -133,14 +133,14 @@ the structure of this specification.
----------------------------
The memory locations accessed with transactional loads and stores and
-the memory locations whose values are logged must not overlap. This
+the memory locations whose values are logged must not overlap. This
required separation only extends to the scope of the execution of one
transaction including all the executions of all nested transactions.
The compiler must be consistent (within the scope of a single
transaction) about which memory locations are shared and which are not
shared with other threads (i.e., data must be accessed either
-transactionally or nontransactionally). Otherwise, non-write-through TM
+transactionally or nontransactionally). Otherwise, non-write-through TM
algorithms would not work.
For memory locations on the stack, this requirement extends to only
@@ -220,7 +220,7 @@ machine.
point register save/restore is not necessary for any target machine.
`undoLogCode' is not supported and a fatal runtime error will be
-raised if this bit is set. It is not properly defined in the ABI why
+raised if this bit is set. It is not properly defined in the ABI why
barriers other than undo logging are not present; Are they not
necessary (e.g., a transaction operating purely on thread-local data)
or have they been omitted by the compiler because it thinks that some
@@ -258,7 +258,7 @@ used.
`_ITM_rollbackTransaction' is not supported. `_ITM_abortTransaction' is
supported but the abort reasons `exceptionBlockAbort', `TMConflict',
and `userRetry' are not supported. There are no exception blocks in
-general, so the related cases also do not have to be considered. To
+general, so the related cases also do not have to be considered. To
encode `__transaction_cancel [[outer]]', compilers must set the new
`outerAbort' bit (`0x10') additionally to the `userAbort' bit in the
abort reason.
@@ -266,12 +266,12 @@ abort reason.
3.5.9 Committing a transaction
------------------------------
-The exception handling (EH) scheme is different. The Intel ABI requires
+The exception handling (EH) scheme is different. The Intel ABI requires
the `_ITM_tryCommitTransaction' function that will return even when the
commit failed and will have to be matched with calls to either
`_ITM_abortTransaction' or `_ITM_commitTransaction'. In contrast, gcc
relies on transactional wrappers for the functions of the Exception
-Handling ABI and on one additional commit function (shown below). This
+Handling ABI and on one additional commit function (shown below). This
allows the TM to keep track of EH internally and thus it does not have
to embed the cleanup of EH state into the existing EH code in the
program. `_ITM_tryCommitTransaction' is not supported.
@@ -364,11 +364,11 @@ tuning output, but this output is not part of the ABI nor further
defined by it.
`_ITM_dropReferences' is not supported currently because its
-semantics and the intention behind it is not entirely clear. The
+semantics and the intention behind it is not entirely clear. The
specification suggests that this function is necessary because of
certain orderings of data transfer undos and the releasing of memory
-regions (i.e., privatization). However, this ordering is never defined,
-nor is the ordering of dropping references w.r.t. other events.
+regions (i.e., privatization). However, this ordering is never defined,
+nor is the ordering of dropping references w.r.t. other events.
3.5.18 [New] Transactional indirect calls
-----------------------------------------
@@ -404,7 +404,7 @@ indirect calls in transactions:
void *_ITM_getTMCloneSafe (void *function) ITM_REGPARM;
If there is a registered clone for supplied function, both will
-return a pointer to the clone. If not, the first runtime function will
+return a pointer to the clone. If not, the first runtime function will
attempt to switch to serial-irrevocable mode and return the original
pointer, whereas the second will raise a fatal runtime error.
@@ -427,7 +427,7 @@ calls to the original functions with calls to the wrapper functions.
3.7 Sample code
===============
-The code examples might not be correct w.r.t. the current version of
+The code examples might not be correct w.r.t. the current version of
the ABI, especially everything related to exception handling.
3.8 [New] Memory model
@@ -441,8 +441,8 @@ the programming language (e.g., by the C++ TM specification).
For example, if a transactional load is ordered before another
load/store, then the TM runtime must also ensure this ordering when
-accessing shared state. If not, this might break the kind of
-publication safety used in the C++ TM specification. Likewise, the TM
+accessing shared state. If not, this might break the kind of
+publication safety used in the C++ TM specification. Likewise, the TM
runtime must ensure privatization safety.

@@ -471,7 +471,7 @@ serial mode.
--------------------------
The state of TM methods does not change after construction, but they do
-alter the state of transactions that use this method. However, because
+alter the state of transactions that use this method. However, because
per-transaction data gets used by several methods, `gtm_thread' is
responsible for setting an initial state that is useful for all methods.
After that, methods are responsible for resetting/clearing this state
@@ -498,9 +498,9 @@ might not be supported in the future.
4.2 Nesting: flat vs. closed
============================
-We support two different kinds of nesting of transactions. In the case
+We support two different kinds of nesting of transactions. In the case
of _flat nesting_, the nesting structure is flattened and all nested
-transactions are subsumed by the enclosing transaction. In contrast,
+transactions are subsumed by the enclosing transaction. In contrast,
with _closed nesting_, nested transactions that have not yet committed
can be rolled back separately from the enclosing transactions; when they
commit, they are subsumed by the enclosing transaction, and their
@@ -523,11 +523,11 @@ transaction encounters data conflicts during optimistic execution).
=======================
This section documents the locking scheme and rules for all uses of
-locking in libitm. We have to support serial(-irrevocable) mode, which
+locking in libitm. We have to support serial(-irrevocable) mode, which
is implemented using a global lock as explained next (called the
_serial lock_). To simplify the overall design, we use the same lock as
catch-all locking mechanism for other infrequent tasks such as
-(de)registering clone tables or threads. Besides the serial lock, there
+(de)registering clone tables or threads. Besides the serial lock, there
are _per-method-group locks_ that are managed by specific method groups
(i.e., groups of similar TM concurrency control algorithms), and
lock-like constructs for quiescence-based operations such as ensuring
@@ -538,13 +538,13 @@ are either _active transactions_ that do not run in serial mode, _serial
transactions_ (which (are about to) run in serial mode), and management
tasks that do not execute within a transaction but have acquired the
serial mode like a serial transaction would do (e.g., to be able to
-register threads with libitm). Transactions become active as soon as
+register threads with libitm). Transactions become active as soon as
they have successfully used the serial lock to announce this globally
-(*note Serial lock implementation: serial-lock-impl.). Likewise,
+(*note Serial lock implementation: serial-lock-impl.). Likewise,
transactions become serial transactions as soon as they have acquired
the exclusive rights provided by the serial lock (i.e., serial mode,
which also means that there are no other concurrent active or serial
-transactions). Note that active transactions can become serial
+transactions). Note that active transactions can become serial
transactions when they enter serial mode during the runtime of the
transaction.
@@ -555,13 +555,13 @@ Application data is protected by the serial lock if there is a serial
transaction and no concurrently running active transaction (i.e.,
non-serial). Otherwise, application data is protected by the currently
selected method group, which might use per-method-group locks or other
-mechanisms. Also note that application data that is about to be
+mechanisms. Also note that application data that is about to be
privatized might not be allowed to be accessed by nontransactional code
until privatization safety has been ensured; the details of this are
handled by the current method group.
libitm-internal state is either protected by the serial lock or
-accessed through custom concurrent code. The latter applies to the
+accessed through custom concurrent code. The latter applies to the
public/shared part of a transaction object and most typical
method-group-specific state.
@@ -572,12 +572,12 @@ method-group-specific state.
* The current selection of which method group to use.
- * Some method-group-specific data, or invariants of this data. For
+ * Some method-group-specific data, or invariants of this data. For
example, resetting a method group to its initial state is handled
by switching to the same method group, so the serial lock protects
such resetting as well.
In general, such state is immutable whenever there exists an active
-(non-serial) transaction. If there is no active transaction, a serial
+(non-serial) transaction. If there is no active transaction, a serial
transaction (or a thread that is not currently executing a transaction
but has acquired the serial lock) is allowed to modify this state (but
must of course be careful to not surprise the current method group's
@@ -587,9 +587,9 @@ implementation with such modifications).
----------------------------
To prevent deadlocks, locks acquisition must happen in a globally
-agreed-upon order. Note that this applies to other forms of blocking
+agreed-upon order. Note that this applies to other forms of blocking
too, but does not necessarily apply to lock acquisitions that do not
-block (e.g., trylock() calls that do not get retried forever). Note
+block (e.g., trylock() calls that do not get retried forever). Note
that serial transactions are never return back to active transactions
until the transaction has committed. Likewise, active transactions
stay active until they have committed. Per-method-group locks are
@@ -608,7 +608,7 @@ typically also not released before commit.
transaction that is trying that (the latter is ensured by the
serial lock implementation.
- * Method groups must prevent deadlocks on their locks. In
+ * Method groups must prevent deadlocks on their locks. In
particular, they must also be prepared for another active
transaction that has acquired method-group-specific locks but is
blocked during an attempt to upgrade to being a serial
@@ -619,7 +619,7 @@ typically also not released before commit.
There is no single rule for per-method-group blocking because this
-depends on when a TM method might acquire locks. If no active
+depends on when a TM method might acquire locks. If no active
transaction can upgrade to being a serial transaction after it has
acquired per-method-group locks (e.g., when those locks are only
acquired during an attempt to commit), then the TM method does not need
@@ -641,25 +641,25 @@ per-method-group locks, then TM methods need to avoid those deadlocks:
per-method-group lock before doing the wake-up, and only blocking
on this lock using a futex if this bit is not group).
- *TODO*: Can reuse serial lock for gl-*? And if we can, does it make
-sense to introduce further complexity in the serial lock? For gl-*, we
+ *TODO*: Can reuse serial lock for gl-*? And if we can, does it make
+sense to introduce further complexity in the serial lock? For gl-*, we
can really only avoid an abort if we do -wb and -vbv.
4.3.3 Serial lock implementation
--------------------------------
The serial lock implementation is optimized towards assuming that serial
-transactions are infrequent and not the common case. However, the
+transactions are infrequent and not the common case. However, the
performance of entering serial mode can matter because when only few
transactions are run concurrently or if there are few threads, then it
can be efficient to run transactions serially.
The serial lock is similar to a multi-reader-single-writer lock in
that there can be several active transactions but only one serial
-transaction. However, we do want to avoid contention (in the lock
+transaction. However, we do want to avoid contention (in the lock
implementation) between active transactions, so we split up the reader
side of the lock into per-transaction flags that are true iff the
-transaction is active. The exclusive writer side remains a shared
+transaction is active. The exclusive writer side remains a shared
single flag, which is acquired using a CAS, for example. On the
fast-path, the serial lock then works similar to Dekker's algorithm but
with several reader flags that a serial transaction would have to check.
@@ -670,7 +670,7 @@ lock can modify this list).
We want starvation-freedom for the serial lock to allow for using it
to ensure progress for potentially starved transactions (*note Progress
-Guarantees: progress-guarantees. for details). However, this is
+Guarantees: progress-guarantees. for details). However, this is
currently not enforced by the implementation of the serial lock.
Here is pseudo-code for the read/write fast paths of acquiring the
@@ -714,12 +714,12 @@ libitm has to consider the following cases of reentrancy:
* Transaction calls either a transactional wrapper or safe code,
which in turn starts a new transaction: It is not yet defined in
- the specification whether this is allowed. Thus, it is undefined
+ the specification whether this is allowed. Thus, it is undefined
whether libitm supports this.
* Code that starts new transactions might be called from within any
part of libitm: This kind of reentrancy would likely be rather
- complex and can probably be avoided. Therefore, it is not
+ complex and can probably be avoided. Therefore, it is not
supported.
@@ -736,15 +736,15 @@ quiescence does not contribute to deadlocks.
In method groups that need to ensure publication safety explicitly,
active transactions maintain a flag or timestamp in the public/shared
-part of the transaction descriptor. Before blocking, privatizers need
+part of the transaction descriptor. Before blocking, privatizers need
to let the other transactions know that they should wake up the
privatizer.
- *TODO* Ho to implement the waiters? Should those flags be
-per-transaction or at a central place? We want to avoid one wake/wait
+ *TODO* Ho to implement the waiters? Should those flags be
+per-transaction or at a central place? We want to avoid one wake/wait
call per active transactions, so we might want to use either a tree or
combining to reduce the syscall overhead, or rather spin for a long
-amount of time instead of doing blocking. Also, it would be good if
+amount of time instead of doing blocking. Also, it would be good if
only the last transaction that the privatizer waits for would do the
wake-up.
@@ -752,7 +752,7 @@ wake-up.
-------------------------
Transactions that do not make progress when using the current TM method
-will eventually try to execute in serial mode. Thus, the serial lock's
+will eventually try to execute in serial mode. Thus, the serial lock's
progress guarantees determine the progress guarantees of the whole TM.
Obviously, we at least need deadlock-freedom for the serial lock, but
it would also be good to provide starvation-freedom (informally, all
@@ -762,7 +762,7 @@ enough cycles).
However, the scheduling of transactions (e.g., thread scheduling by
the OS) also affects the handling of progress guarantees by the TM.
First, the TM can only guarantee deadlock-freedom if threads do not get
-stopped. Likewise, low-priority threads can starve if they do not get
+stopped. Likewise, low-priority threads can starve if they do not get
scheduled when other high-priority threads get those cycles instead.
If all threads get scheduled eventually, correct lock
@@ -779,7 +779,7 @@ efficient).
higher runtime overhead, we focus on deadlock-freedom right now and
assume that the threads will get scheduled eventually by the OS (but
don't consider threads with different priorities). We should support
-starvation-freedom for serial transactions in the future. Everything
+starvation-freedom for serial transactions in the future. Everything
beyond that is highly related to proper contention management across
all of the TM (including with TM method to choose), and is future work.
@@ -1194,7 +1194,7 @@ GNU Free Documentation License
not permanently reinstated, receipt of a copy of some or all of
the same material does not give you any rights to use it.
- 10. FUTURE REVISIONS OF THIS LICENSE
+ 10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of
the GNU Free Documentation License from time to time. Such new
@@ -1215,7 +1215,7 @@ GNU Free Documentation License
proxy's public statement of acceptance of a version permanently
authorizes you to choose that version for the Document.
- 11. RELICENSING
+ 11. RELICENSING
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
World Wide Web server that publishes copyrightable works and also
@@ -1262,7 +1262,7 @@ notices just after the title page:
Free Documentation License''.
If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
+Texts, replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with
the Front-Cover Texts being LIST, and with the Back-Cover Texts
@@ -1293,15 +1293,15 @@ Index

Tag Table:
-Node: Top1173
-Node: Enabling libitm2076
-Node: C/C++ Language Constructs for TM2470
-Node: The libitm ABI3950
-Ref: txn-code-properties7743
-Node: Internals18018
-Ref: serial-lock-impl28043
-Ref: progress-guarantees32793
-Node: GNU Free Documentation License35067
-Node: Index60208
+Node: Top1187
+Node: Enabling libitm2090
+Node: C/C++ Language Constructs for TM2484
+Node: The libitm ABI3964
+Ref: txn-code-properties7757
+Node: Internals18032
+Ref: serial-lock-impl28057
+Ref: progress-guarantees32807
+Node: GNU Free Documentation License35081
+Node: Index60222

End Tag Table
diff --git a/gcc-4.8/libitm/query.cc b/gcc-4.8/libitm/query.cc
index 5707321f6..39a35b3e3 100644
--- a/gcc-4.8/libitm/query.cc
+++ b/gcc-4.8/libitm/query.cc
@@ -43,6 +43,15 @@ _ITM_libraryVersion (void)
_ITM_howExecuting ITM_REGPARM
_ITM_inTransaction (void)
{
+#if defined(USE_HTM_FASTPATH)
+ // If we use the HTM fastpath, we cannot reliably detect whether we are
+ // in a transaction because this function can be called outside of
+ // a transaction and thus we can't deduce this by looking at just the serial
+ // lock. This function isn't used in practice currently, so the easiest
+ // way to handle it is to just abort.
+ if (htm_fastpath && htm_transaction_active())
+ htm_abort();
+#endif
struct gtm_thread *tx = gtm_thr();
if (tx && (tx->nesting > 0))
{
@@ -58,6 +67,11 @@ _ITM_inTransaction (void)
_ITM_transactionId_t ITM_REGPARM
_ITM_getTransactionId (void)
{
+#if defined(USE_HTM_FASTPATH)
+ // See ITM_inTransaction.
+ if (htm_fastpath && htm_transaction_active())
+ htm_abort();
+#endif
struct gtm_thread *tx = gtm_thr();
return (tx && (tx->nesting > 0)) ? tx->id : _ITM_noTransactionId;
}
diff --git a/gcc-4.8/libjava/ChangeLog b/gcc-4.8/libjava/ChangeLog
index 2701366be..77164387c 100644
--- a/gcc-4.8/libjava/ChangeLog
+++ b/gcc-4.8/libjava/ChangeLog
@@ -1,3 +1,27 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * configure: Regenerate.
+
+2014-04-01 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ Backport from mainline
+ 2014-02-20 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR libgcj/55637
+ * testsuite/libjava.lang/sourcelocation.xfail: New file.
+
+2014-03-11 Uros Bizjak <ubizjak@gmail.com>
+
+ * java/lang/natObject.cc (_Jv_MonitorEnter): Add missing parenthesis
+ around comparison with (address | LOCKED) in JvAssert.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libjava/classpath/ChangeLog b/gcc-4.8/libjava/classpath/ChangeLog
index cb9966d95..21ea4415c 100644
--- a/gcc-4.8/libjava/classpath/ChangeLog
+++ b/gcc-4.8/libjava/classpath/ChangeLog
@@ -1,3 +1,14 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * configure: Regenerate.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libjava/classpath/ChangeLog.gcj b/gcc-4.8/libjava/classpath/ChangeLog.gcj
index 0f9c6fae2..da0b6a3ba 100644
--- a/gcc-4.8/libjava/classpath/ChangeLog.gcj
+++ b/gcc-4.8/libjava/classpath/ChangeLog.gcj
@@ -1,3 +1,9 @@
+2013-11-29 Matthias Klose <doko@ubuntu.com>
+
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c,
+ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c:
+ Fix freetype includes.
+
2013-03-22 Jakub Jelinek <jakub@redhat.com>
PR other/43620
diff --git a/gcc-4.8/libjava/classpath/configure b/gcc-4.8/libjava/classpath/configure
index 23341dfab..c1737fae1 100755
--- a/gcc-4.8/libjava/classpath/configure
+++ b/gcc-4.8/libjava/classpath/configure
@@ -7577,7 +7577,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -7602,7 +7602,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -7621,7 +7624,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -11820,7 +11826,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11823 "configure"
+#line 11829 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11926,7 +11932,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11929 "configure"
+#line 11935 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -25300,7 +25306,7 @@ else
JAVA_TEST=Object.java
CLASS_TEST=Object.class
cat << \EOF > $JAVA_TEST
-/* #line 25303 "configure" */
+/* #line 25309 "configure" */
package java.lang;
public class Object
@@ -25393,7 +25399,7 @@ EOF
if uudecode$EXEEXT Test.uue; then
ac_cv_prog_uudecode_base64=yes
else
- echo "configure: 25396: uudecode had trouble decoding base 64 file 'Test.uue'" >&5
+ echo "configure: 25402: uudecode had trouble decoding base 64 file 'Test.uue'" >&5
echo "configure: failed file was:" >&5
cat Test.uue >&5
ac_cv_prog_uudecode_base64=no
@@ -25421,7 +25427,7 @@ JAVA_TEST=Test.java
CLASS_TEST=Test.class
TEST=Test
cat << \EOF > $JAVA_TEST
-/* [#]line 25424 "configure" */
+/* [#]line 25430 "configure" */
public class Test {
public static void main (String args[]) {
System.exit (0);
@@ -25629,7 +25635,7 @@ if test "x${use_glibj_zip}" = xfalse || \
JAVA_TEST=Test.java
CLASS_TEST=Test.class
cat << \EOF > $JAVA_TEST
- /* #line 25632 "configure" */
+ /* #line 25638 "configure" */
public class Test
{
public static void main(String args)
diff --git a/gcc-4.8/libjava/classpath/doc/cp-tools.info b/gcc-4.8/libjava/classpath/doc/cp-tools.info
index 66606220d..7b9ebafa6 100644
--- a/gcc-4.8/libjava/classpath/doc/cp-tools.info
+++ b/gcc-4.8/libjava/classpath/doc/cp-tools.info
@@ -1,5 +1,5 @@
-This is cp-tools.info, produced by makeinfo version 4.13 from
-/d/gcc-4.8.1/gcc-4.8.1/libjava/classpath/doc/cp-tools.texinfo.
+This is cp-tools.info, produced by makeinfo version 4.12 from
+/space/rguenther/gcc-4.8.3/gcc-4.8.3/libjava/classpath/doc/cp-tools.texinfo.
This file documents the Tools included in a standard distribution of
the GNU Classpath project deliverables.
@@ -343,7 +343,7 @@ signed JAR file.
form is used, or to verify if the second syntax form is used instead.
ALIAS must be a known Alias of a Key Entry in the designated Key
-Store. The private key material associated with this Alias is then used
+Store. The private key material associated with this Alias is then used
for signing the designated .JAR file.
* Menu:
@@ -379,7 +379,7 @@ signing, or verifying, a .JAR file.
`-provider PROVIDER_CLASS_NAME'
A fully qualified class name of a Security Provider to add to the
current list of Security Providers already installed in the JVM
- in-use. If a provider class is specified with this option, and was
+ in-use. If a provider class is specified with this option, and was
successfully added to the runtime -i.e. it was not already
installed- then the tool will attempt to remove this Security
Provider before exiting.
@@ -410,7 +410,7 @@ purposes.
key store -as if the protocol was `file:'.
`-storetype STORE_TYPE'
- Use this option to specify the type of the key store to use. The
+ Use this option to specify the type of the key store to use. The
default value, if this option is omitted, is that of the property
`keystore.type' in the security properties file, which is obtained
by invoking the static method call `getDefaultType()' in
@@ -418,7 +418,7 @@ purposes.
`-storepass PASSWORD'
Use this option to specify the password which will be used to
- unlock the key store. If this option is missing, the User will be
+ unlock the key store. If this option is missing, the User will be
prompted to provide a password.
`-keypass PASSWORD'
@@ -426,7 +426,7 @@ purposes.
unlock the Key Entry associated with the designated Alias.
If this option is omitted, the tool will first attempt to unlock
- the Key Entry using the same password protecting the key store. If
+ the Key Entry using the same password protecting the key store. If
this fails, you will then be prompted to provide a password.
`-sigfile NAME'
@@ -438,12 +438,12 @@ purposes.
characters will be converted to upper-case ones.
If this option is missing, the first eight characters of the ALIAS
- argument will be used. When this is the case, any character in
+ argument will be used. When this is the case, any character in
ALIAS that is outside the permissible range of characters will be
replaced by an underscore.
`-signedjar FILE'
- Use this option to specify the file name of the signed JAR. If
+ Use this option to specify the file name of the signed JAR. If
this option is omitted, then the signed JAR will be named the same
as FILE; i.e., the input JAR file will be replaced with the signed
copy.
@@ -476,7 +476,7 @@ File: cp-tools.info, Node: keytool Tool, Prev: jarsigner Tool, Up: Security T
======================
Cryptographic credentials, in a Java environment, are usually stored in
-a Key Store. The Java SDK specifies a Key Store as a persistent
+a Key Store. The Java SDK specifies a Key Store as a persistent
container of two types of objects: Key Entries and Trusted
Certificates. The security tool `keytool' is a Java-based application
for managing those types of objects.
@@ -484,11 +484,11 @@ for managing those types of objects.
A Key Entry represents the private key part of a key-pair used in
Public-Key Cryptography, and a signed X.509 certificate which
authenticates the public key part for a known entity; i.e. the owner of
-the key-pair. The X.509 certificate itself contains the public key part
+the key-pair. The X.509 certificate itself contains the public key part
of the key-pair.
A Trusted Certificate is a signed X.509 certificate issued by a
-trusted entity. The Trust in this context is relative to the User of
+trusted entity. The Trust in this context is relative to the User of
the `keytool'. In other words, the existence of a Trusted Certificate
in the Key Store processed by a `keytool' command implies that the User
trusts the Issuer of that Trusted Certificate to also sign, and hence
@@ -497,7 +497,7 @@ authenticates, other Subjects the tool may process.
Trusted Certificates are important because they allow the tool to
mechanically construct Chains of Trust starting from one of the Trusted
Certificates in a Key Store and ending with a certificate whose Issuer
-is potentially unknown. A valid chain is an ordered list, starting with
+is potentially unknown. A valid chain is an ordered list, starting with
a Trusted Certificate (also called the anchor), ending with the target
certificate, and satisfying the condition that the Subject of
certificate `#i' is the Issuer of certificate `#i + 1'.
@@ -598,7 +598,7 @@ the `-help' option for that command; e.g.
exit the running JVM.
It is worth noting here that the help messages printed by the tool
-are I18N-ready. This means that if/when the contents of the tool's
+are I18N-ready. This means that if/when the contents of the tool's
Message Bundle properties file are available in languages other than
English, you may see those messages in that language.
@@ -613,9 +613,9 @@ described here to reduce redundancy.
`-alias ALIAS'
Every entry, be it a Key Entry or a Trusted Certificate, in a key
- store is uniquely identified by a user-defined ALIAS string. Use
+ store is uniquely identified by a user-defined ALIAS string. Use
this option to specify the ALIAS to use when referring to an entry
- in the key store. Unless specified otherwise, a default value of
+ in the key store. Unless specified otherwise, a default value of
`mykey' shall be used when this option is omitted from the command
line.
@@ -636,7 +636,7 @@ described here to reduce redundancy.
this option is omitted from the command line.
`-storetype STORE_TYPE'
- Use this option to specify the type of the key store to use. The
+ Use this option to specify the type of the key store to use. The
default value, if this option is omitted, is that of the property
`keystore.type' in the security properties file, which is obtained
by invoking the static method call `getDefaultType()' in
@@ -662,16 +662,16 @@ described here to reduce redundancy.
`-provider PROVIDER_CLASS_NAME'
A fully qualified class name of a Security Provider to add to the
current list of Security Providers already installed in the JVM
- in-use. If a provider class is specified with this option, and was
+ in-use. If a provider class is specified with this option, and was
successfully added to the runtime -i.e. it was not already
installed- then the tool will attempt to removed this Security
Provider before exiting.
`-file FILE'
- Use this option to designate a file to use with a command. When
+ Use this option to designate a file to use with a command. When
specified with this option, the value is expected to be the fully
- qualified path of a file accessible by the File System. Depending
- on the command, the file may be used as input or as output. When
+ qualified path of a file accessible by the File System. Depending
+ on the command, the file may be used as input or as output. When
this option is omitted from the command line, `STDIN' will be used
instead, as the source of input, and `STDOUT' will be used instead
as the output destination.
@@ -689,8 +689,8 @@ File: cp-tools.info, Node: Distinguished Names, Next: Add/Update Commands, Pr
A Distinguished Name (or DN) MUST be supplied with some of the
`COMMAND's using a `-dname' option. The syntax of a valid value for
-this option MUST follow RFC-2253 specifications. Namely the following
-components (with their accepted meaning) will be recognized. Note that
+this option MUST follow RFC-2253 specifications. Namely the following
+components (with their accepted meaning) will be recognized. Note that
the component name is case-insensitive:
CN
@@ -712,8 +712,8 @@ C
The 2-letter Country identifier; e.g. `AU'
When specified with a `-dname' option, each pair of component/value
-will be separated from the other with a comma. Each component and value
-pair MUST be separated by an equal sign. For example, the following is
+will be separated from the other with a comma. Each component and value
+pair MUST be separated by an equal sign. For example, the following is
a valid DN value:
CN=host.domain.com, O=The Sample Company, L=Sydney, ST=NSW, C=AU
@@ -762,16 +762,16 @@ chain and will be saved in the key store.
`-sigalg ALGORITHM'
The canonical name of the digital signature algorithm to use for
- signing certificates. If this option is omitted, a default value
+ signing certificates. If this option is omitted, a default value
will be chosen based on the type of the key-pair; i.e., the
- algorithm that ends up being used by the -keyalg option. If the
+ algorithm that ends up being used by the -keyalg option. If the
key-pair generation algorithm is `DSA', the value for the
signature algorithm will be `SHA1withDSA'. If on the other hand
the key-pair generation algorithm is `RSA', then the tool will use
`MD5withRSA' as the signature algorithm.
`-dname NAME'
- This a mandatory value for the command. If no value is specified
+ This a mandatory value for the command. If no value is specified
-i.e. the `-dname' option is omitted- the tool will prompt you to
enter a Distinguished Name to use as both the Owner and Issuer of
the generated self-signed certificate.
@@ -830,7 +830,7 @@ confirmation.
If Alias exists in the key store, the tool will treat the
certificate(s) read from the input source as a Certificate Reply, which
can be a chain of certificates, that eventually would replace the chain
-of certificates associated with the Key Entry of that Alias. The
+of certificates associated with the Key Entry of that Alias. The
substitution of the certificates only occurs if a chain-of-trust can be
established between the bottom certificate of the chain read from the
input file and the Trusted Certificates already present in the key
@@ -899,9 +899,9 @@ option was omitted).
`-sigalg ALGORITHM'
The canonical name of the digital signature algorithm to use for
- signing the certificate. If this option is omitted, a default
+ signing the certificate. If this option is omitted, a default
value will be chosen based on the type of the private key
- associated with the designated Alias. If the private key is a
+ associated with the designated Alias. If the private key is a
`DSA' one, the value for the signature algorithm will be
`SHA1withDSA'. If on the other hand the private key is an `RSA'
one, then the tool will use `MD5withRSA' as the signature
@@ -909,7 +909,7 @@ option was omitted).
`-dname NAME'
Use this option to specify the Distinguished Name of the newly
- generated self-signed certificate. If this option is omitted, the
+ generated self-signed certificate. If this option is omitted, the
existing Distinguished Name of the base certificate in the chain
associated with the designated Alias will be used instead.
@@ -923,7 +923,7 @@ option was omitted).
unlock the Key Entry associated with the designated Alias.
If this option is omitted, the tool will first attempt to unlock
- the Key Entry using the same password protecting the key store. If
+ the Key Entry using the same password protecting the key store. If
this fails, you will then be prompted to provide a password.
`-storetype STORE_TYPE'
@@ -1036,7 +1036,7 @@ the destination should look something like the following:
IMPORTANT: Some documentation (e.g. RSA examples) claims that the
`Attributes' field, in the CSR is `OPTIONAL' while RFC-2986 implies the
-opposite. This implementation considers this field, by default, as
+opposite. This implementation considers this field, by default, as
`OPTIONAL', unless the option `-attributes' is specified on the command
line.
@@ -1045,9 +1045,9 @@ line.
`-sigalg ALGORITHM'
The canonical name of the digital signature algorithm to use for
- signing the certificate. If this option is omitted, a default
+ signing the certificate. If this option is omitted, a default
value will be chosen based on the type of the private key
- associated with the designated Alias. If the private key is a
+ associated with the designated Alias. If the private key is a
`DSA' one, the value for the signature algorithm will be
`SHA1withDSA'. If on the other hand the private key is an `RSA'
one, then the tool will use `MD5withRSA' as the signature
@@ -1061,7 +1061,7 @@ line.
unlock the Key Entry associated with the designated Alias.
If this option is omitted, the tool will first attempt to unlock
- the Key Entry using the same password protecting the key store. If
+ the Key Entry using the same password protecting the key store. If
this fails, you will then be prompted to provide a password.
`-storetype STORE_TYPE'
@@ -1117,9 +1117,9 @@ option is specified instead).
Use RFC-1421 specifications when encoding the output.
`-v'
- Output the certificate in binary DER encoding. This is the default
+ Output the certificate in binary DER encoding. This is the default
output format of the command if neither `-rfc' nor `-v' options
- were detected on the command line. If both this option and the
+ were detected on the command line. If both this option and the
`-rfc' option are detected on the command line, the tool will opt
for the RFC-1421 style encoding.
@@ -1167,7 +1167,7 @@ certificate, unless either the `-rfc' or the `-v' option is specified.
Use RFC-1421 specifications when encoding the output.
`-v'
- Output the certificate in human-readable format. If both this
+ Output the certificate in human-readable format. If both this
option and the `-rfc' option are detected on the command line, the
tool will opt for the human-readable form and will not abort the
command.
@@ -1224,7 +1224,7 @@ possibly a new password.
unlock the Key Entry associated with the designated Alias.
If this option is omitted, the tool will first attempt to unlock
- the Key Entry using the same password protecting the key store. If
+ the Key Entry using the same password protecting the key store. If
this fails, you will then be prompted to provide a password.
`-new PASSWORD'
@@ -1291,7 +1291,7 @@ material of a designated Key Entry.
unlock the Key Entry associated with the designated Alias.
If this option is omitted, the tool will first attempt to unlock
- the Key Entry using the same password protecting the key store. If
+ the Key Entry using the same password protecting the key store. If
this fails, you will then be prompted to provide a password.
`-new PASSWORD'
@@ -1745,7 +1745,7 @@ File: cp-tools.info, Node: gjdoc Tool, Prev: tnameserv Tool, Up: Other Tools
*******************************
Gjdoc can be used in two ways: as a stand-alone documentation tool, or
-as a driver for a user-specified Doclet. *Note Other Doclets::.
+as a driver for a user-specified Doclet. *Note Other Doclets::.
In the default mode, Gjdoc will use the Standard Doclet `HtmlDoclet'
to generate a set of HTML pages. The canonical usage is:
@@ -1966,7 +1966,7 @@ File: cp-tools.info, Node: Source Format Options, Next: Interlinking Options,
This option should be specified when applying `gjdoc' to source
code commented in a non-latin language for which the default first
- sentence detector does not work. For all other cases, the default
+ sentence detector does not work. For all other cases, the default
(do not use BreakIterator) produces better results at the time of
this writing.
@@ -1983,7 +1983,7 @@ File: cp-tools.info, Node: Interlinking Options, Next: Output Control Options,
source set. Use this option to additionally create hyperlinks to
classes covered by the specified documentation set.
- URL should be the root URL of the other documentation set. For
+ URL should be the root URL of the other documentation set. For
example, to add hyperlinks to GNU Classpath, specify the following:
-link http://developer.classpath.org/doc/
@@ -2141,7 +2141,7 @@ File: cp-tools.info, Node: Generation Options, Next: Decoration Options, Prev
of a class documentation page.
`-use'
- Generate a page with cross-reference information. By default, this
+ Generate a page with cross-reference information. By default, this
page is not generated.
The cross-reference information can be accessed by clicking on the
@@ -2468,7 +2468,7 @@ File: cp-tools.info, Node: Output Control Options, Next: Generation Options,
identifiers.
`-charset CHARSET'
- _Deprecated._ Override the specified encoding in output XHTML
+ _Deprecated._ Override the specified encoding in output XHTML
files with the one given by `charset'.
If this option is not given, the encoding specification in output
@@ -2805,7 +2805,7 @@ following benefits:
If you derive from `AbstractDoclet', there are a number of things
you need to take care of:
- *
+ *
you should not implement the `start(RootDoc)' method as it is
already defined by `AbstractDoclet' so that it can care about parsing
the options.
@@ -2999,16 +2999,16 @@ templates they use at runtime to generate the message text itself,
depending on the locale in use at the time.
The Resource Bundles these tools use are essentially Java Properties
-files consisting of a set of Name/Value pairs. The Name is the Property
+files consisting of a set of Name/Value pairs. The Name is the Property
Name and the Value is a substitution string that is used when the code
-references the associated Name. For example the following is a line in
+references the associated Name. For example the following is a line in
a Resource Bundle used by the `keytool' Tool:
Command.23=A correct key password MUST be provided
When the tool needs to signal a mandatory but missing key password,
it would reference the property named `Command.23' and the message "`A
-correct key password MUST be provided'" will be used instead. This
+correct key password MUST be provided'" will be used instead. This
indirect referencing of "resources" permits replacing, as late as
possible, the English strings with strings in other languages, provided
of course Resource Bundles in those languages are provided.
@@ -3027,12 +3027,12 @@ VV
The complete list of language codes can be found at Code for the
representation of names of languages
-(http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt). A similar
+(http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt). A similar
list for the region codes can be found at ISO 3166 Codes (Countries)
(http://userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html).
The location of the Resource Bundles for the GNU Classpath Tools is
-specific to each tool. The next table shows where these files are found
+specific to each tool. The next table shows where these files are found
in a standard GNU Classpath distribution:
`jarsigner'
@@ -3042,7 +3042,7 @@ in a standard GNU Classpath distribution:
`gnu/classpath/tools/keytool'
The collection of Resource Bundles in a location act as an inverted
-tree with a parent-child relationship. For example suppose in the
+tree with a parent-child relationship. For example suppose in the
`gnu/classpath/tools/keytool' there are 3 message bundles named:
1. `messages.properties'
@@ -3052,7 +3052,7 @@ tree with a parent-child relationship. For example suppose in the
3. `messages_fr_FR.properties'
In the above example, bundle #1 will act as the parent of bundle #2,
-which in turn will act as the parent for bundle #3. This ordering is
+which in turn will act as the parent for bundle #3. This ordering is
used by the Java runtime to choose which file to load based on the set
Locale. For example if the Locale is `fr_CH', `messages_fr.properties'
will be used because (a) `messages_fr_CH.properties' does not exist,
@@ -3067,7 +3067,7 @@ the hierarchy.
You can see from the examples above that `messages.properties' is
the safety net that the Java runtime falls back to when failing to find
a specific bundle and its parent(s). This file is always provided with
-the Tool. In time, more localized versions will be included to cater
+the Tool. In time, more localized versions will be included to cater
for other languages.
In the meantime, if you are willing to contribute localized versions
@@ -3099,93 +3099,93 @@ alter text between curly braces.

Tag Table:
-Node: Top1150
-Node: Applet Tools6870
-Node: appletviewer Tool7443
-Node: gcjwebplugin10558
-Node: Security Tools10870
-Node: jarsigner Tool11523
-Node: Common jarsigner Options12571
-Node: Signing Options13886
-Node: Verification Options16469
-Node: keytool Tool17057
-Node: Getting Help21485
-Node: Common keytool Options22229
-Ref: alias22502
-Ref: keyalg22884
-Ref: keysize23114
-Ref: validity23379
-Ref: storetype23594
-Ref: storepass23925
-Ref: keystore24122
-Ref: provider24665
-Ref: file25072
-Ref: verbose25543
-Node: Distinguished Names25635
-Ref: dn25829
-Node: Add/Update Commands26892
-Node: Command -genkey27420
-Node: Command -import29829
-Node: Command -selfcert32973
-Node: Command -cacert35152
-Node: Command -identitydb36205
-Node: Export Commands36863
-Node: Command -certreq37179
-Node: Command -export39585
-Node: Display Commands40782
-Node: Command -list41114
-Node: Command -printcert42247
-Node: Management Commands42631
-Node: Command -keyclone43063
-Node: Command -storepasswd44466
-Node: Command -keypasswd45195
-Node: Command -delete46389
-Node: Other Tools47012
-Node: jar Tool47854
-Node: javah Tool49246
-Node: gcjh Tool50465
-Node: native2ascii Tool51578
-Node: orbd Tool52039
-Node: serialver Tool52769
-Node: rmid Tool53238
-Node: rmiregistry Tool54179
-Node: tnameserv Tool55019
-Node: gjdoc Tool55643
-Node: Invoking the Standard Doclet57631
-Node: Option Summary by Type58786
-Node: Source Set Options61216
-Node: Source Format Options63080
-Node: Interlinking Options64594
-Node: Generation Options67371
-Node: Taglet Options73468
-Node: Doclet Options75695
-Node: Decoration Options77271
-Node: Output Control Options81362
-Node: Verbosity Options84894
-Node: Virtual Machine Options85240
-Node: Invoking a Custom Doclet86636
-Node: Gjdoc Option Summary87311
-Node: Other Doclets87491
-Node: Built-in Doclets87719
-Node: Using TexiDoclet87974
-Node: Using XmlDoclet88196
-Node: Using IspellDoclet88421
-Node: Using DebugDoclet88649
-Node: Third-party Doclets88849
-Node: DocBook Doclet89065
-Node: PDFDoclet89208
-Node: JUnitDoclet89361
-Node: Gjdoc Concepts89495
-Node: Taglets89739
-Node: Writing Doclets89922
-Node: Doclet Invocation Interface90262
-Node: Using AbstractDoclet91054
-Node: GNU Doclet SPI94048
-Node: XHTML Fragments95520
-Node: First Sentence Detector96953
-Node: Adding Custom Resources98715
-Node: I18N Issues100411
-Node: Language Resources100913
-Node: Message Formats104577
+Node: Top1164
+Node: Applet Tools6884
+Node: appletviewer Tool7457
+Node: gcjwebplugin10572
+Node: Security Tools10884
+Node: jarsigner Tool11537
+Node: Common jarsigner Options12585
+Node: Signing Options13900
+Node: Verification Options16483
+Node: keytool Tool17071
+Node: Getting Help21499
+Node: Common keytool Options22243
+Ref: alias22516
+Ref: keyalg22898
+Ref: keysize23128
+Ref: validity23393
+Ref: storetype23608
+Ref: storepass23939
+Ref: keystore24136
+Ref: provider24679
+Ref: file25086
+Ref: verbose25557
+Node: Distinguished Names25649
+Ref: dn25843
+Node: Add/Update Commands26906
+Node: Command -genkey27434
+Node: Command -import29843
+Node: Command -selfcert32987
+Node: Command -cacert35166
+Node: Command -identitydb36219
+Node: Export Commands36877
+Node: Command -certreq37193
+Node: Command -export39599
+Node: Display Commands40796
+Node: Command -list41128
+Node: Command -printcert42261
+Node: Management Commands42645
+Node: Command -keyclone43077
+Node: Command -storepasswd44480
+Node: Command -keypasswd45209
+Node: Command -delete46403
+Node: Other Tools47026
+Node: jar Tool47868
+Node: javah Tool49260
+Node: gcjh Tool50479
+Node: native2ascii Tool51592
+Node: orbd Tool52053
+Node: serialver Tool52783
+Node: rmid Tool53252
+Node: rmiregistry Tool54193
+Node: tnameserv Tool55033
+Node: gjdoc Tool55657
+Node: Invoking the Standard Doclet57645
+Node: Option Summary by Type58800
+Node: Source Set Options61230
+Node: Source Format Options63094
+Node: Interlinking Options64608
+Node: Generation Options67385
+Node: Taglet Options73482
+Node: Doclet Options75709
+Node: Decoration Options77285
+Node: Output Control Options81376
+Node: Verbosity Options84908
+Node: Virtual Machine Options85254
+Node: Invoking a Custom Doclet86650
+Node: Gjdoc Option Summary87325
+Node: Other Doclets87505
+Node: Built-in Doclets87733
+Node: Using TexiDoclet87988
+Node: Using XmlDoclet88210
+Node: Using IspellDoclet88435
+Node: Using DebugDoclet88663
+Node: Third-party Doclets88863
+Node: DocBook Doclet89079
+Node: PDFDoclet89222
+Node: JUnitDoclet89375
+Node: Gjdoc Concepts89509
+Node: Taglets89753
+Node: Writing Doclets89936
+Node: Doclet Invocation Interface90276
+Node: Using AbstractDoclet91068
+Node: GNU Doclet SPI94062
+Node: XHTML Fragments95534
+Node: First Sentence Detector96967
+Node: Adding Custom Resources98729
+Node: I18N Issues100425
+Node: Language Resources100927
+Node: Message Formats104591

End Tag Table
diff --git a/gcc-4.8/libjava/classpath/doc/gappletviewer.1 b/gcc-4.8/libjava/classpath/doc/gappletviewer.1
index 992ecaf16..7fe673835 100644
--- a/gcc-4.8/libjava/classpath/doc/gappletviewer.1
+++ b/gcc-4.8/libjava/classpath/doc/gappletviewer.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GAPPLETVIEWER 1"
-.TH GAPPLETVIEWER 1 "2013-05-31" "0.99.1-pre" "GNU"
+.TH GAPPLETVIEWER 1 "2014-05-22" "0.99.1-pre" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/libjava/classpath/doc/gjar.1 b/gcc-4.8/libjava/classpath/doc/gjar.1
index 1156c1c6a..105c76f88 100644
--- a/gcc-4.8/libjava/classpath/doc/gjar.1
+++ b/gcc-4.8/libjava/classpath/doc/gjar.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GJAR 1"
-.TH GJAR 1 "2013-05-31" "0.99.1-pre" "GNU"
+.TH GJAR 1 "2014-05-22" "0.99.1-pre" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/libjava/classpath/doc/gjarsigner.1 b/gcc-4.8/libjava/classpath/doc/gjarsigner.1
index 02ee77cf1..c212e7830 100644
--- a/gcc-4.8/libjava/classpath/doc/gjarsigner.1
+++ b/gcc-4.8/libjava/classpath/doc/gjarsigner.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GJARSIGNER 1"
-.TH GJARSIGNER 1 "2013-05-31" "0.99.1-pre" "GNU"
+.TH GJARSIGNER 1 "2014-05-22" "0.99.1-pre" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/libjava/classpath/doc/gjavah.1 b/gcc-4.8/libjava/classpath/doc/gjavah.1
index 4fac63f69..d55f388e3 100644
--- a/gcc-4.8/libjava/classpath/doc/gjavah.1
+++ b/gcc-4.8/libjava/classpath/doc/gjavah.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GJAVAH 1"
-.TH GJAVAH 1 "2013-05-31" "0.99.1-pre" "GNU"
+.TH GJAVAH 1 "2014-05-22" "0.99.1-pre" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/libjava/classpath/doc/gjdoc.1 b/gcc-4.8/libjava/classpath/doc/gjdoc.1
index 45b8a047c..8177548e2 100644
--- a/gcc-4.8/libjava/classpath/doc/gjdoc.1
+++ b/gcc-4.8/libjava/classpath/doc/gjdoc.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GJDOC 1"
-.TH GJDOC 1 "2013-05-31" "0.99.1-pre" "GNU"
+.TH GJDOC 1 "2014-05-22" "0.99.1-pre" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -181,7 +189,7 @@ To learn more about running Doclets other than the Standard Doclet,
refer to the manual.
.SH "OPTIONS"
.IX Header "OPTIONS"
-.SS "Option Summary by Type"
+.Sh "Option Summary by Type"
.IX Subsection "Option Summary by Type"
Here is a summary of all the options of both Gjdoc and the Standard
Doclet, grouped by type. Explanations are in the following sections.
@@ -223,7 +231,7 @@ Doclet, grouped by type. Explanations are in the following sections.
.IP "\fIVirtual Machine Options\fR" 4
.IX Item "Virtual Machine Options"
\&\fB\-classpath \-bootclasspath \-J\fR \fIvmopt\fR
-.SS "Selecting which Source Files to Process"
+.Sh "Selecting which Source Files to Process"
.IX Subsection "Selecting which Source Files to Process"
.IP "\fB\-s\fR \fIpathlist\fR" 4
.IX Item "-s pathlist"
@@ -273,7 +281,7 @@ Process all classes in the given Java packages.
.IP "\fIsourcefiles\fR\fB...\fR" 4
.IX Item "sourcefiles..."
Process the classes in the given Java source files.
-.SS "Specifying the Format of Input Files"
+.Sh "Specifying the Format of Input Files"
.IX Subsection "Specifying the Format of Input Files"
.IP "\fB\-source\fR \fIrelease\fR" 4
.IX Item "-source release"
@@ -309,7 +317,7 @@ source code commented in a non-latin language for which the default
first sentence detector does not work. For all other cases, the
default (do not use BreakIterator) produces better results at the time
of this writing.
-.SS "Interlinking with other Documentation Sets"
+.Sh "Interlinking with other Documentation Sets"
.IX Subsection "Interlinking with other Documentation Sets"
.IP "\fB\-link\fR \fIurl\fR" 4
.IX Item "-link url"
@@ -372,7 +380,7 @@ you place your mouse pointer over it in the \s-1HTML\s0 documentation.
Omit package name qualifier from all class names.
.Sp
Specify this option to omit package name qualifiers altogether,
-.SS "Selecting which Information to Generate"
+.Sh "Selecting which Information to Generate"
.IX Subsection "Selecting which Information to Generate"
.IP "\fB\-public\fR" 4
.IX Item "-public"
@@ -529,7 +537,7 @@ directory names.
This option only makes sense if \fB\-docfilessubdirs\fR is also
specified. In this case, any sub-directory located directly beneath a
\&\fIdoc-files\fR directory is omitted if listed.
-.SS "Custom Documentation Tags"
+.Sh "Custom Documentation Tags"
.IX Subsection "Custom Documentation Tags"
.IP "\fB\-tagletpath\fR \fIpathlist\fR" 4
.IX Item "-tagletpath pathlist"
@@ -618,7 +626,7 @@ Then the \s-1HTML\s0 output will contain something like
\& $Id: cp\-tools.texinfo,v 1.9 2012\-03\-07 15:27:27 gnu_andrew Exp $
.Ve
.RE
-.SS "Running Other Doclets"
+.Sh "Running Other Doclets"
.IX Subsection "Running Other Doclets"
.IP "\fB\-docletpath\fR \fIpathlist\fR" 4
.IX Item "-docletpath pathlist"
@@ -657,7 +665,7 @@ feedback when successfully running third-party applets.
This option can be specified multiple times, in which case all doclets
are executed with the same information tree exposed via the Doclet \s-1API\s0
for each Doclet run.
-.SS "Adding Information to the Output"
+.Sh "Adding Information to the Output"
.IX Subsection "Adding Information to the Output"
.IP "\fB\-windowtitle\fR \fItext\fR" 4
.IX Item "-windowtitle text"
@@ -765,7 +773,7 @@ This option is currently ignored.
.Sp
When implemented, it will use the \s-1XHTML\s0 fragment in \fIfile\fR for the
help page contents instead of the default help text.
-.SS "Controlling the Output."
+.Sh "Controlling the Output."
.IX Subsection "Controlling the Output."
.IP "\fB\-d\fR \fIdirectory\fR" 4
.IX Item "-d directory"
@@ -846,7 +854,7 @@ available at a certain \s-1URL\s0, you should use this option to specify this
.Sp
This can help avoid certain redirect attacks used by spammers, and it
can be helpful for certain web clients.
-.SS "Verbosity Options"
+.Sh "Verbosity Options"
.IX Subsection "Verbosity Options"
.IP "\fB\-quiet\fR" 4
.IX Item "-quiet"
@@ -856,7 +864,7 @@ Suppress all output except for warnings and error messages.
Be very verbose about what \fBgjdoc\fR is doing.
.Sp
This option is currently ignored.
-.SS "Virtual Machine Options"
+.Sh "Virtual Machine Options"
.IX Subsection "Virtual Machine Options"
Sun's \fBjavadoc\fR tool seems to be based on \fBjavac\fR and
as such it seems to operate on the \s-1VM\s0 level. \fBgjdoc\fR, in
diff --git a/gcc-4.8/libjava/classpath/doc/gkeytool.1 b/gcc-4.8/libjava/classpath/doc/gkeytool.1
index ae582c471..88e97f663 100644
--- a/gcc-4.8/libjava/classpath/doc/gkeytool.1
+++ b/gcc-4.8/libjava/classpath/doc/gkeytool.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GKEYTOOL 1"
-.TH GKEYTOOL 1 "2013-05-31" "0.99.1-pre" "GNU"
+.TH GKEYTOOL 1 "2014-05-22" "0.99.1-pre" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/libjava/classpath/doc/gnative2ascii.1 b/gcc-4.8/libjava/classpath/doc/gnative2ascii.1
index 770808e9d..26633db60 100644
--- a/gcc-4.8/libjava/classpath/doc/gnative2ascii.1
+++ b/gcc-4.8/libjava/classpath/doc/gnative2ascii.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GNATIVE2ASCII 1"
-.TH GNATIVE2ASCII 1 "2013-05-31" "0.99.1-pre" "GNU"
+.TH GNATIVE2ASCII 1 "2014-05-22" "0.99.1-pre" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/libjava/classpath/doc/gorbd.1 b/gcc-4.8/libjava/classpath/doc/gorbd.1
index dc3d23b23..968e4acbc 100644
--- a/gcc-4.8/libjava/classpath/doc/gorbd.1
+++ b/gcc-4.8/libjava/classpath/doc/gorbd.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GORBD 1"
-.TH GORBD 1 "2013-05-31" "0.99.1-pre" "GNU"
+.TH GORBD 1 "2014-05-22" "0.99.1-pre" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/libjava/classpath/doc/grmid.1 b/gcc-4.8/libjava/classpath/doc/grmid.1
index 04aaa285f..732bd6d77 100644
--- a/gcc-4.8/libjava/classpath/doc/grmid.1
+++ b/gcc-4.8/libjava/classpath/doc/grmid.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GRMID 1"
-.TH GRMID 1 "2013-05-31" "0.99.1-pre" "GNU"
+.TH GRMID 1 "2014-05-22" "0.99.1-pre" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/libjava/classpath/doc/grmiregistry.1 b/gcc-4.8/libjava/classpath/doc/grmiregistry.1
index fa84a7156..abaa502c0 100644
--- a/gcc-4.8/libjava/classpath/doc/grmiregistry.1
+++ b/gcc-4.8/libjava/classpath/doc/grmiregistry.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GRMIREGISTRY 1"
-.TH GRMIREGISTRY 1 "2013-05-31" "0.99.1-pre" "GNU"
+.TH GRMIREGISTRY 1 "2014-05-22" "0.99.1-pre" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/libjava/classpath/doc/gserialver.1 b/gcc-4.8/libjava/classpath/doc/gserialver.1
index e0674b212..db04fcf72 100644
--- a/gcc-4.8/libjava/classpath/doc/gserialver.1
+++ b/gcc-4.8/libjava/classpath/doc/gserialver.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GSERIALVER 1"
-.TH GSERIALVER 1 "2013-05-31" "0.99.1-pre" "GNU"
+.TH GSERIALVER 1 "2014-05-22" "0.99.1-pre" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/libjava/classpath/doc/gtnameserv.1 b/gcc-4.8/libjava/classpath/doc/gtnameserv.1
index 389ef12ff..e1742ae83 100644
--- a/gcc-4.8/libjava/classpath/doc/gtnameserv.1
+++ b/gcc-4.8/libjava/classpath/doc/gtnameserv.1
@@ -1,7 +1,15 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
@@ -45,14 +53,14 @@
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-. nr % 0
+. nr % 0
. rr F
.\}
.el \{\
@@ -124,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "GTNAMESERV 1"
-.TH GTNAMESERV 1 "2013-05-31" "0.99.1-pre" "GNU"
+.TH GTNAMESERV 1 "2014-05-22" "0.99.1-pre" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/gcc-4.8/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c b/gcc-4.8/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
index cb7bf43dc..e74678ef6 100644
--- a/gcc-4.8/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
+++ b/gcc-4.8/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
@@ -42,8 +42,9 @@ exception statement from your version. */
#include <pango/pango.h>
#include <pango/pangoft2.h>
#include <pango/pangofc-font.h>
-#include <freetype/ftglyph.h>
-#include <freetype/ftoutln.h>
+#include <ft2build.h>
+#include FT_GLYPH_H
+#include FT_OUTLINE_H
#include "jcl.h"
#include "gdkfont.h"
#include "gnu_java_awt_peer_gtk_FreetypeGlyphVector.h"
diff --git a/gcc-4.8/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c b/gcc-4.8/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
index 771b23e37..cfd988c4a 100644
--- a/gcc-4.8/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
+++ b/gcc-4.8/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
@@ -39,10 +39,11 @@
#include <pango/pango.h>
#include <pango/pangoft2.h>
#include <pango/pangofc-font.h>
-#include <freetype/ftglyph.h>
-#include <freetype/ftoutln.h>
-#include <freetype/fttypes.h>
-#include <freetype/tttables.h>
+#include <ft2build.h>
+#include FT_GLYPH_H
+#include FT_OUTLINE_H
+#include FT_TYPES_H
+#include FT_TRUETYPE_TABLES_H
#include "gdkfont.h"
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GdkFontPeer.h"
diff --git a/gcc-4.8/libjava/configure b/gcc-4.8/libjava/configure
index 16b76b489..98b1ec2d9 100755
--- a/gcc-4.8/libjava/configure
+++ b/gcc-4.8/libjava/configure
@@ -8842,7 +8842,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -8867,7 +8867,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -8886,7 +8889,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -13382,7 +13388,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 13385 "configure"
+#line 13391 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -13488,7 +13494,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 13491 "configure"
+#line 13497 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -19483,7 +19489,7 @@ if test "${enable_sjlj_exceptions+set}" = set; then :
enableval=$enable_sjlj_exceptions; :
else
cat > conftest.$ac_ext << EOF
-#line 19486 "configure"
+#line 19492 "configure"
struct S { ~S(); };
void bar();
void foo()
diff --git a/gcc-4.8/libjava/java/lang/natObject.cc b/gcc-4.8/libjava/java/lang/natObject.cc
index 87f2044dd..1a666407a 100644
--- a/gcc-4.8/libjava/java/lang/natObject.cc
+++ b/gcc-4.8/libjava/java/lang/natObject.cc
@@ -929,7 +929,7 @@ retry:
// only be held by other threads waiting for conversion, and
// they, like us, drop it quickly without blocking.
_Jv_MutexLock(&(hl->si.mutex));
- JvAssert(he -> address == address | LOCKED );
+ JvAssert(he -> address == (address | LOCKED));
release_set(&(he -> address), (address | REQUEST_CONVERSION | HEAVY));
// release lock on he
LOG(REQ_CONV, (address | REQUEST_CONVERSION | HEAVY), self);
@@ -961,7 +961,7 @@ retry:
}
obj_addr_t was_heavy = (address & HEAVY);
if ((address & LOCKED) ||
- !compare_and_swap(&(he -> address), address, (address | LOCKED )))
+ !compare_and_swap(&(he -> address), address, address | LOCKED ))
{
wait_unlocked(he);
goto retry;
diff --git a/gcc-4.8/libjava/libltdl/ChangeLog b/gcc-4.8/libjava/libltdl/ChangeLog
index 7ff264616..05ab276f8 100644
--- a/gcc-4.8/libjava/libltdl/ChangeLog
+++ b/gcc-4.8/libjava/libltdl/ChangeLog
@@ -1,3 +1,15 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * acinclude.m4: Update to mainline version.
+ * configure: Regenerate.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libjava/libltdl/acinclude.m4 b/gcc-4.8/libjava/libltdl/acinclude.m4
index d77a1a399..f08911950 100644
--- a/gcc-4.8/libjava/libltdl/acinclude.m4
+++ b/gcc-4.8/libjava/libltdl/acinclude.m4
@@ -519,7 +519,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+x86_64-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
@@ -529,7 +529,10 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_i386"
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -545,7 +548,10 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*)
diff --git a/gcc-4.8/libjava/libltdl/configure b/gcc-4.8/libjava/libltdl/configure
index 35b89dc55..146ca4329 100755
--- a/gcc-4.8/libjava/libltdl/configure
+++ b/gcc-4.8/libjava/libltdl/configure
@@ -4806,7 +4806,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+x86_64-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
@@ -4820,7 +4820,10 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_i386"
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -4836,7 +4839,10 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*)
@@ -6456,11 +6462,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:6459: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:6465: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:6463: \$? = $ac_status" >&5
+ echo "$as_me:6469: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -6718,11 +6724,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:6721: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:6727: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:6725: \$? = $ac_status" >&5
+ echo "$as_me:6731: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -6780,11 +6786,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:6783: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:6789: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:6787: \$? = $ac_status" >&5
+ echo "$as_me:6793: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -8099,7 +8105,7 @@ linux*)
libsuff=
case "$host_cpu" in
x86_64*|s390x*|powerpc64*)
- echo '#line 8102 "configure"' > conftest.$ac_ext
+ echo '#line 8108 "configure"' > conftest.$ac_ext
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -8652,7 +8658,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 8655 "configure"
+#line 8661 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -8750,7 +8756,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 8753 "configure"
+#line 8759 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10591,7 +10597,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 10594 "configure"
+#line 10600 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/gcc-4.8/libjava/testsuite/libjava.lang/sourcelocation.xfail b/gcc-4.8/libjava/testsuite/libjava.lang/sourcelocation.xfail
new file mode 100644
index 000000000..c999f8ee0
--- /dev/null
+++ b/gcc-4.8/libjava/testsuite/libjava.lang/sourcelocation.xfail
@@ -0,0 +1 @@
+xfail-output
diff --git a/gcc-4.8/libmudflap/ChangeLog b/gcc-4.8/libmudflap/ChangeLog
index 64800db42..ad3000781 100644
--- a/gcc-4.8/libmudflap/ChangeLog
+++ b/gcc-4.8/libmudflap/ChangeLog
@@ -1,3 +1,14 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * configure: Regenerate.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libmudflap/configure b/gcc-4.8/libmudflap/configure
index b3a0178a5..1e91dbb3a 100755
--- a/gcc-4.8/libmudflap/configure
+++ b/gcc-4.8/libmudflap/configure
@@ -6377,7 +6377,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -6402,7 +6402,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -6421,7 +6424,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -10615,7 +10621,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10618 "configure"
+#line 10624 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10721,7 +10727,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10724 "configure"
+#line 10730 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/gcc-4.8/libobjc/ChangeLog b/gcc-4.8/libobjc/ChangeLog
index feec5c9b8..73985a66c 100644
--- a/gcc-4.8/libobjc/ChangeLog
+++ b/gcc-4.8/libobjc/ChangeLog
@@ -1,3 +1,14 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * configure: Regenerate.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libobjc/configure b/gcc-4.8/libobjc/configure
index a220b1558..dd39d7ec8 100755
--- a/gcc-4.8/libobjc/configure
+++ b/gcc-4.8/libobjc/configure
@@ -6056,7 +6056,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -6081,7 +6081,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -6100,7 +6103,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -10595,7 +10601,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10598 "configure"
+#line 10604 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10701,7 +10707,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10704 "configure"
+#line 10710 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11472,7 +11478,7 @@ if test "${enable_sjlj_exceptions+set}" = set; then :
enableval=$enable_sjlj_exceptions; :
else
cat > conftest.$ac_ext << EOF
-#line 11475 "configure"
+#line 11481 "configure"
@interface Frob
@end
@implementation Frob
diff --git a/gcc-4.8/libquadmath/ChangeLog b/gcc-4.8/libquadmath/ChangeLog
index 449fea926..6f89d47ad 100644
--- a/gcc-4.8/libquadmath/ChangeLog
+++ b/gcc-4.8/libquadmath/ChangeLog
@@ -1,3 +1,14 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * configure: Regenerate.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libquadmath/configure b/gcc-4.8/libquadmath/configure
index 0ea6e0745..907e0cf05 100755
--- a/gcc-4.8/libquadmath/configure
+++ b/gcc-4.8/libquadmath/configure
@@ -6248,7 +6248,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -6273,7 +6273,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -6292,7 +6295,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -10521,7 +10527,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10524 "configure"
+#line 10530 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10627,7 +10633,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10630 "configure"
+#line 10636 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/gcc-4.8/libquadmath/libquadmath.info b/gcc-4.8/libquadmath/libquadmath.info
index defe41c39..7c1e2bed7 100644
--- a/gcc-4.8/libquadmath/libquadmath.info
+++ b/gcc-4.8/libquadmath/libquadmath.info
@@ -1,5 +1,5 @@
-This is libquadmath.info, produced by makeinfo version 4.13 from
-/d/gcc-4.8.1/gcc-4.8.1/libquadmath/libquadmath.texi.
+This is libquadmath.info, produced by makeinfo version 4.12 from
+/space/rguenther/gcc-4.8.3/gcc-4.8.3/libquadmath/libquadmath.texi.
Copyright (C) 2010-2013 Free Software Foundation, Inc.
@@ -330,8 +330,8 @@ Syntax
`__float128 strtoflt128 (const char *s, char **sp)'
_Arguments_:
- S input string
- SP the address of the next character in the string
+ S input string
+ SP the address of the next character in the string
The argument SP contains, if not `NULL', the address of the next
character following the parts of the string, which have been read.
@@ -367,9 +367,9 @@ Syntax
...)'
_Arguments_:
- S output string
- SIZE byte size of the string, including tailing NUL
- FORMAT conversion specifier string
+ S output string
+ SIZE byte size of the string, including tailing NUL
+ FORMAT conversion specifier string
Note
On some targets when supported by the C library hooks are installed
@@ -817,7 +817,7 @@ GNU Free Documentation License
not permanently reinstated, receipt of a copy of some or all of
the same material does not give you any rights to use it.
- 10. FUTURE REVISIONS OF THIS LICENSE
+ 10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of
the GNU Free Documentation License from time to time. Such new
@@ -838,7 +838,7 @@ GNU Free Documentation License
proxy's public statement of acceptance of a version permanently
authorizes you to choose that version for the Document.
- 11. RELICENSING
+ 11. RELICENSING
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
World Wide Web server that publishes copyrightable works and also
@@ -885,7 +885,7 @@ notices just after the title page:
Free Documentation License''.
If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
+Texts, replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with
the Front-Cover Texts being LIST, and with the Back-Cover Texts
@@ -912,13 +912,13 @@ reported via `http://gcc.gnu.org/bugs.html'.

Tag Table:
-Node: Top1670
-Node: Typedef and constants2404
-Node: Math Library Routines3844
-Node: I/O Library Routines7649
-Node: strtoflt1287974
-Node: quadmath_snprintf8732
-Node: GNU Free Documentation License10940
-Node: Reporting Bugs36106
+Node: Top1684
+Node: Typedef and constants2418
+Node: Math Library Routines3858
+Node: I/O Library Routines7663
+Node: strtoflt1287988
+Node: quadmath_snprintf8746
+Node: GNU Free Documentation License10954
+Node: Reporting Bugs36120

End Tag Table
diff --git a/gcc-4.8/libsanitizer/ChangeLog b/gcc-4.8/libsanitizer/ChangeLog
index 11d22c020..9a30fe8a0 100644
--- a/gcc-4.8/libsanitizer/ChangeLog
+++ b/gcc-4.8/libsanitizer/ChangeLog
@@ -1,3 +1,21 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline r208290
+ 2014-03-03 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * configure.tgt: Unsupported for little endian PowerPC for now.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * configure: Regenerate.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libsanitizer/configure b/gcc-4.8/libsanitizer/configure
index 19a1037d8..0583ee2ae 100755
--- a/gcc-4.8/libsanitizer/configure
+++ b/gcc-4.8/libsanitizer/configure
@@ -6604,7 +6604,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -6629,7 +6629,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -6648,7 +6651,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -11111,7 +11117,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11114 "configure"
+#line 11120 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11217,7 +11223,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11220 "configure"
+#line 11226 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/gcc-4.8/libsanitizer/configure.tgt b/gcc-4.8/libsanitizer/configure.tgt
index 265da01a1..01b76a898 100644
--- a/gcc-4.8/libsanitizer/configure.tgt
+++ b/gcc-4.8/libsanitizer/configure.tgt
@@ -25,6 +25,9 @@ case "${target}" in
TSAN_SUPPORTED=yes
fi
;;
+ powerpc*le-*-linux*)
+ UNSUPPORTED=1
+ ;;
powerpc*-*-linux*)
;;
sparc*-*-linux*)
diff --git a/gcc-4.8/libssp/ChangeLog b/gcc-4.8/libssp/ChangeLog
index 10dcb78a6..0733c746f 100644
--- a/gcc-4.8/libssp/ChangeLog
+++ b/gcc-4.8/libssp/ChangeLog
@@ -1,3 +1,14 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * configure: Regenerate.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libssp/configure b/gcc-4.8/libssp/configure
index 5e1620887..b26c0b335 100755
--- a/gcc-4.8/libssp/configure
+++ b/gcc-4.8/libssp/configure
@@ -6385,7 +6385,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -6410,7 +6410,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -6429,7 +6432,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -10658,7 +10664,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10661 "configure"
+#line 10667 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10764,7 +10770,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10767 "configure"
+#line 10773 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/gcc-4.8/libstdc++-v3/ChangeLog b/gcc-4.8/libstdc++-v3/ChangeLog
index ee062c766..3147708a6 100644
--- a/gcc-4.8/libstdc++-v3/ChangeLog
+++ b/gcc-4.8/libstdc++-v3/ChangeLog
@@ -1,3 +1,204 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-05-08 Joshua Gay <jgay@gnu.org>
+
+ PR libstdc++/61117
+ * doc/xml/faq.xml (faq.license.what_restrictions): Replace "open
+ source" with "free software".
+ * doc/html/faq.html: Likewise.
+
+2014-05-08 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/std/iostream: Fix URL in comment.
+ * src/c++98/ios_init.cc: Fix path in comment.
+
+2014-05-06 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline
+ 2014-04-15 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/60594
+ * include/std/functional (function::_Callable): Exclude own type
+ from the callable checks.
+ * testsuite/20_util/function/60594.cc: New.
+
+2014-04-27 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/60497
+ * include/std/tuple (get): Qualify calls to prevent ADL.
+ * testsuite/20_util/tuple/60497.cc: New.
+
+2012-04-05 Dominique d'Humieres <dominiq@lps.ens.fr>
+ Jack Howarth <howarth@bromo.med.uc.edu>
+
+ PR target/54407
+ * 30_threads/condition_variable/54185.cc: Skip for darwin < 11.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * configure: Regenerate.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline r204808:
+
+ 2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * scripts/extract_symvers.in: Ignore <localentry: > fields
+ in readelf --symbols output.
+
+2014-03-26 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/59548
+ * include/debug/safe_unordered_base.h (_Safe_unordered_container_base):
+ Define copy and move constructors that handle iterators correctly.
+ * testsuite/23_containers/unordered_map/59548.cc: New.
+
+2014-03-25 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/60658
+ * include/bits/atomic_base.h (__atomic_base<_PTp*>::is_lock_free()):
+ Use sizeof pointer type not the element type.
+ * testsuite/29_atomics/atomic/60658.cc: New.
+
+2014-03-18 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/60564
+ * include/std/future (__future_base::_Task_state<>): Change
+ constructors to template functions using perfect forwarding.
+ (__create_task_state): Use decayed type as stored task.
+ (packaged_task::packaged_task(_Fn&&)): Forward instead of moving.
+ * testsuite/30_threads/packaged_task/60564.cc: New.
+
+2014-03-12 Roland McGrath <mcgrathr@google.com>
+ Mark Seaborn <mseaborn@google.com>
+
+ PR libstdc++/59392
+ * libsupc++/eh_call.cc (__cxa_call_unexpected): Call __do_catch with
+ the address of a null pointer, not with a null pointer to pointer.
+ Copy comment for this case from eh_personality.cc:__cxa_call_unexpected.
+ * testsuite/18_support/bad_exception/59392.cc: New file.
+
+2014-03-11 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline.
+ 2014-01-09 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/59680
+ * src/c++11/thread.cc (__sleep_for): Fix call to ::sleep.
+
+2014-03-11 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline.
+ 2014-01-27 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/59215
+ * include/bits/shared_ptr_base.h
+ (_Sp_counted_base<_S_atomic>::_M_add_ref_lock()): Use relaxed atomic
+ load.
+
+2014-03-11 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline.
+
+ 2014-01-09 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/59738
+ * include/bits/stl_vector.h (vector<>::_M_move_assign): Restore
+ support for non-Movable types.
+
+ 2014-01-08 François Dumont <fdumont@gcc.gnu.org>
+
+ * include/bits/stl_vector.h (std::vector<>::_M_move_assign): Pass
+ *this allocator instance when building temporary vector instance
+ so that *this allocator does not get moved.
+ * testsuite/23_containers/vector/allocator/move.cc (test01): Add
+ check on a vector iterator.
+ * testsuite/23_containers/vector/allocator/move_assign.cc
+ (test02): Likewise.
+ (test03): New, test with a non-propagating allocator.
+
+ 2013-11-15 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/23_containers/vector/allocator/move.cc: New
+
+2014-01-27 Jason Merrill <jason@redhat.com>
+
+ Core DR 475
+ PR c++/41174
+ PR c++/59224
+ * libsupc++/eh_throw.cc (__cxa_throw): Set uncaughtExceptions.
+ * libsupc++/eh_alloc.cc (__cxa_allocate_dependent_exception)
+ (__cxa_allocate_exception): Don't set it here.
+
+2013-12-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Update.
+
+2013-11-22 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * acinclude.m4 (libtool_VERSION): Bump.
+ * configure: Regenerate.
+ * doc/xml/manual/abi.xml: Update version information.
+
+2013-11-05 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/status_cxx2011.xml: Document aligned_union as
+ missing.
+
+ * doc/xml/manual/spine.xml: Update copyright years.
+ * doc/html/*: Regenerate.
+
+2013-11-01 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/58952
+ * include/c_global/cstdio: Undef getchar.
+
+2013-10-31 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/20_util/shared_ptr/cons/58839.cc: Do not use
+ default_delete<void>.
+
+2013-10-30 Chris Studholme <cvs@cs.utoronto.ca>
+
+ PR libstdc++/58912
+ * include/bits/shared_ptr_base.h (_Sp_counted_ptr_inplace): Remove
+ unnecessary initialization of storage buffer.
+
+2013-10-29 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/58839
+ * include/bits/shared_ptr_base.h
+ (__shared_ptr<T>::__shared_ptr(unique_ptr<U,D>&&)): Do not dereference
+ pointer.
+ * testsuite/20_util/shared_ptr/cons/58839.cc: New.
+
+2013-10-20 Chris Jefferson <chris@bubblescope.net>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/58800
+ * include/bits/stl_algo.h (__unguarded_partition_pivot): Change
+ __last - 2 to __last - 1.
+ * testsuite/25_algorithms/nth_element/58800.cc: New
+
+2013-10-16 François Dumont <fdumont@gcc.gnu.org>
+
+ PR libstdc++/58191
+ * include/debug/macros.h (__glibcxx_check_partitioned_lower): Add
+ __gnu_debug::__base calls on iterators passed to internal debug
+ check.
+ (__glibcxx_check_partitioned_lower_pred): Likewise.
+ (__glibcxx_check_partitioned_upper): Likewise.
+ (__glibcxx_check_partitioned_upper_pred): Likewise.
+ * include/debug/functions.h (__check_partitioned_lower):
+ Remove code to detect safe iterators.
+ (__check_partitioned_upper): Likewise.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/libstdc++-v3/acinclude.m4 b/gcc-4.8/libstdc++-v3/acinclude.m4
index af0b23bde..655422289 100644
--- a/gcc-4.8/libstdc++-v3/acinclude.m4
+++ b/gcc-4.8/libstdc++-v3/acinclude.m4
@@ -3266,7 +3266,7 @@ changequote([,])dnl
fi
# For libtool versioning info, format is CURRENT:REVISION:AGE
-libtool_VERSION=6:18:0
+libtool_VERSION=6:19:0
# Everything parsed; figure out what files and settings to use.
case $enable_symvers in
diff --git a/gcc-4.8/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt b/gcc-4.8/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
index 551e738a5..2c822bf94 100644
--- a/gcc-4.8/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
+++ b/gcc-4.8/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
@@ -403,6 +403,7 @@ FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE5pbaseEv@@GLIBCXX_3.4
FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE6getlocEv@@GLIBCXX_3.4
FUNC:_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
FUNC:_ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
+FUNC:_ZNKSt17bad_function_call4whatEv@@GLIBCXX_3.4.18
FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4
FUNC:_ZNKSt18basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
@@ -590,6 +591,8 @@ FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt
FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewm@@GLIBCXX_3.4
FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewx@@GLIBCXX_3.4
FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewy@@GLIBCXX_3.4
+FUNC:_ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEj@@GLIBCXX_3.4.18
+FUNC:_ZNKSt8__detail20_Prime_rehash_policy14_M_need_rehashEjjj@@GLIBCXX_3.4.18
FUNC:_ZNKSt8bad_cast4whatEv@@GLIBCXX_3.4.9
FUNC:_ZNKSt8ios_base7failure4whatEv@@GLIBCXX_3.4
FUNC:_ZNKSt8messagesIcE18_M_convert_to_charERKSs@@GLIBCXX_3.4
@@ -1207,6 +1210,7 @@ FUNC:_ZNSt11range_errorD2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt11regex_errorD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt11regex_errorD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt11regex_errorD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt11this_thread11__sleep_forENSt6chrono8durationIxSt5ratioILx1ELx1EEEENS1_IxS2_ILx1ELx1000000000EEEE@@GLIBCXX_3.4.18
FUNC:_ZNSt12__basic_fileIcE2fdEv@@GLIBCXX_3.4
FUNC:_ZNSt12__basic_fileIcE4fileEv@@GLIBCXX_3.4.1
FUNC:_ZNSt12__basic_fileIcE4openEPKcSt13_Ios_Openmodei@@GLIBCXX_3.4
@@ -1485,6 +1489,11 @@ FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEs@@GLIBCXX_3.4
FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEt@@GLIBCXX_3.4
FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEx@@GLIBCXX_3.4
FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEy@@GLIBCXX_3.4
+FUNC:_ZNSt13random_device14_M_init_pretr1ERKSs@@GLIBCXX_3.4.18
+FUNC:_ZNSt13random_device16_M_getval_pretr1Ev@@GLIBCXX_3.4.18
+FUNC:_ZNSt13random_device7_M_finiEv@@GLIBCXX_3.4.18
+FUNC:_ZNSt13random_device7_M_initERKSs@@GLIBCXX_3.4.18
+FUNC:_ZNSt13random_device9_M_getvalEv@@GLIBCXX_3.4.18
FUNC:_ZNSt13runtime_errorC1ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt13runtime_errorC2ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt13runtime_errorD0Ev@@GLIBCXX_3.4
@@ -1929,6 +1938,8 @@ FUNC:_ZNSt6__norm15_List_node_base7reverseEv@@GLIBCXX_3.4.9
FUNC:_ZNSt6__norm15_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4.9
FUNC:_ZNSt6__norm15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
FUNC:_ZNSt6chrono12system_clock3nowEv@@GLIBCXX_3.4.11
+FUNC:_ZNSt6chrono3_V212steady_clock3nowEv@@GLIBCXX_3.4.19
+FUNC:_ZNSt6chrono3_V212system_clock3nowEv@@GLIBCXX_3.4.19
FUNC:_ZNSt6gslice8_IndexerC1EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
FUNC:_ZNSt6gslice8_IndexerC2EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
FUNC:_ZNSt6locale11_M_coalesceERKS_S1_i@@GLIBCXX_3.4
@@ -2467,6 +2478,7 @@ FUNC:__cxa_guard_acquire@@CXXABI_1.3
FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
+FUNC:__cxa_thread_atexit@@CXXABI_1.3.7
FUNC:__cxa_throw@@CXXABI_1.3
FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
@@ -2491,6 +2503,7 @@ OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
OBJECT:0:CXXABI_1.3.6
+OBJECT:0:CXXABI_1.3.7
OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
@@ -2502,6 +2515,8 @@ OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
OBJECT:0:GLIBCXX_3.4.16
OBJECT:0:GLIBCXX_3.4.17
+OBJECT:0:GLIBCXX_3.4.18
+OBJECT:0:GLIBCXX_3.4.19
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -3033,6 +3048,8 @@ OBJECT:1:_ZNSt21__numeric_limits_base9is_iec559E@@GLIBCXX_3.4
OBJECT:1:_ZNSt21__numeric_limits_base9is_moduloE@@GLIBCXX_3.4
OBJECT:1:_ZNSt21__numeric_limits_base9is_signedE@@GLIBCXX_3.4
OBJECT:1:_ZNSt6chrono12system_clock12is_monotonicE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt6chrono3_V212steady_clock9is_steadyE@@GLIBCXX_3.4.19
+OBJECT:1:_ZNSt6chrono3_V212system_clock9is_steadyE@@GLIBCXX_3.4.19
OBJECT:1:_ZSt10adopt_lock@@GLIBCXX_3.4.11
OBJECT:1:_ZSt10defer_lock@@GLIBCXX_3.4.11
OBJECT:1:_ZSt11try_to_lock@@GLIBCXX_3.4.11
diff --git a/gcc-4.8/libstdc++-v3/configure b/gcc-4.8/libstdc++-v3/configure
index a43fa2b19..2d69866fa 100755
--- a/gcc-4.8/libstdc++-v3/configure
+++ b/gcc-4.8/libstdc++-v3/configure
@@ -7111,7 +7111,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -7136,7 +7136,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -7155,7 +7158,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -11513,7 +11519,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11516 "configure"
+#line 11522 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11619,7 +11625,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11622 "configure"
+#line 11628 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -15033,7 +15039,7 @@ fi
#
# Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style.
cat > conftest.$ac_ext << EOF
-#line 15036 "configure"
+#line 15042 "configure"
struct S { ~S(); };
void bar();
void foo()
@@ -15383,7 +15389,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
# Fake what AC_TRY_COMPILE does.
cat > conftest.$ac_ext << EOF
-#line 15386 "configure"
+#line 15392 "configure"
int main()
{
typedef bool atomic_type;
@@ -15418,7 +15424,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 15421 "configure"
+#line 15427 "configure"
int main()
{
typedef short atomic_type;
@@ -15453,7 +15459,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 15456 "configure"
+#line 15462 "configure"
int main()
{
// NB: _Atomic_word not necessarily int.
@@ -15489,7 +15495,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 15492 "configure"
+#line 15498 "configure"
int main()
{
typedef long long atomic_type;
@@ -15568,7 +15574,7 @@ $as_echo "$as_me: WARNING: Performance of certain classes will degrade as a resu
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 15571 "configure"
+#line 15577 "configure"
int main()
{
_Decimal32 d1;
@@ -15610,7 +15616,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 15613 "configure"
+#line 15619 "configure"
template<typename T1, typename T2>
struct same
{ typedef T2 type; };
@@ -15644,7 +15650,7 @@ $as_echo "$enable_int128" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 15647 "configure"
+#line 15653 "configure"
template<typename T1, typename T2>
struct same
{ typedef T2 type; };
@@ -71585,7 +71591,7 @@ $as_echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;}
fi
# For libtool versioning info, format is CURRENT:REVISION:AGE
-libtool_VERSION=6:18:0
+libtool_VERSION=6:19:0
# Everything parsed; figure out what files and settings to use.
case $enable_symvers in
diff --git a/gcc-4.8/libstdc++-v3/doc/html/api.html b/gcc-4.8/libstdc++-v3/doc/html/api.html
index cc338d23e..fb51abc7f 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/api.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/api.html
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library API Reference</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk02.html" title="" /><link rel="prev" href="bk02.html" title="" /><link rel="next" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library API Reference</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="api"></a>The GNU C++ Library API Reference</h1></div><div><p class="copyright">Copyright ©
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library API Reference</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk02.html" title="" /><link rel="prev" href="bk02.html" title="" /><link rel="next" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library API Reference</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="api"></a>The GNU C++ Library API Reference</h1></div><div><p class="copyright">Copyright ©
2008
,
2010
<a class="link" href="http://www.fsf.org/" target="_top">FSF
</a>
- </p></div><div><div class="legalnotice"><a id="idp3706336"></a><p>
+ </p></div><div><div class="legalnotice"><a id="idm270006235696"></a><p>
<a class="link" href="manual/license.html" title="License">License
</a>
</p></div></div></div><hr /></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/bk02.html b/gcc-4.8/libstdc++-v3/doc/html/bk02.html
index df887b8b3..4529fb8a2 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/bk02.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/bk02.html
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="manual/backwards.html" title="Backwards Compatibility" /><link rel="next" href="api.html" title="The GNU C++ Library API Reference" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards Compatibility </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> The GNU C++ Library API Reference</td></tr></table></div></body></html> \ No newline at end of file
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="manual/backwards.html" title="Backwards Compatibility" /><link rel="next" href="api.html" title="The GNU C++ Library API Reference" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards Compatibility </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> The GNU C++ Library API Reference</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/gcc-4.8/libstdc++-v3/doc/html/bk03.html b/gcc-4.8/libstdc++-v3/doc/html/bk03.html
index 316d2cd7b..072e7faa5 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/bk03.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/bk03.html
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="api.html" title="The GNU C++ Library API Reference" /><link rel="next" href="faq.html" title="Frequently Asked Questions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library API Reference </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Frequently Asked Questions</td></tr></table></div></body></html> \ No newline at end of file
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="api.html" title="The GNU C++ Library API Reference" /><link rel="next" href="faq.html" title="Frequently Asked Questions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library API Reference </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Frequently Asked Questions</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/gcc-4.8/libstdc++-v3/doc/html/faq.html b/gcc-4.8/libstdc++-v3/doc/html/faq.html
index b90c93f9e..244ce8ab8 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/faq.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/faq.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Frequently Asked Questions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk03.html" title="" /><link rel="prev" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Frequently Asked Questions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> </td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="faq"></a>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright ©
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Frequently Asked Questions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk03.html" title="" /><link rel="prev" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Frequently Asked Questions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> </td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="faq"></a>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright ©
2008, 2010
<a class="link" href="http://www.fsf.org" target="_top">FSF</a>
- </p></div></div><hr /></div><div class="qandaset"><a id="idp1581728"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
+ </p></div></div><hr /></div><div class="qandaset"><a id="idm270011560848"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
What is libstdc++?
</a></dt><dt>1.2. <a href="faq.html#faq.why">
Why should I use libstdc++?
@@ -223,7 +223,7 @@
</p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.what_restrictions"></a><a id="q-license.what_restrictions"></a><p><strong>2.4.</strong></p></td><td align="left" valign="top"><p>
I see. So, what restrictions are there on programs that use the library?
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what_restrictions"></a></td><td align="left" valign="top"><p>
- None. We encourage such programs to be released as open source,
+ None. We encourage such programs to be released as free software,
but we won't punish you or sue you if you choose otherwise.
</p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
</a></dt><dt>3.2. <a href="faq.html#faq.how_to_get_sources">How does one get current libstdc++ sources?
diff --git a/gcc-4.8/libstdc++-v3/doc/html/index.html b/gcc-4.8/libstdc++-v3/doc/html/index.html
index 7481dc9d0..787112d92 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/index.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/index.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="description" content="Short Contents Copyright (C) 2008-2013 FSF Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. This is the top level of the libstdc++ documentation set. The documentation is divided into the following three sections. Manual Frequently Asked Questions API and Source Documentation" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="next" href="manual/index.html" title="The GNU C++ Library Manual" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="manual/index.html">Next</a></td></tr></table><hr /></div><div class="set" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="set-index"></a>The GNU C++ Library</h1></div><div><div class="abstract"><a id="contents"></a><p class="title"><strong>Short Contents</strong></p><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="description" content="Short Contents Copyright (C) 2008-2013 FSF Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. This is the top level of the libstdc++ documentation set. The documentation is divided into the following three sections. Manual Frequently Asked Questions API and Source Documentation" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="next" href="manual/index.html" title="The GNU C++ Library Manual" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="manual/index.html">Next</a></td></tr></table><hr /></div><div class="set" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="set-index"></a>The GNU C++ Library</h1></div><div><div class="abstract"><a id="contents"></a><p class="title"><strong>Short Contents</strong></p><p>
Copyright (C) 2008-2013
<a class="link" href="http://www.fsf.org/" target="_top">FSF
</a>
@@ -20,7 +20,7 @@
</p></li><li class="listitem"><p>
<a class="link" href="api.html" title="The GNU C++ Library API Reference">API and Source Documentation</a>
</p></li></ul></div><p>
- </p></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="book"><a href="manual/index.html">The GNU C++ Library Manual</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I.
+ </p></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="book"><a href="manual/index.html">The GNU C++ Library Manual</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I.
Introduction
</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="manual/status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="manual/license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="manual/setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/configure.html">Configure</a></span></dt><dt><span class="section"><a href="manual/make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="manual/using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/std_contents.html">II.
@@ -34,13 +34,13 @@
</a></span></dt><dd><dl><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/utilities.html">6.
Utilities
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="manual/pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="manual/memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="manual/memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/strings.html">7.
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="manual/pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="manual/memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="manual/memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/strings.html">7.
Strings
</a></span></dt><dd><dl><dt><span class="section"><a href="manual/strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="manual/strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/localization.html">8.
Localization
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="manual/localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="manual/facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/containers.html">9.
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="manual/localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="manual/facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/containers.html">9.
Containers
</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="manual/containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="manual/associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="manual/associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="manual/associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="manual/unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/iterators.html">10.
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/abi.html b/gcc-4.8/libstdc++-v3/doc/html/manual/abi.html
index c5cf1edbb..337cf81fe 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/abi.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/abi.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ABI Policy and Guidelines</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, ABI, version, dynamic, shared, compatibility" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="test.html" title="Test" /><link rel="next" href="api.html" title="API Evolution and Deprecation History" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ABI Policy and Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ABI Policy and Guidelines</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, ABI, version, dynamic, shared, compatibility" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="test.html" title="Test" /><link rel="next" href="api.html" title="API Evolution and Deprecation History" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ABI Policy and Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
Porting and Maintenance
</th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.abi"></a>ABI Policy and Guidelines</h2></div></div></div><p>
@@ -493,39 +493,39 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
<a class="link" href="http://www.codesourcery.com/cxx-abi/" target="_top">
C++ ABI Summary
</a>
- </em>. </span></p></div><div class="biblioentry"><a id="idp22945936"></a><p><span class="title"><em>
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992586624"></a><p><span class="title"><em>
<a class="link" href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" target="_top">
Intel Compilers for Linux Compatibility with the GNU Compilers
</a>
- </em>. </span></p></div><div class="biblioentry"><a id="idp22947792"></a><p><span class="title"><em>
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992584768"></a><p><span class="title"><em>
<a class="link" href="http://download.oracle.com/docs/cd/E19963-01/html/819-0690/index.html" target="_top">
Linker and Libraries Guide (document 819-0690)
</a>
- </em>. </span></p></div><div class="biblioentry"><a id="idp22949632"></a><p><span class="title"><em>
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992582928"></a><p><span class="title"><em>
<a class="link" href="http://download.oracle.com/docs/cd/E19422-01/819-3689/index.html" target="_top">
Sun Studio 11: C++ Migration Guide (document 819-3689)
</a>
- </em>. </span></p></div><div class="biblioentry"><a id="idp22951488"></a><p><span class="title"><em>
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992581072"></a><p><span class="title"><em>
<a class="link" href="http://www.akkadia.org/drepper/dsohowto.pdf" target="_top">
How to Write Shared Libraries
</a>
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="idp22954928"></a><p><span class="title"><em>
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="idm269992577632"></a><p><span class="title"><em>
<a class="link" href="http://www.arm.com/miscPDFs/8033.pdf" target="_top">
C++ ABI for the ARM Architecture
</a>
- </em>. </span></p></div><div class="biblioentry"><a id="idp22956736"></a><p><span class="title"><em>
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992575824"></a><p><span class="title"><em>
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" target="_top">
Dynamic Shared Objects: Survey and Issues
</a>
</em>. </span><span class="subtitle">
ISO C++ J16/06-0046
- . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idp22960032"></a><p><span class="title"><em>
+ . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm269992572528"></a><p><span class="title"><em>
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" target="_top">
Versioning With Namespaces
</a>
</em>. </span><span class="subtitle">
ISO C++ J16/06-0083
- . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idp22963312"></a><p><span class="title"><em>
+ . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm269992569248"></a><p><span class="title"><em>
<a class="link" href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" target="_top">
Binary Compatibility of Shared Libraries Implemented in C++
on GNU/Linux Systems
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/algorithms.html b/gcc-4.8/libstdc++-v3/doc/html/manual/algorithms.html
index e02cc5b2a..cb10ba78e 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/algorithms.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/algorithms.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 11.  Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library, algorithm" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="iterators.html" title="Chapter 10.  Iterators" /><link rel="next" href="numerics.html" title="Chapter 12.  Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 11.  Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library, algorithm" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="iterators.html" title="Chapter 10.  Iterators" /><link rel="next" href="numerics.html" title="Chapter 12.  Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11. 
Algorithms
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
</th><td width="20%" align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.algorithms"></a>Chapter 11. 
Algorithms
- <a id="idp16191968" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></div><p>
+ <a id="idm269999339120" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></div><p>
The neatest accomplishment of the algorithms section is that all the
work is done via iterators, not containers directly. This means two
important things:
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/api.html b/gcc-4.8/libstdc++-v3/doc/html/manual/api.html
index c3538ad18..916617db0 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/api.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/api.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>API Evolution and Deprecation History</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, api, evolution, deprecation, history" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="abi.html" title="ABI Policy and Guidelines" /><link rel="next" href="backwards.html" title="Backwards Compatibility" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API Evolution and Deprecation History</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>API Evolution and Deprecation History</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, api, evolution, deprecation, history" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="abi.html" title="ABI Policy and Guidelines" /><link rel="next" href="backwards.html" title="Backwards Compatibility" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API Evolution and Deprecation History</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
Porting and Maintenance
</th><td width="20%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.api"></a>API Evolution and Deprecation History</h2></div></div></div><p>
@@ -77,11 +77,11 @@ _Alloc_traits</code> have been removed.
<span class="type">__alloc</span> to select an underlying allocator that
satisfied memory allocation requests. The selection of this
underlying allocator was not user-configurable.
- </p><div class="table"><a id="idp23030528"></a><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
+ </p><div class="table"><a id="idm269992502096"></a><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
of available allocators. All of these new allocators are
standard-style. The following table includes details, along with
the first released version of GCC that included the extension allocator.
- </p><div class="table"><a id="idp23058160"></a><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ </p><div class="table"><a id="idm269992474464"></a><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
Debug mode first appears.
</p><p>
Precompiled header support <acronym class="acronym">PCH</acronym> support.
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/appendix.html b/gcc-4.8/libstdc++-v3/doc/html/manual/appendix.html
index f1525fead..58dd937a7 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/appendix.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/appendix.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part IV.  Appendices</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="ext_concurrency_use.html" title="Use" /><link rel="next" href="appendix_contributing.html" title="Appendix A.  Contributing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part IV.  Appendices</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="ext_concurrency_use.html" title="Use" /><link rel="next" href="appendix_contributing.html" title="Appendix A.  Contributing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV. 
Appendices
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency_use.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="appendix_contributing.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="appendix"></a>Part IV. 
Appendices
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="appendix"><a href="appendix_contributing.html">A.
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="appendix"><a href="appendix_contributing.html">A.
Contributing
</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix_porting.html">B.
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_contributing.html b/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_contributing.html
index 108735a0d..c755a5062 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_contributing.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_contributing.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix A.  Contributing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix.html" title="Part IV.  Appendices" /><link rel="next" href="source_organization.html" title="Directory Layout and Source Conventions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix A.  Contributing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix.html" title="Part IV.  Appendices" /><link rel="next" href="source_organization.html" title="Directory Layout and Source Conventions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. 
Contributing
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix.html">Prev</a> </td><th width="60%" align="center">Part IV. 
Appendices
</th><td width="20%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.contrib"></a>
Contributing
- <a id="idp21875168" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p>
+ <a id="idm269993657472" class="indexterm"></a>
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p>
The GNU C++ Library follows an open development model. Active
contributors are assigned maintainer-ship responsibility, and given
write access to the source repository. First time contributors
@@ -36,7 +36,7 @@
for this group is quite useful.
</p></li><li class="listitem"><p>
Peruse
- the <a class="link" href="http://www.gnu.org/prep/standards" target="_top">GNU
+ the <a class="link" href="http://www.gnu.org/prep/standards/" target="_top">GNU
Coding Standards</a>, and chuckle when you hit the part
about <span class="quote">“<span class="quote">Using Languages Other Than C</span>”</span>.
</p></li><li class="listitem"><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_free.html b/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_free.html
index e57119c3e..9970016af 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_free.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_free.html
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix C.  Free Software Needs Free Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="backwards.html" title="Backwards Compatibility" /><link rel="next" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix C. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix C.  Free Software Needs Free Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="backwards.html" title="Backwards Compatibility" /><link rel="next" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix C. 
Free Software Needs Free Documentation
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><th width="60%" align="center">Part IV. 
Appendices
</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.free"></a>
Free Software Needs Free Documentation
- <a id="idp23426192" class="indexterm"></a>
+ <a id="idm269992106560" class="indexterm"></a>
</h1></div></div></div><p>
The biggest deficiency in free operating systems is not in the
software--it is the lack of good free manuals that we can include in
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_gfdl.html b/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_gfdl.html
index 641c58527..d0531b67d 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_gfdl.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_gfdl.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix E. GNU Free Documentation License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3" /><link rel="next" href="../bk02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix E. GNU Free Documentation License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix E. GNU Free Documentation License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3" /><link rel="next" href="../bk02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix E. GNU Free Documentation License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><th width="60%" align="center">Part IV. 
Appendices
</th><td width="20%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.gfdl-1.3"></a>GNU Free Documentation License</h1></div></div></div><p>Version 1.3, 3 November 2008</p><p>
Copyright © 2000, 2001, 2002, 2007, 2008
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_gpl.html b/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_gpl.html
index f2f3caf67..8f94f58b0 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_gpl.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_gpl.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix D.  GNU General Public License version 3</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix_free.html" title="Appendix C.  Free Software Needs Free Documentation" /><link rel="next" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix D. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix D.  GNU General Public License version 3</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix_free.html" title="Appendix C.  Free Software Needs Free Documentation" /><link rel="next" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix D. 
<acronym class="acronym">GNU</acronym> General Public License version 3
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><th width="60%" align="center">Part IV. 
Appendices
@@ -77,7 +77,7 @@
</p><p>
The precise terms and conditions for copying, distribution and modification
follow.
- </p><h2><a id="idp23466384"></a>
+ </p><h2><a id="idm269992066368"></a>
TERMS AND CONDITIONS
</h2><h2><a id="gpl-3-definitions"></a>
0. Definitions.
@@ -618,7 +618,7 @@
waiver of all civil liability in connection with the Program, unless a
warranty or assumption of liability accompanies a copy of the Program in
return for a fee.
- </p><h2><a id="idp23565184"></a>
+ </p><h2><a id="idm269991967568"></a>
END OF TERMS AND CONDITIONS
</h2><h2><a id="HowToApply"></a>
How to Apply These Terms to Your New Programs
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_porting.html b/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_porting.html
index 4a07cf912..2f9747af7 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_porting.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/appendix_porting.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix B.  Porting and Maintenance</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="source_design_notes.html" title="Design Notes" /><link rel="next" href="documentation_hacking.html" title="Writing and Generating Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix B. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix B.  Porting and Maintenance</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="source_design_notes.html" title="Design Notes" /><link rel="next" href="documentation_hacking.html" title="Writing and Generating Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix B. 
Porting and Maintenance
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><th width="60%" align="center">Part IV. 
Appendices
</th><td width="20%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.porting"></a>
Porting and Maintenance
- <a id="idp22008864" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">Dejagnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety">
+ <a id="idm269993523968" class="indexterm"></a>
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">Dejagnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety">
Qualifying Exception Safety Guarantees
</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety.overview">Overview</a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.status">
@@ -61,7 +61,7 @@ make all
in the build directory starts the build process. The <code class="literal">all</code> target comes from the <code class="filename">Makefile</code> file, which is generated via <span class="command"><strong>configure</strong></span> from the <code class="filename">Makefile.in</code> file, which is in turn generated (via
<span class="command"><strong>automake</strong></span>) from the file
<code class="filename">Makefile.am</code>.
-</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.map"></a>What Comes from Where</h4></div></div></div><div class="figure"><a id="idp22035648"></a><p class="title"><strong>Figure B.1. Configure and Build File Dependencies</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/confdeps.png" align="middle" alt="Dependency Graph for Configure and Build Files" /></div></div></div><br class="figure-break" /><p>
+</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.map"></a>What Comes from Where</h4></div></div></div><div class="figure"><a id="idm269993497120"></a><p class="title"><strong>Figure B.1. Configure and Build File Dependencies</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/confdeps.png" align="middle" alt="Dependency Graph for Configure and Build Files" /></div></div></div><br class="figure-break" /><p>
Regenerate all generated files by using the command
<code class="code">autoreconf</code> at the top level of the libstdc++ source
directory.
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/associative.html b/gcc-4.8/libstdc++-v3/doc/html/manual/associative.html
index 21b01044d..57fab546b 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/associative.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/associative.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="containers.html" title="Chapter 9.  Containers" /><link rel="next" href="unordered_associative.html" title="Unordered Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="containers.html" title="Chapter 9.  Containers" /><link rel="next" href="unordered_associative.html" title="Unordered Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
Containers
</th><td width="20%" align="right"> <a accesskey="n" href="unordered_associative.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.associative"></a>Associative</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.insert_hints"></a>Insertion Hints</h3></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/atomics.html b/gcc-4.8/libstdc++-v3/doc/html/manual/atomics.html
index f16fd8278..2459ada76 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/atomics.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/atomics.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 14.  Atomics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library, atomic" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="concurrency.html" title="Chapter 15.  Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 14.  Atomics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library, atomic" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="concurrency.html" title="Chapter 15.  Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. 
Atomics
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
</th><td width="20%" align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.atomics"></a>Chapter 14. 
Atomics
- <a id="idp16390640" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></div><p>
+ <a id="idm269999140704" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></div><p>
Facilities for atomic operations.
</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.atomics.api"></a>API Reference</h2></div></div></div><p>
All items are declared in the standard header
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/backwards.html b/gcc-4.8/libstdc++-v3/doc/html/manual/backwards.html
index d8e391360..53ea52a24 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/backwards.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/backwards.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Backwards Compatibility</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, backwards" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="api.html" title="API Evolution and Deprecation History" /><link rel="next" href="appendix_free.html" title="Appendix C.  Free Software Needs Free Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Backwards Compatibility</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Backwards Compatibility</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, backwards" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="api.html" title="API Evolution and Deprecation History" /><link rel="next" href="appendix_free.html" title="Appendix C.  Free Software Needs Free Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Backwards Compatibility</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
Porting and Maintenance
</th><td width="20%" align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.appendix.porting.backwards"></a>Backwards Compatibility</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.first"></a>First</h3></div></div></div><p>The first generation GNU C++ library was called libg++. It was a
@@ -940,15 +940,15 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [
This is a change in behavior from older versions. Now, most
<span class="type">iterator_type</span> typedefs in container classes are POD
objects, not <span class="type">value_type</span> pointers.
-</p></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idp23415104"></a><p><span class="title"><em>
+</p></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idm269992117648"></a><p><span class="title"><em>
<a class="link" href="http://www.kegel.com/gcc/gcc4.html" target="_top">
Migrating to GCC 4.1
</a>
- </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="idp23417888"></a><p><span class="title"><em>
+ </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="idm269992114864"></a><p><span class="title"><em>
<a class="link" href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" target="_top">
Building the Whole Debian Archive with GCC 4.1: A Summary
</a>
- </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="idp23420736"></a><p><span class="title"><em>
+ </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="idm269992112016"></a><p><span class="title"><em>
<a class="link" href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html" target="_top">
Migration guide for GCC-3.2
</a>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/bitmap_allocator.html b/gcc-4.8/libstdc++-v3/doc/html/manual/bitmap_allocator.html
index e8a75d115..fc48f65dc 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/bitmap_allocator.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/bitmap_allocator.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 21. The bitmap_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /><link rel="next" href="bitmap_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. The bitmap_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_multi.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 21. The bitmap_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /><link rel="next" href="bitmap_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. The bitmap_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_multi.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.bitmap"></a>Chapter 21. The bitmap_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.bitmap"></a>Chapter 21. The bitmap_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p>
</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.design"></a>Design</h2></div></div></div><p>
As this name suggests, this allocator uses a bit-map to keep track
of the used and unused memory locations for its book-keeping
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html b/gcc-4.8/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
index 2f16969ab..bbe562916 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="prev" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="next" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 21. The bitmap_allocator</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.free_list_store"></a>Free List Store</h3></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="prev" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="next" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 21. The bitmap_allocator</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.free_list_store"></a>Free List Store</h3></div></div></div><p>
The Free List Store (referred to as FLS for the remaining part of this
document) is the Global memory pool that is shared by all instances of
the bitmapped allocator instantiated for any type. This maintains a
@@ -75,7 +75,7 @@ else return false.</p></li></ol></div><p>
</p><p>
Consider a block of size 64 ints. In memory, it would look like this:
(assume a 32-bit system where, size_t is a 32-bit entity).
- </p><div class="table"><a id="idp17500848"></a><p class="title"><strong>Table 21.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ </p><div class="table"><a id="idm269998030352"></a><p class="title"><strong>Table 21.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
The first Column(268) represents the size of the Block in bytes as
seen by the Bitmap Allocator. Internally, a global free list is
used to keep track of the free blocks used and given back by the
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/bugs.html b/gcc-4.8/libstdc++-v3/doc/html/manual/bugs.html
index 1c9c22adc..e9301d99b 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/bugs.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/bugs.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Bugs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="license.html" title="License" /><link rel="next" href="setup.html" title="Chapter 2. Setup" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Bugs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.bugs"></a>Bugs</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.impl"></a>Implementation Bugs</h3></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Bugs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="license.html" title="License" /><link rel="next" href="setup.html" title="Chapter 2. Setup" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Bugs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.bugs"></a>Bugs</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.impl"></a>Implementation Bugs</h3></div></div></div><p>
Information on known bugs, details on efforts to fix them, and
fixed bugs are all available as part of the <a class="link" href="http://gcc.gnu.org/bugs/" target="_top">GCC bug tracking system</a>,
with the category set to <code class="literal">libstdc++</code>.
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/concept_checking.html b/gcc-4.8/libstdc++-v3/doc/html/manual/concept_checking.html
index e115a5e19..883eb5a77 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/concept_checking.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/concept_checking.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concept Checking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="diagnostics.html" title="Chapter 5.  Diagnostics" /><link rel="prev" href="diagnostics.html" title="Chapter 5.  Diagnostics" /><link rel="next" href="utilities.html" title="Chapter 6.  Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concept Checking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><th width="60%" align="center">Chapter 5. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concept Checking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="diagnostics.html" title="Chapter 5.  Diagnostics" /><link rel="prev" href="diagnostics.html" title="Chapter 5.  Diagnostics" /><link rel="next" href="utilities.html" title="Chapter 6.  Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concept Checking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><th width="60%" align="center">Chapter 5. 
Diagnostics
</th><td width="20%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.concept_checking"></a>Concept Checking</h2></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/concurrency.html b/gcc-4.8/libstdc++-v3/doc/html/manual/concurrency.html
index 22f5bac74..fe2795d8b 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/concurrency.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/concurrency.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 15.  Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library, mutex, thread, future, condition_variable" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="atomics.html" title="Chapter 14.  Atomics" /><link rel="next" href="extensions.html" title="Part III.  Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 15.  Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library, mutex, thread, future, condition_variable" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="atomics.html" title="Chapter 14.  Atomics" /><link rel="next" href="extensions.html" title="Part III.  Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. 
Concurrency
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
</th><td width="20%" align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.concurrency"></a>Chapter 15. 
Concurrency
- <a id="idp16404464" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></div><p>
+ <a id="idm269999126816" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></div><p>
Facilities for concurrent operation, and control thereof.
</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.concurrency.api"></a>API Reference</h2></div></div></div><p>
All items are declared in one of four standard header files.
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/configure.html b/gcc-4.8/libstdc++-v3/doc/html/manual/configure.html
index 34f201684..5526dee44 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/configure.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/configure.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Configure</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, configure, options" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="setup.html" title="Chapter 2. Setup" /><link rel="next" href="make.html" title="Make" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Configure</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.configure"></a>Configure</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Configure</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, configure, options" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="setup.html" title="Chapter 2. Setup" /><link rel="next" href="make.html" title="Make" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Configure</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.configure"></a>Configure</h2></div></div></div><p>
When configuring libstdc++, you'll have to configure the entire
<span class="emphasis"><em>gccsrcdir</em></span> directory. Consider using the
toplevel gcc configuration option
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/containers.html b/gcc-4.8/libstdc++-v3/doc/html/manual/containers.html
index 4652eda44..6c84f020b 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/containers.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/containers.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 9.  Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="facets.html" title="Facets" /><link rel="next" href="associative.html" title="Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 9.  Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="facets.html" title="Facets" /><link rel="next" href="associative.html" title="Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. 
Containers
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
</th><td width="20%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers"></a>Chapter 9. 
Containers
- <a id="idp16037808" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.sequences"></a>Sequences</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"></a>list</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
+ <a id="idm269999493408" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.sequences"></a>Sequences</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"></a>list</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
Yes it is, and that's okay. This is a decision that we preserved
when we imported SGI's STL implementation. The following is
quoted from <a class="link" href="http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/containers_and_c.html b/gcc-4.8/libstdc++-v3/doc/html/manual/containers_and_c.html
index 2887ec268..c8f44defb 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/containers_and_c.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/containers_and_c.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="unordered_associative.html" title="Unordered Associative" /><link rel="next" href="iterators.html" title="Chapter 10.  Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unordered_associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="unordered_associative.html" title="Unordered Associative" /><link rel="next" href="iterators.html" title="Chapter 10.  Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unordered_associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
Containers
</th><td width="20%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.c"></a>Interacting with C</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.c.vs_array"></a>Containers vs. Arrays</h3></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/debug.html b/gcc-4.8/libstdc++-v3/doc/html/manual/debug.html
index 9193cf671..458a1379e 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/debug.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/debug.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Debugging Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_exceptions.html" title="Exceptions" /><link rel="next" href="std_contents.html" title="Part II.  Standard Contents" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Debugging Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="std_contents.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.debug"></a>Debugging Support</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Debugging Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_exceptions.html" title="Exceptions" /><link rel="next" href="std_contents.html" title="Part II.  Standard Contents" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Debugging Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="std_contents.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.debug"></a>Debugging Support</h2></div></div></div><p>
There are numerous things that can be done to improve the ease with
which C++ binaries are debugged when using the GNU tool chain. Here
are some of them.
@@ -161,7 +161,7 @@
DRD</a>,
<a class="link" href="http://valgrind.org/docs/manual/hg-manual.html" target="_top">
Helgrind</a>, and
- <a class="link" href="http://code.google.com/p/data-race-test" target="_top">
+ <a class="link" href="http://code.google.com/p/data-race-test/" target="_top">
ThreadSanitizer</a>.
</p><p>
With DRD, Helgrind and ThreadSanitizer you will need to define
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode.html b/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode.html
index a297c181b..35d9c809a 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 17. Debug Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /><link rel="next" href="debug_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 17. Debug Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 17. Debug Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /><link rel="next" href="debug_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 17. Debug Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode"></a>Chapter 17. Debug Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
+</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode"></a>Chapter 17. Debug Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.intro"></a>Intro</h2></div></div></div><p>
By default, libstdc++ is built with efficiency in mind, and
therefore performs little or no error checking that is not
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_design.html b/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_design.html
index ccb8575e2..747f192c4 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_design.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_design.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode_using.html" title="Using" /><link rel="next" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_using.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.design"></a>Design</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode_using.html" title="Using" /><link rel="next" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_using.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.design"></a>Design</h2></div></div></div><p>
</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.goals"></a>Goals</h3></div></div></div><p>
</p><p> The libstdc++ debug mode replaces unsafe (but efficient) standard
containers and iterators with semantically equivalent safe standard
@@ -391,7 +391,7 @@ test02()
</p><p> There are several existing implementations of debug modes for C++
standard library implementations, although none of them directly
supports debugging for programs using libstdc++. The existing
- implementations include:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><a class="link" href="http://www.mathcs.sjsu.edu/faculty/horstman/safestl.html" target="_top">SafeSTL</a>:
+ implementations include:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><a class="link" href="http://www.cs.sjsu.edu/faculty/horstman/safestl.html" target="_top">SafeSTL</a>:
SafeSTL was the original debugging version of the Standard Template
Library (STL), implemented by Cay S. Horstmann on top of the
Hewlett-Packard STL. Though it inspired much work in this area, it
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_semantics.html b/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_semantics.html
index 439cf6057..e877ca619 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_semantics.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_semantics.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="next" href="debug_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.semantics"></a>Semantics</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="next" href="debug_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.semantics"></a>Semantics</h2></div></div></div><p>
</p><p>A program that uses the C++ standard library correctly
will maintain the same semantics under debug mode as it had with
the normal (release) library. All functional and exception-handling
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_using.html b/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_using.html
index d9f7172f9..7ad6b2c88 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_using.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/debug_mode_using.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode_semantics.html" title="Semantics" /><link rel="next" href="debug_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.using"></a>Using</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode_semantics.html" title="Semantics" /><link rel="next" href="debug_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.using"></a>Using</h2></div></div></div><p>
</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.mode"></a>Using the Debug Mode</h3></div></div></div><p>To use the libstdc++ debug mode, compile your application with the
compiler flag <code class="code">-D_GLIBCXX_DEBUG</code>. Note that this flag
changes the sizes and behavior of standard class templates such
@@ -18,6 +18,6 @@
mode or with debug mode. The
following table provides the names and headers of the debugging
containers:
-</p><div class="table"><a id="idp16490400"></a><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++11 mode, these additional
+</p><div class="table"><a id="idm269999040896"></a><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++11 mode, these additional
containers have additional debug capability.
-</p><div class="table"><a id="idp16535296"></a><p class="title"><strong>Table 17.2. Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html> \ No newline at end of file
+</p><div class="table"><a id="idm269998996000"></a><p class="title"><strong>Table 17.2. Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/diagnostics.html b/gcc-4.8/libstdc++-v3/doc/html/manual/diagnostics.html
index 82c58e6f5..f7d90b0c8 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/diagnostics.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/diagnostics.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 5.  Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="concept_checking.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 5.  Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="concept_checking.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. 
Diagnostics
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
</th><td width="20%" align="right"> <a accesskey="n" href="concept_checking.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics"></a>Chapter 5. 
Diagnostics
- <a id="idp13835248" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.exceptions"></a>Exceptions</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
+ <a id="idm270001697504" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.exceptions"></a>Exceptions</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
All exception objects are defined in one of the standard header
files: <code class="filename">exception</code>,
<code class="filename">stdexcept</code>, <code class="filename">new</code>, and
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/documentation_hacking.html b/gcc-4.8/libstdc++-v3/doc/html/manual/documentation_hacking.html
index e84c8fd49..5d062093a 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/documentation_hacking.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/documentation_hacking.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Writing and Generating Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, documentation, style, docbook, doxygen" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="next" href="internals.html" title="Porting to New Hardware or Operating Systems" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Writing and Generating Documentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Writing and Generating Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, documentation, style, docbook, doxygen" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="next" href="internals.html" title="Porting to New Hardware or Operating Systems" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Writing and Generating Documentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
Porting and Maintenance
</th><td width="20%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.doc"></a>Writing and Generating Documentation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.intro"></a>Introduction</h3></div></div></div><p>
@@ -112,7 +112,7 @@
supported, and are always aliased to dummy rules. These
unsupported formats are: <span class="emphasis"><em>info</em></span>,
<span class="emphasis"><em>ps</em></span>, and <span class="emphasis"><em>dvi</em></span>.
- </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"></a>Doxygen</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idp22162432"></a><p class="title"><strong>Table B.1. Doxygen Prerequisites</strong></p><div class="table-contents"><table summary="Doxygen Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">coreutils</td><td align="center">8.5</td><td align="center">all</td></tr><tr><td align="center">bash</td><td align="center">4.1</td><td align="center">all</td></tr><tr><td align="center">doxygen</td><td align="center">1.7.6.1</td><td align="center">all</td></tr><tr><td align="center">graphviz</td><td align="center">2.26</td><td align="center">graphical hierarchies</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"></a>Doxygen</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idm269993370272"></a><p class="title"><strong>Table B.1. Doxygen Prerequisites</strong></p><div class="table-contents"><table summary="Doxygen Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">coreutils</td><td align="center">8.5</td><td align="center">all</td></tr><tr><td align="center">bash</td><td align="center">4.1</td><td align="center">all</td></tr><tr><td align="center">doxygen</td><td align="center">1.7.6.1</td><td align="center">all</td></tr><tr><td align="center">graphviz</td><td align="center">2.26</td><td align="center">graphical hierarchies</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr></tbody></table></div></div><br class="table-break" /><p>
Prerequisite tools are Bash 2.0 or later,
<a class="link" href="http://www.doxygen.org/" target="_top">Doxygen</a>, and
the <a class="link" href="http://www.gnu.org/software/coreutils/" target="_top">GNU
@@ -232,9 +232,8 @@
member functions.
</p><p>
Some commentary to accompany
- the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/docblocks.html" target="_top">Special
- Documentation Blocks</a> section of
- the Doxygen manual:
+ the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html" target="_top">Special
+ Documentation Blocks</a> section of the Doxygen manual:
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>For longer comments, use the Javadoc style...</p></li><li class="listitem"><p>
...not the Qt style. The intermediate *'s are preferred.
</p></li><li class="listitem"><p>
@@ -310,7 +309,7 @@
writing Doxygen comments. Single and double quotes, and
separators in filenames are two common trouble spots. When in
doubt, consult the following table.
- </p><div class="table"><a id="idp22238096"></a><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"></a>Docbook</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idp22257536"></a><p class="title"><strong>Table B.3. Docbook Prerequisites</strong></p><div class="table-contents"><table summary="Docbook Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">docbook5-style-xsl</td><td align="center">1.76.1</td><td align="center">all</td></tr><tr><td align="center">xsltproc</td><td align="center">1.1.26</td><td align="center">all</td></tr><tr><td align="center">xmllint</td><td align="center">2.7.7</td><td align="center">validation</td></tr><tr><td align="center">dblatex</td><td align="center">0.3</td><td align="center">pdf output</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr><tr><td align="center">docbook2X</td><td align="center">0.8.8</td><td align="center">info output</td></tr><tr><td align="center">epub3 stylesheets</td><td align="center">b3</td><td align="center">epub output</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ </p><div class="table"><a id="idm269993294592"></a><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"></a>Docbook</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idm269993275152"></a><p class="title"><strong>Table B.3. Docbook Prerequisites</strong></p><div class="table-contents"><table summary="Docbook Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">docbook5-style-xsl</td><td align="center">1.76.1</td><td align="center">all</td></tr><tr><td align="center">xsltproc</td><td align="center">1.1.26</td><td align="center">all</td></tr><tr><td align="center">xmllint</td><td align="center">2.7.7</td><td align="center">validation</td></tr><tr><td align="center">dblatex</td><td align="center">0.3</td><td align="center">pdf output</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr><tr><td align="center">docbook2X</td><td align="center">0.8.8</td><td align="center">info output</td></tr><tr><td align="center">epub3 stylesheets</td><td align="center">b3</td><td align="center">epub output</td></tr></tbody></table></div></div><br class="table-break" /><p>
Editing the DocBook sources requires an XML editor. Many
exist: some notable options
include <span class="command"><strong>emacs</strong></span>, <span class="application">Kate</span>,
@@ -520,11 +519,11 @@ make <code class="literal">XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwal
<a class="link" href="http://www.docbook.org/tdg/en/html/part2.html" target="_top">online</a>.
An incomplete reference for HTML to Docbook conversion is
detailed in the table below.
- </p><div class="table"><a id="idp22335040"></a><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
+ </p><div class="table"><a id="idm269993197520"></a><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
&lt;literallayout&gt;</td></tr><tr><td align="left">&lt;ul&gt;</td><td align="left">&lt;itemizedlist&gt;</td></tr><tr><td align="left">&lt;ol&gt;</td><td align="left">&lt;orderedlist&gt;</td></tr><tr><td align="left">&lt;il&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;dl&gt;</td><td align="left">&lt;variablelist&gt;</td></tr><tr><td align="left">&lt;dt&gt;</td><td align="left">&lt;term&gt;</td></tr><tr><td align="left">&lt;dd&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;a href=""&gt;</td><td align="left">&lt;ulink url=""&gt;</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">&lt;literal&gt;, &lt;programlisting&gt;</td></tr><tr><td align="left">&lt;strong&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">"</td><td align="left">&lt;quote&gt;</td></tr></tbody></table></div></div><br class="table-break" /><p>
And examples of detailed markup for which there are no real HTML
equivalents are listed in the table below.
-</p><div class="table"><a id="idp22359184"></a><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
+</p><div class="table"><a id="idm269993173376"></a><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
<p>&lt;function&gt;clear()&lt;/function&gt;</p>
<p>&lt;function&gt;fs.clear()&lt;/function&gt;</p>
</td></tr><tr><td align="left">&lt;type&gt;</td><td align="left">&lt;type&gt;long long&lt;/type&gt;</td></tr><tr><td align="left">&lt;varname&gt;</td><td align="left">&lt;varname&gt;fs&lt;/varname&gt;</td></tr><tr><td align="left">&lt;literal&gt;</td><td align="left">
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/dynamic_memory.html b/gcc-4.8/libstdc++-v3/doc/html/manual/dynamic_memory.html
index 0602e60ba..a59148042 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/dynamic_memory.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/dynamic_memory.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Dynamic Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="Chapter 4.  Support" /><link rel="prev" href="support.html" title="Chapter 4.  Support" /><link rel="next" href="termination.html" title="Termination" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Dynamic Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><th width="60%" align="center">Chapter 4. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Dynamic Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="Chapter 4.  Support" /><link rel="prev" href="support.html" title="Chapter 4.  Support" /><link rel="next" href="termination.html" title="Termination" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Dynamic Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><th width="60%" align="center">Chapter 4. 
Support
</th><td width="20%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.memory"></a>Dynamic Memory</h2></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_algorithms.html b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_algorithms.html
index 53d41266e..2ff989e2f 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_algorithms.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_algorithms.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 25. Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_utilities.html" title="Chapter 24. Utilities" /><link rel="next" href="ext_numerics.html" title="Chapter 26. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Algorithms</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 25. Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_utilities.html" title="Chapter 24. Utilities" /><link rel="next" href="ext_numerics.html" title="Chapter 26. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Algorithms</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
</th><td width="20%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.algorithms"></a>Chapter 25. Algorithms</h2></div></div></div><p>25.1.6 (count, count_if) is extended with two more versions of count
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_compile_checks.html b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_compile_checks.html
index cab9b3545..3850c52ec 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_compile_checks.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_compile_checks.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 16. Compile Time Checks</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_preface.html" title="" /><link rel="next" href="debug_mode.html" title="Chapter 17. Debug Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Compile Time Checks</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_preface.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 16. Compile Time Checks</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_preface.html" title="" /><link rel="next" href="debug_mode.html" title="Chapter 17. Debug Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Compile Time Checks</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_preface.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.compile_checks"></a>Chapter 16. Compile Time Checks</h2></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency.html b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency.html
index fed1ee792..ad3eac442 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 30. Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_demangling.html" title="Chapter 29. Demangling" /><link rel="next" href="ext_concurrency_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 30. Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 30. Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_demangling.html" title="Chapter 29. Demangling" /><link rel="next" href="ext_concurrency_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 30. Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"></a>Chapter 30. Concurrency</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_use.html">Use</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename">&lt;ext/concurrence.h&gt;</code>
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"></a>Chapter 30. Concurrency</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_use.html">Use</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename">&lt;ext/concurrence.h&gt;</code>
contains all the higher-level
constructs for playing with threads. In contrast to the atomics layer,
the concurrence layer consists largely of types. All types are defined within <code class="code">namespace __gnu_cxx</code>.
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
index 8c5efef3f..f585cd99e 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="next" href="ext_concurrency_use.html" title="Use" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_use.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"></a>Using Builtin Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="next" href="ext_concurrency_use.html" title="Use" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_use.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"></a>Using Builtin Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either
implemented via compiler intrinsics (if the underlying host is
capable) or by library fallbacks.</p><p>Compiler intrinsics (builtins) are always preferred. However, as
the compiler builtins for atomics are not universally implemented,
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency_use.html b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency_use.html
index fbbd09b93..646ef624d 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency_use.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_concurrency_use.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Use</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency_impl.html" title="Implementation" /><link rel="next" href="appendix.html" title="Part IV.  Appendices" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="appendix.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.use"></a>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows:
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Use</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency_impl.html" title="Implementation" /><link rel="next" href="appendix.html" title="Part IV.  Appendices" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="appendix.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.use"></a>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows:
</p><pre class="programlisting">
#include &lt;ext/concurrence.h&gt;
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_containers.html b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_containers.html
index c6a795b95..224da127f 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_containers.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_containers.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 23. HP/SGI Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="policy_data_structures_ack.html" title="Acknowledgments" /><link rel="next" href="ext_sgi.html" title="Deprecated" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. HP/SGI Extensions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 23. HP/SGI Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="policy_data_structures_ack.html" title="Acknowledgments" /><link rel="next" href="ext_sgi.html" title="Deprecated" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. HP/SGI Extensions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_sgi.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"></a>Chapter 23. HP/SGI Extensions</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="ext_sgi.html">Deprecated</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.sgi"></a>Backwards Compatibility</h2></div></div></div><p>A few extensions and nods to backwards-compatibility have
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_sgi.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"></a>Chapter 23. HP/SGI Extensions</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="ext_sgi.html">Deprecated</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.sgi"></a>Backwards Compatibility</h2></div></div></div><p>A few extensions and nods to backwards-compatibility have
been made with containers. Those dealing with older SGI-style
allocators are dealt with elsewhere. The remaining ones all deal
with bits:
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_demangling.html b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_demangling.html
index 84e40e33f..3091976c4 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_demangling.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_demangling.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 29. Demangling</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_io.html" title="Chapter 28. Input and Output" /><link rel="next" href="ext_concurrency.html" title="Chapter 30. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 29. Demangling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 29. Demangling</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_io.html" title="Chapter 28. Input and Output" /><link rel="next" href="ext_concurrency.html" title="Chapter 30. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 29. Demangling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.demangle"></a>Chapter 29. Demangling</h2></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_io.html b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_io.html
index f3394b053..c99a49f5b 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_io.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_io.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 28. Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_iterators.html" title="Chapter 27. Iterators" /><link rel="next" href="ext_demangling.html" title="Chapter 29. Demangling" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 28. Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_iterators.html" title="Chapter 27. Iterators" /><link rel="next" href="ext_demangling.html" title="Chapter 29. Demangling" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"></a>Chapter 28. Input and Output</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"></a>Chapter 28. Input and Output</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p>
Extensions allowing <code class="code">filebuf</code>s to be constructed from
"C" types like FILE*s and file descriptors.
</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.io.filebuf_derived"></a>Derived filebufs</h2></div></div></div><p>The v2 library included non-standard extensions to construct
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_iterators.html b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_iterators.html
index ea3822b57..83c078017 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_iterators.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_iterators.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 27. Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_numerics.html" title="Chapter 26. Numerics" /><link rel="next" href="ext_io.html" title="Chapter 28. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Iterators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 27. Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_numerics.html" title="Chapter 26. Numerics" /><link rel="next" href="ext_io.html" title="Chapter 28. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Iterators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
</th><td width="20%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.iterators"></a>Chapter 27. Iterators</h2></div></div></div><p>24.3.2 describes <code class="code">struct iterator</code>, which didn't exist in the
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_numerics.html b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_numerics.html
index 408fa626b..720eccfcf 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_numerics.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_numerics.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 26. Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_algorithms.html" title="Chapter 25. Algorithms" /><link rel="next" href="ext_iterators.html" title="Chapter 27. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. Numerics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 26. Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_algorithms.html" title="Chapter 25. Algorithms" /><link rel="next" href="ext_iterators.html" title="Chapter 27. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. Numerics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
</th><td width="20%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.numerics"></a>Chapter 26. Numerics</h2></div></div></div><p>26.4, the generalized numeric operations such as <code class="code">accumulate</code>,
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_preface.html b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_preface.html
index 851a3d804..9647118b8 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_preface.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_preface.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="extensions.html" title="Part III.  Extensions" /><link rel="next" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="extensions.html" title="Part III.  Extensions" /><link rel="next" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a id="idp16425920"></a></h1></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a id="idm269999105296"></a></h1></div></div></div><p>
Here we will make an attempt at describing the non-Standard
extensions to the library. Some of these are from older versions of
standard library components, namely SGI's STL, and some of these are
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_sgi.html b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_sgi.html
index e77e2c63f..a39ff6caf 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_sgi.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_sgi.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Deprecated</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="prev" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="next" href="ext_utilities.html" title="Chapter 24. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><th width="60%" align="center">Chapter 23. HP/SGI Extensions</th><td width="20%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.deprecated_sgi"></a>Deprecated</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Deprecated</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="prev" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="next" href="ext_utilities.html" title="Chapter 24. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><th width="60%" align="center">Chapter 23. HP/SGI Extensions</th><td width="20%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.deprecated_sgi"></a>Deprecated</h2></div></div></div><p>
The SGI hashing classes <code class="classname">hash_set</code> and
<code class="classname">hash_set</code> have been deprecated by the
unordered_set, unordered_multiset, unordered_map,
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_utilities.html b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_utilities.html
index c3a9a1956..01c86714f 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/ext_utilities.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/ext_utilities.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 24. Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_sgi.html" title="Deprecated" /><link rel="next" href="ext_algorithms.html" title="Chapter 25. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Utilities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_sgi.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 24. Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_sgi.html" title="Deprecated" /><link rel="next" href="ext_algorithms.html" title="Chapter 25. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Utilities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_sgi.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
</th><td width="20%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.util"></a>Chapter 24. Utilities</h2></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/extensions.html b/gcc-4.8/libstdc++-v3/doc/html/manual/extensions.html
index 93540a694..7683fa86a 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/extensions.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/extensions.html
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part III.  Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="ext_preface.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part III.  Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="ext_preface.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. 
Extensions
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="ext_preface.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.ext"></a>Part III. 
Extensions
- <a id="idp16423680" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="preface"><a href="ext_preface.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
+ <a id="idm269999107536" class="indexterm"></a>
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="preface"><a href="ext_preface.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="mt_allocator.html">20. The mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="chapter"><a href="bitmap_allocator.html">21. The bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="policy_data_structures.html">22. Policy-Based Data Structures</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
Configuring via Template Parameters
</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/facets.html b/gcc-4.8/libstdc++-v3/doc/html/manual/facets.html
index 7d98192c7..d22f0c227 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/facets.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/facets.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Facets</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="localization.html" title="Chapter 8.  Localization" /><link rel="prev" href="localization.html" title="Chapter 8.  Localization" /><link rel="next" href="containers.html" title="Chapter 9.  Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Facets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><th width="60%" align="center">Chapter 8. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Facets</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="localization.html" title="Chapter 8.  Localization" /><link rel="prev" href="localization.html" title="Chapter 8.  Localization" /><link rel="next" href="containers.html" title="Chapter 9.  Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Facets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><th width="60%" align="center">Chapter 8. 
Localization
-</th><td width="20%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.facet"></a>Facets</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15778336"></a>Specializations</h5></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.facet"></a>Facets</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999753024"></a>Specializations</h5></div></div></div><p>
For the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt; ,
conversions are made between the internal character set (always UCS4
on GNU/Linux) and whatever the currently selected locale for the
@@ -49,24 +49,24 @@ characters.
</p></li><li class="listitem"><p>
Rename abstract base class. See if just smash-overriding is a
better approach. Clarify, add sanity to naming.
- </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15793392"></a><p><span class="citetitle"><em class="citetitle">
+ </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999738032"></a><p><span class="citetitle"><em class="citetitle">
The GNU C Library
- </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="idp15798144"></a><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="idm269999733280"></a><p><span class="citetitle"><em class="citetitle">
Correspondence
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp15801232"></a><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269999730192"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 14882:1998 Programming languages - C++
- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15803520"></a><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999727904"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 9899:1999 Programming languages - C
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15805792"></a><p><span class="title"><em>
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999725632"></a><p><span class="title"><em>
<a class="link" href="http://www.unix.org/version3/ieee_std.html" target="_top">
The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
</a>
</em>. </span><span class="copyright">Copyright © 1999
- The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idp15809040"></a><p><span class="citetitle"><em class="citetitle">
+ The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idm269999722384"></a><p><span class="citetitle"><em class="citetitle">
The C++ Programming Language, Special Edition
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
Addison Wesley
- . </span></span></p></div><div class="biblioentry"><a id="idp15813664"></a><p><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999717760"></a><p><span class="citetitle"><em class="citetitle">
Standard C++ IOStreams and Locales
</em>. </span><span class="subtitle">
Advanced Programmer's Guide and Reference
@@ -409,42 +409,42 @@ codecvt usage.
</p></li><li class="listitem"><p>
wchar_t/char internal buffers and conversions between
internal/external buffers?
- </p></li></ul></div></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15891136"></a><p><span class="citetitle"><em class="citetitle">
+ </p></li></ul></div></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999640080"></a><p><span class="citetitle"><em class="citetitle">
The GNU C Library
</em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
Chapters 6 Character Set Handling and 7 Locales and Internationalization
- . </span></p></div><div class="biblioentry"><a id="idp15895888"></a><p><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry"><a id="idm269999635328"></a><p><span class="citetitle"><em class="citetitle">
Correspondence
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp15898976"></a><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269999632240"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 14882:1998 Programming languages - C++
- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15901264"></a><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999629952"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 9899:1999 Programming languages - C
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15903536"></a><p><span class="title"><em>
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999627680"></a><p><span class="title"><em>
<a class="link" href="http://www.opengroup.org/austin/" target="_top">
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
</a>
</em>. </span><span class="copyright">Copyright © 2008
The Open Group/The Institute of Electrical and Electronics
Engineers, Inc.
- . </span></p></div><div class="biblioentry"><a id="idp15906768"></a><p><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry"><a id="idm269999624448"></a><p><span class="citetitle"><em class="citetitle">
The C++ Programming Language, Special Edition
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
Addison Wesley
- . </span></span></p></div><div class="biblioentry"><a id="idp15911392"></a><p><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999619824"></a><p><span class="citetitle"><em class="citetitle">
Standard C++ IOStreams and Locales
</em>. </span><span class="subtitle">
Advanced Programmer's Guide and Reference
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
Addison Wesley Longman
- . </span></span></p></div><div class="biblioentry"><a id="idp15917056"></a><p><span class="title"><em>
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999614160"></a><p><span class="title"><em>
<a class="link" href="http://www.lysator.liu.se/c/na1.html" target="_top">
A brief description of Normative Addendum 1
</a>
- </em>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry"><a id="idp15920304"></a><p><span class="title"><em>
+ </em>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry"><a id="idm269999610912"></a><p><span class="title"><em>
<a class="link" href="http://tldp.org/HOWTO/Unicode-HOWTO.html" target="_top">
The Unicode HOWTO
</a>
- </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="idp15923088"></a><p><span class="title"><em>
+ </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="idm269999608128"></a><p><span class="title"><em>
<a class="link" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top">
UTF-8 and Unicode FAQ for Unix/Linux
</a>
@@ -690,39 +690,39 @@ void test01()
model. As of this writing, it is unknown how to query to see
if a specified message catalog exists using the gettext
package.
- </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp16003632"></a><p><span class="citetitle"><em class="citetitle">
+ </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999527584"></a><p><span class="citetitle"><em class="citetitle">
The GNU C Library
</em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling, and 7 Locales and Internationalization
- . </span></p></div><div class="biblioentry"><a id="idp16008384"></a><p><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry"><a id="idm269999522832"></a><p><span class="citetitle"><em class="citetitle">
Correspondence
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp16011472"></a><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269999519744"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 14882:1998 Programming languages - C++
- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp16013760"></a><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999517456"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 9899:1999 Programming languages - C
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp16016032"></a><p><span class="title"><em>
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999515184"></a><p><span class="title"><em>
<a class="link" href="http://www.opengroup.org/austin/" target="_top">
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
</a>
</em>. </span><span class="copyright">Copyright © 2008
The Open Group/The Institute of Electrical and Electronics
Engineers, Inc.
- . </span></p></div><div class="biblioentry"><a id="idp16019264"></a><p><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry"><a id="idm269999511952"></a><p><span class="citetitle"><em class="citetitle">
The C++ Programming Language, Special Edition
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
Addison Wesley
- . </span></span></p></div><div class="biblioentry"><a id="idp16023888"></a><p><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999507328"></a><p><span class="citetitle"><em class="citetitle">
Standard C++ IOStreams and Locales
</em>. </span><span class="subtitle">
Advanced Programmer's Guide and Reference
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
Addison Wesley Longman
- . </span></span></p></div><div class="biblioentry"><a id="idp16029552"></a><p><span class="title"><em>
- <a class="link" href="http://java.sun.com/reference/api/index.html" target="_top">
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999501664"></a><p><span class="title"><em>
+ <a class="link" href="http://www.oracle.com/technetwork/java/api/index.html" target="_top">
API Specifications, Java Platform
</a>
</em>. </span><span class="pagenums">java.util.Properties, java.text.MessageFormat,
java.util.Locale, java.util.ResourceBundle
- . </span></p></div><div class="biblioentry"><a id="idp16031888"></a><p><span class="title"><em>
+ . </span></p></div><div class="biblioentry"><a id="idm269999499328"></a><p><span class="title"><em>
<a class="link" href="https://www.gnu.org/software/gettext/" target="_top">
GNU gettext tools, version 0.10.38, Native Language Support
Library and Tools.
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/fstreams.html b/gcc-4.8/libstdc++-v3/doc/html/manual/fstreams.html
index 85d138546..a6675101e 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/fstreams.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/fstreams.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>File Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="stringstreams.html" title="Memory Based Streams" /><link rel="next" href="io_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">File Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>File Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="stringstreams.html" title="Memory Based Streams" /><link rel="next" href="io_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">File Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
Input and Output
</th><td width="20%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.filestreams"></a>File Based Streams</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.copying_a_file"></a>Copying a File</h3></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html b/gcc-4.8/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
index a3ff015f4..c7c9325df 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Generalized Operations</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="prev" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="next" href="numerics_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Generalized Operations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><th width="60%" align="center">Chapter 12. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Generalized Operations</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="prev" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="next" href="numerics_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Generalized Operations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><th width="60%" align="center">Chapter 12. 
Numerics
</th><td width="20%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.generalized_ops"></a>Generalized Operations</h2></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/index.html b/gcc-4.8/libstdc++-v3/doc/html/manual/index.html
index 4561b3aac..8f9861b28 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/index.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/index.html
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library Manual</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="../index.html" title="The GNU C++ Library" /><link rel="prev" href="../index.html" title="The GNU C++ Library" /><link rel="next" href="intro.html" title="Part I.  Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library Manual</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><div><div><h1 class="title"><a id="manual"></a>The GNU C++ Library Manual</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname"></span> <span class="surname"></span></h3></div><div class="author"><h3 class="author"><span class="firstname">Paolo</span> <span class="surname">Carlini</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Phil</span> <span class="surname">Edwards</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Doug</span> <span class="surname">Gregor</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Dhruv</span> <span class="surname">Matani</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jason</span> <span class="surname">Merrill</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Mark</span> <span class="surname">Mitchell</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Nathan</span> <span class="surname">Myers</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Felix</span> <span class="surname">Natter</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Olsson</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Ami</span> <span class="surname">Tavory</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Wakely</span></h3></div></div></div><div><p class="copyright">Copyright © 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library Manual</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="../index.html" title="The GNU C++ Library" /><link rel="prev" href="../index.html" title="The GNU C++ Library" /><link rel="next" href="intro.html" title="Part I.  Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library Manual</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><div><div><h1 class="title"><a id="manual"></a>The GNU C++ Library Manual</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname"></span> <span class="surname"></span></h3></div><div class="author"><h3 class="author"><span class="firstname">Paolo</span> <span class="surname">Carlini</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Phil</span> <span class="surname">Edwards</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Doug</span> <span class="surname">Gregor</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Dhruv</span> <span class="surname">Matani</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jason</span> <span class="surname">Merrill</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Mark</span> <span class="surname">Mitchell</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Nathan</span> <span class="surname">Myers</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Felix</span> <span class="surname">Natter</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Olsson</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Ami</span> <span class="surname">Tavory</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Wakely</span></h3></div></div></div><div><p class="copyright">Copyright © 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
<a class="link" href="http://www.fsf.org" target="_top">FSF</a>
- </p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="part"><a href="intro.html">I.
+ </p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="part"><a href="intro.html">I.
Introduction
</a></span></dt><dd><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="std_contents.html">II.
@@ -15,13 +15,13 @@
</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
Utilities
-</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
+</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
Strings
</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8.
Localization
-</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
+</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
Containers
</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10.
@@ -143,19 +143,19 @@ Support for C++11 dialect.
</a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D.
<acronym class="acronym">GNU</acronym> General Public License version 3
- </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>22.1. <a href="policy_data_structures.html#idp17613296">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idp17619952">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idp17651648">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idp17666528">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idp17675840">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idp17743424">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idp17806128">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp18000448">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
+ </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>22.1. <a href="policy_data_structures.html#idm269997917584">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idm269997910864">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idm269997879168">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idm269997864256">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idm269997855056">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idm269997787392">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idm269997724688">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269997530416">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
Effect of embedded lists in
<code class="classname">std::multimap</code>
- </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idp18023952">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idp18043824">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idp18057168">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idp18087392">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idp18127536">Hash functions, ranged-hash functions, and
- range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idp18191968">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idp18199024">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idp18215840">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idp18234944">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idp18265728">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idp18273504">Standard resize policy trigger sequence
- diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idp18277664">Standard resize policy size sequence
- diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idp18355696">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idp18365136">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idp18378304">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idp18389968">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idp18398144">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idp18420400">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idp18465088">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idp18475584">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idp18506160">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idp18511744">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idp18575568">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idp18610544">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idp22035648">Configure and Build File Dependencies</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="status.html#idp452240">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idp8670848">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idp7483200">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#idp12559072">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idp13051936">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idp13079360">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idp13115840">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idp13140576">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idp13192016">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idp13221904">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idp13238832">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idp13259904">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idp13265424">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idp13271824">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idp13307552">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idp13322320">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idp13335696">Extension Parallel Headers</a></dt><dt>17.1. <a href="debug_mode_using.html#idp16490400">Debugging Containers</a></dt><dt>17.2. <a href="debug_mode_using.html#idp16535296">Debugging Containers C++11</a></dt><dt>18.1. <a href="parallel_mode_using.html#idp16725920">Parallel Algorithms</a></dt><dt>19.1. <a href="profile_mode_design.html#idp16981200">Profile Code Location</a></dt><dt>19.2. <a href="profile_mode_diagnostics.html#idp17088912">Profile Diagnostics</a></dt><dt>21.1. <a href="bitmap_allocator_impl.html#idp17500848">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idp22162432">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idp22238096">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idp22257536">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idp22335040">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idp22359184">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idp23030528">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idp23058160">Extension Allocators Continued</a></dt></dl></div><div class="list-of-equations"><p><strong>List of Equations</strong></p><dl><dt>22.1. <a href="policy_data_structures_design.html#idp18141344">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idp18147232">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idp18151744">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idp18153568">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idp18163200">
+ </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idm269997506912">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idm269997487104">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idm269997473760">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idm269997443664">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idm269997403584">Hash functions, ranged-hash functions, and
+ range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idm269997339216">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idm269997332160">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idm269997315408">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idm269997296368">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idm269997265648">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idm269997257872">Standard resize policy trigger sequence
+ diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idm269997253712">Standard resize policy size sequence
+ diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idm269997175616">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idm269997166176">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idm269997153072">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idm269997141408">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idm269997133232">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idm269997110976">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idm269997066288">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idm269997055856">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idm269997025344">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idm269997019760">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idm269996955920">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idm269996920880">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idm269993497120">Configure and Build File Dependencies</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="status.html#idm270008034928">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idm270007982624">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idm270006687472">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#idm270002960368">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idm270002481088">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idm270002453792">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idm270002417312">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idm270002392576">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idm270002341136">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idm270002311248">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idm270002294320">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idm270002273248">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idm270002267728">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idm270002261328">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idm270002225600">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idm270002210832">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idm270002197456">Extension Parallel Headers</a></dt><dt>17.1. <a href="debug_mode_using.html#idm269999040896">Debugging Containers</a></dt><dt>17.2. <a href="debug_mode_using.html#idm269998996000">Debugging Containers C++11</a></dt><dt>18.1. <a href="parallel_mode_using.html#idm269998805216">Parallel Algorithms</a></dt><dt>19.1. <a href="profile_mode_design.html#idm269998550064">Profile Code Location</a></dt><dt>19.2. <a href="profile_mode_diagnostics.html#idm269998442544">Profile Diagnostics</a></dt><dt>21.1. <a href="bitmap_allocator_impl.html#idm269998030352">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idm269993370272">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idm269993294592">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idm269993275152">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idm269993197520">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idm269993173376">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idm269992502096">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idm269992474464">Extension Allocators Continued</a></dt></dl></div><div class="list-of-equations"><p><strong>List of Equations</strong></p><dl><dt>22.1. <a href="policy_data_structures_design.html#idm269997389776">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idm269997383888">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idm269997379376">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idm269997377552">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idm269997367984">
A Standard String Hash Function
- </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idp18169344">
+ </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idm269997361840">
Only k String DNA Hash
- </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idp18240448">
+ </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idm269997290864">
Probability of Probe Sequence of Length k
- </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp18247216">
+ </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269997284096">
Probability Probe Sequence in Some Bin
</a></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part I. 
Introduction
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/internals.html b/gcc-4.8/libstdc++-v3/doc/html/manual/internals.html
index 3951cf6c5..559f8bb47 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/internals.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/internals.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Porting to New Hardware or Operating Systems</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, internals" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="documentation_hacking.html" title="Writing and Generating Documentation" /><link rel="next" href="test.html" title="Test" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Porting to New Hardware or Operating Systems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Porting to New Hardware or Operating Systems</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, internals" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="documentation_hacking.html" title="Writing and Generating Documentation" /><link rel="next" href="test.html" title="Test" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Porting to New Hardware or Operating Systems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
Porting and Maintenance
</th><td width="20%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.internals"></a>Porting to New Hardware or Operating Systems</h2></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/intro.html b/gcc-4.8/libstdc++-v3/doc/html/manual/intro.html
index b7eaed9fb..648545149 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/intro.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/intro.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part I.  Introduction</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="index.html" title="The GNU C++ Library Manual" /><link rel="next" href="status.html" title="Chapter 1. Status" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part I. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part I.  Introduction</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="index.html" title="The GNU C++ Library Manual" /><link rel="next" href="status.html" title="Chapter 1. Status" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part I. 
Introduction
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.intro"></a>Part I. 
Introduction
- <a id="idp9040416" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Manual </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html> \ No newline at end of file
+ <a id="idm270013458800" class="indexterm"></a>
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Manual </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/io.html b/gcc-4.8/libstdc++-v3/doc/html/manual/io.html
index c7c972c72..d4caaad46 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/io.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/io.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 13.  Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="numerics_and_c.html" title="Interacting with C" /><link rel="next" href="streambufs.html" title="Stream Buffers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 13.  Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="numerics_and_c.html" title="Interacting with C" /><link rel="next" href="streambufs.html" title="Stream Buffers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. 
Input and Output
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
</th><td width="20%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.io"></a>Chapter 13. 
Input and Output
- <a id="idp16257600" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.objects"></a>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
+ <a id="idm269999273616" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.objects"></a>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
only include the headers you really need. Many people simply include
&lt;iostream&gt; when they don't need to -- and that can <span class="emphasis"><em>penalize
your runtime as well.</em></span> Here are some tips on which header to use
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/io_and_c.html b/gcc-4.8/libstdc++-v3/doc/html/manual/io_and_c.html
index 14eaf486a..65c5b2014 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/io_and_c.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/io_and_c.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="fstreams.html" title="File Based Streams" /><link rel="next" href="atomics.html" title="Chapter 14.  Atomics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="fstreams.html" title="File Based Streams" /><link rel="next" href="atomics.html" title="Chapter 14.  Atomics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
Input and Output
</th><td width="20%" align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.c"></a>Interacting with C</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.FILE"></a>Using FILE* and file descriptors</h3></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/iterators.html b/gcc-4.8/libstdc++-v3/doc/html/manual/iterators.html
index 585185725..6e41e9340 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/iterators.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/iterators.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 10.  Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="containers_and_c.html" title="Interacting with C" /><link rel="next" href="algorithms.html" title="Chapter 11.  Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 10.  Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="containers_and_c.html" title="Interacting with C" /><link rel="next" href="algorithms.html" title="Chapter 11.  Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. 
Iterators
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
</th><td width="20%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.iterators"></a>Chapter 10. 
Iterators
- <a id="idp16156992" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.iterators.predefined"></a>Predefined</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
+ <a id="idm269999374096" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.iterators.predefined"></a>Predefined</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
The following
FAQ <a class="link" href="../faq.html#faq.iterator_as_pod" title="7.1.">entry</a> points out that
iterators are not implemented as pointers. They are a generalization
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/license.html b/gcc-4.8/libstdc++-v3/doc/html/manual/license.html
index f58b9a11b..1b361f699 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/license.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/license.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="status.html" title="Chapter 1. Status" /><link rel="next" href="bugs.html" title="Bugs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.license"></a>License</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="status.html" title="Chapter 1. Status" /><link rel="next" href="bugs.html" title="Bugs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.license"></a>License</h2></div></div></div><p>
There are two licenses affecting GNU libstdc++: one for the code,
and one for the documentation.
</p><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/localization.html b/gcc-4.8/libstdc++-v3/doc/html/manual/localization.html
index a595f22eb..04731f56e 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/localization.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/localization.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 8.  Localization</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="strings.html" title="Chapter 7.  Strings" /><link rel="next" href="facets.html" title="Facets" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 8.  Localization</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="strings.html" title="Chapter 7.  Strings" /><link rel="next" href="facets.html" title="Facets" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. 
Localization
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
</th><td width="20%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization"></a>Chapter 8. 
Localization
- <a id="idp15701088" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.locales"></a>Locales</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
+ <a id="idm269999830208" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.locales"></a>Locales</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
Describes the basic locale object, including nested
classes id, facet, and the reference-counted implementation object,
class _Impl.
@@ -402,29 +402,29 @@ global locale" (emphasis Paolo), that is:
What should non-required facet instantiations do? If the
generic implementation is provided, then how to end-users
provide specializations?
- </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15744064"></a><p><span class="citetitle"><em class="citetitle">
+ </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999787232"></a><p><span class="citetitle"><em class="citetitle">
The GNU C Library
</em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
Chapters 6 Character Set Handling and 7 Locales and
Internationalization
- . </span></p></div><div class="biblioentry"><a id="idp15748832"></a><p><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry"><a id="idm269999782464"></a><p><span class="citetitle"><em class="citetitle">
Correspondence
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp15751920"></a><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269999779376"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 14882:1998 Programming languages - C++
- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15754208"></a><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999777088"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 9899:1999 Programming languages - C
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15756480"></a><p><span class="title"><em>
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999774816"></a><p><span class="title"><em>
<a class="link" href="http://www.opengroup.org/austin/" target="_top">
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
</a>
</em>. </span><span class="copyright">Copyright © 2008
The Open Group/The Institute of Electrical and Electronics
Engineers, Inc.
- . </span></p></div><div class="biblioentry"><a id="idp15759712"></a><p><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry"><a id="idm269999771584"></a><p><span class="citetitle"><em class="citetitle">
The C++ Programming Language, Special Edition
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
Addison Wesley
- . </span></span></p></div><div class="biblioentry"><a id="idp15764336"></a><p><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999766960"></a><p><span class="citetitle"><em class="citetitle">
Standard C++ IOStreams and Locales
</em>. </span><span class="subtitle">
Advanced Programmer's Guide and Reference
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/make.html b/gcc-4.8/libstdc++-v3/doc/html/manual/make.html
index e0bc20380..7648f14fc 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/make.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/make.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Make</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="configure.html" title="Configure" /><link rel="next" href="using.html" title="Chapter 3. Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Make</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.make"></a>Make</h2></div></div></div><p>If you have never done this before, you should read the basic
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Make</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="configure.html" title="Configure" /><link rel="next" href="using.html" title="Chapter 3. Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Make</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.make"></a>Make</h2></div></div></div><p>If you have never done this before, you should read the basic
<a class="link" href="http://gcc.gnu.org/install/" target="_top">GCC Installation
Instructions</a> first. Read <span class="emphasis"><em>all of them</em></span>.
<span class="emphasis"><em>Twice.</em></span>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/memory.html b/gcc-4.8/libstdc++-v3/doc/html/manual/memory.html
index b31c49da9..091b1a458 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/memory.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/memory.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="pairs.html" title="Pairs" /><link rel="next" href="traits.html" title="Traits" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="pairs.html" title="Pairs" /><link rel="next" href="traits.html" title="Traits" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
Utilities
</th><td width="20%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.memory"></a>Memory</h2></div></div></div><p>
@@ -92,7 +92,7 @@
or loading and unloading shared objects in memory. As such, using
caching allocators on systems that do not support
<code class="function">abi::__cxa_atexit</code> is not recommended.
- </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp13920976"></a>Interface Design</h5></div></div></div><p>
+ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270001611968"></a>Interface Design</h5></div></div></div><p>
The only allocator interface that
is supported is the standard C++ interface. As such, all STL
containers have been adjusted, and all external allocators have
@@ -105,7 +105,7 @@
</p><p>
The base class that <code class="classname">allocator</code> is derived from
may not be user-configurable.
-</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp13924528"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
+</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270001608416"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
It's difficult to pick an allocation strategy that will provide
maximum utility, without excessively penalizing some behavior. In
fact, it's difficult just deciding which typical actions to measure
@@ -142,7 +142,7 @@
The current default choice for
<code class="classname">allocator</code> is
<code class="classname">__gnu_cxx::new_allocator</code>.
- </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp13937824"></a>Disabling Memory Caching</h5></div></div></div><p>
+ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270001595120"></a>Disabling Memory Caching</h5></div></div></div><p>
In use, <code class="classname">allocator</code> may allocate and
deallocate using implementation-specific strategies and
heuristics. Because of this, a given call to an allocator object's
@@ -309,33 +309,33 @@
of the used and unused memory locations. It has its own
<a class="link" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator">chapter</a>
in the documentation.
- </p></li></ol></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp13992848"></a><p><span class="citetitle"><em class="citetitle">
+ </p></li></ol></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm270000084224"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 14882:1998 Programming languages - C++
</em>. </span>
isoc++_1998
- <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idp13994688"></a><p><span class="title"><em>
- <a class="link" href="http://www.drdobbs.com/cpp/184403759" target="_top">
+ <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idm270000082384"></a><p><span class="title"><em>
+ <a class="link" href="http://www.drdobbs.com/the-standard-librarian-what-are-allocato/184403759" target="_top">
The Standard Librarian: What Are Allocators Good For?
</a>
</em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
C/C++ Users Journal
- . </span></span></p></div><div class="biblioentry"><a id="idp13998416"></a><p><span class="title"><em>
+ . </span></span></p></div><div class="biblioentry"><a id="idm270000078608"></a><p><span class="title"><em>
<a class="link" href="http://www.hoard.org/" target="_top">
The Hoard Memory Allocator
</a>
- </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="idp14001184"></a><p><span class="title"><em>
+ </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="idm270000075840"></a><p><span class="title"><em>
<a class="link" href="http://people.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" target="_top">
Reconsidering Custom Memory Allocation
</a>
- </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span></p></div><div class="biblioentry"><a id="idp14007344"></a><p><span class="title"><em>
+ </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span></p></div><div class="biblioentry"><a id="idm270000069680"></a><p><span class="title"><em>
<a class="link" href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html" target="_top">
Allocator Types
</a>
</em>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="publisher"><span class="publishername">
C/C++ Users Journal
- . </span></span></p></div><div class="biblioentry"><a id="idp14012080"></a><p><span class="citetitle"><em class="citetitle">The C++ Programming Language</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
+ . </span></span></p></div><div class="biblioentry"><a id="idm270000064944"></a><p><span class="citetitle"><em class="citetitle">The C++ Programming Language</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
Addison Wesley
- . </span></span></p></div><div class="biblioentry"><a id="idp14016512"></a><p><span class="citetitle"><em class="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
+ . </span></span></p></div><div class="biblioentry"><a id="idm270000060512"></a><p><span class="citetitle"><em class="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
happen with misuse of the <code class="classname">auto_ptr</code> class
template (called <acronym class="acronym">AP</acronym> here) would take some
time. Suffice it to say that the use of <acronym class="acronym">AP</acronym>
@@ -445,7 +445,7 @@ drops to zero.
Derived classes override those functions to destroy resources in a context
where the correct dynamic type is known. This is an application of the
technique known as type erasure.
- </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15512272"></a>Class Hierarchy</h5></div></div></div><p>
+ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270000019344"></a>Class Hierarchy</h5></div></div></div><p>
A <code class="classname">shared_ptr&lt;T&gt;</code> contains a pointer of
type <span class="type">T*</span> and an object of type
<code class="classname">__shared_count</code>. The shared_count contains a
@@ -492,9 +492,9 @@ C++11-only features are: rvalue-ref/move support, allocator support,
aliasing constructor, make_shared &amp; allocate_shared. Additionally,
the constructors taking <code class="classname">auto_ptr</code> parameters are
deprecated in C++11 mode.
- </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15534784"></a>Thread Safety</h5></div></div></div><p>
+ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999996832"></a>Thread Safety</h5></div></div></div><p>
The
-<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
+<a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
Safety</a> section of the Boost shared_ptr documentation says "shared_ptr
objects offer the same level of thread safety as built-in types."
The implementation must ensure that concurrent updates to separate shared_ptr
@@ -537,7 +537,7 @@ compiler, standard library, platform etc. For the version of
shared_ptr in libstdc++ the compiler and library are fixed, which
makes things much simpler: we have an atomic CAS or we don't, see Lock
Policy below for details.
-</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15542080"></a>Selecting Lock Policy</h5></div></div></div><p>
+</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999989536"></a>Selecting Lock Policy</h5></div></div></div><p>
</p><p>
There is a single <code class="classname">_Sp_counted_base</code> class,
which is a template parameterized on the enum
@@ -578,7 +578,7 @@ used when libstdc++ is built without <code class="literal">--enable-threads</cod
<code class="filename">ext/atomicity.h</code>, which detect if the program
is multi-threaded. If only one thread of execution exists in
the program then less expensive non-atomic operations are used.
- </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15556704"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
+ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999974912"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
<code class="code">const_pointer_cast</code></span></dt><dd><p>
As noted in N2351, these functions can be implemented non-intrusively using
the alias constructor. However the aliasing constructor is only available
@@ -611,13 +611,13 @@ is called. Users should not try to use this.
As well as the extra constructors, this implementation also needs some
members of _Sp_counted_deleter to be protected where they could otherwise
be private.
- </p></dd></dl></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15573056"></a>Examples</h5></div></div></div><p>
+ </p></dd></dl></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999958496"></a>Examples</h5></div></div></div><p>
Examples of use can be found in the testsuite, under
<code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>,
<code class="filename">testsuite/20_util/shared_ptr</code>
and
<code class="filename">testsuite/20_util/weak_ptr</code>.
- </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15576640"></a>Unresolved Issues</h5></div></div></div><p>
+ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999954912"></a>Unresolved Issues</h5></div></div></div><p>
The <span class="emphasis"><em><code class="classname">shared_ptr</code> atomic access</em></span>
clause in the C++11 standard is not implemented in GCC.
</p><p>
@@ -658,25 +658,25 @@ be private.
code to work with, Peter Dimov in particular for his help and
invaluable advice on thread safety. Phillip Jordan and Paolo
Carlini for the lock policy implementation.
- </p></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15587936"></a><p><span class="title"><em>
+ </p></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999943680"></a><p><span class="title"><em>
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" target="_top">
Improving shared_ptr for C++0x, Revision 2
</a>
</em>. </span><span class="subtitle">
N2351
- . </span></p></div><div class="biblioentry"><a id="idp15590224"></a><p><span class="title"><em>
+ . </span></p></div><div class="biblioentry"><a id="idm269999941392"></a><p><span class="title"><em>
<a class="link" href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" target="_top">
C++ Standard Library Active Issues List
</a>
</em>. </span><span class="subtitle">
N2456
- . </span></p></div><div class="biblioentry"><a id="idp15592512"></a><p><span class="title"><em>
+ . </span></p></div><div class="biblioentry"><a id="idm269999939104"></a><p><span class="title"><em>
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" target="_top">
Working Draft, Standard for Programming Language C++
</a>
</em>. </span><span class="subtitle">
N2461
- . </span></p></div><div class="biblioentry"><a id="idp15594816"></a><p><span class="title"><em>
+ . </span></p></div><div class="biblioentry"><a id="idm269999936800"></a><p><span class="title"><em>
<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">
Boost C++ Libraries documentation, shared_ptr
</a>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator.html b/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator.html
index 0626bccee..a47d0e137 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 20. The mt_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="profile_mode_diagnostics.html" title="Diagnostics" /><link rel="next" href="mt_allocator_design.html" title="Design Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. The mt_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_diagnostics.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 20. The mt_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="profile_mode_diagnostics.html" title="Diagnostics" /><link rel="next" href="mt_allocator_design.html" title="Design Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. The mt_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_diagnostics.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.mt"></a>Chapter 20. The mt_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.mt"></a>Chapter 20. The mt_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></div><p>
</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.intro"></a>Intro</h2></div></div></div><p>
The mt allocator [hereinafter referred to simply as "the allocator"]
is a fixed size (power of two) allocator that was initially
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_design.html b/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_design.html
index bf6353277..3f82c6350 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_design.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_design.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="next" href="mt_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.design_issues"></a>Design Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.overview"></a>Overview</h3></div></div></div><p> There are three general components to the allocator: a datum
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="next" href="mt_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.design_issues"></a>Design Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.overview"></a>Overview</h3></div></div></div><p> There are three general components to the allocator: a datum
describing the characteristics of the memory pool, a policy class
containing this pool that links instantiation types to common or
individual pools, and a class inheriting from the policy class that is
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html b/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
index c971e0c82..32e76ea9b 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Multiple Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_ex_single.html" title="Single Thread Example" /><link rel="next" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Multiple Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_single.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_multi"></a>Multiple Thread Example</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Multiple Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_ex_single.html" title="Single Thread Example" /><link rel="next" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Multiple Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_single.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_multi"></a>Multiple Thread Example</h2></div></div></div><p>
In the ST example we never used the thread_id variable present in each block.
Let's start by explaining the purpose of this in a MT application.
</p><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html b/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
index c82c6e792..22e603a2e 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Single Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_impl.html" title="Implementation" /><link rel="next" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Single Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_multi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_single"></a>Single Thread Example</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Single Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_impl.html" title="Implementation" /><link rel="next" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Single Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_multi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_single"></a>Single Thread Example</h2></div></div></div><p>
Let's start by describing how the data on a freelist is laid out in memory.
This is the first two blocks in freelist for thread id 3 in bin 3 (8 bytes):
</p><pre class="programlisting">
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_impl.html b/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_impl.html
index a93f2a0dd..7b3379aa1 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_impl.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/mt_allocator_impl.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_design.html" title="Design Issues" /><link rel="next" href="mt_allocator_ex_single.html" title="Single Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_design.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_single.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.tune"></a>Tunable Parameters</h3></div></div></div><p>Certain allocation parameters can be modified, or tuned. There
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_design.html" title="Design Issues" /><link rel="next" href="mt_allocator_ex_single.html" title="Single Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_design.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_single.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.tune"></a>Tunable Parameters</h3></div></div></div><p>Certain allocation parameters can be modified, or tuned. There
exists a nested <code class="code">struct __pool_base::_Tune</code> that contains all
these parameters, which include settings for
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Alignment</p></li><li class="listitem"><p>Maximum bytes before calling <code class="code">::operator new</code> directly</p></li><li class="listitem"><p>Minimum bytes</p></li><li class="listitem"><p>Size of underlying global allocations</p></li><li class="listitem"><p>Maximum number of supported threads</p></li><li class="listitem"><p>Migration of deallocations to the global free list</p></li><li class="listitem"><p>Shunt for global <code class="code">new</code> and <code class="code">delete</code></p></li></ul></div><p>Adjusting parameters for a given instance of an allocator can only
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/numerics.html b/gcc-4.8/libstdc++-v3/doc/html/manual/numerics.html
index 2d85c4be2..58cd45820 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/numerics.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/numerics.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 12.  Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="algorithms.html" title="Chapter 11.  Algorithms" /><link rel="next" href="generalized_numeric_operations.html" title="Generalized Operations" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 12.  Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="algorithms.html" title="Chapter 11.  Algorithms" /><link rel="next" href="generalized_numeric_operations.html" title="Generalized Operations" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12. 
Numerics
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
</th><td width="20%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics"></a>Chapter 12. 
Numerics
- <a id="idp16214640" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.complex"></a>Complex</h2></div></div></div><p>
+ <a id="idm269999316576" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.complex"></a>Complex</h2></div></div></div><p>
</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.complex.processing"></a>complex Processing</h3></div></div></div><p>
</p><p>Using <code class="code">complex&lt;&gt;</code> becomes even more comple- er, sorry,
<span class="emphasis"><em>complicated</em></span>, with the not-quite-gratuitously-incompatible
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/numerics_and_c.html b/gcc-4.8/libstdc++-v3/doc/html/manual/numerics_and_c.html
index 9cb5523b2..b3a78cbb5 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/numerics_and_c.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/numerics_and_c.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="prev" href="generalized_numeric_operations.html" title="Generalized Operations" /><link rel="next" href="io.html" title="Chapter 13.  Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><th width="60%" align="center">Chapter 12. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="prev" href="generalized_numeric_operations.html" title="Generalized Operations" /><link rel="next" href="io.html" title="Chapter 13.  Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><th width="60%" align="center">Chapter 12. 
Numerics
</th><td width="20%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.c"></a>Interacting with C</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.array"></a>Numerics vs. Arrays</h3></div></div></div><p>One of the major reasons why FORTRAN can chew through numbers so well
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/pairs.html b/gcc-4.8/libstdc++-v3/doc/html/manual/pairs.html
index 2b1dc9e32..e6a299d50 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/pairs.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/pairs.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Pairs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="next" href="memory.html" title="Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Pairs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Pairs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="next" href="memory.html" title="Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Pairs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
Utilities
</th><td width="20%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.pairs"></a>Pairs</h2></div></div></div><p>The <code class="code">pair&lt;T1,T2&gt;</code> is a simple and handy way to
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode.html b/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode.html
index 5aee5f91d..3816a4888 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 18. Parallel Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="debug_mode_design.html" title="Design" /><link rel="next" href="parallel_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 18. Parallel Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_design.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 18. Parallel Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="debug_mode_design.html" title="Design" /><link rel="next" href="parallel_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 18. Parallel Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_design.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode"></a>Chapter 18. Parallel Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></div><p> The libstdc++ parallel mode is an experimental parallel
+</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode"></a>Chapter 18. Parallel Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></div><p> The libstdc++ parallel mode is an experimental parallel
implementation of many algorithms the C++ Standard Library.
</p><p>
Several of the standard algorithms, for instance
@@ -12,11 +12,11 @@ explicit source declaration or by compiling existing sources with a
specific compiler flag.
</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.intro"></a>Intro</h2></div></div></div><p>The following library components in the include
<code class="filename">numeric</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::accumulate</code></p></li><li class="listitem"><p><code class="function">std::adjacent_difference</code></p></li><li class="listitem"><p><code class="function">std::inner_product</code></p></li><li class="listitem"><p><code class="function">std::partial_sum</code></p></li></ul></div><p>The following library components in the include
-<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idp16926864"></a><p><span class="citetitle"><em class="citetitle">
+<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idm269998604464"></a><p><span class="citetitle"><em class="citetitle">
Parallelization of Bulk Operations for STL Dictionaries
</em>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Leonor</span> <span class="surname">Frias</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS)
- . </span></span></p></div><div class="biblioentry"><a id="idp16931936"></a><p><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry"><a id="idm269998599392"></a><p><span class="citetitle"><em class="citetitle">
The Multi-Core Standard Template Library
</em>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Peter</span> <span class="surname">Sanders</span>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Putze</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
Euro-Par 2007: Parallel Processing. (LNCS 4641)
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_design.html b/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_design.html
index 5c26d9046..e1dc09cd0 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_design.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_design.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_using.html" title="Using" /><link rel="next" href="parallel_mode_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_using.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.design"></a>Design</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_using.html" title="Using" /><link rel="next" href="parallel_mode_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_using.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.design"></a>Design</h2></div></div></div><p>
</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.intro"></a>Interface Basics</h3></div></div></div><p>
All parallel algorithms are intended to have signatures that are
equivalent to the ISO C++ algorithms replaced. For instance, the
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html b/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html
index 9fae4a3a5..3d049c551 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="next" href="parallel_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.semantics"></a>Semantics</h2></div></div></div><p> The parallel mode STL algorithms are currently not exception-safe,
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="next" href="parallel_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.semantics"></a>Semantics</h2></div></div></div><p> The parallel mode STL algorithms are currently not exception-safe,
i.e. user-defined functors must not throw exceptions.
Also, the order of execution is not guaranteed for some functions, of course.
Therefore, user-defined functors should not have any concurrent side effects.
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_test.html b/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_test.html
index 9d9028725..d68e17a3a 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_test.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_test.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_design.html" title="Design" /><link rel="next" href="profile_mode.html" title="Chapter 19. Profile Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_design.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.test"></a>Testing</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_design.html" title="Design" /><link rel="next" href="profile_mode.html" title="Chapter 19. Profile Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_design.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.test"></a>Testing</h2></div></div></div><p>
Both the normal conformance and regression tests and the
supplemental performance tests work.
</p><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_using.html b/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_using.html
index 98bdb17be..8284c14b3 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_using.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/parallel_mode_using.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_semantics.html" title="Semantics" /><link rel="next" href="parallel_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.prereq_flags"></a>Prerequisite Compiler Flags</h3></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_semantics.html" title="Semantics" /><link rel="next" href="parallel_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.prereq_flags"></a>Prerequisite Compiler Flags</h3></div></div></div><p>
Any use of parallel functionality requires additional compiler
and runtime support, in particular support for OpenMP. Adding this support is
not difficult: just compile your application with the compiler
@@ -62,4 +62,4 @@ Then compile this code with the prerequisite compiler flags
flags for atomic operations.)
</p><p> The following table provides the names and headers of all the
parallel algorithms that can be used in a similar manner:
-</p><div class="table"><a id="idp16725920"></a><p class="title"><strong>Table 18.1. Parallel Algorithms</strong></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html> \ No newline at end of file
+</p><div class="table"><a id="idm269998805216"></a><p class="title"><strong>Table 18.1. Parallel Algorithms</strong></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html b/gcc-4.8/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
index 932a82a7c..048ae8674 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_design.html" title="Design" /><link rel="next" href="policy_data_structures_ack.html" title="Acknowledgments" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.test"></a>Testing</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.regression"></a>Regression</h3></div></div></div><p>The library contains a single comprehensive regression test.
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_design.html" title="Design" /><link rel="next" href="policy_data_structures_ack.html" title="Acknowledgments" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.test"></a>Testing</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.regression"></a>Regression</h3></div></div></div><p>The library contains a single comprehensive regression test.
For a given container type in this library, the test creates
an object of the container type and an object of the
corresponding standard type (e.g., <code class="classname">std::set</code>). It
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures.html b/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures.html
index 6a5fa6552..1b34ac44b 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 22. Policy-Based Data Structures</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bitmap_allocator_impl.html" title="Implementation" /><link rel="next" href="policy_data_structures_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. Policy-Based Data Structures</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 22. Policy-Based Data Structures</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bitmap_allocator_impl.html" title="Implementation" /><link rel="next" href="policy_data_structures_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. Policy-Based Data Structures</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.pbds"></a>Chapter 22. Policy-Based Data Structures</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
+</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.pbds"></a>Chapter 22. Policy-Based Data Structures</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
Configuring via Template Parameters
</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
Querying Container Attributes
@@ -248,7 +248,7 @@
these invariants, one must supply some policy that is aware
of these changes. Without this, it would be better to use a
linked list (in itself very efficient for these purposes).
- </p></li></ol></div><div class="figure"><a id="idp17613296"></a><p class="title"><strong>Figure 22.1. Node Invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_node_invariants.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
+ </p></li></ol></div><div class="figure"><a id="idm269997917584"></a><p class="title"><strong>Figure 22.1. Node Invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_node_invariants.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
The standard C++ library contains associative containers based on
red-black trees and collision-chaining hash tables. These are
very useful, but they are not ideal for all types of
@@ -256,7 +256,7 @@
</p><p>
The figure below shows the different underlying data structures
currently supported in this library.
- </p><div class="figure"><a id="idp17619952"></a><p class="title"><strong>Figure 22.2. Underlying Associative Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_1.png" align="middle" alt="Underlying Associative Data Structures" /></div></div></div><br class="figure-break" /><p>
+ </p><div class="figure"><a id="idm269997910864"></a><p class="title"><strong>Figure 22.2. Underlying Associative Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_1.png" align="middle" alt="Underlying Associative Data Structures" /></div></div></div><br class="figure-break" /><p>
A shows a collision-chaining hash-table, B shows a probing
hash-table, C shows a red-black tree, D shows a splay tree, E shows
a tree based on an ordered vector(implicit in the order of the
@@ -375,7 +375,7 @@
no guarantee that the elements traversed will coincide with the
<span class="emphasis"><em>logical</em></span> elements between 1 and 5, as in
label B.
- </p><div class="figure"><a id="idp17651648"></a><p class="title"><strong>Figure 22.3. Range Iteration in Different Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_1.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /><p>
+ </p><div class="figure"><a id="idm269997879168"></a><p class="title"><strong>Figure 22.3. Range Iteration in Different Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_1.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /><p>
In our opinion, this problem is not caused just because
red-black trees are order preserving while
collision-chaining hash tables are (generally) not - it
@@ -426,7 +426,7 @@
list, as in the graphic below, label B. Here the iterators are as
light as can be, but the hash-table's operations are more
complicated.
- </p><div class="figure"><a id="idp17666528"></a><p class="title"><strong>Figure 22.4. Point Iteration in Hash Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_2.png" align="middle" alt="Point Iteration in Hash Data Structures" /></div></div></div><br class="figure-break" /><p>
+ </p><div class="figure"><a id="idm269997864256"></a><p class="title"><strong>Figure 22.4. Point Iteration in Hash Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_2.png" align="middle" alt="Point Iteration in Hash Data Structures" /></div></div></div><br class="figure-break" /><p>
It should be noted that containers based on collision-chaining
hash-tables are not the only ones with this type of behavior;
many other self-organizing data structures display it as well.
@@ -442,7 +442,7 @@
container. The graphic below shows three cases: A1 and A2 show
a red-black tree; B1 and B2 show a probing hash-table; C1 and C2
show a collision-chaining hash table.
- </p><div class="figure"><a id="idp17675840"></a><p class="title"><strong>Figure 22.5. Effect of erase in different underlying data structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_guarantee_erase.png" align="middle" alt="Effect of erase in different underlying data structures" /></div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ </p><div class="figure"><a id="idm269997855056"></a><p class="title"><strong>Figure 22.5. Effect of erase in different underlying data structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_guarantee_erase.png" align="middle" alt="Effect of erase in different underlying data structures" /></div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
Erasing 5 from A1 yields A2. Clearly, an iterator to 3 can
be de-referenced and incremented. The sequence of iterators
changed, but in a way that is well-defined by the interface.
@@ -678,7 +678,7 @@
typically less structured than an associative container's tree;
the third simply uses an associative container. These are
shown in the figure below with labels A1 and A2, B, and C.
- </p><div class="figure"><a id="idp17743424"></a><p class="title"><strong>Figure 22.6. Underlying Priority Queue Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_2.png" align="middle" alt="Underlying Priority Queue Data Structures" /></div></div></div><br class="figure-break" /><p>
+ </p><div class="figure"><a id="idm269997787392"></a><p class="title"><strong>Figure 22.6. Underlying Priority Queue Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_2.png" align="middle" alt="Underlying Priority Queue Data Structures" /></div></div></div><br class="figure-break" /><p>
No single implementation can completely replace any of the
others. Some have better <code class="function">push</code>
and <code class="function">pop</code> amortized performance, some have
@@ -1098,7 +1098,7 @@
</span>. </span><span class="publisher"><span class="publishername">
Proceedings of International Conference on Very Large Data Bases
. </span></span></p></div><div class="biblioentry"><a id="biblio.maverik_lowerbounds"></a><p>[biblio.maverik_lowerbounds] <span class="title"><em>
- <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps" target="_top">
+ <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps/" target="_top">
Deamortization - Part 2: Binomial Heaps
</a>
</em>. </span><span class="date">
@@ -1190,7 +1190,7 @@
</span>. </span><span class="publisher"><span class="publishername">
Addison-Wesley Publishing Company
. </span></span></p></div><div class="biblioentry"><a id="biblio.nelson96stlpq"></a><p>[biblio.nelson96stlpq] <span class="title"><em>
- <a class="link" href="http://www.dogma.net/markn/articles/pq_stl/priority.htm" target="_top">Priority Queues and the STL
+ <a class="link" href="http://marknelson.us/1996/01/01/priority-queues/" target="_top">Priority Queues and the STL
</a>
</em>. </span><span class="date">
January 1996
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html b/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
index c4ddfc2ef..7eb8f15cf 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
@@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Acknowledgments</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_based_data_structures_test.html" title="Testing" /><link rel="next" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Acknowledgments</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.ack"></a>Acknowledgments</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Acknowledgments</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_based_data_structures_test.html" title="Testing" /><link rel="next" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Acknowledgments</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.ack"></a>Acknowledgments</h2></div></div></div><p>
Written by Ami Tavory and Vladimir Dreizin (IBM Haifa Research
Laboratories), and Benjamin Kosnik (Red Hat).
</p><p>
- This library was partially written at
- <a class="link" href="http://www.haifa.il.ibm.com/" target="_top">IBM's Haifa Research Labs</a>.
+ This library was partially written at IBM's Haifa Research Labs.
It is based heavily on policy-based design and uses many useful
techniques from Modern C++ Design: Generic Programming and Design
Patterns Applied by Andrei Alexandrescu.
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_design.html b/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_design.html
index 03a7daa5b..d7bb68565 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_design.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_design.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_using.html" title="Using" /><link rel="next" href="policy_based_data_structures_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.design"></a>Design</h2></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.concepts"></a>Concepts</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.null_type"></a>Null Policy Classes</h4></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_using.html" title="Using" /><link rel="next" href="policy_based_data_structures_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.design"></a>Design</h2></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.concepts"></a>Concepts</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.null_type"></a>Null Policy Classes</h4></div></div></div><p>
Associative containers are typically parametrized by various
policies. For example, a hash-based associative container is
parametrized by a hash-functor, transforming each key into an
@@ -170,7 +170,7 @@
naturally; collision-chaining hash tables (label B) store
equivalent-key values in the same bucket, the bucket can be
arranged so that equivalent-key values are consecutive.
- </p><div class="figure"><a id="idp18000448"></a><p class="title"><strong>Figure 22.8. Non-unique Mapping Standard Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_1.png" align="middle" alt="Non-unique Mapping Standard Containers" /></div></div></div><br class="figure-break" /><p>
+ </p><div class="figure"><a id="idm269997530416"></a><p class="title"><strong>Figure 22.8. Non-unique Mapping Standard Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_1.png" align="middle" alt="Non-unique Mapping Standard Containers" /></div></div></div><br class="figure-break" /><p>
Put differently, the standards' non-unique mapping
associative-containers are associative containers that map
primary keys to linked lists that are embedded into the
@@ -252,7 +252,7 @@
first graphic above. Labels A and B, respectively. Each shaded
box represents some size-type or secondary
associative-container.
- </p><div class="figure"><a id="idp18023952"></a><p class="title"><strong>Figure 22.10. Non-unique Mapping Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_3.png" align="middle" alt="Non-unique Mapping Containers" /></div></div></div><br class="figure-break" /><p>
+ </p><div class="figure"><a id="idm269997506912"></a><p class="title"><strong>Figure 22.10. Non-unique Mapping Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_3.png" align="middle" alt="Non-unique Mapping Containers" /></div></div></div><br class="figure-break" /><p>
In the first example above, then, one would use an associative
container mapping each user to an associative container which
maps each application id to a start time (see
@@ -305,7 +305,7 @@
shows invariants for order-preserving containers: point-type
iterators are synonymous with range-type iterators.
Orthogonally, <span class="emphasis"><em>C</em></span>shows invariants for "set"
- containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idp18043824"></a><p class="title"><strong>Figure 22.11. Point Iterator Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterator_hierarchy.png" align="middle" alt="Point Iterator Hierarchy" /></div></div></div><br class="figure-break" /><p>Note that point-type iterators in self-organizing containers
+ containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idm269997487104"></a><p class="title"><strong>Figure 22.11. Point Iterator Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterator_hierarchy.png" align="middle" alt="Point Iterator Hierarchy" /></div></div></div><br class="figure-break" /><p>Note that point-type iterators in self-organizing containers
(hash-based associative containers) lack movement
operators, such as <code class="literal">operator++</code> - in fact, this
is the reason why this library differentiates from the standard C++ librarys
@@ -344,7 +344,7 @@
to the question of whether point-type iterators and range-type
iterators are valid. The graphic below shows tags corresponding to
different types of invalidation guarantees.
- </p><div class="figure"><a id="idp18057168"></a><p class="title"><strong>Figure 22.12. Invalidation Guarantee Tags Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_tag_hierarchy.png" align="middle" alt="Invalidation Guarantee Tags Hierarchy" /></div></div></div><br class="figure-break" /><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ </p><div class="figure"><a id="idm269997473760"></a><p class="title"><strong>Figure 22.12. Invalidation Guarantee Tags Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_tag_hierarchy.png" align="middle" alt="Invalidation Guarantee Tags Hierarchy" /></div></div></div><br class="figure-break" /><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
<code class="classname">basic_invalidation_guarantee</code>
corresponds to a basic guarantee that a point-type iterator,
a found pointer, or a found reference, remains valid as long
@@ -428,7 +428,7 @@
</p><p>
This library contains a container tag hierarchy corresponding to the
diagram below.
- </p><div class="figure"><a id="idp18087392"></a><p class="title"><strong>Figure 22.13. Container Tag Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_container_tag_hierarchy.png" align="middle" alt="Container Tag Hierarchy" /></div></div></div><br class="figure-break" /><p>
+ </p><div class="figure"><a id="idm269997443664"></a><p class="title"><strong>Figure 22.13. Container Tag Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_container_tag_hierarchy.png" align="middle" alt="Container Tag Hierarchy" /></div></div></div><br class="figure-break" /><p>
Given any container <span class="type">Cntnr</span>, the tag of
the underlying data structure can be found via <code class="literal">typename
Cntnr::container_category</code>.
@@ -487,7 +487,7 @@
collision-chaining container, except for the following.</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">Comb_Probe_Fn</code> describes how to transform a probe
sequence into a sequence of positions within the table.</p></li><li class="listitem"><p><code class="classname">Probe_Fn</code> describes a probe sequence policy.</p></li></ol></div><p>Some of the default template values depend on the values of
other parameters, and are explained below.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.hash.details"></a>Details</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.hash_policies"></a>Hash Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.general"></a>General</h6></div></div></div><p>Following is an explanation of some functions which hashing
- involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idp18127536"></a><p class="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
+ involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idm269997403584"></a><p class="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
range-hashing functions</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_ranged_hash_range_hashing_fns.png" align="middle" alt="Hash functions, ranged-hash functions, and range-hashing functions" /></div></div></div><br class="figure-break" /><p>Let U be a domain (e.g., the integers, or the
strings of 3 characters). A hash-table algorithm needs to map
elements of U "uniformly" into the range [0,..., m -
@@ -504,7 +504,7 @@
Z<sub>+</sub>,</p><p>which maps a non-negative hash value, and a non-negative
range upper-bound into a non-negative integral in the range
between 0 (inclusive) and the range upper bound (exclusive),
- i.e., for any r in Z<sub>+</sub>,</p><p>0 ≤ g(r, m) ≤ m - 1</p><p>The resulting ranged-hash function, is</p><div class="equation"><a id="idp18141344"></a><p class="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
+ i.e., for any r in Z<sub>+</sub>,</p><p>0 ≤ g(r, m) ≤ m - 1</p><p>The resulting ranged-hash function, is</p><div class="equation"><a id="idm269997389776"></a><p class="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
f(u , m) = g(h(u), m)
</span></div></div><br class="equation-break" /><p>From the above, it is obvious that given g and
h, f can always be composed (however the converse
@@ -524,7 +524,7 @@
transforming the sequence of hash values into a sequence of
positions.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.range"></a>Range Hashing</h6></div></div></div><p>Some common choices for range-hashing functions are the
division, multiplication, and middle-square methods (<a class="xref" href="policy_data_structures.html#biblio.knuth98sorting" title="The Art of Computer Programming - Sorting and Searching">[biblio.knuth98sorting]</a>), defined
- as</p><div class="equation"><a id="idp18147232"></a><p class="title"><strong>Equation 22.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
+ as</p><div class="equation"><a id="idm269997383888"></a><p class="title"><strong>Equation 22.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
g(r, m) = r mod m
</span></div></div><br class="equation-break" /><p>g(r, m) = ⌈ u/v ( a r mod v ) ⌉</p><p>and</p><p>g(r, m) = ⌈ u/v ( r<sup>2</sup> mod v ) ⌉</p><p>respectively, for some positive integrals u and
v (typically powers of 2), and some a. Each of
@@ -535,9 +535,9 @@
implement using the low
level % (modulo) operation (for any m), or the
low level &amp; (bit-mask) operation (for the case where
- m is a power of 2), i.e.,</p><div class="equation"><a id="idp18151744"></a><p class="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
+ m is a power of 2), i.e.,</p><div class="equation"><a id="idm269997379376"></a><p class="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
g(r, m) = r % m
- </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idp18153568"></a><p class="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
+ </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idm269997377552"></a><p class="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
g(r, m) = r &amp; m - 1, (with m =
2<sup>k</sup> for some k)
</span></div></div><br class="equation-break" /><p>respectively.</p><p>The % (modulo) implementation has the advantage that for
@@ -563,7 +563,7 @@
s = [ s<sub>0</sub>,..., s<sub>t - 1</sub>]
</p><p>be a string of t characters, each of which is from
domain S. Consider the following ranged-hash
- function:</p><div class="equation"><a id="idp18163200"></a><p class="title"><strong>Equation 22.5. 
+ function:</p><div class="equation"><a id="idm269997367984"></a><p class="title"><strong>Equation 22.5. 
A Standard String Hash Function
</strong></p><div class="equation-contents"><span class="mathphrase">
f<sub>1</sub>(s, m) = ∑ <sub>i =
@@ -575,7 +575,7 @@
of a long DNA sequence (and so S = {'A', 'C', 'G',
'T'}). In this case, scanning the entire string might be
prohibitively expensive. A possible alternative might be to use
- only the first k characters of the string, where</p><p>|S|<sup>k</sup> ≥ m ,</p><p>i.e., using the hash function</p><div class="equation"><a id="idp18169344"></a><p class="title"><strong>Equation 22.6. 
+ only the first k characters of the string, where</p><p>|S|<sup>k</sup> ≥ m ,</p><p>i.e., using the hash function</p><div class="equation"><a id="idm269997361840"></a><p class="title"><strong>Equation 22.6. 
Only k String DNA Hash
</strong></p><div class="equation-contents"><span class="mathphrase">
f<sub>2</sub>(s, m) = ∑ <sub>i
@@ -606,12 +606,12 @@
the container transforms the key into a non-negative integral
using the hash functor (points B and C), and transforms the
result into a position using the combining functor (points D
- and E).</p><div class="figure"><a id="idp18191968"></a><p class="title"><strong>Figure 22.15. Insert hash sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram.png" align="middle" alt="Insert hash sequence diagram" /></div></div></div><br class="figure-break" /><p>If <code class="classname">cc_hash_table</code>'s
+ and E).</p><div class="figure"><a id="idm269997339216"></a><p class="title"><strong>Figure 22.15. Insert hash sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram.png" align="middle" alt="Insert hash sequence diagram" /></div></div></div><br class="figure-break" /><p>If <code class="classname">cc_hash_table</code>'s
hash-functor, <code class="classname">Hash_Fn</code> is instantiated by <code class="classname">null_type</code> , then <code class="classname">Comb_Hash_Fn</code> is taken to be
a ranged-hash function. The graphic below shows an <code class="function">insert</code> sequence
diagram. The user inserts an element (point A), the container
transforms the key into a position using the combining functor
- (points B and C).</p><div class="figure"><a id="idp18199024"></a><p class="title"><strong>Figure 22.16. Insert hash sequence diagram with a null policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram2.png" align="middle" alt="Insert hash sequence diagram with a null policy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a>
+ (points B and C).</p><div class="figure"><a id="idm269997332160"></a><p class="title"><strong>Figure 22.16. Insert hash sequence diagram with a null policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram2.png" align="middle" alt="Insert hash sequence diagram with a null policy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a>
Probing tables
</h6></div></div></div><p><code class="classname">gp_hash_table</code> is parametrized by
<code class="classname">Hash_Fn</code>, <code class="classname">Probe_Fn</code>,
@@ -634,7 +634,7 @@
a linear probe and a quadratic probe function,
respectively.</p></li></ol></div><p>
The graphic below shows the relationships.
- </p><div class="figure"><a id="idp18215840"></a><p class="title"><strong>Figure 22.17. Hash policy class diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_policy_cd.png" align="middle" alt="Hash policy class diagram" /></div></div></div><br class="figure-break" /></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or
+ </p><div class="figure"><a id="idm269997315408"></a><p class="title"><strong>Figure 22.17. Hash policy class diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_policy_cd.png" align="middle" alt="Hash policy class diagram" /></div></div></div><br class="figure-break" /></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or
shrink. It is necessary to specify policies to determine how
and when a hash table should change its size. Usually, resize
policies can be decomposed into orthogonal policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A size policy indicating how a hash table
@@ -667,10 +667,10 @@
and some load factor be denoted by Α. We would like to
calculate the minimal length of k, such that if there were Α
m elements in the hash table, a probe sequence of length k would
- be found with probability at most 1/m.</p><div class="figure"><a id="idp18234944"></a><p class="title"><strong>Figure 22.18. Balls and bins</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_balls_and_bins.png" align="middle" alt="Balls and bins" /></div></div></div><br class="figure-break" /><p>Denote the probability that a probe sequence of length
+ be found with probability at most 1/m.</p><div class="figure"><a id="idm269997296368"></a><p class="title"><strong>Figure 22.18. Balls and bins</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_balls_and_bins.png" align="middle" alt="Balls and bins" /></div></div></div><br class="figure-break" /><p>Denote the probability that a probe sequence of length
k appears in bin i by p<sub>i</sub>, the
length of the probe sequence of bin i by
- l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idp18240448"></a><p class="title"><strong>Equation 22.7. 
+ l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idm269997290864"></a><p class="title"><strong>Equation 22.7. 
Probability of Probe Sequence of Length k
</strong></p><div class="equation-contents"><span class="mathphrase">
p<sub>1</sub> =
@@ -684,7 +684,7 @@
l<sub>i</sub> are negatively-dependent
(<a class="xref" href="policy_data_structures.html#biblio.dubhashi98neg" title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>)
. Let
- I(.) denote the indicator function. Then</p><div class="equation"><a id="idp18247216"></a><p class="title"><strong>Equation 22.8. 
+ I(.) denote the indicator function. Then</p><div class="equation"><a id="idm269997284096"></a><p class="title"><strong>Equation 22.8. 
Probability Probe Sequence in Some Bin
</strong></p><div class="equation-contents"><span class="mathphrase">
P( exists<sub>i</sub> l<sub>i</sub> ≥ k ) =
@@ -723,7 +723,7 @@
a resize is needed, and if so, what is the new size (points D
to G); following the resize, it notifies the policy that a
resize has completed (point H); finally, the element is
- inserted, and the policy notified (point I).</p><div class="figure"><a id="idp18265728"></a><p class="title"><strong>Figure 22.19. Insert resize sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram1.png" align="middle" alt="Insert resize sequence diagram" /></div></div></div><br class="figure-break" /><p>In practice, a resize policy can be usually orthogonally
+ inserted, and the policy notified (point I).</p><div class="figure"><a id="idm269997265648"></a><p class="title"><strong>Figure 22.19. Insert resize sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram1.png" align="middle" alt="Insert resize sequence diagram" /></div></div></div><br class="figure-break" /><p>In practice, a resize policy can be usually orthogonally
decomposed to a size policy and a trigger policy. Consequently,
the library contains a single class for instantiating a resize
policy: <code class="classname">hash_standard_resize_policy</code>
@@ -732,8 +732,8 @@
both, and acts as a standard delegate (<a class="xref" href="policy_data_structures.html#biblio.gof" title="Design Patterns - Elements of Reusable Object-Oriented Software">[biblio.gof]</a>)
to these policies.</p><p>The two graphics immediately below show sequence diagrams
illustrating the interaction between the standard resize policy
- and its trigger and size policies, respectively.</p><div class="figure"><a id="idp18273504"></a><p class="title"><strong>Figure 22.20. Standard resize policy trigger sequence
- diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram2.png" align="middle" alt="Standard resize policy trigger sequence diagram" /></div></div></div><br class="figure-break" /><div class="figure"><a id="idp18277664"></a><p class="title"><strong>Figure 22.21. Standard resize policy size sequence
+ and its trigger and size policies, respectively.</p><div class="figure"><a id="idm269997257872"></a><p class="title"><strong>Figure 22.20. Standard resize policy trigger sequence
+ diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram2.png" align="middle" alt="Standard resize policy trigger sequence diagram" /></div></div></div><br class="figure-break" /><div class="figure"><a id="idm269997253712"></a><p class="title"><strong>Figure 22.21. Standard resize policy size sequence
diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram3.png" align="middle" alt="Standard resize policy size sequence diagram" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.predefined"></a>Predefined Policies</h6></div></div></div><p>The library includes the following
instantiations of size and trigger policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">hash_load_check_resize_trigger</code>
implements a load check trigger policy.</p></li><li class="listitem"><p><code class="classname">cc_hash_max_collision_check_resize_trigger</code>
@@ -876,7 +876,7 @@
each node, and maintains node invariants (see <a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>.) The first stores in
each node the size of the sub-tree rooted at the node; the
second stores at each node the maximal endpoint of the
- intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idp18355696"></a><p class="title"><strong>Figure 22.22. Tree node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invariants.png" align="middle" alt="Tree node invariants" /></div></div></div><br class="figure-break" /><p>Supporting such trees is difficult for a number of
+ intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idm269997175616"></a><p class="title"><strong>Figure 22.22. Tree node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invariants.png" align="middle" alt="Tree node invariants" /></div></div></div><br class="figure-break" /><p>Supporting such trees is difficult for a number of
reasons:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>There must be a way to specify what a node's metadata
should be (if any).</p></li><li class="listitem"><p>Various operations can invalidate node
invariants. The graphic below shows how a right rotation,
@@ -890,7 +890,7 @@
metadata.</p></li><li class="listitem"><p>It is not feasible to know in advance which methods trees
can support. Besides the usual <code class="classname">find</code> method, the
first tree can support a <code class="classname">find_by_order</code> method, while
- the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idp18365136"></a><p class="title"><strong>Figure 22.23. Tree node invalidation</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invalidations.png" align="middle" alt="Tree node invalidation" /></div></div></div><br class="figure-break" /><p>These problems are solved by a combination of two means:
+ the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idm269997166176"></a><p class="title"><strong>Figure 22.23. Tree node invalidation</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invalidations.png" align="middle" alt="Tree node invalidation" /></div></div></div><br class="figure-break" /><p>These problems are solved by a combination of two means:
node iterators, and template-template node updater
parameters.</p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node.iterators"></a>Node Iterators</h6></div></div></div><p>Each tree-based container defines two additional iterator
types, <code class="classname">const_node_iterator</code>
@@ -919,7 +919,7 @@
<code class="classname">node_update</code> class, and publicly subclasses
<code class="classname">node_update</code>. The graphic below shows this
scheme, as well as some predefined policies (which are explained
- below).</p><div class="figure"><a id="idp18378304"></a><p class="title"><strong>Figure 22.24. A tree and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_updator_policy_cd.png" align="middle" alt="A tree and its update policy" /></div></div></div><br class="figure-break" /><p><code class="classname">node_update</code> (an instantiation of
+ below).</p><div class="figure"><a id="idm269997153072"></a><p class="title"><strong>Figure 22.24. A tree and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_updator_policy_cd.png" align="middle" alt="A tree and its update policy" /></div></div></div><br class="figure-break" /><p><code class="classname">node_update</code> (an instantiation of
<code class="classname">Node_Update</code>) must define <code class="classname">metadata_type</code> as
the type of metadata it requires. For order statistics,
e.g., <code class="classname">metadata_type</code> might be <code class="classname">size_t</code>.
@@ -938,7 +938,7 @@
<code class="classname">nd_it</code>. For example, say node x in the
graphic below label A has an invalid invariant, but its' children,
y and z have valid invariants. After the invocation, all three
- nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idp18389968"></a><p class="title"><strong>Figure 22.25. Restoring node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_restoring_node_invariants.png" align="middle" alt="Restoring node invariants" /></div></div></div><br class="figure-break" /><p>When a tree operation might invalidate some node invariant,
+ nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idm269997141408"></a><p class="title"><strong>Figure 22.25. Restoring node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_restoring_node_invariants.png" align="middle" alt="Restoring node invariants" /></div></div></div><br class="figure-break" /><p>When a tree operation might invalidate some node invariant,
it invokes this method in its <code class="classname">node_update</code> base to
restore the invariant. For example, the graphic below shows
an <code class="function">insert</code> operation (point A); the tree performs some
@@ -946,7 +946,7 @@
C, and D). (It is well known that any <code class="function">insert</code>,
<code class="function">erase</code>, <code class="function">split</code> or <code class="function">join</code>, can restore
all node invariants by a small number of node invariant updates (<a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>)
- .</p><div class="figure"><a id="idp18398144"></a><p class="title"><strong>Figure 22.26. Insert update sequence</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_update_seq_diagram.png" align="middle" alt="Insert update sequence" /></div></div></div><br class="figure-break" /><p>To complete the description of the scheme, three questions
+ .</p><div class="figure"><a id="idm269997133232"></a><p class="title"><strong>Figure 22.26. Insert update sequence</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_update_seq_diagram.png" align="middle" alt="Insert update sequence" /></div></div></div><br class="figure-break" /><p>To complete the description of the scheme, three questions
need to be answered:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>How can a tree which supports order statistics define a
method such as <code class="classname">find_by_order</code>?</p></li><li class="listitem"><p>How can the node updater base access methods of the
tree?</p></li><li class="listitem"><p>How can the following cyclic dependency be resolved?
@@ -988,7 +988,7 @@
node's metadata (this is halting reducible). In the graphic
below, assume the shaded node is inserted. The tree would have
to traverse the useless path shown to the root, applying
- redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idp18420400"></a><p class="title"><strong>Figure 22.27. Useless update path</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_rationale_null_node_updator.png" align="middle" alt="Useless update path" /></div></div></div><br class="figure-break" /><p>A null policy class, <code class="classname">null_node_update</code>
+ redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idm269997110976"></a><p class="title"><strong>Figure 22.27. Useless update path</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_rationale_null_node_updator.png" align="middle" alt="Useless update path" /></div></div></div><br class="figure-break" /><p>A null policy class, <code class="classname">null_node_update</code>
solves both these problems. The tree detects that node
invariants are irrelevant, and defines all accordingly.</p></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.details.split"></a>Split and Join</h6></div></div></div><p>Tree-based containers support split and join methods.
It is possible to split a tree so that it passes
@@ -1071,7 +1071,7 @@
sub-tree with leafs "a" and "as". The maximal common prefix is
"a". The internal node contains, consequently, to const
iterators, one pointing to <code class="varname">'a'</code>, and the other to
- <code class="varname">'s'</code>.</p><div class="figure"><a id="idp18465088"></a><p class="title"><strong>Figure 22.28. A PATRICIA trie</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_pat_trie.png" align="middle" alt="A PATRICIA trie" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do
+ <code class="varname">'s'</code>.</p><div class="figure"><a id="idm269997066288"></a><p class="title"><strong>Figure 22.28. A PATRICIA trie</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_pat_trie.png" align="middle" alt="A PATRICIA trie" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do
tree-based containers. There are two minor
differences, though, which, unfortunately, thwart sharing them
sharing the same node-updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A trie's <code class="classname">Node_Update</code> template-template
@@ -1080,7 +1080,7 @@
parametrized by <code class="classname">Cmp_Fn</code>.</p></li><li class="listitem"><p>Tree-based containers store values in all nodes, while
trie-based containers (at least in this implementation) store
values in leafs.</p></li></ol></div><p>The graphic below shows the scheme, as well as some predefined
- policies (which are explained below).</p><div class="figure"><a id="idp18475584"></a><p class="title"><strong>Figure 22.29. A trie and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_trie_node_updator_policy_cd.png" align="middle" alt="A trie and its update policy" /></div></div></div><br class="figure-break" /><p>This library offers the following pre-defined trie node
+ policies (which are explained below).</p><div class="figure"><a id="idm269997055856"></a><p class="title"><strong>Figure 22.29. A trie and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_trie_node_updator_policy_cd.png" align="middle" alt="A trie and its update policy" /></div></div></div><br class="figure-break" /><p>This library offers the following pre-defined trie node
updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
<code class="classname">trie_order_statistics_node_update</code>
supports order statistics.
@@ -1128,7 +1128,7 @@
simple list of integer keys. If we search for the integer 6, we
are paying an overhead: the link with key 6 is only the fifth
link; if it were the first link, it could be accessed
- faster.</p><div class="figure"><a id="idp18506160"></a><p class="title"><strong>Figure 22.30. A simple list</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_simple_list.png" align="middle" alt="A simple list" /></div></div></div><br class="figure-break" /><p>List-update algorithms reorder lists as elements are
+ faster.</p><div class="figure"><a id="idm269997025344"></a><p class="title"><strong>Figure 22.30. A simple list</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_simple_list.png" align="middle" alt="A simple list" /></div></div></div><br class="figure-break" /><p>List-update algorithms reorder lists as elements are
accessed. They try to determine, by the access history, which
keys to move to the front of the list. Some of these algorithms
require adding some metadata alongside each entry.</p><p>For example, in the graphic below label A shows the counter
@@ -1138,7 +1138,7 @@
predetermined value, say 10, as shown in label C, the count is set
to 0 and the node is moved to the front of the list, as in label
D.
- </p><div class="figure"><a id="idp18511744"></a><p class="title"><strong>Figure 22.31. The counter algorithm</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_list_update.png" align="middle" alt="The counter algorithm" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies
+ </p><div class="figure"><a id="idm269997019760"></a><p class="title"><strong>Figure 22.31. The counter algorithm</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_list_update.png" align="middle" alt="The counter algorithm" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies
implementing any algorithm moving nodes to the front of the
list (policies implementing algorithms interchanging nodes are
unsupported).</p><p>Associative containers based on lists are parametrized by a
@@ -1310,7 +1310,7 @@
sequence; the second uses a tree (or forest of trees), which is
typically less structured than an associative container's tree;
the third simply uses an associative container. These are
- shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idp18575568"></a><p class="title"><strong>Figure 22.32. Underlying Priority-Queue Data-Structures.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_different_underlying_dss.png" align="middle" alt="Underlying Priority-Queue Data-Structures." /></div></div></div><br class="figure-break" /><p>Roughly speaking, any value that is both pushed and popped
+ shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idm269996955920"></a><p class="title"><strong>Figure 22.32. Underlying Priority-Queue Data-Structures.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_different_underlying_dss.png" align="middle" alt="Underlying Priority-Queue Data-Structures." /></div></div></div><br class="figure-break" /><p>Roughly speaking, any value that is both pushed and popped
from a priority queue must incur a logarithmic expense (in the
amortized sense). Any priority queue implementation that would
avoid this, would violate known bounds on comparison-based
@@ -1390,7 +1390,7 @@
container <code class="classname">Cntnr</code>, the tag of the underlying
data structure can be found via <code class="classname">typename
Cntnr::container_category</code>; this is one of the possible tags shown in the graphic below.
- </p><div class="figure"><a id="idp18610544"></a><p class="title"><strong>Figure 22.33. Priority-Queue Data-Structure Tags.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_tag_hierarchy.png" align="middle" alt="Priority-Queue Data-Structure Tags." /></div></div></div><br class="figure-break" /><p>Additionally, a traits mechanism can be used to query a
+ </p><div class="figure"><a id="idm269996920880"></a><p class="title"><strong>Figure 22.33. Priority-Queue Data-Structure Tags.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_tag_hierarchy.png" align="middle" alt="Priority-Queue Data-Structure Tags." /></div></div></div><br class="figure-break" /><p>Additionally, a traits mechanism can be used to query a
container type for its attributes. Given any container
<code class="classname">Cntnr</code>, then </p><pre class="programlisting">__gnu_pbds::container_traits&lt;Cntnr&gt;</pre><p>
is a traits class identifying the properties of the
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_using.html b/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_using.html
index fec178fa1..1e5e549ac 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_using.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/policy_data_structures_using.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="next" href="policy_data_structures_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.prereq"></a>Prerequisites</h3></div></div></div><p>The library contains only header files, and does not require any
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="next" href="policy_data_structures_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.prereq"></a>Prerequisites</h3></div></div></div><p>The library contains only header files, and does not require any
other libraries except the standard C++ library . All classes are
defined in namespace <code class="code">__gnu_pbds</code>. The library internally
uses macros beginning with <code class="code">PB_DS</code>, but
@@ -61,7 +61,7 @@
In addition, there are the following diagnostics classes,
used to report errors specific to this library's data
structures.
- </p><div class="figure"><a id="idp17806128"></a><p class="title"><strong>Figure 22.7. Exception Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_exception_hierarchy.png" align="middle" alt="Exception Hierarchy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p>
+ </p><div class="figure"><a id="idm269997724688"></a><p class="title"><strong>Figure 22.7. Exception Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_exception_hierarchy.png" align="middle" alt="Exception Hierarchy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p>
For the most part, the policy-based containers containers in
namespace <code class="literal">__gnu_pbds</code> have the same interface as
the equivalent containers in the standard C++ library, except for
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode.html b/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode.html
index 55778294f..9214eaef8 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 19. Profile Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="parallel_mode_test.html" title="Testing" /><link rel="next" href="profile_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. Profile Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_test.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 19. Profile Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="parallel_mode_test.html" title="Testing" /><link rel="next" href="profile_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. Profile Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_test.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode"></a>Chapter 19. Profile Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.intro"></a>Intro</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode"></a>Chapter 19. Profile Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.intro"></a>Intro</h2></div></div></div><p>
<span class="emphasis"><em>Goal: </em></span>Give performance improvement advice based on
recognition of suboptimal usage patterns of the standard library.
</p><p>
@@ -137,7 +137,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
call context.
(Environment variable not supported.)
</p></li></ul></div><p>
- </p></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idp17395456"></a><p><span class="citetitle"><em class="citetitle">
+ </p></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idm269998135936"></a><p><span class="citetitle"><em class="citetitle">
Perflint: A Context Sensitive Performance Advisor for C++ Programs
</em>. </span><span class="author"><span class="firstname">Lixia</span> <span class="surname">Liu</span>. </span><span class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span>. </span><span class="copyright">Copyright © 2009 . </span><span class="publisher"><span class="publishername">
Proceedings of the 2009 International Symposium on Code Generation
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_api.html b/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_api.html
index 1cd1afa69..ea0c4acd5 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_api.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_api.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Extensions for Custom Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_design.html" title="Design" /><link rel="next" href="profile_mode_cost_model.html" title="Empirical Cost Model" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Extensions for Custom Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_design.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_cost_model.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.api"></a>Extensions for Custom Containers</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Extensions for Custom Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_design.html" title="Design" /><link rel="next" href="profile_mode_cost_model.html" title="Empirical Cost Model" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Extensions for Custom Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_design.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_cost_model.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.api"></a>Extensions for Custom Containers</h2></div></div></div><p>
Many large projects use their own data structures instead of the ones in the
standard library. If these data structures are similar in functionality
to the standard library, they can be instrumented with the same hooks
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html b/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html
index 2b9423fcb..f42e87936 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Empirical Cost Model</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_api.html" title="Extensions for Custom Containers" /><link rel="next" href="profile_mode_impl.html" title="Implementation Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Empirical Cost Model</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_api.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.cost_model"></a>Empirical Cost Model</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Empirical Cost Model</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_api.html" title="Extensions for Custom Containers" /><link rel="next" href="profile_mode_impl.html" title="Implementation Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Empirical Cost Model</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_api.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.cost_model"></a>Empirical Cost Model</h2></div></div></div><p>
Currently, the cost model uses formulas with predefined relative weights
for alternative containers or container implementations. For instance,
iterating through a vector is X times faster than iterating through a list.
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_design.html b/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_design.html
index 69119bf01..23cadfa06 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_design.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_design.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="next" href="profile_mode_api.html" title="Extensions for Custom Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_api.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.design"></a>Design</h2></div></div></div><p>
-</p><div class="table"><a id="idp16981200"></a><p class="title"><strong>Table 19.1. Profile Code Location</strong></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals. Implementation files are
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="next" href="profile_mode_api.html" title="Extensions for Custom Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_api.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.design"></a>Design</h2></div></div></div><p>
+</p><div class="table"><a id="idm269998550064"></a><p class="title"><strong>Table 19.1. Profile Code Location</strong></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals. Implementation files are
only included from <code class="code">impl/profiler.h</code>, which is the only
file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break" /><p>
</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.wrapper"></a>Wrapper Model</h3></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_devel.html b/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_devel.html
index 21edaf7a0..cb0c9de82 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_devel.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_devel.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Developer Information</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_impl.html" title="Implementation Issues" /><link rel="next" href="profile_mode_diagnostics.html" title="Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developer Information</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.developer"></a>Developer Information</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.bigpic"></a>Big Picture</h3></div></div></div><p>The profile mode headers are included with
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Developer Information</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_impl.html" title="Implementation Issues" /><link rel="next" href="profile_mode_diagnostics.html" title="Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developer Information</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.developer"></a>Developer Information</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.bigpic"></a>Big Picture</h3></div></div></div><p>The profile mode headers are included with
<code class="code">-D_GLIBCXX_PROFILE</code> through preprocessor directives in
<code class="code">include/std/*</code>.
</p><p>Instrumented implementations are provided in
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html b/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
index 4b68fbeaa..21be522c5 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_devel.html" title="Developer Information" /><link rel="next" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Diagnostics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_devel.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.diagnostics"></a>Diagnostics</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_devel.html" title="Developer Information" /><link rel="next" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Diagnostics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_devel.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.diagnostics"></a>Diagnostics</h2></div></div></div><p>
The table below presents all the diagnostics we intend to implement.
Each diagnostic has a corresponding compile time switch
<code class="code">-D_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code>.
@@ -17,7 +17,7 @@
A high accuracy means that the diagnostic is unlikely to be wrong.
These grades are not perfect. They are just meant to guide users with
specific needs or time budgets.
- </p><div class="table"><a id="idp17088912"></a><p class="title"><strong>Table 19.2. Profile Diagnostics</strong></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th><td class="auto-generated"> </td></tr></thead><tbody><tr><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers" title="Containers">
+ </p><div class="table"><a id="idm269998442544"></a><p class="title"><strong>Table 19.2. Profile Diagnostics</strong></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th><td class="auto-generated"> </td></tr></thead><tbody><tr><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers" title="Containers">
CONTAINERS</a></td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small" title="Hashtable Too Small">
HASHTABLE_TOO_SMALL</a></td><td align="left">10</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large" title="Hashtable Too Large">
HASHTABLE_TOO_LARGE</a></td><td align="left">5</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash" title="Inefficient Hash">
@@ -374,7 +374,7 @@ foo.cc:1: advice: Change "list" to "forward_list".
Quick Sort for a particular call context.
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
See papers:
- <a class="link" href="http://portal.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
+ <a class="link" href="https://dl.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
A framework for adaptive algorithm selection in STAPL</a> and
<a class="link" href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227" target="_top">
Optimizing Sorting with Machine Learning Algorithms</a>.
@@ -500,7 +500,7 @@ the allocation sequence or switching to a structure conscious allocator.
Keep a shadow for each container. Record iterator dereferences and
container member accesses. Issue advice for elements referenced by
multiple threads.
- See paper: <a class="link" href="http://portal.acm.org/citation.cfm?id=207110.207148" target="_top">
+ See paper: <a class="link" href="https://dl.acm.org/citation.cfm?id=207110.207148" target="_top">
The LRPD test: speculative run-time parallelization of loops with
privatization and reduction parallelization</a>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_impl.html b/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_impl.html
index afe9f8b9c..1644f3e57 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_impl.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/profile_mode_impl.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_cost_model.html" title="Empirical Cost Model" /><link rel="next" href="profile_mode_devel.html" title="Developer Information" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_cost_model.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_devel.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.implementation"></a>Implementation Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"></a>Stack Traces</h3></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_cost_model.html" title="Empirical Cost Model" /><link rel="next" href="profile_mode_devel.html" title="Developer Information" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_cost_model.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_devel.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.implementation"></a>Implementation Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"></a>Stack Traces</h3></div></div></div><p>
Accurate stack traces are needed during profiling since we group events by
call context and dynamic instance. Without accurate traces, diagnostics
may be hard to interpret. For instance, when giving advice to the user
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/setup.html b/gcc-4.8/libstdc++-v3/doc/html/manual/setup.html
index 61f40b735..10d6c4683 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/setup.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/setup.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 2. Setup</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="bugs.html" title="Bugs" /><link rel="next" href="configure.html" title="Configure" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Setup</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><th width="60%" align="center">Part I. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 2. Setup</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="bugs.html" title="Bugs" /><link rel="next" href="configure.html" title="Configure" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Setup</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><th width="60%" align="center">Part I. 
Introduction
-</th><td width="20%" align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup"></a>Chapter 2. Setup</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></div><p>To transform libstdc++ sources into installed include files
+</th><td width="20%" align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup"></a>Chapter 2. Setup</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></div><p>To transform libstdc++ sources into installed include files
and properly built binaries useful for linking to other software is
a multi-step process. Steps include getting the sources,
configuring and building the sources, testing, and installation.
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/source_code_style.html b/gcc-4.8/libstdc++-v3/doc/html/manual/source_code_style.html
index 8c41731cb..790276f3f 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/source_code_style.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/source_code_style.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Coding Style</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="source_organization.html" title="Directory Layout and Source Conventions" /><link rel="next" href="source_design_notes.html" title="Design Notes" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Coding Style</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Coding Style</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="source_organization.html" title="Directory Layout and Source Conventions" /><link rel="next" href="source_design_notes.html" title="Design Notes" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Coding Style</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
Contributing
</th><td width="20%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.coding_style"></a>Coding Style</h2></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/source_design_notes.html b/gcc-4.8/libstdc++-v3/doc/html/manual/source_design_notes.html
index 0c36b9820..1b241d20d 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/source_design_notes.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/source_design_notes.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Notes</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="source_code_style.html" title="Coding Style" /><link rel="next" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Notes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Notes</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="source_code_style.html" title="Coding Style" /><link rel="next" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Notes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
Contributing
</th><td width="20%" align="right"> <a accesskey="n" href="appendix_porting.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.design_notes"></a>Design Notes</h2></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/source_organization.html b/gcc-4.8/libstdc++-v3/doc/html/manual/source_organization.html
index ae49afaf5..1ff2397cf 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/source_organization.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/source_organization.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Directory Layout and Source Conventions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="next" href="source_code_style.html" title="Coding Style" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Directory Layout and Source Conventions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Directory Layout and Source Conventions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="next" href="source_code_style.html" title="Coding Style" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Directory Layout and Source Conventions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
Contributing
</th><td width="20%" align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.organization"></a>Directory Layout and Source Conventions</h2></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/status.html b/gcc-4.8/libstdc++-v3/doc/html/manual/status.html
index 701952538..b14e331fb 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/status.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/status.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 1. Status</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="intro.html" title="Part I.  Introduction" /><link rel="next" href="license.html" title="License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. Status</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="intro.html">Prev</a> </td><th width="60%" align="center">Part I. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 1. Status</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="intro.html" title="Part I.  Introduction" /><link rel="next" href="license.html" title="License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. Status</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="intro.html">Prev</a> </td><th width="60%" align="center">Part I. 
Introduction
-</th><td width="20%" align="right"> <a accesskey="n" href="license.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status"></a>Chapter 1. Status</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.iso"></a>Implementation Status</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.1998"></a>C++ 1998/2003</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.status"></a>Implementation Status</h4></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="license.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status"></a>Chapter 1. Status</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.iso"></a>Implementation Status</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.1998"></a>C++ 1998/2003</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.status"></a>Implementation Status</h4></div></div></div><p>
This status table is based on the table of contents of ISO/IEC 14882:2003.
</p><p>
This page describes the C++ support in mainline GCC SVN, not in any
particular release.
-</p><div class="table"><a id="idp452240"></a><p class="title"><strong>Table 1.1. C++ 1998/2003 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
+</p><div class="table"><a id="idm270008034928"></a><p class="title"><strong>Table 1.1. C++ 1998/2003 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
<span class="emphasis"><em>18</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Language support</em></span>
@@ -157,7 +157,7 @@ presence of the required flag.
</p><p>
This page describes the C++11 support in mainline GCC SVN, not in any
particular release.
-</p><div class="table"><a id="idp8670848"></a><p class="title"><strong>Table 1.2. C++ 2011 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2011 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
+</p><div class="table"><a id="idm270007982624"></a><p class="title"><strong>Table 1.2. C++ 2011 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2011 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
<span class="emphasis"><em>18</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Language support</em></span>
@@ -183,7 +183,7 @@ particular release.
is_trivially_copy_constructible, is_trivially_move_constructible,
is_trivially_assignable, is_trivially_default_assignable,
is_trivially_copy_assignable, is_trivially_move_assignable
- </td></tr><tr><td align="left">20.9.5</td><td align="left">Type property queries</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.6</td><td align="left">Other transformations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10</td><td align="left">Compile-time rational arithmetic</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.2</td><td align="left">Header <code class="code">&lt;ratio&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.3</td><td align="left">Class template <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.4</td><td align="left">Arithmetic on <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.5</td><td align="left">Comparison of <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.6</td><td align="left">SI types for <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11</td><td align="left">Time utilities</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.3</td><td align="left">Clock requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4</td><td align="left">Time-related traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.4.1</td><td align="left"><code class="code">treat_as_floating_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.2</td><td align="left"><code class="code">duration_values</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.3</td><td align="left">Specializations of <code class="code">common_type</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.11.5</td><td align="left">Class template <code class="code">duration</code></td><td align="left">Partial</td><td align="left">Missing constexpr for non-member arithmetic operations</td></tr><tr><td align="left">20.11.6</td><td align="left">Class template <code class="code">time_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7</td><td align="left">Clocks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.7.1</td><td align="left">Class <code class="code">system_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.2</td><td align="left">Class <code class="code">steady_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.3</td><td align="left">Class <code class="code">high_resolution_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.8</td><td align="left">Date and time functions</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12</td><td align="left">Scoped allocator adaptor</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">20.12.1</td><td align="left">Header <code class="code">&lt;scoped_allocator&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.12.2</td><td align="left">Scoped allocator adaptor member types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.12.3</td><td align="left">Scoped allocator adaptor constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12.4</td><td align="left">Scoped allocator adaptor members</td><td align="left">Partial</td><td align="left">OUTERMOST is not recursive.</td></tr><tr><td align="left">20.12.5</td><td align="left">Scoped allocator operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.13</td><td align="left">Class <code class="code">type_index</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
+ </td></tr><tr><td align="left">20.9.5</td><td align="left">Type property queries</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.9.7.6</td><td align="left">Other transformations</td><td align="left">Partial</td><td align="left">Missing <code class="code">aligned_union</code>.</td></tr><tr><td align="left">20.10</td><td align="left">Compile-time rational arithmetic</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.2</td><td align="left">Header <code class="code">&lt;ratio&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.3</td><td align="left">Class template <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.4</td><td align="left">Arithmetic on <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.5</td><td align="left">Comparison of <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.6</td><td align="left">SI types for <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11</td><td align="left">Time utilities</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.3</td><td align="left">Clock requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4</td><td align="left">Time-related traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.4.1</td><td align="left"><code class="code">treat_as_floating_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.2</td><td align="left"><code class="code">duration_values</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.3</td><td align="left">Specializations of <code class="code">common_type</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.11.5</td><td align="left">Class template <code class="code">duration</code></td><td align="left">Partial</td><td align="left">Missing constexpr for non-member arithmetic operations</td></tr><tr><td align="left">20.11.6</td><td align="left">Class template <code class="code">time_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7</td><td align="left">Clocks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.7.1</td><td align="left">Class <code class="code">system_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.2</td><td align="left">Class <code class="code">steady_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.3</td><td align="left">Class <code class="code">high_resolution_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.8</td><td align="left">Date and time functions</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12</td><td align="left">Scoped allocator adaptor</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">20.12.1</td><td align="left">Header <code class="code">&lt;scoped_allocator&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.12.2</td><td align="left">Scoped allocator adaptor member types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.12.3</td><td align="left">Scoped allocator adaptor constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12.4</td><td align="left">Scoped allocator adaptor members</td><td align="left">Partial</td><td align="left">OUTERMOST is not recursive.</td></tr><tr><td align="left">20.12.5</td><td align="left">Scoped allocator operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.13</td><td align="left">Class <code class="code">type_index</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>21</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Strings</em></span>
@@ -302,7 +302,7 @@ In this implementation the header names are prefixed by
</p><p>
This page describes the TR1 support in mainline GCC SVN, not in any particular
release.
-</p><div class="table"><a id="idp7483200"></a><p class="title"><strong>Table 1.3. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
+</p><div class="table"><a id="idm270006687472"></a><p class="title"><strong>Table 1.3. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
<p>
Uses code from
<a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>.
@@ -323,7 +323,7 @@ decimal floating-point arithmetic
</p><p>
This page describes the TR 24733 support in mainline GCC SVN, not in any
particular release.
-</p><div class="table"><a id="idp12559072"></a><p class="title"><strong>Table 1.4. C++ TR 24733 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
+</p><div class="table"><a id="idm270002960368"></a><p class="title"><strong>Table 1.4. C++ TR 24733 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
<span class="emphasis"><em>0</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Introduction</em></span>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/std_contents.html b/gcc-4.8/libstdc++-v3/doc/html/manual/std_contents.html
index b8c889310..c09b29e57 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/std_contents.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/std_contents.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part II.  Standard Contents</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="debug.html" title="Debugging Support" /><link rel="next" href="support.html" title="Chapter 4.  Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part II.  Standard Contents</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="debug.html" title="Debugging Support" /><link rel="next" href="support.html" title="Chapter 4.  Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II. 
Standard Contents
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="support.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.std"></a>Part II. 
Standard Contents
- </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="support.html">4.
+ </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="support.html">4.
Support
</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="diagnostics.html">5.
@@ -12,13 +12,13 @@
</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
Utilities
-</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
+</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
Strings
</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8.
Localization
-</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
+</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
Containers
</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10.
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/streambufs.html b/gcc-4.8/libstdc++-v3/doc/html/manual/streambufs.html
index 22644ba0c..dd2b99a38 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/streambufs.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/streambufs.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Stream Buffers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="io.html" title="Chapter 13.  Input and Output" /><link rel="next" href="stringstreams.html" title="Memory Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Stream Buffers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Stream Buffers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="io.html" title="Chapter 13.  Input and Output" /><link rel="next" href="stringstreams.html" title="Memory Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Stream Buffers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
Input and Output
</th><td width="20%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.streambufs"></a>Stream Buffers</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.derived"></a>Derived streambuf Classes</h3></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/strings.html b/gcc-4.8/libstdc++-v3/doc/html/manual/strings.html
index 2f1e8410d..b08943b83 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/strings.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/strings.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 7.  Strings</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="traits.html" title="Traits" /><link rel="next" href="localization.html" title="Chapter 8.  Localization" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 7.  Strings</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="traits.html" title="Traits" /><link rel="next" href="localization.html" title="Chapter 8.  Localization" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. 
Strings
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
</th><td width="20%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.strings"></a>Chapter 7. 
Strings
- <a id="idp15603440" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.strings.string"></a>String Classes</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
+ <a id="idm269999928112" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.strings.string"></a>String Classes</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
Here are Standard, simple, and portable ways to perform common
transformations on a <code class="code">string</code> instance, such as
"convert to all upper case." The word transformations
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/stringstreams.html b/gcc-4.8/libstdc++-v3/doc/html/manual/stringstreams.html
index 04a16c0c4..2ade2bebb 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/stringstreams.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/stringstreams.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="streambufs.html" title="Stream Buffers" /><link rel="next" href="fstreams.html" title="File Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="streambufs.html" title="Stream Buffers" /><link rel="next" href="fstreams.html" title="File Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
Input and Output
</th><td width="20%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.memstreams"></a>Memory Based Streams</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.memstreams.compat"></a>Compatibility With strstream</h3></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/support.html b/gcc-4.8/libstdc++-v3/doc/html/manual/support.html
index 8d017a251..02df67dc3 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/support.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/support.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 4.  Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="next" href="dynamic_memory.html" title="Dynamic Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 4.  Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="next" href="dynamic_memory.html" title="Dynamic Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. 
Support
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="std_contents.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
</th><td width="20%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.support"></a>Chapter 4. 
Support
- <a id="idp13745936" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div><p>
+ <a id="idm270001786944" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div><p>
This part deals with the functions called and objects created
automatically during the course of a program's existence.
</p><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/termination.html b/gcc-4.8/libstdc++-v3/doc/html/manual/termination.html
index c18c5738d..e6328c8dd 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/termination.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/termination.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Termination</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="Chapter 4.  Support" /><link rel="prev" href="dynamic_memory.html" title="Dynamic Memory" /><link rel="next" href="diagnostics.html" title="Chapter 5.  Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Termination</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><th width="60%" align="center">Chapter 4. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Termination</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="Chapter 4.  Support" /><link rel="prev" href="dynamic_memory.html" title="Dynamic Memory" /><link rel="next" href="diagnostics.html" title="Chapter 5.  Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Termination</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><th width="60%" align="center">Chapter 4. 
Support
</th><td width="20%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.termination"></a>Termination</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.handlers"></a>Termination Handlers</h3></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/test.html b/gcc-4.8/libstdc++-v3/doc/html/manual/test.html
index 9e32a2641..969e1872d 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/test.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/test.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Test</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, test, testsuite, performance, conformance, ABI, exception safety" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="internals.html" title="Porting to New Hardware or Operating Systems" /><link rel="next" href="abi.html" title="ABI Policy and Guidelines" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Test</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Test</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, test, testsuite, performance, conformance, ABI, exception safety" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="internals.html" title="Porting to New Hardware or Operating Systems" /><link rel="next" href="abi.html" title="ABI Policy and Guidelines" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Test</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
Porting and Maintenance
</th><td width="20%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.test"></a>Test</h2></div></div></div><p>
@@ -492,7 +492,7 @@ only default variables.
reporting functions including:
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>time_counter</p></li><li class="listitem"><p>resource_counter</p></li><li class="listitem"><p>report_performance</p></li></ul></div></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="test.special"></a>Special Topics</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.exception.safety"></a>
Qualifying Exception Safety Guarantees
- <a id="idp22628992" class="indexterm"></a>
+ <a id="idm269992903504" class="indexterm"></a>
</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.overview"></a>Overview</h5></div></div></div><p>
Testing is composed of running a particular test sequence,
and looking at what happens to the surrounding code when
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/traits.html b/gcc-4.8/libstdc++-v3/doc/html/manual/traits.html
index ed45918ec..d5cac08be 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/traits.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/traits.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Traits</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="memory.html" title="Memory" /><link rel="next" href="strings.html" title="Chapter 7.  Strings" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Traits</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Traits</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="memory.html" title="Memory" /><link rel="next" href="strings.html" title="Chapter 7.  Strings" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Traits</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
Utilities
</th><td width="20%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.traits"></a>Traits</h2></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/unordered_associative.html b/gcc-4.8/libstdc++-v3/doc/html/manual/unordered_associative.html
index 578108901..ad675e1bf 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/unordered_associative.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/unordered_associative.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Unordered Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="associative.html" title="Associative" /><link rel="next" href="containers_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Unordered Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Unordered Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="associative.html" title="Associative" /><link rel="next" href="containers_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Unordered Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
Containers
</th><td width="20%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.unordered"></a>Unordered Associative</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.unordered.hash"></a>Hash Code</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="containers.unordered.cache"></a>Hash Code Caching Policy</h4></div></div></div><p>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/using.html b/gcc-4.8/libstdc++-v3/doc/html/manual/using.html
index 259ed27dd..51fec13f7 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/using.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/using.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 3. Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="make.html" title="Make" /><link rel="next" href="using_headers.html" title="Headers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><th width="60%" align="center">Part I. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 3. Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="make.html" title="Make" /><link rel="next" href="using_headers.html" title="Headers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><th width="60%" align="center">Part I. 
Introduction
-</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p>
The set of features available in the GNU C++ library is shaped
by
several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html" target="_top">GCC
@@ -10,5 +10,5 @@
enumerated and detailed in the table below.
</p><p>
By default, <span class="command"><strong>g++</strong></span> is equivalent to <span class="command"><strong>g++ -std=gnu++98</strong></span>. The standard library also defaults to this dialect.
- </p><div class="table"><a id="idp13051936"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
+ </p><div class="table"><a id="idm270002481088"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
&lt;mutex&gt;, or &lt;condition_variable&gt;.</td></tr><tr><td align="left"><code class="literal">-fopenmp</code></td><td align="left">For <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel</a> mode.</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Make </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Headers</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/using_concurrency.html b/gcc-4.8/libstdc++-v3/doc/html/manual/using_concurrency.html
index 509c48d29..5370fc39d 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/using_concurrency.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/using_concurrency.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_dynamic_or_shared.html" title="Linking" /><link rel="next" href="using_exceptions.html" title="Exceptions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.concurrency"></a>Concurrency</h2></div></div></div><p>This section discusses issues surrounding the proper compilation
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_dynamic_or_shared.html" title="Linking" /><link rel="next" href="using_exceptions.html" title="Exceptions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.concurrency"></a>Concurrency</h2></div></div></div><p>This section discusses issues surrounding the proper compilation
of multithreaded applications which use the Standard C++
library. This information is GCC-specific since the C++
standard does not address matters of multithreaded applications.
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html b/gcc-4.8/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
index e367aab6d..ac46c7e19 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Linking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_namespaces.html" title="Namespaces" /><link rel="next" href="using_concurrency.html" title="Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Linking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.linkage"></a>Linking</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.freestanding"></a>Almost Nothing</h3></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Linking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_namespaces.html" title="Namespaces" /><link rel="next" href="using_concurrency.html" title="Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Linking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.linkage"></a>Linking</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.freestanding"></a>Almost Nothing</h3></div></div></div><p>
Or as close as it gets: freestanding. This is a minimal
configuration, with only partial support for the standard
library. Assume only the following header files can be used:
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/using_exceptions.html b/gcc-4.8/libstdc++-v3/doc/html/manual/using_exceptions.html
index b1451c66e..0aa416f13 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/using_exceptions.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/using_exceptions.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Exceptions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, exception, error, exception neutrality, exception safety, exception propagation, -fno-exceptions" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_concurrency.html" title="Concurrency" /><link rel="next" href="debug.html" title="Debugging Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.exceptions"></a>Exceptions</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Exceptions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, exception, error, exception neutrality, exception safety, exception propagation, -fno-exceptions" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_concurrency.html" title="Concurrency" /><link rel="next" href="debug.html" title="Debugging Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.exceptions"></a>Exceptions</h2></div></div></div><p>
The C++ language provides language support for stack unwinding
with <code class="literal">try</code> and <code class="literal">catch</code> blocks and
the <code class="literal">throw</code> keyword.
@@ -265,7 +265,7 @@ is called.
}
catch(...)
{ this-&gt;_M_setstate(ios_base::badbit); }
-</pre></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idp13644000"></a><p><span class="title"><em>
+</pre></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idm270001889024"></a><p><span class="title"><em>
<a class="link" href="http://www.opengroup.org/austin/" target="_top">
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
</a>
@@ -274,39 +274,39 @@ is called.
. </span><span class="copyright">Copyright © 2008
The Open Group/The Institute of Electrical and Electronics
Engineers, Inc.
- . </span></p></div><div class="biblioentry"><a id="idp13647696"></a><p><span class="title"><em>
+ . </span></p></div><div class="biblioentry"><a id="idm270001885328"></a><p><span class="title"><em>
<a class="link" href="http://www.boost.org/community/error_handling.html" target="_top">
Error and Exception Handling
</a>
</em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
Boost
- . </span></span></p></div><div class="biblioentry"><a id="idp13651392"></a><p><span class="title"><em>
+ . </span></span></p></div><div class="biblioentry"><a id="idm270001881632"></a><p><span class="title"><em>
<a class="link" href="http://www.boost.org/community/exception_safety.html" target="_top">
Exception-Safety in Generic Components
</a>
</em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
Boost
- . </span></span></p></div><div class="biblioentry"><a id="idp13655104"></a><p><span class="title"><em>
+ . </span></span></p></div><div class="biblioentry"><a id="idm270001877920"></a><p><span class="title"><em>
<a class="link" href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" target="_top">
Standard Library Exception Policy
</a>
</em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
WG21 N1077
- . </span></span></p></div><div class="biblioentry"><a id="idp13658816"></a><p><span class="title"><em>
+ . </span></span></p></div><div class="biblioentry"><a id="idm270001874208"></a><p><span class="title"><em>
<a class="link" href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" target="_top">
ia64 c++ abi exception handling
</a>
</em>. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
GNU
- . </span></span></p></div><div class="biblioentry"><a id="idp13662512"></a><p><span class="title"><em>
+ . </span></span></p></div><div class="biblioentry"><a id="idm270001870512"></a><p><span class="title"><em>
<a class="link" href="http://www.research.att.com/~bs/3rd_safe.pdf" target="_top">
Appendix E: Standard-Library Exception Safety
</a>
- </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idp13665328"></a><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idm270001867696"></a><p><span class="citetitle"><em class="citetitle">
Exceptional C++
</em>. </span><span class="pagenums">
Exception-Safety Issues and Techniques
- . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="idp13667712"></a><p><span class="title"><em>
+ . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="idm270001865312"></a><p><span class="title"><em>
<a class="link" href="http://gcc.gnu.org/PR25191" target="_top">
GCC Bug 25191: exception_defines.h #defines try/catch
</a>
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/using_headers.html b/gcc-4.8/libstdc++-v3/doc/html/manual/using_headers.html
index 66335792f..587db2249 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/using_headers.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/using_headers.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Headers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using.html" title="Chapter 3. Using" /><link rel="next" href="using_macros.html" title="Macros" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Headers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_macros.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.headers"></a>Headers</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.all"></a>Header Files</h3></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Headers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using.html" title="Chapter 3. Using" /><link rel="next" href="using_macros.html" title="Macros" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Headers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_macros.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.headers"></a>Headers</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.all"></a>Header Files</h3></div></div></div><p>
The C++ standard specifies the entire set of header files that
must be available to all hosted implementations. Actually, the
word "files" is a misnomer, since the contents of the
@@ -18,19 +18,19 @@
the 1998 standard as updated for 2003, and the current 2011 standard.
</p><p>
C++98/03 include files. These are available in the default compilation mode, i.e. <code class="code">-std=c++98</code> or <code class="code">-std=gnu++98</code>.
- </p><div class="table"><a id="idp13079360"></a><p class="title"><strong>Table 3.2. C++ 1998 Library Headers</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13115840"></a><p class="title"><strong>Table 3.3. C++ 1998 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p>
+ </p><div class="table"><a id="idm270002453792"></a><p class="title"><strong>Table 3.2. C++ 1998 Library Headers</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002417312"></a><p class="title"><strong>Table 3.3. C++ 1998 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p>
C++11 include files. These are only available in C++11 compilation
mode, i.e. <code class="literal">-std=c++11</code> or <code class="literal">-std=gnu++11</code>.
-</p><p></p><div class="table"><a id="idp13140576"></a><p class="title"><strong>Table 3.4. C++ 2011 Library Headers</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13192016"></a><p class="title"><strong>Table 3.5. C++ 2011 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdbool</code></td></tr><tr><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
+</p><p></p><div class="table"><a id="idm270002392576"></a><p class="title"><strong>Table 3.4. C++ 2011 Library Headers</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002341136"></a><p class="title"><strong>Table 3.5. C++ 2011 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdbool</code></td></tr><tr><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
In addition, TR1 includes as:
-</p><div class="table"><a id="idp13221904"></a><p class="title"><strong>Table 3.6. C++ TR 1 Library Headers</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13238832"></a><p class="title"><strong>Table 3.7. C++ TR 1 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++
+</p><div class="table"><a id="idm270002311248"></a><p class="title"><strong>Table 3.6. C++ TR 1 Library Headers</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002294320"></a><p class="title"><strong>Table 3.7. C++ TR 1 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++
compiler supports scalar decimal floating-point types defined via
<code class="code">__attribute__((mode(SD|DD|LD)))</code>.
-</p><div class="table"><a id="idp13259904"></a><p class="title"><strong>Table 3.8. C++ TR 24733 Decimal Floating-Point Header</strong></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" class="c1" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
+</p><div class="table"><a id="idm270002273248"></a><p class="title"><strong>Table 3.8. C++ TR 24733 Decimal Floating-Point Header</strong></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" class="c1" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
Also included are files for the C++ ABI interface:
-</p><div class="table"><a id="idp13265424"></a><p class="title"><strong>Table 3.9. C++ ABI Headers</strong></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
+</p><div class="table"><a id="idm270002267728"></a><p class="title"><strong>Table 3.9. C++ ABI Headers</strong></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
And a large variety of extensions.
-</p><div class="table"><a id="idp13271824"></a><p class="title"><strong>Table 3.10. Extension Headers</strong></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13307552"></a><p class="title"><strong>Table 3.11. Extension Debug Headers</strong></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13322320"></a><p class="title"><strong>Table 3.12. Extension Profile Headers</strong></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13335696"></a><p class="title"><strong>Table 3.13. Extension Parallel Headers</strong></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules.
+</p><div class="table"><a id="idm270002261328"></a><p class="title"><strong>Table 3.10. Extension Headers</strong></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002225600"></a><p class="title"><strong>Table 3.11. Extension Debug Headers</strong></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002210832"></a><p class="title"><strong>Table 3.12. Extension Profile Headers</strong></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002197456"></a><p class="title"><strong>Table 3.13. Extension Parallel Headers</strong></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules.
</p><p>First, mixing different dialects of the standard headers is not
possible. It's an all-or-nothing affair. Thus, code like
</p><pre class="programlisting">
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/using_macros.html b/gcc-4.8/libstdc++-v3/doc/html/manual/using_macros.html
index add6d69a6..44acbb7a0 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/using_macros.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/using_macros.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Macros</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_headers.html" title="Headers" /><link rel="next" href="using_namespaces.html" title="Namespaces" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Macros</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.macros"></a>Macros</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Macros</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_headers.html" title="Headers" /><link rel="next" href="using_namespaces.html" title="Namespaces" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Macros</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.macros"></a>Macros</h2></div></div></div><p>
All library macros begin with <code class="code">_GLIBCXX_</code>.
</p><p>
Furthermore, all pre-processor macros, switches, and
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/using_namespaces.html b/gcc-4.8/libstdc++-v3/doc/html/manual/using_namespaces.html
index 48b8e7dea..224c7d6bf 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/using_namespaces.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/using_namespaces.html
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Namespaces</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_macros.html" title="Macros" /><link rel="next" href="using_dynamic_or_shared.html" title="Linking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Namespaces</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.namespaces"></a>Namespaces</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.all"></a>Available Namespaces</h3></div></div></div><p> There are three main namespaces.
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Namespaces</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_macros.html" title="Macros" /><link rel="next" href="using_dynamic_or_shared.html" title="Linking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Namespaces</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.namespaces"></a>Namespaces</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.all"></a>Available Namespaces</h3></div></div></div><p> There are three main namespaces.
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>std</p><p>The ISO C++ standards specify that "all library entities are defined
within namespace std." This includes namespaces nested
within <code class="code">namespace std</code>, such as <code class="code">namespace
diff --git a/gcc-4.8/libstdc++-v3/doc/html/manual/utilities.html b/gcc-4.8/libstdc++-v3/doc/html/manual/utilities.html
index fefc295bf..e003df230 100644
--- a/gcc-4.8/libstdc++-v3/doc/html/manual/utilities.html
+++ b/gcc-4.8/libstdc++-v3/doc/html/manual/utilities.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 6.  Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="concept_checking.html" title="Concept Checking" /><link rel="next" href="pairs.html" title="Pairs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 6.  Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="concept_checking.html" title="Concept Checking" /><link rel="next" href="pairs.html" title="Pairs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. 
Utilities
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="concept_checking.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
</th><td width="20%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.util"></a>Chapter 6. 
Utilities
- <a id="idp13862416" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone. Many people
+ <a id="idm270001670464" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone. Many people
get slightly the wrong idea. In the interest of not reinventing
the wheel, we will refer you to the introduction to the functor
concept written by SGI as part of their STL, in
diff --git a/gcc-4.8/libstdc++-v3/doc/xml/faq.xml b/gcc-4.8/libstdc++-v3/doc/xml/faq.xml
index 4e3339260..6c25e7955 100644
--- a/gcc-4.8/libstdc++-v3/doc/xml/faq.xml
+++ b/gcc-4.8/libstdc++-v3/doc/xml/faq.xml
@@ -241,7 +241,7 @@
</question>
<answer xml:id="a-license.what_restrictions">
<para>
- None. We encourage such programs to be released as open source,
+ None. We encourage such programs to be released as free software,
but we won't punish you or sue you if you choose otherwise.
</para>
</answer>
diff --git a/gcc-4.8/libstdc++-v3/doc/xml/manual/abi.xml b/gcc-4.8/libstdc++-v3/doc/xml/manual/abi.xml
index 6cf79a119..3a7a4740b 100644
--- a/gcc-4.8/libstdc++-v3/doc/xml/manual/abi.xml
+++ b/gcc-4.8/libstdc++-v3/doc/xml/manual/abi.xml
@@ -203,6 +203,7 @@ compatible.
<listitem><para>GCC 4.5.0: GCC_4.5.0</para></listitem>
<listitem><para>GCC 4.6.0: GCC_4.6.0</para></listitem>
<listitem><para>GCC 4.7.0: GCC_4.7.0</para></listitem>
+ <listitem><para>GCC 4.8.0: GCC_4.8.0</para></listitem>
</itemizedlist>
</listitem>
@@ -261,6 +262,7 @@ compatible.
<listitem><para>GCC 4.6.1: libstdc++.so.6.0.16</para></listitem>
<listitem><para>GCC 4.7.0: libstdc++.so.6.0.17</para></listitem>
<listitem><para>GCC 4.8.0: libstdc++.so.6.0.18</para></listitem>
+ <listitem><para>GCC 4.8.3: libstdc++.so.6.0.19</para></listitem>
</itemizedlist>
<para>
Note 1: Error should be libstdc++.so.3.0.3.
@@ -324,6 +326,7 @@ compatible.
<listitem><para>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</para></listitem>
<listitem><para>GCC 4.7.0: GLIBCXX_3.4.17, CXXABI_1.3.6</para></listitem>
<listitem><para>GCC 4.8.0: GLIBCXX_3.4.18, CXXABI_1.3.7</para></listitem>
+ <listitem><para>GCC 4.8.3: GLIBCXX_3.4.19, CXXABI_1.3.7</para></listitem>
</itemizedlist>
</listitem>
diff --git a/gcc-4.8/libstdc++-v3/doc/xml/manual/spine.xml b/gcc-4.8/libstdc++-v3/doc/xml/manual/spine.xml
index 614e8869a..2585d00b8 100644
--- a/gcc-4.8/libstdc++-v3/doc/xml/manual/spine.xml
+++ b/gcc-4.8/libstdc++-v3/doc/xml/manual/spine.xml
@@ -20,6 +20,7 @@
<year>2010</year>
<year>2011</year>
<year>2012</year>
+ <year>2013</year>
<holder>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
</holder>
diff --git a/gcc-4.8/libstdc++-v3/doc/xml/manual/status_cxx2011.xml b/gcc-4.8/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
index 5693bfd77..8b781c069 100644
--- a/gcc-4.8/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
+++ b/gcc-4.8/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
@@ -877,10 +877,11 @@ particular release.
<entry/>
</row>
<row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
<entry>20.9.7.6</entry>
<entry>Other transformations</entry>
- <entry>Y</entry>
- <entry/>
+ <entry>Partial</entry>
+ <entry>Missing <code>aligned_union</code>.</entry>
</row>
<row>
<entry>20.10</entry>
diff --git a/gcc-4.8/libstdc++-v3/include/bits/atomic_base.h b/gcc-4.8/libstdc++-v3/include/bits/atomic_base.h
index 609fe8b06..db4d200ae 100644
--- a/gcc-4.8/libstdc++-v3/include/bits/atomic_base.h
+++ b/gcc-4.8/libstdc++-v3/include/bits/atomic_base.h
@@ -764,11 +764,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
bool
is_lock_free() const noexcept
- { return __atomic_is_lock_free(_M_type_size(1), nullptr); }
+ { return __atomic_is_lock_free(sizeof(__pointer_type), nullptr); }
bool
is_lock_free() const volatile noexcept
- { return __atomic_is_lock_free(_M_type_size(1), nullptr); }
+ { return __atomic_is_lock_free(sizeof(__pointer_type), nullptr); }
void
store(__pointer_type __p,
diff --git a/gcc-4.8/libstdc++-v3/include/bits/shared_ptr_base.h b/gcc-4.8/libstdc++-v3/include/bits/shared_ptr_base.h
index 5b0be418b..e661b6501 100644
--- a/gcc-4.8/libstdc++-v3/include/bits/shared_ptr_base.h
+++ b/gcc-4.8/libstdc++-v3/include/bits/shared_ptr_base.h
@@ -233,7 +233,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_add_ref_lock()
{
// Perform lock-free add-if-not-zero operation.
- _Atomic_word __count = _M_use_count;
+ _Atomic_word __count = _M_get_use_count();
do
{
if (__count == 0)
@@ -391,7 +391,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
public:
template<typename... _Args>
_Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
- : _M_impl(__a), _M_storage()
+ : _M_impl(__a)
{
_M_impl._M_ptr = static_cast<_Tp*>(static_cast<void*>(&_M_storage));
// _GLIBCXX_RESOLVE_LIB_DEFECTS
@@ -819,7 +819,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: _M_ptr(__r.get()), _M_refcount()
{
__glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
- auto __tmp = std::__addressof(*__r.get());
+ auto __tmp = __r.get();
_M_refcount = __shared_count<_Lp>(std::move(__r));
__enable_shared_from_this_helper(_M_refcount, __tmp, __tmp);
}
diff --git a/gcc-4.8/libstdc++-v3/include/bits/stl_vector.h b/gcc-4.8/libstdc++-v3/include/bits/stl_vector.h
index 69c6e278c..14de46112 100644
--- a/gcc-4.8/libstdc++-v3/include/bits/stl_vector.h
+++ b/gcc-4.8/libstdc++-v3/include/bits/stl_vector.h
@@ -1361,7 +1361,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
void
_M_move_assign(vector&& __x, std::true_type) noexcept
{
- const vector __tmp(std::move(*this));
+ vector __tmp(get_allocator());
+ this->_M_impl._M_swap_data(__tmp._M_impl);
this->_M_impl._M_swap_data(__x._M_impl);
if (_Alloc_traits::_S_propagate_on_move_assign())
std::__alloc_on_move(_M_get_Tp_allocator(),
diff --git a/gcc-4.8/libstdc++-v3/include/c_global/cstdio b/gcc-4.8/libstdc++-v3/include/c_global/cstdio
index fcbec0cf5..e81e4b1d8 100644
--- a/gcc-4.8/libstdc++-v3/include/c_global/cstdio
+++ b/gcc-4.8/libstdc++-v3/include/c_global/cstdio
@@ -69,6 +69,7 @@ extern "C" char* gets (char* __s) __attribute__((deprecated));
#undef ftell
#undef fwrite
#undef getc
+#undef getchar
#undef gets
#undef perror
#undef printf
diff --git a/gcc-4.8/libstdc++-v3/include/debug/functions.h b/gcc-4.8/libstdc++-v3/include/debug/functions.h
index 3f1609818..113c996a6 100644
--- a/gcc-4.8/libstdc++-v3/include/debug/functions.h
+++ b/gcc-4.8/libstdc++-v3/include/debug/functions.h
@@ -345,11 +345,13 @@ namespace __gnu_debug
return __check_sorted_set_aux(__first, __last, __pred, _SameType());
}
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 270. Binary search requirements overly strict
+ // Determine if a sequence is partitioned w.r.t. this element.
template<typename _ForwardIterator, typename _Tp>
inline bool
- __check_partitioned_lower_aux(_ForwardIterator __first,
- _ForwardIterator __last, const _Tp& __value,
- std::forward_iterator_tag)
+ __check_partitioned_lower(_ForwardIterator __first,
+ _ForwardIterator __last, const _Tp& __value)
{
while (__first != __last && *__first < __value)
++__first;
@@ -362,38 +364,11 @@ namespace __gnu_debug
return __first == __last;
}
- // For performance reason, as the iterator range has been validated, check on
- // random access safe iterators is done using the base iterator.
- template<typename _Iterator, typename _Sequence, typename _Tp>
- inline bool
- __check_partitioned_lower_aux(
- const _Safe_iterator<_Iterator, _Sequence>& __first,
- const _Safe_iterator<_Iterator, _Sequence>& __last,
- const _Tp& __value,
- std::random_access_iterator_tag __tag)
- {
- return __check_partitioned_lower_aux(__first.base(), __last.base(),
- __value, __tag);
- }
-
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // 270. Binary search requirements overly strict
- // Determine if a sequence is partitioned w.r.t. this element.
template<typename _ForwardIterator, typename _Tp>
inline bool
- __check_partitioned_lower(_ForwardIterator __first,
+ __check_partitioned_upper(_ForwardIterator __first,
_ForwardIterator __last, const _Tp& __value)
{
- return __check_partitioned_lower_aux(__first, __last, __value,
- std::__iterator_category(__first));
- }
-
- template<typename _ForwardIterator, typename _Tp>
- inline bool
- __check_partitioned_upper_aux(_ForwardIterator __first,
- _ForwardIterator __last, const _Tp& __value,
- std::forward_iterator_tag)
- {
while (__first != __last && !(__value < *__first))
++__first;
if (__first != __last)
@@ -405,35 +380,12 @@ namespace __gnu_debug
return __first == __last;
}
- // For performance reason, as the iterator range has been validated, check on
- // random access safe iterators is done using the base iterator.
- template<typename _Iterator, typename _Sequence, typename _Tp>
- inline bool
- __check_partitioned_upper_aux(
- const _Safe_iterator<_Iterator, _Sequence>& __first,
- const _Safe_iterator<_Iterator, _Sequence>& __last,
- const _Tp& __value,
- std::random_access_iterator_tag __tag)
- {
- return __check_partitioned_upper_aux(__first.base(), __last.base(),
- __value, __tag);
- }
-
- template<typename _ForwardIterator, typename _Tp>
- inline bool
- __check_partitioned_upper(_ForwardIterator __first,
- _ForwardIterator __last, const _Tp& __value)
- {
- return __check_partitioned_upper_aux(__first, __last, __value,
- std::__iterator_category(__first));
- }
-
+ // Determine if a sequence is partitioned w.r.t. this element.
template<typename _ForwardIterator, typename _Tp, typename _Pred>
inline bool
- __check_partitioned_lower_aux(_ForwardIterator __first,
+ __check_partitioned_lower(_ForwardIterator __first,
_ForwardIterator __last, const _Tp& __value,
- _Pred __pred,
- std::forward_iterator_tag)
+ _Pred __pred)
{
while (__first != __last && bool(__pred(*__first, __value)))
++__first;
@@ -446,39 +398,12 @@ namespace __gnu_debug
return __first == __last;
}
- // For performance reason, as the iterator range has been validated, check on
- // random access safe iterators is done using the base iterator.
- template<typename _Iterator, typename _Sequence,
- typename _Tp, typename _Pred>
- inline bool
- __check_partitioned_lower_aux(
- const _Safe_iterator<_Iterator, _Sequence>& __first,
- const _Safe_iterator<_Iterator, _Sequence>& __last,
- const _Tp& __value, _Pred __pred,
- std::random_access_iterator_tag __tag)
- {
- return __check_partitioned_lower_aux(__first.base(), __last.base(),
- __value, __pred, __tag);
- }
-
- // Determine if a sequence is partitioned w.r.t. this element.
template<typename _ForwardIterator, typename _Tp, typename _Pred>
inline bool
- __check_partitioned_lower(_ForwardIterator __first,
+ __check_partitioned_upper(_ForwardIterator __first,
_ForwardIterator __last, const _Tp& __value,
_Pred __pred)
{
- return __check_partitioned_lower_aux(__first, __last, __value, __pred,
- std::__iterator_category(__first));
- }
-
- template<typename _ForwardIterator, typename _Tp, typename _Pred>
- inline bool
- __check_partitioned_upper_aux(_ForwardIterator __first,
- _ForwardIterator __last, const _Tp& __value,
- _Pred __pred,
- std::forward_iterator_tag)
- {
while (__first != __last && !bool(__pred(__value, *__first)))
++__first;
if (__first != __last)
@@ -490,31 +415,6 @@ namespace __gnu_debug
return __first == __last;
}
- // For performance reason, as the iterator range has been validated, check on
- // random access safe iterators is done using the base iterator.
- template<typename _Iterator, typename _Sequence,
- typename _Tp, typename _Pred>
- inline bool
- __check_partitioned_upper_aux(
- const _Safe_iterator<_Iterator, _Sequence>& __first,
- const _Safe_iterator<_Iterator, _Sequence>& __last,
- const _Tp& __value, _Pred __pred,
- std::random_access_iterator_tag __tag)
- {
- return __check_partitioned_upper_aux(__first.base(), __last.base(),
- __value, __pred, __tag);
- }
-
- template<typename _ForwardIterator, typename _Tp, typename _Pred>
- inline bool
- __check_partitioned_upper(_ForwardIterator __first,
- _ForwardIterator __last, const _Tp& __value,
- _Pred __pred)
- {
- return __check_partitioned_upper_aux(__first, __last, __value, __pred,
- std::__iterator_category(__first));
- }
-
// Helper struct to detect random access safe iterators.
template<typename _Iterator>
struct __is_safe_random_iterator
diff --git a/gcc-4.8/libstdc++-v3/include/debug/macros.h b/gcc-4.8/libstdc++-v3/include/debug/macros.h
index 26732c9e3..31bcaf361 100644
--- a/gcc-4.8/libstdc++-v3/include/debug/macros.h
+++ b/gcc-4.8/libstdc++-v3/include/debug/macros.h
@@ -261,8 +261,9 @@ _GLIBCXX_DEBUG_VERIFY( \
w.r.t. the value _Value. */
#define __glibcxx_check_partitioned_lower(_First,_Last,_Value) \
__glibcxx_check_valid_range(_First,_Last); \
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
- _Value), \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower( \
+ __gnu_debug::__base(_First), \
+ __gnu_debug::__base(_Last), _Value), \
_M_message(__gnu_debug::__msg_unpartitioned) \
._M_iterator(_First, #_First) \
._M_iterator(_Last, #_Last) \
@@ -270,8 +271,9 @@ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
#define __glibcxx_check_partitioned_upper(_First,_Last,_Value) \
__glibcxx_check_valid_range(_First,_Last); \
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
- _Value), \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper( \
+ __gnu_debug::__base(_First), \
+ __gnu_debug::__base(_Last), _Value), \
_M_message(__gnu_debug::__msg_unpartitioned) \
._M_iterator(_First, #_First) \
._M_iterator(_Last, #_Last) \
@@ -281,8 +283,9 @@ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
w.r.t. the value _Value and predicate _Pred. */
#define __glibcxx_check_partitioned_lower_pred(_First,_Last,_Value,_Pred) \
__glibcxx_check_valid_range(_First,_Last); \
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
- _Value, _Pred), \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower( \
+ __gnu_debug::__base(_First), \
+ __gnu_debug::__base(_Last), _Value, _Pred), \
_M_message(__gnu_debug::__msg_unpartitioned_pred) \
._M_iterator(_First, #_First) \
._M_iterator(_Last, #_Last) \
@@ -293,8 +296,9 @@ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
w.r.t. the value _Value and predicate _Pred. */
#define __glibcxx_check_partitioned_upper_pred(_First,_Last,_Value,_Pred) \
__glibcxx_check_valid_range(_First,_Last); \
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
- _Value, _Pred), \
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper( \
+ __gnu_debug::__base(_First), \
+ __gnu_debug::__base(_Last), _Value, _Pred), \
_M_message(__gnu_debug::__msg_unpartitioned_pred) \
._M_iterator(_First, #_First) \
._M_iterator(_Last, #_Last) \
diff --git a/gcc-4.8/libstdc++-v3/include/debug/safe_unordered_base.h b/gcc-4.8/libstdc++-v3/include/debug/safe_unordered_base.h
index 23026cb43..35ce08b1f 100644
--- a/gcc-4.8/libstdc++-v3/include/debug/safe_unordered_base.h
+++ b/gcc-4.8/libstdc++-v3/include/debug/safe_unordered_base.h
@@ -133,9 +133,19 @@ namespace __gnu_debug
protected:
// Initialize with a version number of 1 and no iterators
_Safe_unordered_container_base()
- : _M_local_iterators(0), _M_const_local_iterators(0)
+ : _M_local_iterators(nullptr), _M_const_local_iterators(nullptr)
{ }
+ // Initialize with a version number of 1 and no iterators
+ _Safe_unordered_container_base(const _Safe_unordered_container_base&)
+ noexcept
+ : _Safe_unordered_container_base() { }
+
+ _Safe_unordered_container_base(_Safe_unordered_container_base&& __x)
+ noexcept
+ : _Safe_unordered_container_base()
+ { this->_M_swap(__x); }
+
/** Notify all iterators that reference this container that the
container is being destroyed. */
~_Safe_unordered_container_base()
diff --git a/gcc-4.8/libstdc++-v3/include/std/functional b/gcc-4.8/libstdc++-v3/include/std/functional
index 64b6dae04..b31a33b0b 100644
--- a/gcc-4.8/libstdc++-v3/include/std/functional
+++ b/gcc-4.8/libstdc++-v3/include/std/functional
@@ -2181,8 +2181,15 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
using _Invoke = decltype(__callable_functor(std::declval<_Functor&>())
(std::declval<_ArgTypes>()...) );
+ // Used so the return type convertibility checks aren't done when
+ // performing overload resolution for copy construction/assignment.
+ template<typename _Tp>
+ using _NotSelf = __not_<is_same<_Tp, function>>;
+
template<typename _Functor>
- using _Callable = __check_func_return_type<_Invoke<_Functor>, _Res>;
+ using _Callable
+ = __and_<_NotSelf<_Functor>,
+ __check_func_return_type<_Invoke<_Functor>, _Res>>;
template<typename _Cond, typename _Tp>
using _Requires = typename enable_if<_Cond::value, _Tp>::type;
@@ -2323,7 +2330,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
* reference_wrapper<F>, this function will not throw.
*/
template<typename _Functor>
- _Requires<_Callable<_Functor>, function&>
+ _Requires<_Callable<typename decay<_Functor>::type>, function&>
operator=(_Functor&& __f)
{
function(std::forward<_Functor>(__f)).swap(*this);
diff --git a/gcc-4.8/libstdc++-v3/include/std/future b/gcc-4.8/libstdc++-v3/include/std/future
index 30100fe05..3b15fd8bc 100644
--- a/gcc-4.8/libstdc++-v3/include/std/future
+++ b/gcc-4.8/libstdc++-v3/include/std/future
@@ -1261,8 +1261,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct __future_base::_Task_state<_Fn, _Alloc, _Res(_Args...)> final
: __future_base::_Task_state_base<_Res(_Args...)>
{
- _Task_state(_Fn&& __fn, const _Alloc& __a)
- : _Task_state_base<_Res(_Args...)>(__a), _M_impl(std::move(__fn), __a)
+ template<typename _Fn2>
+ _Task_state(_Fn2&& __fn, const _Alloc& __a)
+ : _Task_state_base<_Res(_Args...)>(__a),
+ _M_impl(std::forward<_Fn2>(__fn), __a)
{ }
private:
@@ -1292,8 +1294,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct _Impl : _Alloc
{
- _Impl(_Fn&& __fn, const _Alloc& __a)
- : _Alloc(__a), _M_fn(std::move(__fn)) { }
+ template<typename _Fn2>
+ _Impl(_Fn2&& __fn, const _Alloc& __a)
+ : _Alloc(__a), _M_fn(std::forward<_Fn2>(__fn)) { }
_Fn _M_fn;
} _M_impl;
};
@@ -1302,8 +1305,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static shared_ptr<__future_base::_Task_state_base<_Signature>>
__create_task_state(_Fn&& __fn, const _Alloc& __a)
{
- typedef __future_base::_Task_state<_Fn, _Alloc, _Signature> _State;
- return std::allocate_shared<_State>(__a, std::move(__fn), __a);
+ typedef typename decay<_Fn>::type _Fn2;
+ typedef __future_base::_Task_state<_Fn2, _Alloc, _Signature> _State;
+ return std::allocate_shared<_State>(__a, std::forward<_Fn>(__fn), __a);
}
template<typename _Fn, typename _Alloc, typename _Res, typename... _Args>
@@ -1344,7 +1348,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__constrain_pkgdtask<packaged_task, _Fn>::__type>
explicit
packaged_task(_Fn&& __fn)
- : packaged_task(allocator_arg, std::allocator<int>(), std::move(__fn))
+ : packaged_task(allocator_arg, std::allocator<int>(),
+ std::forward<_Fn>(__fn))
{ }
// _GLIBCXX_RESOLVE_LIB_DEFECTS
diff --git a/gcc-4.8/libstdc++-v3/include/std/iostream b/gcc-4.8/libstdc++-v3/include/std/iostream
index 7864749a7..0c3019e07 100644
--- a/gcc-4.8/libstdc++-v3/include/std/iostream
+++ b/gcc-4.8/libstdc++-v3/include/std/iostream
@@ -48,13 +48,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* The &lt;iostream&gt; header declares the eight <em>standard stream
* objects</em>. For other declarations, see
- * http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch24.html
+ * http://gcc.gnu.org/onlinedocs/libstdc++/manual/io.html
* and the @link iosfwd I/O forward declarations @endlink
*
* They are required by default to cooperate with the global C
* library's @c FILE streams, and to be available during program
- * startup and termination. For more information, see the HOWTO
- * linked to above.
+ * startup and termination. For more information, see the section of the
+ * manual linked to above.
*/
//@{
extern istream cin; /// Linked to standard input
diff --git a/gcc-4.8/libstdc++-v3/include/std/tuple b/gcc-4.8/libstdc++-v3/include/std/tuple
index ee2b2e1d4..9ab30e514 100644
--- a/gcc-4.8/libstdc++-v3/include/std/tuple
+++ b/gcc-4.8/libstdc++-v3/include/std/tuple
@@ -755,14 +755,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typename tuple_element<__i, tuple<_Elements...>>::type
>::type
get(tuple<_Elements...>& __t) noexcept
- { return __get_helper<__i>(__t); }
+ { return std::__get_helper<__i>(__t); }
template<std::size_t __i, typename... _Elements>
constexpr typename __add_c_ref<
typename tuple_element<__i, tuple<_Elements...>>::type
>::type
get(const tuple<_Elements...>& __t) noexcept
- { return __get_helper<__i>(__t); }
+ { return std::__get_helper<__i>(__t); }
template<std::size_t __i, typename... _Elements>
constexpr typename __add_r_ref<
diff --git a/gcc-4.8/libstdc++-v3/libsupc++/eh_alloc.cc b/gcc-4.8/libstdc++-v3/libsupc++/eh_alloc.cc
index 9b3fb4db1..2fdc068ae 100644
--- a/gcc-4.8/libstdc++-v3/libsupc++/eh_alloc.cc
+++ b/gcc-4.8/libstdc++-v3/libsupc++/eh_alloc.cc
@@ -129,12 +129,6 @@ __cxxabiv1::__cxa_allocate_exception(std::size_t thrown_size) _GLIBCXX_NOTHROW
std::terminate ();
}
- // We have an uncaught exception as soon as we allocate memory. This
- // yields uncaught_exception() true during the copy-constructor that
- // initializes the exception object. See Issue 475.
- __cxa_eh_globals *globals = __cxa_get_globals ();
- globals->uncaughtExceptions += 1;
-
memset (ret, 0, sizeof (__cxa_refcounted_exception));
return (void *)((char *)ret + sizeof (__cxa_refcounted_exception));
@@ -191,12 +185,6 @@ __cxxabiv1::__cxa_allocate_dependent_exception() _GLIBCXX_NOTHROW
std::terminate ();
}
- // We have an uncaught exception as soon as we allocate memory. This
- // yields uncaught_exception() true during the copy-constructor that
- // initializes the exception object. See Issue 475.
- __cxa_eh_globals *globals = __cxa_get_globals ();
- globals->uncaughtExceptions += 1;
-
memset (ret, 0, sizeof (__cxa_dependent_exception));
return ret;
diff --git a/gcc-4.8/libstdc++-v3/libsupc++/eh_throw.cc b/gcc-4.8/libstdc++-v3/libsupc++/eh_throw.cc
index a79a025af..1d6a2df50 100644
--- a/gcc-4.8/libstdc++-v3/libsupc++/eh_throw.cc
+++ b/gcc-4.8/libstdc++-v3/libsupc++/eh_throw.cc
@@ -62,6 +62,9 @@ __cxxabiv1::__cxa_throw (void *obj, std::type_info *tinfo,
{
PROBE2 (throw, obj, tinfo);
+ __cxa_eh_globals *globals = __cxa_get_globals ();
+ globals->uncaughtExceptions += 1;
+
// Definitely a primary.
__cxa_refcounted_exception *header
= __get_refcounted_exception_header_from_obj (obj);
diff --git a/gcc-4.8/libstdc++-v3/scripts/extract_symvers.in b/gcc-4.8/libstdc++-v3/scripts/extract_symvers.in
index a262435de..c9cf7e5db 100755
--- a/gcc-4.8/libstdc++-v3/scripts/extract_symvers.in
+++ b/gcc-4.8/libstdc++-v3/scripts/extract_symvers.in
@@ -53,6 +53,7 @@ SunOS)
# present on Solaris.
${readelf} ${lib} |\
sed -e 's/ \[<other>: [A-Fa-f0-9]*\] //' -e '/\.dynsym/,/^$/p;d' |\
+ sed -e 's/ \[<localentry>: [0-9]*\] //' |\
egrep -v ' (LOCAL|UND) ' |\
egrep -v ' (_DYNAMIC|_GLOBAL_OFFSET_TABLE_|_PROCEDURE_LINKAGE_TABLE_|_edata|_end|_etext)$' |\
sed -e 's/ <processor specific>: / <processor_specific>:_/g' |\
diff --git a/gcc-4.8/libstdc++-v3/src/c++11/thread.cc b/gcc-4.8/libstdc++-v3/src/c++11/thread.cc
index 8d040a729..0351f19e0 100644
--- a/gcc-4.8/libstdc++-v3/src/c++11/thread.cc
+++ b/gcc-4.8/libstdc++-v3/src/c++11/thread.cc
@@ -183,7 +183,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
::usleep(__us);
}
# else
- ::sleep(__s.count() + (__ns >= 1000000));
+ ::sleep(__s.count() + (__ns.count() >= 1000000));
# endif
#elif defined(_GLIBCXX_HAVE_WIN32_SLEEP)
unsigned long ms = __ns.count() / 1000000;
diff --git a/gcc-4.8/libstdc++-v3/testsuite/20_util/bind/57899.cc b/gcc-4.8/libstdc++-v3/testsuite/20_util/bind/57899.cc
new file mode 100644
index 000000000..d46d53e83
--- /dev/null
+++ b/gcc-4.8/libstdc++-v3/testsuite/20_util/bind/57899.cc
@@ -0,0 +1,48 @@
+// Copyright (C) 2010-2014 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.7.11 Function template bind
+
+// PR c++/57899
+// { dg-do compile }
+// { dg-options -std=c++11 }
+
+#include <functional>
+using std::bind;
+using std::placeholders::_1;
+
+struct S { int i; };
+
+struct P { S s; };
+
+struct get_s
+{
+ const S& operator()(const P& p) const { return p.s; }
+} gs;
+
+int gi(const S& s) { return s.i; }
+
+bool cmp(int, int) { return true; }
+
+int main()
+{
+ P p{};
+ auto f1 = bind(gs, _1);
+ auto f2 = bind(gi, f1);
+ auto f3 = bind(cmp, f2, 5);
+ f3(p);
+}
diff --git a/gcc-4.8/libstdc++-v3/testsuite/20_util/function/60594.cc b/gcc-4.8/libstdc++-v3/testsuite/20_util/function/60594.cc
new file mode 100644
index 000000000..be80b3f44
--- /dev/null
+++ b/gcc-4.8/libstdc++-v3/testsuite/20_util/function/60594.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+// Copyright (C) 2011-2014 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// libstdc++/60594
+
+#include <functional>
+#include <type_traits>
+struct bar;
+using F = std::function<bar()>;
+// check for copy constructible and assignable while 'bar' is incomplete
+constexpr int c = std::is_copy_constructible<F>::value;
+constexpr int a = std::is_copy_assignable<F>::value;
+struct bar { };
+bar func();
+void test()
+{
+ F g{ &func };
+ g = func;
+}
diff --git a/gcc-4.8/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc b/gcc-4.8/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc
new file mode 100644
index 000000000..f78a07fb2
--- /dev/null
+++ b/gcc-4.8/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc
@@ -0,0 +1,33 @@
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+// Copyright (C) 2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+
+// libstdc++/58839
+
+struct D {
+ void operator()(void*) const noexcept { }
+};
+
+void test01()
+{
+ std::unique_ptr<void, D> y;
+ std::shared_ptr<void> x = std::move(y);
+}
diff --git a/gcc-4.8/libstdc++-v3/testsuite/20_util/tuple/60497.cc b/gcc-4.8/libstdc++-v3/testsuite/20_util/tuple/60497.cc
new file mode 100644
index 000000000..700d3c867
--- /dev/null
+++ b/gcc-4.8/libstdc++-v3/testsuite/20_util/tuple/60497.cc
@@ -0,0 +1,35 @@
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+// Copyright (C) 2014 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// libstdc++/60497
+
+#include <tuple>
+
+struct A;
+template<typename T> struct B { T t; };
+
+using element_type = B<A>*;
+using tuple_type = std::tuple<element_type>;
+
+tuple_type t;
+const tuple_type ct;
+
+auto a = std::get<0>(t);
+auto b = std::get<0>(ct);
diff --git a/gcc-4.8/libstdc++-v3/testsuite/23_containers/unordered_map/59548.cc b/gcc-4.8/libstdc++-v3/testsuite/23_containers/unordered_map/59548.cc
new file mode 100644
index 000000000..1e81bb741
--- /dev/null
+++ b/gcc-4.8/libstdc++-v3/testsuite/23_containers/unordered_map/59548.cc
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+// { dg-require-debug-mode "" }
+
+// Copyright (C) 2014 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// libstdc++/59548
+
+#include <unordered_map>
+
+int main()
+{
+ std::unordered_map<int,int> foo{ {0,1} };
+ auto i = foo.begin();
+ {
+ auto bar = foo;
+ }
+ return i->first;
+}
diff --git a/gcc-4.8/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc b/gcc-4.8/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc
new file mode 100644
index 000000000..7e62f1ebc
--- /dev/null
+++ b/gcc-4.8/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc
@@ -0,0 +1,59 @@
+// Copyright (C) 2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++11" }
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+struct T { int i; };
+
+using __gnu_test::uneq_allocator;
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef uneq_allocator<T> alloc_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v1(alloc_type(1));
+ v1 = { T() };
+ auto it = v1.begin();
+ test_type v2(std::move(v1));
+ VERIFY(1 == v1.get_allocator().get_personality());
+ VERIFY(1 == v2.get_allocator().get_personality());
+ VERIFY( it == v2.begin() );
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+ typedef uneq_allocator<T> alloc_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v1(alloc_type(1));
+ v1 = { T() };
+ test_type v2(std::move(v1), alloc_type(2));
+ VERIFY(1 == v1.get_allocator().get_personality());
+ VERIFY(2 == v2.get_allocator().get_personality());
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/gcc-4.8/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc b/gcc-4.8/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc
index 64795d361..42dec6dd8 100644
--- a/gcc-4.8/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc
+++ b/gcc-4.8/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc
@@ -46,16 +46,35 @@ void test02()
typedef std::vector<T, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.push_back(T());
+ auto it = v1.begin();
test_type v2(alloc_type(2));
- v2 = std::move(v1);
v2.push_back(T());
+ v2 = std::move(v1);
+ VERIFY( it == v2.begin() );
VERIFY(0 == v1.get_allocator().get_personality());
VERIFY(1 == v2.get_allocator().get_personality());
}
+void test03()
+{
+ bool test __attribute__((unused)) = true;
+ typedef propagating_allocator<T, false> alloc_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v1(alloc_type(1));
+ v1.push_back(T());
+ auto it = v1.begin();
+ test_type v2(alloc_type(1));
+ v2.push_back(T());
+ v2 = std::move(v1);
+ VERIFY( it == v2.begin() );
+ VERIFY(1 == v1.get_allocator().get_personality());
+ VERIFY(1 == v2.get_allocator().get_personality());
+}
+
int main()
{
test01();
test02();
+ test03();
return 0;
}
diff --git a/gcc-4.8/libstdc++-v3/testsuite/29_atomics/atomic/60658.cc b/gcc-4.8/libstdc++-v3/testsuite/29_atomics/atomic/60658.cc
new file mode 100644
index 000000000..5634085ad
--- /dev/null
+++ b/gcc-4.8/libstdc++-v3/testsuite/29_atomics/atomic/60658.cc
@@ -0,0 +1,43 @@
+// { dg-require-atomic-builtins "" }
+// { dg-options "-std=gnu++11" }
+
+// Copyright (C) 2014 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <atomic>
+#include <testsuite_hooks.h>
+
+// libstdc++/60658
+
+struct Foo {
+ char buf[1];
+};
+
+struct Bar {
+ char buf[100];
+};
+
+int
+main ()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::atomic<Foo*> a;
+ std::atomic<Bar*> b;
+
+ VERIFY (a.is_lock_free() == b.is_lock_free());
+}
diff --git a/gcc-4.8/libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc b/gcc-4.8/libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc
new file mode 100644
index 000000000..956d506d7
--- /dev/null
+++ b/gcc-4.8/libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc
@@ -0,0 +1,51 @@
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++11 -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++11 -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++11 " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2014 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <future>
+#include <testsuite_hooks.h>
+
+struct X
+{
+ X() = default;
+ X(const X&) = default;
+ X(X&& x) { x.moved = true; }
+
+ void operator()() const { }
+
+ bool moved = false;
+};
+
+void test01()
+{
+ X x;
+ std::packaged_task<void()> p(x);
+ VERIFY( !x.moved );
+}
+
+int main()
+{
+ test01();
+}
diff --git a/gcc-4.8/libtool.m4 b/gcc-4.8/libtool.m4
index 8a14e2b22..797468f02 100644
--- a/gcc-4.8/libtool.m4
+++ b/gcc-4.8/libtool.m4
@@ -1220,7 +1220,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -1241,7 +1241,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -1260,7 +1263,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
diff --git a/gcc-4.8/lto-plugin/ChangeLog b/gcc-4.8/lto-plugin/ChangeLog
index 01d1ed9b8..9ee37d017 100644
--- a/gcc-4.8/lto-plugin/ChangeLog
+++ b/gcc-4.8/lto-plugin/ChangeLog
@@ -1,3 +1,14 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * configure: Regenerate.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/lto-plugin/configure b/gcc-4.8/lto-plugin/configure
index 4900d8079..7a0d953e9 100755
--- a/gcc-4.8/lto-plugin/configure
+++ b/gcc-4.8/lto-plugin/configure
@@ -6044,7 +6044,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -6069,7 +6069,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -6088,7 +6091,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -10552,7 +10558,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10555 "configure"
+#line 10561 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10658,7 +10664,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10661 "configure"
+#line 10667 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/gcc-4.8/maintainer-scripts/ChangeLog b/gcc-4.8/maintainer-scripts/ChangeLog
index 82c25b320..a23bb848f 100644
--- a/gcc-4.8/maintainer-scripts/ChangeLog
+++ b/gcc-4.8/maintainer-scripts/ChangeLog
@@ -1,3 +1,13 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-02-01 Dmitry Gorbachev <d.g.gorbachev@gmail.com>
+
+ PR other/56653
+ * gcc_release: Avoid printing empty line to generated MD5SUMS files.
+ Bump copyright year.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/maintainer-scripts/gcc_release b/gcc-4.8/maintainer-scripts/gcc_release
index ee7822bf3..c20b410bd 100755
--- a/gcc-4.8/maintainer-scripts/gcc_release
+++ b/gcc-4.8/maintainer-scripts/gcc_release
@@ -9,7 +9,7 @@
# Contents:
# Script to create a GCC release.
#
-# Copyright (c) 2001, 2002, 2006, 2009, 2010, 2011 Free Software Foundation.
+# Copyright (c) 2001-2014 Free Software Foundation.
#
# This file is part of GCC.
#
@@ -213,7 +213,7 @@ EOF
#
# Suggested usage:
# md5sum -c MD5SUMS | grep -v \"OK$\"
-" > MD5SUMS
+#" > MD5SUMS
find . -type f |
sed -e 's:^\./::' -e '/MD5SUMS/d' |
diff --git a/gcc-4.8/zlib/ChangeLog b/gcc-4.8/zlib/ChangeLog
index 73bedd27b..1689b8fe4 100644
--- a/gcc-4.8/zlib/ChangeLog
+++ b/gcc-4.8/zlib/ChangeLog
@@ -1,3 +1,14 @@
+2014-05-22 Release Manager
+
+ * GCC 4.8.3 released.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2013-11-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * configure: Regenerate.
+
2013-10-16 Release Manager
* GCC 4.8.2 released.
diff --git a/gcc-4.8/zlib/configure b/gcc-4.8/zlib/configure
index 8e4a93f2a..c71984f4c 100755
--- a/gcc-4.8/zlib/configure
+++ b/gcc-4.8/zlib/configure
@@ -5853,7 +5853,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -5878,7 +5878,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -5897,7 +5900,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -10394,7 +10400,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10397 "configure"
+#line 10403 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10500,7 +10506,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10503 "configure"
+#line 10509 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H